diff --git a/pom.xml b/pom.xml index b053df7..653648a 100644 --- a/pom.xml +++ b/pom.xml @@ -1,18 +1,21 @@ - + 4.0.0 org.badvision jace - 2.0-SNAPSHOT + 3.0 jar - jace + JaceApplication UTF-8 jace.JaceApplication apache20 + 3.3.3 @@ -21,78 +24,186 @@ - Jace + JaceApplication org.apache.maven.plugins - maven-dependency-plugin - 2.10 + maven-compiler-plugin + + 17 + 17 + + + org.badvision + jace + 3.0 + + + jace.config.InvokableActionAnnotationProcessor + + 3.11.0 + + + com.gluonhq + gluonfx-maven-plugin + 1.0.22 + + jace.JaceApplication + + .* + + + org.badvision + true + + + + + org.openjfx + javafx-maven-plugin + 0.0.8 + + jace/jace.JaceApplication + + + + + default-cli + + + + + debug + + + + + + + + + ide-debug + + + + + + + + + ide-profile + + + + + + + + + + + + + + + org.moditect + moditect-maven-plugin + 1.0.0.Final - unpack-dependencies - package + + add-module-infos + generate-resources - unpack-dependencies + add-module-info - system - junit,org.mockito,org.hamcrest - ${project.build.directory}/classes + + + + org.xerial.thirdparty + nestedvm + 1.0 + + + module nestedvm { + exports org.ibex.nestedvm; + exports org.ibex.nestedvm.util; + } + + + + true - org.codehaus.mojo - exec-maven-plugin - 1.4.0 + org.jacoco + jacoco-maven-plugin + 0.8.11 + + + jace/assembly/AcmeCrossAssembler.class + + - unpack-dependencies - package + default-prepare-agent - exec + prepare-agent + + + + default-report + + report + + + + default-check + + check - ${java.home}/../bin/javapackager - - -createjar - -nocss2bin - -appclass - ${mainClass} - -srcdir - ${project.build.directory}/classes - -outdir - ${project.build.directory} - -outfile - ${project.build.finalName}.jar - + + + BUNDLE + + + COMPLEXITY + COVEREDRATIO + 0.60 + + + + - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - 3.5 + + + + + org.lwjgl + lwjgl-bom + ${lwjgl.version} + import + pom + + + + - - org.reflections - reflections - 0.9.9 - junit junit - 4.13.1 + 4.13.2 test @@ -100,5 +211,109 @@ nestedvm 1.0 + + org.openjfx + javafx-base + 21.0.2 + jar + + + org.openjfx + javafx-fxml + 21.0.2 + jar + + + org.openjfx + javafx-web + 21.0.2 + jar + + + org.openjfx + javafx-graphics + 21.0.2 + jar + + + org.openjfx + javafx-swing + 21.0.2 + jar + + + org.lwjgl + lwjgl + + + org.lwjgl + lwjgl-openal + + + org.lwjgl + lwjgl-stb + + + org.lwjgl + lwjgl-glfw + + + org.lwjgl + lwjgl + ${lwjgl.natives} + + + org.lwjgl + lwjgl-openal + ${lwjgl.natives} + + + org.lwjgl + lwjgl-stb + ${lwjgl.natives} + + + org.lwjgl + lwjgl-glfw + ${lwjgl.natives} + - + + + lwjgl-natives-linux-amd64 + + + unix + amd64 + + + + natives-linux + + + + lwjgl-natives-macos-x86_64 + + + mac + x86_64 + + + + natives-macos + + + + lwjgl-natives-windows-amd64 + + + windows + amd64 + + + + natives-windows + + + + \ No newline at end of file diff --git a/src/main/java/jace/ConvertDiskImage.java b/src/main/java/jace/ConvertDiskImage.java index a522f3a..4bf61d1 100644 --- a/src/main/java/jace/ConvertDiskImage.java +++ b/src/main/java/jace/ConvertDiskImage.java @@ -1,28 +1,27 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace; -import jace.hardware.FloppyDisk; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import jace.hardware.FloppyDisk; + /** * Generic disk conversion utility, using the FloppyDisk nibblize/denibblize to * convert between DSK and NIB formats (wherever possible anyway) @@ -71,7 +70,7 @@ public class ConvertDiskImage { // First read in the disk image, this decodes the disk as necessary FloppyDisk theDisk; try { - theDisk = new FloppyDisk(in, null); + theDisk = new FloppyDisk(in); } catch (IOException ex) { System.out.println("Couldn't read disk image"); return; diff --git a/src/main/java/jace/Emulator.java b/src/main/java/jace/Emulator.java index 3f9e68a..ac4d222 100644 --- a/src/main/java/jace/Emulator.java +++ b/src/main/java/jace/Emulator.java @@ -1,37 +1,39 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace; -import jace.apple2e.Apple2e; -import jace.config.Configuration; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.function.Consumer; +import java.util.function.Function; + +import jace.config.Configuration; +import jace.core.RAM; +import jace.apple2e.Apple2e; /** * Created on January 15, 2007, 10:10 PM - * @author Brendan Robert (BLuRry) brendan.robert@gmail.com + * @author Brendan Robert (BLuRry) brendan.robert@gmail.com */ public class Emulator { public static Emulator instance; - public static EmulatorUILogic logic = new EmulatorUILogic(); + private static EmulatorUILogic logic; public static Thread mainThread; // public static void main(String... args) { @@ -39,52 +41,140 @@ public class Emulator { // instance = new Emulator(args); // } - public static Apple2e computer; + private final Apple2e computer; + + public static EmulatorUILogic getUILogic() { + if (logic == null) { + logic = new EmulatorUILogic(); + } + return logic; + } + + public static Emulator getInstance(List args) { + Emulator i = getInstance(); + i.processCmdlineArgs(args); + return i; + } + + public static void abort() { + if (instance != null) { + if (instance.computer != null) { + instance.computer.getMotherboard().suspend(); + instance.computer.getMotherboard().detach(); + } + } + instance = null; + } + + public static Emulator getInstance() { + if (instance == null) { + instance = new Emulator(); + } + return instance; + } + + private static Apple2e getComputer() { + return getInstance().computer; + } + + public static void whileSuspended(Consumer action) { + withComputer(c->c.getMotherboard().whileSuspended(()->action.accept(c))); + } + + public static T whileSuspended(Function action, T defaultValue) { + return withComputer(c->c.getMotherboard().whileSuspended(()->action.apply(c), defaultValue), defaultValue); + } + + public static void withComputer(Consumer c) { + Apple2e computer = getComputer(); + if (computer != null) { + c.accept(computer); + } else { + System.err.println("No computer available!"); + Thread.dumpStack(); + } + } + + public static T withComputer(Function f, T defaultValue) { + Apple2e computer = getComputer(); + if (computer != null) { + return f.apply(computer); + } else { + System.err.println("No computer available!"); + Thread.dumpStack(); + return defaultValue; + } + } + + public static void withMemory(Consumer m) { + Emulator.withMemory(mem-> { + m.accept(mem); + return null; + }, null); + } + + public static T withMemory(Function m, T defaultValue) { + return withComputer(c->{ + RAM memory = c.getMemory(); + if (memory != null) { + return m.apply(memory); + } else { + System.err.println("No memory available!"); + Thread.dumpStack(); + return defaultValue; + } + }, defaultValue); + } + + public static void withVideo(Consumer v) { + withComputer(c->{ + jace.core.Video video = c.getVideo(); + if (video != null) { + v.accept(video); + } else { + System.err.println("No video available!"); + Thread.dumpStack(); + } + }); + } /** * Creates a new instance of Emulator - * @param args */ - public Emulator(List args) { + private Emulator() { instance = this; computer = new Apple2e(); Configuration.buildTree(); Configuration.loadSettings(); + Configuration.applySettings(Configuration.BASE); mainThread = Thread.currentThread(); - applyConfiguration(args); - } - - public void applyConfiguration(List args) { - Map settings = new LinkedHashMap<>(); - if (args != null) { - for (int i = 0; i < args.size(); i++) { - if (args.get(i).startsWith("-")) { - String key = args.get(i).substring(1); - if ((i + 1) < args.size()) { - String val = args.get(i + 1); - if (!val.startsWith("-")) { - settings.put(key, val); - i++; - } else { - settings.put(key, "true"); - } - } else { - settings.put(key, "true"); - } - } else { - System.err.println("Did not understand parameter " + args.get(i) + ", skipping."); - } - } - } - Configuration.applySettings(settings); // EmulatorUILogic.registerDebugger(); // computer.coldStart(); } - public static void resizeVideo() { -// AbstractEmulatorFrame window = getFrame(); -// if (window != null) { -// window.resizeVideo(); -// } + private void processCmdlineArgs(List args) { + if (args == null || args.isEmpty()) { + return; + } + Map settings = new LinkedHashMap<>(); + for (int i = 0; i < args.size(); i++) { + if (args.get(i).startsWith("-")) { + String key = args.get(i).substring(1); + if ((i + 1) < args.size()) { + String val = args.get(i + 1); + if (!val.startsWith("-")) { + settings.put(key, val); + i++; + } else { + settings.put(key, "true"); + } + } else { + settings.put(key, "true"); + } + } else { + System.err.println("Did not understand parameter " + args.get(i) + ", skipping."); + } + } + Configuration.applySettings(settings); } } \ No newline at end of file diff --git a/src/main/java/jace/EmulatorUILogic.java b/src/main/java/jace/EmulatorUILogic.java index e22bd01..50ce347 100644 --- a/src/main/java/jace/EmulatorUILogic.java +++ b/src/main/java/jace/EmulatorUILogic.java @@ -1,39 +1,25 @@ -/** - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace; -import jace.apple2e.MOS65C02; -import jace.apple2e.RAM128k; -import jace.apple2e.SoftSwitches; -import jace.config.ConfigurableField; -import jace.config.ConfigurationUIController; -import jace.config.InvokableAction; -import jace.config.Reconfigurable; -import jace.core.CPU; -import jace.core.Computer; -import jace.core.Debugger; -import jace.core.RAM; -import jace.core.RAMListener; -import jace.ide.IdeController; +import static jace.core.Utility.gripe; + import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; @@ -46,20 +32,29 @@ import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; + +import jace.apple2e.MOS65C02; +import jace.apple2e.RAM128k; +import jace.apple2e.SoftSwitches; +import jace.config.ConfigurableField; +import jace.config.ConfigurationUIController; +import jace.config.InvokableAction; +import jace.config.Reconfigurable; +import jace.core.Debugger; +import jace.core.RAM; +import jace.core.RAMListener; +import jace.ide.IdeController; import javafx.application.Platform; import javafx.event.EventHandler; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.control.Label; -import javafx.scene.image.Image; import javafx.scene.input.KeyCombination; import javafx.scene.input.MouseEvent; import javafx.scene.layout.AnchorPane; import javafx.stage.FileChooser; import javafx.stage.Stage; -import static jace.core.Utility.*; - /** * This class contains miscellaneous user-invoked actions such as debugger * operations and running arbitrary files in the emulator. It is possible for @@ -77,18 +72,12 @@ public class EmulatorUILogic implements Reconfigurable { @Override public void updateStatus() { enableDebug(true); - MOS65C02 cpu = (MOS65C02) Emulator.computer.getCpu(); + MOS65C02 cpu = (MOS65C02) Emulator.withComputer(c->c.getCpu(), null); updateCPURegisters(cpu); } }; } - - @ConfigurableField( - category = "General", - name = "Speed Setting" - ) - public int speedSetting = 3; - + @ConfigurableField( category = "General", name = "Show Drives" @@ -115,7 +104,7 @@ public class EmulatorUILogic implements Reconfigurable { } public static void enableTrace(boolean b) { - Emulator.computer.getCpu().setTraceEnabled(b); + Emulator.withComputer(c->c.getCpu().setTraceEnabled(b)); } public static void stepForward() { @@ -123,7 +112,7 @@ public class EmulatorUILogic implements Reconfigurable { } static void registerDebugger() { - Emulator.computer.getCpu().setDebug(debugger); + Emulator.withComputer(c->c.getCpu().setDebug(debugger)); } public static Integer getValidAddress(String s) { @@ -142,7 +131,7 @@ public class EmulatorUILogic implements Reconfigurable { // public static void updateWatchList(final DebuggerPanel panel) { // java.awt.EventQueue.invokeLater(() -> { // watches.stream().forEach((oldWatch) -> { -// Emulator.computer.getMemory().removeListener(oldWatch); +// Emulator.getComputer().getMemory().removeListener(oldWatch); // }); // if (panel == null) { // return; @@ -169,10 +158,10 @@ public class EmulatorUILogic implements Reconfigurable { // watchValue.setText(Integer.toHexString(e.getNewValue() & 0x0FF)); // } // }; -// Emulator.computer.getMemory().addListener(newListener); +// Emulator.getComputer().getMemory().addListener(newListener); // watches.add(newListener); // // Print out the current value right away -// byte b = Emulator.computer.getMemory().readRaw(address); +// byte b = Emulator.getComputer().getMemory().readRaw(address); // watchValue.setText(Integer.toString(b & 0x0ff, 16)); // } else { // watchValue.setText("00"); @@ -212,14 +201,13 @@ public class EmulatorUILogic implements Reconfigurable { alternatives = "Execute program;Load binary;Load program;Load rom;Play single-load game", defaultKeyMapping = "ctrl+shift+b") public static void runFile() { - Emulator.computer.pause(); - FileChooser select = new FileChooser(); - File binary = select.showOpenDialog(JaceApplication.getApplication().primaryStage); - if (binary == null) { - Emulator.computer.resume(); - return; - } - runFileNamed(binary); + Emulator.whileSuspended(c-> { + FileChooser select = new FileChooser(); + File binary = select.showOpenDialog(JaceApplication.getApplication().primaryStage); + if (binary != null) { + runFileNamed(binary); + } + }); } public static void runFileNamed(File binary) { @@ -234,25 +222,22 @@ public class EmulatorUILogic implements Reconfigurable { } } catch (NumberFormatException | IOException ex) { } - Emulator.computer.getCpu().resume(); } - public static void brun(File binary, int address) throws FileNotFoundException, IOException { - // If it was halted already, then it was initiated outside of an opcode execution - // If it was not yet halted, then it is the case that the CPU is processing another opcode - // So if that is the case, the program counter will need to be decremented here to compensate - // TODO: Find a better mousetrap for this one -- it's an ugly hack - Emulator.computer.pause(); - FileInputStream in = new FileInputStream(binary); - byte[] data = new byte[in.available()]; - in.read(data); - RAM ram = Emulator.computer.getMemory(); - for (int i = 0; i < data.length; i++) { - ram.write(address + i, data[i], false, true); + public static void brun(File binary, int address) throws IOException { + byte[] data; + try (FileInputStream in = new FileInputStream(binary)) { + data = new byte[in.available()]; + in.read(data); } - CPU cpu = Emulator.computer.getCpu(); - Emulator.computer.getCpu().setProgramCounter(address); - Emulator.computer.resume(); + + Emulator.whileSuspended(c-> { + RAM ram = c.getMemory(); + for (int i = 0; i < data.length; i++) { + ram.write(address + i, data[i], false, true); + } + c.getCpu().setProgramCounter(address); + }); } @InvokableAction( @@ -292,11 +277,11 @@ public class EmulatorUILogic implements Reconfigurable { description = "Save raw (RAM) format of visible screen", alternatives = "screendump;raw screenshot", defaultKeyMapping = "ctrl+shift+z") - public static void saveScreenshotRaw() throws FileNotFoundException, IOException { + public static void saveScreenshotRaw() throws IOException { SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss"); String timestamp = df.format(new Date()); String type; - int start = Emulator.computer.getVideo().getCurrentWriter().actualWriter().getYOffset(0); + int start = Emulator.withComputer(c->c.getVideo().getCurrentWriter().actualWriter().getYOffset(0), 0); int len; if (start < 0x02000) { // Lo-res or double-lores @@ -313,16 +298,21 @@ public class EmulatorUILogic implements Reconfigurable { } File outFile = new File("screen_" + type + "_a" + Integer.toHexString(start) + "_" + timestamp); try (FileOutputStream out = new FileOutputStream(outFile)) { - RAM128k ram = (RAM128k) Emulator.computer.memory; - Emulator.computer.pause(); - if (dres) { - for (int i = 0; i < len; i++) { - out.write(ram.getAuxVideoMemory().readByte(start + i)); + Emulator.whileSuspended(c -> { + RAM128k ram = (RAM128k) c.getMemory(); + try { + if (dres) { + for (int i = 0; i < len; i++) { + out.write(ram.getAuxVideoMemory().readByte(start + i)); + } + } + for (int i = 0; i < len; i++) { + out.write(ram.getMainMemory().readByte(start + i)); + } + } catch (IOException e) { + Logger.getLogger(EmulatorUILogic.class.getName()).log(Level.SEVERE, "Error writing screenshot", e); } - } - for (int i = 0; i < len; i++) { - out.write(ram.getMainMemory().readByte(start + i)); - } + }); } System.out.println("Wrote screenshot to " + outFile.getAbsolutePath()); } @@ -335,8 +325,7 @@ public class EmulatorUILogic implements Reconfigurable { defaultKeyMapping = "ctrl+shift+s") public static void saveScreenshot() throws IOException { FileChooser select = new FileChooser(); - Emulator.computer.pause(); - Image i = Emulator.computer.getVideo().getFrameBuffer(); + // Image i = Emulator.getComputer().getVideo().getFrameBuffer(); // BufferedImage bufImageARGB = SwingFXUtils.fromFXImage(i, null); File targetFile = select.showSaveDialog(JaceApplication.getApplication().primaryStage); if (targetFile == null) { @@ -344,7 +333,7 @@ public class EmulatorUILogic implements Reconfigurable { } String filename = targetFile.getName(); System.out.println("Writing screenshot to " + filename); - String extension = filename.substring(filename.lastIndexOf(".") + 1); + // String extension = filename.substring(filename.lastIndexOf(".") + 1); // BufferedImage bufImageRGB = new BufferedImage(bufImageARGB.getWidth(), bufImageARGB.getHeight(), BufferedImage.OPAQUE); // // Graphics2D graphics = bufImageRGB.createGraphics(); @@ -367,7 +356,7 @@ public class EmulatorUILogic implements Reconfigurable { fxmlLoader.setResources(null); try { Stage configWindow = new Stage(); - AnchorPane node = (AnchorPane) fxmlLoader.load(); + AnchorPane node = fxmlLoader.load(); ConfigurationUIController controller = fxmlLoader.getController(); controller.initialize(); Scene s = new Scene(node); @@ -389,7 +378,7 @@ public class EmulatorUILogic implements Reconfigurable { fxmlLoader.setResources(null); try { Stage editorWindow = new Stage(); - AnchorPane node = (AnchorPane) fxmlLoader.load(); + AnchorPane node = fxmlLoader.load(); IdeController controller = fxmlLoader.getController(); controller.initialize(); Scene s = new Scene(node); @@ -422,27 +411,33 @@ public class EmulatorUILogic implements Reconfigurable { if (stage.isFullScreen()) { JaceApplication.getApplication().controller.toggleAspectRatio(); } else { - int width = 0, height = 0; + int width, height; switch (size) { - case 0: // 1x + case 0 -> { + // 1x width = 560; height = 384; - break; - case 1: // 1.5x + } + case 1 -> { + // 1.5x width = 840; height = 576; - break; - case 2: // 2x + } + case 2 -> { + // 2x width = 560 * 2; height = 384 * 2; - break; - case 3: // 3x (retina) 2880x1800 + } + case 3 -> { + // 3x (retina) 2880x1800 width = 560 * 3; height = 384 * 3; - break; - default: // 2x + } + default -> { + // 2x width = 560 * 2; height = 384 * 2; + } } double vgap = stage.getScene().getY(); double hgap = stage.getScene().getX(); @@ -451,7 +446,7 @@ public class EmulatorUILogic implements Reconfigurable { } }); } - + @InvokableAction( name = "About", category = "general", @@ -460,7 +455,7 @@ public class EmulatorUILogic implements Reconfigurable { defaultKeyMapping = {"ctrl+shift+."}) public static void showAboutWindow() { //TODO: Implement - } + } public static boolean confirm(String message) { // return JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(Emulator.getFrame(), message); @@ -530,16 +525,17 @@ public class EmulatorUILogic implements Reconfigurable { } public static void simulateCtrlAppleReset() { - Computer computer = JaceApplication.singleton.controller.computer; - computer.keyboard.openApple(true); - computer.warmStart(); - Platform.runLater(() -> { - try { - Thread.sleep(500); - } catch (InterruptedException ex) { - Logger.getLogger(EmulatorUILogic.class.getName()).log(Level.SEVERE, null, ex); - } - computer.keyboard.openApple(false); + Emulator.withComputer(c -> { + c.getKeyboard().openApple(true); + c.warmStart(); + Platform.runLater(() -> { + try { + Thread.sleep(500); + } catch (InterruptedException ex) { + Logger.getLogger(EmulatorUILogic.class.getName()).log(Level.SEVERE, null, ex); + } + c.getKeyboard().openApple(false); + }); }); } @@ -561,8 +557,5 @@ public class EmulatorUILogic implements Reconfigurable { @Override public void reconfigure() { - if (JaceApplication.getApplication() != null) { - JaceApplication.getApplication().controller.setSpeed(speedSetting); - } } } diff --git a/src/main/java/jace/JaceApplication.java b/src/main/java/jace/JaceApplication.java index c74097a..4824c74 100644 --- a/src/main/java/jace/JaceApplication.java +++ b/src/main/java/jace/JaceApplication.java @@ -1,28 +1,28 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ package jace; +import java.io.IOException; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.Level; +import java.util.logging.Logger; + +import jace.apple2e.MOS65C02; +import jace.core.Computer; import jace.core.RAMEvent; import jace.core.RAMListener; import jace.core.Utility; import jace.ui.MetacheatUI; -import java.io.IOException; -import java.util.logging.Level; -import java.util.logging.Logger; import javafx.application.Application; import javafx.application.Platform; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.VBox; +import javafx.scene.paint.Color; import javafx.stage.Stage; import javafx.stage.StageStyle; /** - * + * * @author blurry */ public class JaceApplication extends Application { @@ -30,9 +30,10 @@ public class JaceApplication extends Application { static JaceApplication singleton; public Stage primaryStage; - JaceUIController controller; + public JaceUIController controller; - static boolean romStarted = false; + static AtomicBoolean romStarted = new AtomicBoolean(false); + int watchdogDelay = 500; @Override public void start(Stage stage) throws Exception { @@ -41,37 +42,45 @@ public class JaceApplication extends Application { FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/JaceUI.fxml")); fxmlLoader.setResources(null); try { - AnchorPane node = (AnchorPane) fxmlLoader.load(); + AnchorPane node = fxmlLoader.load(); controller = fxmlLoader.getController(); controller.initialize(); Scene s = new Scene(node); + s.setFill(Color.BLACK); primaryStage.setScene(s); - primaryStage.setTitle("Jace"); - EmulatorUILogic.scaleIntegerRatio(); - Utility.loadIcon("woz_figure.gif").ifPresent(primaryStage.getIcons()::add); + primaryStage.titleProperty().set("jace"); + Utility.loadIcon("jace_icon.png").ifPresent(icon -> { + primaryStage.getIcons().add(icon); + }); } catch (IOException exception) { throw new RuntimeException(exception); } primaryStage.show(); new Thread(() -> { - new Emulator(getParameters().getRaw()); + Emulator.getInstance(getParameters().getRaw()); reconnectUIHooks(); EmulatorUILogic.scaleIntegerRatio(); - while (Emulator.computer.getVideo() == null || Emulator.computer.getVideo().getFrameBuffer() == null) { - Thread.yield(); + AtomicBoolean waitingForVideo = new AtomicBoolean(true); + while (waitingForVideo.get()) { + Emulator.withVideo(v -> { + if (v.getFrameBuffer() != null) { + waitingForVideo.set(false); + } + }); + Thread.onSpinWait(); } bootWatchdog(); }).start(); primaryStage.setOnCloseRequest(event -> { - Emulator.computer.deactivate(); + Emulator.withComputer(Computer::deactivate); Platform.exit(); System.exit(0); }); } public void reconnectUIHooks() { - controller.connectComputer(Emulator.computer, primaryStage); + controller.connectComputer(primaryStage); } public static JaceApplication getApplication() { @@ -102,6 +111,16 @@ public class JaceApplication extends Application { return cheatController; } + public void closeMetacheat() { + if (cheatStage != null) { + cheatStage.close(); + } + if (cheatController != null) { + cheatController.detach(); + cheatController = null; + } + } + /** * @param args the command line arguments */ @@ -114,22 +133,41 @@ public class JaceApplication extends Application { * for cold boot */ private void bootWatchdog() { - romStarted = false; - RAMListener startListener = Emulator.computer.getMemory(). - observe(RAMEvent.TYPE.EXECUTE, 0x0FA62, (e) -> { - romStarted = true; + Emulator.withComputer(c -> { + // We know the game started properly when it runs the decompressor the first time + int watchAddress = 0x0ff3a; + new Thread(()->{ + // Logger.getLogger(getClass().getName()).log(Level.WARNING, "Booting with watchdog"); + final RAMListener startListener = c.getMemory().observeOnce("Boot watchdog", RAMEvent.TYPE.EXECUTE, watchAddress, (e) -> { + // Logger.getLogger(getClass().getName()).log(Level.WARNING, "Boot was detected, watchdog terminated."); + romStarted.set(true); }); - Emulator.computer.coldStart(); - try { - Thread.sleep(250); - if (!romStarted) { - Logger.getLogger(getClass().getName()).log(Level.WARNING, "Boot not detected, performing a cold start"); - Emulator.computer.coldStart(); - } - } catch (InterruptedException ex) { - Logger.getLogger(JaceApplication.class.getName()).log(Level.SEVERE, null, ex); - } - Emulator.computer.getMemory().removeListener(startListener); + romStarted.set(false); + c.coldStart(); + try { + // Logger.getLogger(getClass().getName()).log(Level.WARNING, "Watchdog: waiting " + watchdogDelay + "ms for boot to start."); + Thread.sleep(watchdogDelay); + watchdogDelay = 500; + if (!romStarted.get() || !c.isRunning() || c.getCpu().getProgramCounter() == MOS65C02.FASTBOOT || c.getCpu().getProgramCounter() == 0) { + Logger.getLogger(getClass().getName()).log(Level.WARNING, "Boot not detected, performing a cold start"); + Logger.getLogger(getClass().getName()).log(Level.WARNING, "Old PC: {0}", Integer.toHexString(c.getCpu().getProgramCounter())); + resetEmulator(); + bootWatchdog(); + } else { + startListener.unregister(); + } + } catch (InterruptedException ex) { + Logger.getLogger(JaceApplication.class.getName()).log(Level.SEVERE, null, ex); + } + }).start(); + }); } + public void resetEmulator() { + // Reset the emulator memory and restart + Emulator.withComputer(c -> { + c.getMemory().resetState(); + c.warmStart(); + }); + } } diff --git a/src/main/java/jace/JaceUIController.java b/src/main/java/jace/JaceUIController.java index acd4988..05781a2 100644 --- a/src/main/java/jace/JaceUIController.java +++ b/src/main/java/jace/JaceUIController.java @@ -1,23 +1,8 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ package jace; -import com.sun.glass.ui.Application; -import jace.core.Card; -import jace.core.Computer; -import jace.core.Motherboard; -import jace.core.Utility; -import jace.library.MediaCache; -import jace.library.MediaConsumer; -import jace.library.MediaConsumerParent; -import jace.library.MediaEntry; import java.io.File; import java.io.IOException; import java.net.URI; -import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -28,8 +13,19 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; +import java.util.function.Function; import java.util.logging.Level; import java.util.logging.Logger; + +import jace.core.Card; +import jace.core.Motherboard; +import jace.core.Utility; +import jace.core.Video; +import jace.apple2e.Apple2e; +import jace.library.MediaCache; +import jace.library.MediaConsumer; +import jace.library.MediaConsumerParent; +import jace.library.MediaEntry; import javafx.animation.FadeTransition; import javafx.animation.KeyFrame; import javafx.animation.Timeline; @@ -44,6 +40,7 @@ import javafx.geometry.Insets; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; import javafx.scene.control.Label; import javafx.scene.control.Slider; import javafx.scene.effect.DropShadow; @@ -70,9 +67,6 @@ import javafx.util.StringConverter; */ public class JaceUIController { - @FXML - private URL location; - @FXML private AnchorPane rootPane; @@ -97,10 +91,14 @@ public class JaceUIController { @FXML private Button menuButton; - Computer computer; + @FXML + private Slider speakerToggle; private final BooleanProperty aspectRatioCorrectionEnabled = new SimpleBooleanProperty(false); + public static final double MIN_SPEED = 0.5; + public static final double MAX_SPEED = 5.0; + @FXML void initialize() { assert rootPane != null : "fx:id=\"rootPane\" was not injected: check your FXML file 'JaceUI.fxml'."; @@ -111,7 +109,7 @@ public class JaceUIController { controlOverlay.setVisible(false); menuButtonPane.setVisible(false); controlOverlay.setFocusTraversable(false); - menuButtonPane.setFocusTraversable(false); + menuButtonPane.setFocusTraversable(true); NumberBinding aspectCorrectedWidth = rootPane.heightProperty().multiply(3.0).divide(2.0); NumberBinding width = new When( aspectRatioCorrectionEnabled.and(aspectCorrectedWidth.lessThan(rootPane.widthProperty())) @@ -119,19 +117,38 @@ public class JaceUIController { appleScreen.fitWidthProperty().bind(width); appleScreen.fitHeightProperty().bind(rootPane.heightProperty()); appleScreen.setVisible(false); - menuButtonPane.setPickOnBounds(false); rootPane.setOnDragEntered(this::processDragEnteredEvent); rootPane.setOnDragExited(this::processDragExitedEvent); rootPane.setBackground(new Background(new BackgroundFill(Color.BLACK, null, null))); rootPane.setOnMouseMoved(this::showMenuButton); rootPane.setOnMouseExited(this::hideControlOverlay); + rootPane.setOnMouseClicked((evt)->{ + rootPane.requestFocus(); + }); menuButton.setOnMouseClicked(this::showControlOverlay); controlOverlay.setOnMouseClicked(this::hideControlOverlay); delayTimer.getKeyFrames().add(new KeyFrame(Duration.millis(3000), evt -> { hideControlOverlay(null); rootPane.requestFocus(); })); + rootPane.requestFocus(); + speakerToggle.setValue(1.0); + speakerToggle.setOnMouseClicked(evt -> { + speakerEnabled = !speakerEnabled; + int desiredValue = speakerEnabled ? 1 : 0; + speakerToggle.setValue(desiredValue); + Emulator.withComputer(computer -> { + Motherboard.enableSpeaker = speakerEnabled; + computer.motherboard.reconfigure(); + if (!speakerEnabled) { + computer.motherboard.speaker.detach(); + } else { + computer.motherboard.speaker.attach(); + } + }); + }); } + boolean speakerEnabled = true; private void showMenuButton(MouseEvent evt) { if (!evt.isPrimaryButtonDown() && !evt.isSecondaryButtonDown() && !controlOverlay.isVisible()) { @@ -188,42 +205,48 @@ public class JaceUIController { return 0.5; } else if (setting == 1.0) { return 1.0; - } else if (setting >= 10) { + } else if (setting >= 5) { return Double.MAX_VALUE; } else { - double val = Math.pow(2.0, (setting - 1.0) / 1.5); - val = Math.floor(val * 2.0) / 2.0; - if (val > 2.0) { - val = Math.floor(val); - } - return val; + return setting; } } - private void connectControls(Stage primaryStage) { + Stage primaryStage; + + public void reconnectKeyboard() { + Emulator.withComputer(computer -> { + if (computer.getKeyboard() != null) { + EventHandler keyboardHandler = computer.getKeyboard().getListener(); + primaryStage.setOnShowing(evt -> computer.getKeyboard().resetState()); + rootPane.setOnKeyPressed(keyboardHandler); + rootPane.setOnKeyReleased(keyboardHandler); + rootPane.setFocusTraversable(true); + } + }); + } + + private void connectControls(Stage ps) { + primaryStage = ps; + connectButtons(controlOverlay); - if (computer.getKeyboard() != null) { - EventHandler keyboardHandler = computer.getKeyboard().getListener(); - primaryStage.setOnShowing(evt -> computer.getKeyboard().resetState()); - rootPane.setOnKeyPressed(keyboardHandler); - rootPane.setOnKeyReleased(keyboardHandler); - rootPane.setFocusTraversable(true); - } - speedSlider.setMinorTickCount(0); + speedSlider.setMinorTickCount(3); speedSlider.setMajorTickUnit(1); + speedSlider.setMax(MAX_SPEED); + speedSlider.setMin(MIN_SPEED); speedSlider.setLabelFormatter(new StringConverter() { @Override public String toString(Double val) { - if (val < 1.0) { + if (val <= MIN_SPEED) { return "Half"; - } else if (val >= 10.0) { + } else if (val >= MAX_SPEED) { return "∞"; } double v = convertSpeedToRatio(val); if (v != Math.floor(v)) { - return String.valueOf(v) + "x"; + return v + "x"; } else { - return String.valueOf((int) v) + "x"; + return (int) v + "x"; } } @@ -232,45 +255,38 @@ public class JaceUIController { return 1.0; } }); - speedSlider.valueProperty().addListener((val, oldValue, newValue) -> setSpeed(newValue.doubleValue())); Platform.runLater(() -> { - speedSlider.setValue(Emulator.logic.speedSetting); - // Kind of redundant but make sure speed is properly set as if the user did it - setSpeed(Emulator.logic.speedSetting); + double currentSpeed = (double) Emulator.withComputer(c->c.getMotherboard().getSpeedRatio(), 100) / 100.0; + speedSlider.valueProperty().set(currentSpeed); + speedSlider.valueProperty().addListener((val, oldValue, newValue) -> setSpeed(newValue.doubleValue())); }); + reconnectKeyboard(); } private void connectButtons(Node n) { - if (n instanceof Button) { - Button button = (Button) n; - Runnable action = Utility.getNamedInvokableAction(button.getText()); - button.setOnMouseClicked(evt -> action.run()); - } else if (n instanceof Parent) { - for (Node child : ((Parent) n).getChildrenUnmodifiable()) { - connectButtons(child); - } + if (n instanceof Button button) { + Function action = Utility.getNamedInvokableAction(button.getText()); + button.setOnMouseClicked(evt -> action.apply(false)); + } else if (n instanceof Parent parent) { + parent.getChildrenUnmodifiable().forEach(child -> connectButtons(child)); } } - protected void setSpeed(double speed) { - Emulator.logic.speedSetting = (int) speed; - double speedRatio = convertSpeedToRatio(speed); + public void setSpeed(double speed) { + double newSpeed = Math.max(speed, MIN_SPEED); if (speedSlider.getValue() != speed) { - Platform.runLater(() -> speedSlider.setValue(speed)); + Platform.runLater(()->speedSlider.setValue(newSpeed)); } - if (speedRatio > 100.0) { - Emulator.computer.getMotherboard().setMaxSpeed(true); - Motherboard.cpuPerClock = 3; + if (newSpeed >= MAX_SPEED) { + Emulator.withComputer(c -> { + c.getMotherboard().setMaxSpeed(true); + }); } else { - if (speedRatio > 25) { - Motherboard.cpuPerClock = 2; - } else { - Motherboard.cpuPerClock = 1; - } - Emulator.computer.getMotherboard().setMaxSpeed(false); - Emulator.computer.getMotherboard().setSpeedInPercentage((int) (speedRatio * 100)); + Emulator.withComputer(c -> { + c.getMotherboard().setMaxSpeed(false); + c.getMotherboard().setSpeedInPercentage((int) (newSpeed * 100)); + }); } - Emulator.computer.getMotherboard().reconfigure(); } public void toggleAspectRatio() { @@ -281,19 +297,23 @@ public class JaceUIController { aspectRatioCorrectionEnabled.set(enabled); } - public void connectComputer(Computer computer, Stage primaryStage) { - if (computer == null) { - return; - } - this.computer = computer; + public void connectComputer(Stage primaryStage) { Platform.runLater(() -> { connectControls(primaryStage); - appleScreen.setImage(computer.getVideo().getFrameBuffer()); + Emulator.withVideo(this::connectVideo); appleScreen.setVisible(true); rootPane.requestFocus(); }); } + public void connectVideo(Video video) { + if (video != null) { + appleScreen.setImage(video.getFrameBuffer()); + } else { + appleScreen.setImage(null); + } + } + private void processDragEnteredEvent(DragEvent evt) { MediaEntry media = null; if (evt.getDragboard().hasFiles()) { @@ -355,15 +375,15 @@ public class JaceUIController { }); icon.setOnDragDropped(event -> { System.out.println("Dropping media on " + icon.getText()); - try { - computer.pause(); - consumer.insertMedia(media, media.files.get(0)); - computer.resume(); - event.setDropCompleted(true); - event.consume(); - } catch (IOException ex) { - Logger.getLogger(JaceUIController.class.getName()).log(Level.SEVERE, null, ex); - } + Emulator.whileSuspended(c-> { + try { + consumer.insertMedia(media, media.files.get(0)); + } catch (IOException ex) { + Logger.getLogger(JaceUIController.class.getName()).log(Level.SEVERE, null, ex); + } + }); + event.setDropCompleted(true); + event.consume(); endDragEvent(); }); }); @@ -374,48 +394,49 @@ public class JaceUIController { private void endDragEvent() { stackPane.getChildren().remove(drivePanel); - drivePanel.getChildren().stream().forEach((n) -> { - n.setOnDragDropped(null); - }); + drivePanel.getChildren().forEach((n) -> n.setOnDragDropped(null)); } private List getMediaConsumers() { List consumers = new ArrayList<>(); - if (Emulator.logic.showDrives) { - for (Optional card : computer.memory.getAllCards()) { - card.filter(c -> c instanceof MediaConsumerParent).ifPresent(parent -> { - consumers.addAll(Arrays.asList(((MediaConsumerParent) parent).getConsumers())); - }); - } + if (Emulator.getUILogic().showDrives) { + Emulator.withMemory(m -> { + for (Optional card : m.getAllCards()) { + card.filter(c -> c instanceof MediaConsumerParent).ifPresent(parent -> + consumers.addAll(Arrays.asList(((MediaConsumerParent) parent).getConsumers())) + ); + } + }); } return consumers; } Map iconTTL = new ConcurrentHashMap<>(); - void addIndicator(Label icon) { + public void addIndicator(Label icon) { addIndicator(icon, 250); } - void addIndicator(Label icon, long TTL) { + public void addIndicator(Label icon, long TTL) { if (!iconTTL.containsKey(icon)) { - Application.invokeLater(() -> { + Platform.runLater(() -> { if (!notificationBox.getChildren().contains(icon)) { - notificationBox.getChildren().add(icon); + notificationBox.getChildren().add(0, icon);; } }); } trackTTL(icon, TTL); } - void removeIndicator(Label icon) { - Application.invokeLater(() -> { + public void removeIndicator(Label icon) { + Platform.runLater(() -> { notificationBox.getChildren().remove(icon); iconTTL.remove(icon); }); } ScheduledExecutorService notificationExecutor = Executors.newSingleThreadScheduledExecutor(); + @SuppressWarnings("all") ScheduledFuture ttlCleanupTask = null; private void trackTTL(Label icon, long TTL) { @@ -430,9 +451,7 @@ public class JaceUIController { Long now = System.currentTimeMillis(); iconTTL.keySet().stream() .filter((icon) -> (iconTTL.get(icon) <= now)) - .forEach((icon) -> { - removeIndicator(icon); - }); + .forEach(this::removeIndicator); if (iconTTL.isEmpty()) { ttlCleanupTask.cancel(true); ttlCleanupTask = null; @@ -441,10 +460,12 @@ public class JaceUIController { public void addMouseListener(EventHandler handler) { appleScreen.addEventHandler(MouseEvent.ANY, handler); + rootPane.addEventHandler(MouseEvent.ANY, handler); } public void removeMouseListener(EventHandler handler) { appleScreen.removeEventHandler(MouseEvent.ANY, handler); + rootPane.removeEventHandler(MouseEvent.ANY, handler); } Label currentNotification = null; @@ -456,15 +477,13 @@ public class JaceUIController { notification.setEffect(new DropShadow(2.0, Color.BLACK)); notification.setTextFill(Color.WHITE); notification.setBackground(new Background(new BackgroundFill(Color.rgb(0, 0, 80, 0.7), new CornerRadii(5.0), new Insets(-5.0)))); - Application.invokeLater(() -> { + Platform.runLater(() -> { stackPane.getChildren().remove(oldNotification); stackPane.getChildren().add(notification); }); - notificationExecutor.schedule(() -> { - Application.invokeLater(() -> { - stackPane.getChildren().remove(notification); - }); - }, 4, TimeUnit.SECONDS); + notificationExecutor.schedule( + () -> Platform.runLater(() -> stackPane.getChildren().remove(notification)), + 4, TimeUnit.SECONDS); } } diff --git a/src/main/java/jace/apple2e/Apple2e.java b/src/main/java/jace/apple2e/Apple2e.java index c5fb923..218c3da 100644 --- a/src/main/java/jace/apple2e/Apple2e.java +++ b/src/main/java/jace/apple2e/Apple2e.java @@ -1,96 +1,89 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.apple2e; -import jace.Emulator; -import jace.JaceApplication; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + import jace.apple2e.softswitch.VideoSoftSwitch; import jace.cheat.Cheats; -import jace.config.ClassSelection; import jace.config.ConfigurableField; +import jace.config.DeviceSelection; import jace.core.Card; import jace.core.Computer; +import jace.core.Device; import jace.core.Motherboard; import jace.core.RAM; import jace.core.RAMEvent; import jace.core.RAMListener; import jace.core.Utility; -import jace.state.Stateful; -import jace.core.Video; -import jace.hardware.CardDiskII; -import jace.hardware.CardExt80Col; -import jace.hardware.ConsoleProbe; +import jace.hardware.Cards; +import jace.hardware.FPSMonitorDevice; import jace.hardware.Joystick; import jace.hardware.NoSlotClock; +import jace.hardware.VideoImpls; import jace.hardware.ZipWarpAccelerator; -import jace.hardware.massStorage.CardMassStorage; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.Semaphore; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; +import jace.state.Stateful; /** - * Apple2e is a computer with a 65c02 CPU, 128k of bankswitched ram, double-hires graphics, and up to seven peripheral - * I/O cards installed. Pause and resume are implemented by the Motherboard class. This class provides overall - * configuration of the computer, but the actual operation of the computer and its timing characteristics are managed in - * the Motherboard class. + * Apple2e is a computer with a 65c02 CPU, 128k of bankswitched ram, + * double-hires graphics, and up to seven peripheral I/O cards installed. Pause + * and resume are implemented by the Motherboard class. This class provides + * overall configuration of the computer, but the actual operation of the + * computer and its timing characteristics are managed in the Motherboard class. * * @author Brendan Robert (BLuRry) brendan.robert@gmail.com */ @Stateful public class Apple2e extends Computer { - static int IRQ_VECTOR = 0x003F2; + @ConfigurableField(name = "Slot 1", shortName = "s1card") - public ClassSelection card1 = new ClassSelection(Card.class, null); + public DeviceSelection card1 = new DeviceSelection<>(Cards.class, null); @ConfigurableField(name = "Slot 2", shortName = "s2card") - public ClassSelection card2 = new ClassSelection(Card.class, null); + public DeviceSelection card2 = new DeviceSelection<>(Cards.class, null); @ConfigurableField(name = "Slot 3", shortName = "s3card") - public ClassSelection card3 = new ClassSelection(Card.class, null); + public DeviceSelection card3 = new DeviceSelection<>(Cards.class, null); @ConfigurableField(name = "Slot 4", shortName = "s4card") - public ClassSelection card4 = new ClassSelection(Card.class, null); + public DeviceSelection card4 = new DeviceSelection<>(Cards.class, null); @ConfigurableField(name = "Slot 5", shortName = "s5card") - public ClassSelection card5 = new ClassSelection(Card.class, null); + public DeviceSelection card5 = new DeviceSelection<>(Cards.class, null); @ConfigurableField(name = "Slot 6", shortName = "s6card") - public ClassSelection card6 = new ClassSelection(Card.class, CardDiskII.class); + public DeviceSelection card6 = new DeviceSelection<>(Cards.class, Cards.DiskIIDrive, true); @ConfigurableField(name = "Slot 7", shortName = "s7card") - public ClassSelection card7 = new ClassSelection(Card.class, CardMassStorage.class); + public DeviceSelection card7 = new DeviceSelection<>(Cards.class, Cards.MassStorage, true); @ConfigurableField(name = "Debug rom", shortName = "debugRom", description = "Use debugger //e rom") public boolean useDebugRom = false; - @ConfigurableField(name = "Console probe", description = "Enable console redirection (experimental!)") - public boolean useConsoleProbe = false; - private ConsoleProbe probe = new ConsoleProbe(); @ConfigurableField(name = "Helpful hints", shortName = "hints") public boolean enableHints = true; @ConfigurableField(name = "Renderer", shortName = "video", description = "Video rendering implementation") - public ClassSelection videoRenderer = new ClassSelection(Video.class, VideoNTSC.class); + public DeviceSelection videoRenderer = new DeviceSelection<>(VideoImpls.class, VideoImpls.NTSC, false); @ConfigurableField(name = "Aux Ram", shortName = "ram", description = "Aux ram card") - public ClassSelection ramCard = new ClassSelection(RAM128k.class, CardExt80Col.class); + public DeviceSelection ramCard = new DeviceSelection<>(RAM128k.RamCards.class, RAM128k.RamCards.CardRamworks, false); @ConfigurableField(name = "Joystick 1 Enabled", shortName = "joy1", description = "If unchecked, then there is no joystick support.", enablesDevice = true) public boolean joy1enabled = true; @ConfigurableField(name = "Joystick 2 Enabled", shortName = "joy2", description = "If unchecked, then there is no joystick support.", enablesDevice = true) @@ -99,26 +92,29 @@ public class Apple2e extends Computer { public boolean clockEnabled = true; @ConfigurableField(name = "Accelerator Enabled", shortName = "zip", description = "If checked, add support for Zip/Transwarp", enablesDevice = true) public boolean acceleratorEnabled = true; - + public Joystick joystick1; public Joystick joystick2; - @ConfigurableField(name = "Activate Cheats", shortName = "cheat", defaultValue = "") - public ClassSelection cheatEngine = new ClassSelection(Cheats.class, null); + @ConfigurableField(name = "Activate Cheats", shortName = "cheat") + public DeviceSelection cheatEngine = new DeviceSelection<>(Cheats.Cheat.class, null); public Cheats activeCheatEngine = null; public NoSlotClock clock; public ZipWarpAccelerator accelerator; + FPSMonitorDevice fpsCounters; + @ConfigurableField(name = "Show speed monitors", shortName = "showFps") + public boolean showSpeedMonitors = false; /** * Creates a new instance of Apple2e */ public Apple2e() { super(); + fpsCounters = new FPSMonitorDevice(); try { - reconfigure(); - setCpu(new MOS65C02(this)); - reinitMotherboard(); + setCpu(new MOS65C02()); + setMotherboard(new Motherboard(null)); } catch (Throwable t) { - System.err.println("Unable to initalize virtual machine"); + System.err.println("Unable to initialize virtual machine"); t.printStackTrace(System.err); } } @@ -128,54 +124,35 @@ public class Apple2e extends Computer { return "Computer (Apple //e)"; } - protected void reinitMotherboard() { - if (motherboard != null && motherboard.isRunning()) { - motherboard.suspend(); - } - setMotherboard(new Motherboard(this, motherboard)); - reconfigure(); - motherboard.reconfigure(); - } - + @Override public void coldStart() { - pause(); - reinitMotherboard(); - RAM128k ram = (RAM128k) getMemory(); - ram.initMemoryPattern(ram.mainMemory); - ram.initMemoryPattern(ram.getAuxMemory()); + RAM128k r = (RAM128k) getMemory(); + System.err.println("Cold starting computer: RESETTING SOFT SWITCHES"); + r.resetState(); for (SoftSwitches s : SoftSwitches.values()) { - s.getSwitch().reset(); - } - getMemory().configureActiveMemory(); - getVideo().configureVideoMode(); - try { - for (Optional c : getMemory().getAllCards()) { - c.ifPresent(Card::reset); - waitForVBL(); + if ((s.getSwitch() instanceof VideoSoftSwitch)) { + s.getSwitch().reset(); } - } catch (InterruptedException ex) { - Logger.getLogger(Apple2e.class.getName()).log(Level.SEVERE, null, ex); - } finally { - getCpu().resume(); - reboot(); - resume(); } - } - - public void reboot() { - RAM r = getMemory(); - r.write(IRQ_VECTOR, (byte) 0x00, false, true); - r.write(IRQ_VECTOR + 1, (byte) 0x00, false, true); - r.write(IRQ_VECTOR + 2, (byte) 0x00, false, true); + // This isn't really authentic behavior but sometimes games like memory to have a consistent state when booting. + r.zeroAllRam(); + // Sather 4-15: + // An open Apple (left Apple) reset causes meaningless values to be stored in two locations + // of every memory page from Page $01 through Page $BF before the power-up byte is checked. + int offset = IRQ_VECTOR & 0x0ff; + byte garbage = (byte) (Math.random() * 256.0); + for (int page=1; page < 0xc0; page++) { + r.write(page << 8 + offset, garbage, false, true); + r.write(page << 8 + 1 + offset, garbage, false, true); + } warmStart(); } @Override public void warmStart() { - boolean restart = pause(); for (SoftSwitches s : SoftSwitches.values()) { - if (!(s.getSwitch() instanceof VideoSoftSwitch)) { + if (! (s.getSwitch() instanceof VideoSoftSwitch)) { s.getSwitch().reset(); } } @@ -185,7 +162,7 @@ public class Apple2e extends Computer { for (Optional c : getMemory().getAllCards()) { c.ifPresent(Card::reset); } - getCpu().resume(); + motherboard.disableTempMaxSpeed(); resume(); } @@ -193,239 +170,194 @@ public class Apple2e extends Computer { return activeCheatEngine; } - private void insertCard(Class type, int slot) throws NoSuchMethodException, IllegalArgumentException, InvocationTargetException { + private void insertCard(DeviceSelection type, int slot) { if (getMemory().getCard(slot).isPresent()) { - if (getMemory().getCard(slot).get().getClass().equals(type)) { + if (type.getValue() != null && type.getValue().isInstance(getMemory().getCard(slot).get())) { return; - } + } getMemory().removeCard(slot); } - if (type != null) { - try { - Card card = type.getConstructor(Computer.class).newInstance(this); - getMemory().addCard(card, slot); - } catch (InstantiationException | IllegalAccessException ex) { - Logger.getLogger(Apple2e.class.getName()).log(Level.SEVERE, null, ex); + if (type != null && type.getValue() != null) { + Card card = type.getValue().create(); + getMemory().addCard(card, slot); + } + } + + private RAM128k.RamCards getDesiredMemoryConfiguration() { + if (ramCard.getValue() == null) { + return RAM128k.RamCards.CardExt80Col; + } else { + return ramCard.getValue(); + } + } + + private boolean isMemoryConfigurationCorrect() { + if (getMemory() == null) { + return false; + } + return getDesiredMemoryConfiguration().isInstance((RAM128k) getMemory()); + } + + private boolean isVideoConfigurationCorrect() { + VideoImpls videoSelection = videoRenderer.getValue(); + return videoSelection != null && videoSelection.isInstance(getVideo()); + } + + @Override + protected RAM createMemory() { + return getDesiredMemoryConfiguration().create(); + } + + @Override + public void loadRom(boolean reload) throws IOException { + if (!romLoaded.isDone() && reload) { + if (useDebugRom) { + loadRom("/jace/data/apple2e_debug.rom"); + } else { + loadRom("/jace/data/apple2e.rom"); } } } @Override public final void reconfigure() { - boolean restart = pause(); + super.reconfigure(); if (Utility.isHeadlessMode()) { joy1enabled = false; joy2enabled = false; - } - super.reconfigure(); - - RAM128k currentMemory = (RAM128k) getMemory(); - if (currentMemory != null && ramCard.getValue() != null && !(currentMemory.getClass().equals(ramCard.getValue()))) { - try { - RAM128k newMemory = (RAM128k) ramCard.getValue().getConstructor(Computer.class).newInstance(this); - newMemory.copyFrom(currentMemory); - setMemory(newMemory); - } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException ex) { - Logger.getLogger(Apple2e.class.getName()).log(Level.SEVERE, null, ex); - } + if (getMotherboard() == null) { + System.err.println("No motherboard, cannot reconfigure"); + Thread.dumpStack(); + return; } - if (getMemory() == null) { - try { - currentMemory = (RAM128k) ramCard.getValue().getConstructor(Computer.class).newInstance(this); - } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException ex) { - Logger.getLogger(Apple2e.class.getName()).log(Level.SEVERE, null, ex); + getMotherboard().whileSuspended(()-> { + // System.err.println("Reconfiguring computer..."); + if (!isMemoryConfigurationCorrect()) { + System.out.println("Creating new ram using " + getDesiredMemoryConfiguration().getName()); + setMemory(createMemory()); } - try { - setMemory(currentMemory); - for (SoftSwitches s : SoftSwitches.values()) { - s.getSwitch().register(this); - } - } catch (Throwable ex) { - } - } - currentMemory.reconfigure(); - if (motherboard != null) { - if (accelerator == null) { - accelerator = new ZipWarpAccelerator(this); + // Make sure all softswitches are configured after confirming memory exists + for (SoftSwitches s : SoftSwitches.values()) { + s.getSwitch().register(); } + + try { + loadRom(true); + } catch (IOException e) { + Logger.getLogger(Apple2e.class.getName()).log(Level.SEVERE, "Failed to load system rom ROMs", e); + } + + getMemory().configureActiveMemory(); + + Set newDeviceSet = new HashSet<>(); + if (acceleratorEnabled) { - motherboard.addChildDevice(accelerator); - } else { - motherboard.removeChildDevice(accelerator); + if (accelerator == null) { + accelerator = new ZipWarpAccelerator(); + } + newDeviceSet.add(accelerator); } if (joy1enabled) { if (joystick1 == null) { joystick1 = new Joystick(0, this); - motherboard.addChildDevice(joystick1); } - } else if (joystick1 != null) { - motherboard.removeChildDevice(joystick1); + newDeviceSet.add(joystick1); + } else { joystick1 = null; } if (joy2enabled) { if (joystick2 == null) { joystick2 = new Joystick(1, this); - motherboard.addChildDevice(joystick2); } - } else if (joystick2 != null) { - motherboard.removeChildDevice(joystick2); + newDeviceSet.add(joystick2); + } else { joystick2 = null; } if (clockEnabled) { if (clock == null) { - clock = new NoSlotClock(this); - motherboard.addChildDevice(clock); + clock = new NoSlotClock(); } - } else if (clock != null) { - motherboard.removeChildDevice(clock); + newDeviceSet.add(clock); + } else { clock = null; } - } - try { - if (useConsoleProbe) { - probe.init(this); - } else { - probe.shutdown(); + if (!isVideoConfigurationCorrect()) { + setVideo(videoRenderer.getValue().create()); } - if (useDebugRom) { - loadRom("jace/data/apple2e_debug.rom"); - } else { - loadRom("jace/data/apple2e.rom"); - } - - if (getVideo() == null || getVideo().getClass() != videoRenderer.getValue()) { - if (getVideo() != null) { - getVideo().suspend(); - } - try { - setVideo((Video) videoRenderer.getValue().getConstructor(Computer.class).newInstance(this)); - getVideo().configureVideoMode(); - getVideo().reconfigure(); - Emulator.resizeVideo(); - if (JaceApplication.getApplication() != null) { - JaceApplication.getApplication().reconnectUIHooks(); - } - getVideo().resume(); - } catch (InstantiationException | IllegalAccessException ex) { - Logger.getLogger(Apple2e.class.getName()).log(Level.SEVERE, null, ex); - } catch (NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException ex) { - Logger.getLogger(Apple2e.class.getName()).log(Level.SEVERE, null, ex); - } - } - - try { - // Add all new cards - insertCard(card1.getValue(), 1); - insertCard(card2.getValue(), 2); - insertCard(card3.getValue(), 3); - insertCard(card4.getValue(), 4); - insertCard(card5.getValue(), 5); - insertCard(card6.getValue(), 6); - insertCard(card7.getValue(), 7); - } catch (NoSuchMethodException | IllegalArgumentException | InvocationTargetException ex) { - Logger.getLogger(Apple2e.class.getName()).log(Level.SEVERE, null, ex); - } + // Add all new cards + insertCard(card1, 1); + insertCard(card2, 2); + insertCard(card3, 3); + insertCard(card4, 4); + insertCard(card5, 5); + insertCard(card6, 6); + insertCard(card7, 7); if (enableHints) { enableHints(); } else { disableHints(); } - getMemory().configureActiveMemory(); if (cheatEngine.getValue() == null) { if (activeCheatEngine != null) { activeCheatEngine.detach(); - motherboard.addChildDevice(activeCheatEngine); + activeCheatEngine.suspend(); + activeCheatEngine = null; } - activeCheatEngine = null; } else { - boolean startCheats = true; - if (activeCheatEngine != null) { - if (activeCheatEngine.getClass().equals(cheatEngine.getValue())) { - startCheats = false; - } else { - motherboard.removeChildDevice(activeCheatEngine); - activeCheatEngine = null; - } + if (activeCheatEngine != null && !cheatEngine.getValue().isInstance(activeCheatEngine)) { + activeCheatEngine.detach(); + activeCheatEngine.suspend(); + activeCheatEngine = null; } - if (startCheats) { - try { - activeCheatEngine = (Cheats) cheatEngine.getValue().getConstructor(Computer.class).newInstance(this); - } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException ex) { - Logger.getLogger(Apple2e.class.getName()).log(Level.SEVERE, null, ex); - } - motherboard.addChildDevice(activeCheatEngine); + if (activeCheatEngine == null && cheatEngine.getValue() != null) { + activeCheatEngine = cheatEngine.getValue().create(); + } + if (activeCheatEngine != null) { + newDeviceSet.add(activeCheatEngine); } } - } catch (IOException ex) { - Logger.getLogger(Apple2e.class.getName()).log(Level.SEVERE, null, ex); - } - if (restart) { - resume(); - } + + newDeviceSet.add(getCpu()); + newDeviceSet.add(getVideo()); + for (Optional c : getMemory().getAllCards()) { + c.ifPresent(newDeviceSet::add); + } + if (showSpeedMonitors) { + newDeviceSet.add(fpsCounters); + } + getMotherboard().setAllDevices(newDeviceSet); + getMotherboard().attach(); + getMotherboard().reconfigure(); + }); } @Override protected void doPause() { - if (motherboard == null) { + if (getMotherboard() == null) { return; } - motherboard.pause(); + getMotherboard().setPaused(true); } @Override protected void doResume() { - if (motherboard == null) { + if (getMotherboard() == null) { return; } - motherboard.resume(); + getMotherboard().resumeAll(); } -// public boolean isRunning() { -// if (motherboard == null) { -// return false; -// } -// return motherboard.isRunning() && !motherboard.isPaused; -// } - private List hints = new ArrayList<>(); - - List vblCallbacks = Collections.synchronizedList(new ArrayList<>()); - - public void waitForVBL() throws InterruptedException { - waitForVBL(0); - } - - public void waitForVBL(int count) throws InterruptedException { - Semaphore s = new Semaphore(0); - onNextVBL(s::release); - s.acquire(); - if (count > 1) { - waitForVBL(count - 1); - } - } - - public void onNextVBL(Runnable r) { - vblCallbacks.add(r); - } - - @Override - public void notifyVBLStateChanged(boolean state) { - super.notifyVBLStateChanged(state); - if (state) { - while (vblCallbacks != null && !vblCallbacks.isEmpty()) { - vblCallbacks.remove(0).run(); - } - } - } + private final List hints = new ArrayList<>(); ScheduledExecutorService animationTimer = new ScheduledThreadPoolExecutor(1); Runnable drawHints = () -> { @@ -442,7 +374,7 @@ public class Apple2e extends Computer { " Java Apple Computer Emulator", "", " Presented by BLuRry", - " http://goo.gl/SnzqG", + " https://goo.gl/SnzqG", "", "To insert a disk, please drag it over", "this window and drop on the desired", @@ -464,7 +396,7 @@ public class Apple2e extends Computer { int animAddr, animCycleNumber; byte animOldValue; final String animation = "+xX*+-"; - ScheduledFuture animationSchedule; + ScheduledFuture animationSchedule; Runnable doAnimation = () -> { if (animAddr == 0 || animCycleNumber >= animation.length()) { if (animAddr > 0) { @@ -488,10 +420,10 @@ public class Apple2e extends Computer { private void enableHints() { if (hints.isEmpty()) { - hints.add(getMemory().observe(RAMEvent.TYPE.EXECUTE, 0x0FB63, (e) -> { + hints.add(getMemory().observe("Helpful hints", RAMEvent.TYPE.EXECUTE, 0x0FB63, (e)->{ animationTimer.schedule(drawHints, 1, TimeUnit.SECONDS); - animationSchedule - = animationTimer.scheduleAtFixedRate(doAnimation, 1250, 100, TimeUnit.MILLISECONDS); + animationSchedule = + animationTimer.scheduleAtFixedRate(doAnimation, 1250, 100, TimeUnit.MILLISECONDS); })); // Latch to the PRODOS SYNTAX CHECK parser /* @@ -507,7 +439,7 @@ public class Apple2e extends Computer { if (c == 0x0d) break; in += c; } - + System.err.println("Intercepted command: "+in); } }); @@ -516,13 +448,12 @@ public class Apple2e extends Computer { } private void disableHints() { - hints.stream().forEach((hint) -> { - getMemory().removeListener(hint); - }); + hints.forEach((hint) -> getMemory().removeListener(hint)); + hints.clear(); } @Override public String getShortName() { return "computer"; } -} +} \ No newline at end of file diff --git a/src/main/java/jace/apple2e/MOS65C02.java b/src/main/java/jace/apple2e/MOS65C02.java index dde2707..6c8c1ed 100644 --- a/src/main/java/jace/apple2e/MOS65C02.java +++ b/src/main/java/jace/apple2e/MOS65C02.java @@ -1,32 +1,32 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.apple2e; -import jace.config.ConfigurableField; -import jace.core.CPU; -import jace.core.Computer; -import jace.core.RAM; -import jace.core.RAMEvent.TYPE; -import jace.state.Stateful; +import java.util.HashMap; +import java.util.function.Consumer; import java.util.logging.Level; import java.util.logging.Logger; +import jace.Emulator; +import jace.config.ConfigurableField; +import jace.core.CPU; +import jace.core.RAMEvent.TYPE; +import jace.state.Stateful; + /** * This is a full implementation of a MOS-65c02 processor, including the BBR, * BBS, RMB and SMB opcodes. It is possible that this will be later refactored @@ -40,8 +40,9 @@ public class MOS65C02 extends CPU { private static final Logger LOG = Logger.getLogger(MOS65C02.class.getName()); public boolean readAddressTriggersEvent = true; - static int RESET_VECTOR = 0x00FFFC; - static int INT_VECTOR = 0x00FFFE; + public static int RESET_VECTOR = 0x00FFFC; + public static int INT_VECTOR = 0x00FFFE; + public static int FASTBOOT = 0x00FAA9; @Stateful public int A = 0x0FF; @Stateful @@ -71,19 +72,11 @@ public class MOS65C02 extends CPU { @ConfigurableField(name = "Ext. opcode warnings", description = "If on, uses of 65c02 extended opcodes (or undocumented 6502 opcodes -- which will fail) will be logged to stdout for debugging purposes") public boolean warnAboutExtendedOpcodes = false; - private RAM getMemory() { - return computer.getMemory(); - } - - public MOS65C02(Computer computer) { - super(computer); + public MOS65C02() { + initOpcodes(); clearState(); } - @Override - public void reconfigure() { - } - @Override public void clearState() { A = 0x0ff; @@ -100,7 +93,7 @@ public class MOS65C02 extends CPU { STACK = 0xff; setWaitCycles(0); } - + public enum OPCODE { ADC_IMM(0x0069, COMMAND.ADC, MODE.IMMEDIATE, 2), ADC_ZP(0x0065, COMMAND.ADC, MODE.ZEROPAGE, 3), @@ -144,15 +137,15 @@ public class MOS65C02 extends CPU { BBS6(0x0ef, COMMAND.BBS6, MODE.ZP_REL, 5, true), BBS7(0x0ff, COMMAND.BBS7, MODE.ZP_REL, 5, true), BEQ_REL0(0x00F0, COMMAND.BEQ, MODE.RELATIVE, 2), - BIT_IMM(0x0089, COMMAND.BIT, MODE.IMMEDIATE, 3, true), + BIT_IMM(0x0089, COMMAND.BIT, MODE.IMMEDIATE, 2, true), BIT_ZP(0x0024, COMMAND.BIT, MODE.ZEROPAGE, 3), - BIT_ZP_X(0x0034, COMMAND.BIT, MODE.ZEROPAGE_X, 3, true), + BIT_ZP_X(0x0034, COMMAND.BIT, MODE.ZEROPAGE_X, 4, true), BIT_AB(0x002C, COMMAND.BIT, MODE.ABSOLUTE, 4), BIT_AB_X(0x003C, COMMAND.BIT, MODE.ABSOLUTE_X, 4, true), BMI_REL(0x0030, COMMAND.BMI, MODE.RELATIVE, 2), BNE_REL(0x00D0, COMMAND.BNE, MODE.RELATIVE, 2), BPL_REL(0x0010, COMMAND.BPL, MODE.RELATIVE, 2), - BRA_REL(0x0080, COMMAND.BRA, MODE.RELATIVE, 2, true), + BRA_REL(0x0080, COMMAND.BRA, MODE.RELATIVE, 3, true), // BRK(0x0000, COMMAND.BRK, MODE.IMPLIED, 7), // Do this so that BRK is treated as a two-byte instruction BRK(0x0000, COMMAND.BRK, MODE.IMMEDIATE, 7), @@ -317,23 +310,23 @@ public class MOS65C02 extends CPU { TXS(0x009A, COMMAND.TXS, MODE.IMPLIED, 2), TYA(0x0098, COMMAND.TYA, MODE.IMPLIED, 2), WAI(0x00CB, COMMAND.WAI, MODE.IMPLIED, 3, true); - private int code; - private boolean isExtendedOpcode; + private final int code; + private final boolean isExtendedOpcode; public int getCode() { return code; } - private int waitCycles; + private final int waitCycles; public int getWaitCycles() { return waitCycles; } - private COMMAND command; + private final COMMAND command; public COMMAND getCommand() { return command; } - private MODE addressingMode; + private final MODE addressingMode; public MODE getMode() { return addressingMode; @@ -351,15 +344,15 @@ public class MOS65C02 extends CPU { command.getProcessor().processCommand(address, value, addressingMode, cpu); } - private OPCODE(int val, COMMAND c, MODE m, int wait) { + OPCODE(int val, COMMAND c, MODE m, int wait) { this(val, c, m, wait, m.fetchValue, false); } - private OPCODE(int val, COMMAND c, MODE m, int wait, boolean extended) { + OPCODE(int val, COMMAND c, MODE m, int wait, boolean extended) { this(val, c, m, wait, m.fetchValue, extended); } - private OPCODE(int val, COMMAND c, MODE m, int wait, boolean fetch, boolean extended) { + OPCODE(int val, COMMAND c, MODE m, int wait, boolean fetch, boolean extended) { code = val; waitCycles = wait - 1; command = c; @@ -369,9 +362,9 @@ public class MOS65C02 extends CPU { } } - public static interface AddressCalculator { + public interface AddressCalculator { - abstract int calculateAddress(MOS65C02 cpu); + int calculateAddress(MOS65C02 cpu); default int getValue(boolean generateEvent, MOS65C02 cpu) { int address = calculateAddress(cpu); @@ -414,26 +407,23 @@ public class MOS65C02 extends CPU { int address = 0x00FF & cpu.getMemory().read(cpu.getProgramCounter() + 1, TYPE.READ_OPERAND, cpu.readAddressTriggersEvent, false); address = cpu.getMemory().readWord(address, TYPE.READ_DATA, true, false); int address2 = address + cpu.Y; - if ((address & 0x00ff00) != (address2 & 0x00ff00)) { - cpu.addWaitCycles(1); - } + cpu.setPageBoundaryPenalty((address & 0x00ff00) != (address2 & 0x00ff00)); + cpu.setPageBoundaryApplied(true); return address2; }), ABSOLUTE(3, "$~2~1", (cpu) -> cpu.getMemory().readWord(cpu.getProgramCounter() + 1, TYPE.READ_OPERAND, cpu.readAddressTriggersEvent, false)), ABSOLUTE_X(3, "$~2~1,X", (cpu) -> { int address2 = cpu.getMemory().readWord(cpu.getProgramCounter() + 1, TYPE.READ_OPERAND, cpu.readAddressTriggersEvent, false); int address = 0x0FFFF & (address2 + cpu.X); - if ((address & 0x00FF00) != (address2 & 0x00FF00)) { - cpu.addWaitCycles(1); - } + cpu.setPageBoundaryPenalty((address & 0x00ff00) != (address2 & 0x00ff00)); + cpu.setPageBoundaryApplied(true); return address; }), ABSOLUTE_Y(3, "$~2~1,Y", (cpu) -> { int address2 = cpu.getMemory().readWord(cpu.getProgramCounter() + 1, TYPE.READ_OPERAND, cpu.readAddressTriggersEvent, false); int address = 0x0FFFF & (address2 + cpu.Y); - if ((address & 0x00FF00) != (address2 & 0x00FF00)) { - cpu.addWaitCycles(1); - } + cpu.setPageBoundaryPenalty((address & 0x00ff00) != (address2 & 0x00ff00)); + cpu.setPageBoundaryApplied(true); return address; }), ZP_REL(3, "$~1,$R", new AddressCalculator() { @@ -444,6 +434,7 @@ public class MOS65C02 extends CPU { int address = pc + 3 + cpu.getMemory().read(pc + 2, TYPE.READ_OPERAND, cpu.readAddressTriggersEvent, false); // The wait cycles are not added unless the branch actually happens! cpu.setPageBoundaryPenalty((address & 0x00ff00) != ((pc+3) & 0x00ff00)); + cpu.setPageBoundaryApplied(true); return address; } @@ -454,7 +445,7 @@ public class MOS65C02 extends CPU { return cpu.getMemory().read(address, TYPE.READ_DATA, true, false); } }); - private int size; + private final int size; public int getSize() { return this.size; @@ -464,27 +455,20 @@ public class MOS65C02 extends CPU { // public String getFormat() { // return this.format; // } - private AddressCalculator calculator; + private final AddressCalculator calculator; - public int calcAddress(MOS65C02 cpu) { - return calculator.calculateAddress(cpu); - } - private boolean indirect; - - public boolean isIndirect() { - return indirect; - } String f1; String f2; boolean twoByte = false; boolean relative = false; boolean implied = true; - boolean fetchValue = true; + boolean fetchValue; - private MODE(int size, String fmt, AddressCalculator calc) { + MODE(int size, String fmt, AddressCalculator calc) { this(size, fmt, calc, true); } - private MODE(int size, String fmt, AddressCalculator calc, boolean fetch) { + + MODE(int size, String fmt, AddressCalculator calc, boolean fetch) { this.fetchValue = fetch; this.size = size; if (fmt.contains("~")) { @@ -503,11 +487,6 @@ public class MOS65C02 extends CPU { // this.format = fmt; this.calculator = calc; - this.indirect = toString().startsWith("INDIRECT"); - } - - public MOS65C02.AddressCalculator getCalculator() { - return calculator; } public String formatMode(int pc, MOS65C02 cpu) { @@ -528,9 +507,8 @@ public class MOS65C02 extends CPU { } } - public static interface CommandProcessor { - - public void processCommand(int address, int value, MODE addressMode, MOS65C02 cpu); + public interface CommandProcessor { + void processCommand(int address, int value, MODE addressMode, MOS65C02 cpu); } private static class BBRCommand implements CommandProcessor { @@ -562,7 +540,8 @@ public class MOS65C02 extends CPU { public void processCommand(int address, int value, MODE addressMode, MOS65C02 cpu) { if ((value & (1 << bit)) != 0) { cpu.setProgramCounter(address); - cpu.addWaitCycles(cpu.pageBoundaryPenalty ? 2 : 1); + cpu.setPageBoundaryApplied(true); + cpu.addWaitCycles(1); } } } @@ -604,36 +583,24 @@ public class MOS65C02 extends CPU { if (cpu.D) { // Decimal Mode w = (cpu.A & 0x0f) + (value & 0x0f) + cpu.C; - if (w >= 10) { - w = 0x010 | ((w + 6) & 0x0f); + if (w >= 0x0A) { + w = 0x10 | ((w + 6) & 0x0f); } - w += (cpu.A & 0x0f0) + (value & 0x00f0); - if (w >= 0x0A0) { + w += (cpu.A & 0xf0) + (value & 0xf0); + if (w >= 0xA0) { cpu.C = 1; - if (cpu.V && w >= 0x0180) { - cpu.V = false; - } - w += 0x060; + cpu.V &= w < 0x180; + w += 0x60; } else { cpu.C = 0; - if (cpu.V && w < 0x080) { - cpu.V = false; - } + cpu.V &= w >= 0x80; } + cpu.addWaitCycles(1); } else { // Binary Mode w = cpu.A + value + cpu.C; - if (w >= 0x0100) { - cpu.C = 1; - if (cpu.V && w >= 0x0180) { - cpu.V = false; - } - } else { - cpu.C = 0; - if (cpu.V && w < 0x080) { - cpu.V = false; - } - } + cpu.V = ((cpu.A ^ w) & (value ^ w) & 0x080) != 0; + cpu.C = (w >= 0x0100) ? 1 : 0; } cpu.A = w & 0x0ff; cpu.setNZ(cpu.A); @@ -675,19 +642,22 @@ public class MOS65C02 extends CPU { BCC((address, value, addressMode, cpu) -> { if (cpu.C == 0) { cpu.setProgramCounter(address); - cpu.addWaitCycles(cpu.pageBoundaryPenalty ? 2 : 1); + cpu.setPageBoundaryApplied(true); + cpu.addWaitCycles(1); } }), BCS((address, value, addressMode, cpu) -> { if (cpu.C != 0) { cpu.setProgramCounter(address); - cpu.addWaitCycles(cpu.pageBoundaryPenalty ? 2 : 1); + cpu.setPageBoundaryApplied(true); + cpu.addWaitCycles(1); } }), BEQ((address, value, addressMode, cpu) -> { if (cpu.Z) { cpu.setProgramCounter(address); - cpu.addWaitCycles(cpu.pageBoundaryPenalty ? 2 : 1); + cpu.setPageBoundaryApplied(true); + cpu.addWaitCycles(1); } }), BIT((address, value, addressMode, cpu) -> { @@ -702,24 +672,27 @@ public class MOS65C02 extends CPU { BMI((address, value, addressMode, cpu) -> { if (cpu.N) { cpu.setProgramCounter(address); - cpu.addWaitCycles(cpu.pageBoundaryPenalty ? 2 : 1); + cpu.setPageBoundaryApplied(true); + cpu.addWaitCycles(1); } }), BNE((address, value, addressMode, cpu) -> { if (!cpu.Z) { cpu.setProgramCounter(address); - cpu.addWaitCycles(cpu.pageBoundaryPenalty ? 2 : 1); + cpu.setPageBoundaryApplied(true); + cpu.addWaitCycles(1); } }), BPL((address, value, addressMode, cpu) -> { if (!cpu.N) { cpu.setProgramCounter(address); - cpu.addWaitCycles(cpu.pageBoundaryPenalty ? 2 : 1); + cpu.setPageBoundaryApplied(true); + cpu.addWaitCycles(1); } }), BRA((address, value, addressMode, cpu) -> { cpu.setProgramCounter(address); - cpu.addWaitCycles(cpu.pageBoundaryPenalty ? 1 : 0); + cpu.setPageBoundaryApplied(true); }), BRK((address, value, addressMode, cpu) -> { cpu.BRK(); @@ -727,13 +700,15 @@ public class MOS65C02 extends CPU { BVC((address, value, addressMode, cpu) -> { if (!cpu.V) { cpu.setProgramCounter(address); - cpu.addWaitCycles(cpu.pageBoundaryPenalty ? 2 : 1); + cpu.setPageBoundaryApplied(true); + cpu.addWaitCycles(1); } }), BVS((address, value, addressMode, cpu) -> { if (cpu.V) { cpu.setProgramCounter(address); - cpu.addWaitCycles(cpu.pageBoundaryPenalty ? 2 : 1); + cpu.setPageBoundaryApplied(true); + cpu.addWaitCycles(1); } }), CLC((address, value, addressMode, cpu) -> { @@ -769,6 +744,7 @@ public class MOS65C02 extends CPU { cpu.getMemory().write(address, (byte) value, true, false); cpu.getMemory().write(address, (byte) value, true, false); cpu.setNZ(value); + cpu.setPageBoundaryApplied(false); // AB,X already takes 7 cycles, no boundary penalties }), DEA((address, value, addressMode, cpu) -> { cpu.A = 0x0FF & (cpu.A - 1); @@ -792,6 +768,7 @@ public class MOS65C02 extends CPU { cpu.getMemory().write(address, (byte) value, true, false); cpu.getMemory().write(address, (byte) value, true, false); cpu.setNZ(value); + cpu.setPageBoundaryApplied(false); // AB,X already takes 7 cycles, no boundary penalties }), INA((address, value, addressMode, cpu) -> { cpu.A = 0x0FF & (cpu.A + 1); @@ -919,47 +896,32 @@ public class MOS65C02 extends CPU { cpu.setProgramCounter(cpu.popWord() + 1); }), SBC((address, value, addressMode, cpu) -> { - cpu.V = ((cpu.A ^ value) & 0x080) != 0; - int w; - if (cpu.D) { - int temp = 0x0f + (cpu.A & 0x0f) - (value & 0x0f) + cpu.C; - if (temp < 0x10) { - w = 0; - temp -= 6; - } else { - w = 0x10; - temp -= 0x10; - } - w += 0x00f0 + (cpu.A & 0x00f0) - (value & 0x00f0); - if (w < 0x100) { - cpu.C = 0; - if (cpu.V && w < 0x080) { - cpu.V = false; - } - w -= 0x60; - } else { - cpu.C = 1; - if (cpu.V && w >= 0x180) { - cpu.V = false; - } - } - w += temp; + if (!cpu.D) { + ADC.getProcessor().processCommand(address, 0x0ff & (~value), addressMode, cpu); } else { - w = 0x0ff + cpu.A - value + cpu.C; - if (w < 0x100) { + cpu.V = ((cpu.A ^ value) & 0x80) != 0; + int w = 0x0F + (cpu.A & 0x0F) - (value & 0x0F) + cpu.C; + int val = 0; + if (w < 0x10) { + w -= 0x06; + } else { + val = 0x10; + w -= 0x10; + } + val += 0xF0 + (cpu.A & 0xF0) - (value & 0xF0); + if (val < 0x100) { cpu.C = 0; - if (cpu.V && (w < 0x080)) { - cpu.V = false; - } + cpu.V &= val >= 0x80; + val -= 0x60; } else { cpu.C = 1; - if (cpu.V && (w >= 0x180)) { - cpu.V = false; - } + cpu.V &= val < 0x180; } + val += w; + cpu.A = val & 0xFF; + cpu.setNZ(cpu.A); + cpu.addWaitCycles(1); } - cpu.A = w & 0x0ff; - cpu.setNZ(cpu.A); }), SEC((address, value, addressMode, cpu) -> { cpu.C = 1; @@ -980,6 +942,7 @@ public class MOS65C02 extends CPU { SMB7(new SMBCommand(7)), STA(true, (address, value, addressMode, cpu) -> { cpu.getMemory().write(address, (byte) cpu.A, true, false); + cpu.setPageBoundaryApplied(false); // AB,X has no noted penalty for this opcode }), STP((address, value, addressMode, cpu) -> { cpu.suspend(); @@ -992,6 +955,7 @@ public class MOS65C02 extends CPU { }), STZ(true, (address, value, addressMode, cpu) -> { cpu.getMemory().write(address, (byte) 0, true, false); + cpu.setPageBoundaryApplied(false); // AB,X has no noted penalty for this opcode }), TAX((address, value, addressMode, cpu) -> { cpu.X = cpu.A; @@ -1027,30 +991,29 @@ public class MOS65C02 extends CPU { WAI((address, value, addressMode, cpu) -> { cpu.waitForInterrupt(); }); - private CommandProcessor processor; + private final CommandProcessor processor; public CommandProcessor getProcessor() { return processor; } - private boolean storeOnly; + private final boolean storeOnly; public boolean isStoreOnly() { return storeOnly; } - private COMMAND(CommandProcessor processor) { + COMMAND(CommandProcessor processor) { this(false, processor); } - private COMMAND(boolean storeOnly, CommandProcessor processor) { + COMMAND(boolean storeOnly, CommandProcessor processor) { this.storeOnly = storeOnly; this.processor = processor; } } - static private OPCODE[] opcodes; + private final OPCODE[] opcodes = new OPCODE[256]; - static { - opcodes = new OPCODE[256]; + private void initOpcodes() { for (OPCODE o : OPCODE.values()) { opcodes[o.getCode()] = o; } @@ -1065,7 +1028,7 @@ public class MOS65C02 extends CPU { String traceEntry = null; if (isSingleTraceEnabled() || isTraceEnabled() || isLogEnabled() || warnAboutExtendedOpcodes) { - traceEntry = getState().toUpperCase() + " " + Integer.toString(pc, 16) + " : " + disassemble(); + traceEntry = String.format("%s %X : %s; %s", getState(), pc, disassemble(), getMemory().getState()); captureSingleTrace(traceEntry); if (isTraceEnabled()) { LOG.log(Level.INFO, traceEntry); @@ -1084,38 +1047,38 @@ public class MOS65C02 extends CPU { log(">>EXTENDED OPCODE DETECTED " + Integer.toHexString(opcode.code) + "<<"); log(traceEntry); } - } + } if (opcode == null) { // handle bad opcode as a NOP int wait = 0; - int bytes = 2; + int bytes; int n = op & 0x0f; switch (n) { - case 2: + case 2 -> { + bytes = 2; wait = 2; - break; - case 3: - case 7: - case 0x0b: - case 0x0f: + } + case 3, 7, 0x0b, 0x0f -> { wait = 1; bytes = 1; - break; - case 4: + } + case 4 -> { bytes = 2; if ((op & 0x0f0) == 0x040) { wait = 3; } else { wait = 4; - } break; - case 0x0c: + } + } + case 0x0c -> { bytes = 3; if ((op & 0x0f0) == 0x050) { wait = 8; } else { wait = 4; - } break; - default: + } + } + default -> bytes = 2; } incrementProgramCounter(bytes); addWaitCycles(wait); @@ -1131,6 +1094,11 @@ public class MOS65C02 extends CPU { incrementProgramCounter(opcode.getMode().getSize()); opcode.execute(this); addWaitCycles(opcode.getWaitCycles()); + if (isPageBoundaryPenalty()) { + addWaitCycles(1); + } + setPageBoundaryPenalty(false); + setPageBoundaryApplied(false); } } @@ -1155,8 +1123,7 @@ public class MOS65C02 extends CPU { public byte pop() { STACK = (STACK + 1) & 0x0FF; - byte val = getMemory().read(0x0100 + STACK, TYPE.READ_DATA, true, false); - return val; + return getMemory().read(0x0100 + STACK, TYPE.READ_DATA, true, false); } private byte getStatus() { @@ -1192,8 +1159,8 @@ public class MOS65C02 extends CPU { @Override public void JSR(int address) { - pushPC(); - setProgramCounter(address); + pushPC(); + setProgramCounter(address); } public void BRK() { @@ -1231,10 +1198,6 @@ public class MOS65C02 extends CPU { } } - public int getSTACK() { - return STACK; - } - // Cold/Warm boot procedure @Override public void reset() { @@ -1249,7 +1212,8 @@ public class MOS65C02 extends CPU { // N = true; // V = true; // Z = true; - int newPC = getMemory().readWord(RESET_VECTOR, TYPE.READ_DATA, true, false); + int resetVector = getMemory().readWord(RESET_VECTOR, TYPE.READ_DATA, true, false); + int newPC = resetVector; LOG.log(Level.WARNING, "Reset called, setting PC to ({0}) = {1}", new Object[]{Integer.toString(RESET_VECTOR, 16), Integer.toString(newPC, 16)}); setProgramCounter(newPC); } @@ -1282,27 +1246,23 @@ public class MOS65C02 extends CPU { } public String getState() { - StringBuilder out = new StringBuilder(); - out.append(byte2(A)).append(" "); - out.append(byte2(X)).append(" "); - out.append(byte2(Y)).append(" "); - // out += "PC:"+wordString(getProgramCounter())+" "; - out.append("01").append(byte2(STACK)).append(" "); - out.append(getFlags()); - return out.toString(); + return byte2(A) + + " " + byte2(X) + + " " + byte2(Y) + + " 01" + byte2(STACK) + + getFlags(); } public String getFlags() { - StringBuilder out = new StringBuilder(); - out.append(N ? "N" : "."); - out.append(V ? "V" : "."); - out.append("R"); - out.append(B ? "B" : "."); - out.append(D ? "D" : "."); - out.append(I ? "I" : "."); - out.append(Z ? "Z" : "."); - out.append((C != 0) ? "C" : "."); - return out.toString(); + StringBuilder sb = new StringBuilder(7); + sb.append(N ? "N" : "."); + sb.append(V ? "V" : "."); + sb.append(B ? "B" : "."); + sb.append(D ? "D" : "."); + sb.append(I ? "I" : "."); + sb.append(Z ? "Z" : "."); + sb.append(C != 0 ? "C" : "."); + return sb.toString(); } public String disassemble() { @@ -1324,24 +1284,27 @@ public class MOS65C02 extends CPU { ((o.getMode().getSize() > 2) ? byte2(b2) : " " ) + " "; */ - StringBuilder out = new StringBuilder(o.getCommand().toString()); - out.append(" ").append(format); - if (o.getMode().isIndirect()) { - out.append(" >> $").append(Integer.toHexString(o.getMode().getCalculator().calculateAddress(this))); - } - return out.toString(); + return String.format("%s %s", o.getCommand().toString(), format); } private boolean pageBoundaryPenalty = false; - + private boolean applyPageBoundaryPenalty = false; private void setPageBoundaryPenalty(boolean b) { pageBoundaryPenalty = b; } + public void setPageBoundaryApplied(boolean e) { + applyPageBoundaryPenalty = e; + } + boolean isPageBoundaryPenalty() { + return applyPageBoundaryPenalty && pageBoundaryPenalty; + } @Override public void pushPC() { pushWord(getProgramCounter() - 1); } + // FC is typically a NOP instruction, but let's pretend it is our own opcode that we can use for special commands + HashMap> extendedCommandHandlers = new HashMap<>(); /** * Special commands -- these are usually treated as NOP but can be reused for emulator controls * !byte $fc, $65, $00 ; Turn off tracing @@ -1350,40 +1313,59 @@ public class MOS65C02 extends CPU { * !byte $fc, $5b, NN ; print number NN to stdout with newline * !byte $fc, $5c, NN ; print character NN to stdout * @param param1 - * @param param2 + * @param param2 */ public void performExtendedCommand(byte param1, byte param2) { // LOG.log(Level.INFO, "Extended command {0},{1}", new Object[]{Integer.toHexString(param1), Integer.toHexString(param2)}); switch (param1 & 0x0ff) { case 0x50: - // System out + // System out # System.out.print(param2 & 0x0ff); break; case 0x5b: - // System out (with line break) + // System out # (with line break) System.out.println(param2 & 0x0ff); break; case 0x5c: - // System out (with line break) - System.out.println((char) (param2 & 0x0ff)); + // System out char + System.out.print((char) (param2 & 0x0ff)); break; case 0x65: // CPU functions switch (param2 & 0x0ff) { - case 0x00: - // Turn off tracing + case 0x00 -> // Turn off tracing trace = false; - break; - case 0x01: - // Turn on tracing + case 0x01 -> // Turn on tracing trace = true; - break; } break; + case 0x64: // Memory functions getMemory().performExtendedCommand(param2 & 0x0ff); + break; default: + Consumer handler = extendedCommandHandlers.get((int) param1); + if (handler != null) { + handler.accept(param2); + } } } + + public void registerExtendedCommandHandler(int param1, Consumer handler) { + extendedCommandHandlers.put(param1, handler); + } + + public void unregisterExtendedCommandHandler(int param1) { + extendedCommandHandlers.remove(param1); + } + + public void unregisterExtendedCommandHandler(Consumer handler) { + extendedCommandHandlers.values().remove(handler); + } + + @Override + public void reconfigure() { + // Nothing to do here + } } diff --git a/src/main/java/jace/apple2e/RAM128k.java b/src/main/java/jace/apple2e/RAM128k.java index 0ae96b1..9fd00e7 100644 --- a/src/main/java/jace/apple2e/RAM128k.java +++ b/src/main/java/jace/apple2e/RAM128k.java @@ -1,36 +1,40 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.apple2e; -import jace.core.CPU; -import jace.core.Card; -import jace.core.Computer; -import jace.core.PagedMemory; -import jace.core.RAM; -import jace.state.Stateful; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.Semaphore; +import java.util.function.Supplier; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import jace.Emulator; +import jace.config.DeviceEnum; +import jace.core.CPU; +import jace.core.Card; +import jace.core.PagedMemory; +import jace.core.RAM; +import jace.hardware.CardExt80Col; +import jace.hardware.CardRamworks; +import jace.state.Stateful; /** * Implementation of a 128k memory space and the MMU found in an Apple //e. The @@ -40,9 +44,42 @@ import java.util.logging.Logger; */ @Stateful abstract public class RAM128k extends RAM { - Logger LOG = Logger.getLogger(RAM128k.class.getName()); + // Memory card implementations + public static enum RamCards implements DeviceEnum { + CardExt80Col("80-Column Card (128k)", CardExt80Col.class, CardExt80Col::new), + CardRamworks("Ramworks (4mb)", CardRamworks.class, CardRamworks::new); + + Supplier factory; + String name; + Class clazz; + + RamCards(String name, Class clazz, Supplier factory) { + this.factory = factory; + this.name = name; + this.clazz = clazz; + } + + @Override + public RAM128k create() { + return factory.get(); + } + + @Override + public String getName() { + return name; + } + + @Override + public boolean isInstance(RAM128k card) { + return card != null && clazz.equals(card.getClass()); + } + } + + static final Logger LOG = Logger.getLogger(RAM128k.class.getName()); Map banks; + Map memoryConfigurations = new HashMap<>(); + String state = "???"; private Map getBanks() { if (banks == null) { @@ -76,36 +113,38 @@ abstract public class RAM128k extends RAM { return banks; } + @Override + public String getState() { + return state; + } + @Override public void performExtendedCommand(int param) { - switch (param) { - case 0xda: - // 64 da : Dump all memory mappings - System.out.println("Active banks"); - for (int i = 0; i < 256; i++) { - byte[] read = activeRead.get(i); - byte[] write = activeWrite.get(i); - String readBank = getBanks().keySet().stream().filter(bank->{ - PagedMemory mem = getBanks().get(bank); - for (byte[] page : mem.getMemory()) { - if (page == read) { - return true; - } + if (param == 0xda) {// 64 da : Dump all memory mappings + System.out.println("Active banks"); + for (int i = 0; i < 256; i++) { + byte[] read = this.activeRead.get(i); + byte[] write = this.activeWrite.get(i); + String readBank = getBanks().keySet().stream().filter(bank -> { + PagedMemory mem = getBanks().get(bank); + for (byte[] page : mem.getMemory()) { + if (page == read) { + return true; } - return false; - }).findFirst().orElse("unknown"); - String writeBank = getBanks().keySet().stream().filter(bank->{ - PagedMemory mem = getBanks().get(bank); - for (byte[] page : mem.getMemory()) { - if (page == write) { - return true; - } + } + return false; + }).findFirst().orElse("unknown"); + String writeBank = getBanks().keySet().stream().filter(bank -> { + PagedMemory mem = getBanks().get(bank); + for (byte[] page : mem.getMemory()) { + if (page == write) { + return true; } - return false; - }).findFirst().orElse("unknown"); - LOG.log(Level.INFO,"Bank {0}\t{1}\t{2}", new Object[]{Integer.toHexString(i), readBank, writeBank}); - } - default: + } + return false; + }).findFirst().orElse("unknown"); + LOG.log(Level.INFO, "Bank {0}\t{1}\t{2}", new Object[]{Integer.toHexString(i), readBank, writeBank}); + } } } @@ -119,22 +158,17 @@ abstract public class RAM128k extends RAM { public PagedMemory rom; public PagedMemory blank; - public RAM128k(Computer computer) { - super(computer); - mainMemory = new PagedMemory(0xc000, PagedMemory.Type.RAM, computer); - rom = new PagedMemory(0x3000, PagedMemory.Type.FIRMWARE_MAIN, computer); - cPageRom = new PagedMemory(0x1000, PagedMemory.Type.SLOW_ROM, computer); - languageCard = new PagedMemory(0x3000, PagedMemory.Type.LANGUAGE_CARD, computer); - languageCard2 = new PagedMemory(0x1000, PagedMemory.Type.LANGUAGE_CARD, computer); - activeRead = new PagedMemory(0x10000, PagedMemory.Type.RAM, computer); - activeWrite = new PagedMemory(0x10000, PagedMemory.Type.RAM, computer); - blank = new PagedMemory(0x100, PagedMemory.Type.RAM, computer); - - // Format memory with FF FF 00 00 pattern - for (int i = 0; i < 0x0100; i++) { - blank.get(0)[i] = (byte) 0x0FF; - } - initMemoryPattern(mainMemory); + public RAM128k() { + super(); + mainMemory = new PagedMemory(0xc000, PagedMemory.Type.RAM); + rom = new PagedMemory(0x3000, PagedMemory.Type.FIRMWARE_MAIN); + cPageRom = new PagedMemory(0x1000, PagedMemory.Type.SLOW_ROM); + languageCard = new PagedMemory(0x3000, PagedMemory.Type.LANGUAGE_CARD); + languageCard2 = new PagedMemory(0x1000, PagedMemory.Type.LANGUAGE_CARD); + activeRead = new PagedMemory(0x10000, PagedMemory.Type.RAM); + activeWrite = new PagedMemory(0x10000, PagedMemory.Type.RAM); + blank = new PagedMemory(0x100, PagedMemory.Type.RAM); + zeroAllRam(); } public final void initMemoryPattern(PagedMemory mem) { @@ -147,133 +181,275 @@ abstract public class RAM128k extends RAM { } } - private final Semaphore configurationSemaphone = new Semaphore(1, true); + public final void zeroAllRam() { + for (int i = 0; i < 0x0100; i++) { + blank.get(0)[i] = (byte) 0x0FF; + } + initMemoryPattern(mainMemory); + if (getAuxMemory() != null) { + initMemoryPattern(getAuxMemory()); + } + } + + public String getReadConfiguration() { + String rstate = ""; + if (SoftSwitches.RAMRD.getState()) { + rstate += "Ra"; + } else { + rstate += "R0"; + } + String LCR = "L0R"; + if (SoftSwitches.LCRAM.isOn()) { + if (SoftSwitches.AUXZP.isOff()) { + LCR = "L1R"; + if (SoftSwitches.LCBANK1.isOff()) { + LCR = "L2R"; + } + } else { + LCR = "L1aR"; + if (SoftSwitches.LCBANK1.isOff()) { + LCR = "L2aR"; + } + } + } + rstate += LCR; + if (SoftSwitches.CXROM.getState()) { + rstate += "CXROM"; + } else { + rstate += "!CX"; + if (SoftSwitches.SLOTC3ROM.isOff()) { + rstate += "C3"; + } + if (SoftSwitches.INTC8ROM.isOn()) { + rstate += "C8"; + } else { + rstate += "C8"+getActiveSlot(); + } + } + + return rstate; + } + + public String getWriteConfiguration() { + String wstate = ""; + if (SoftSwitches.RAMWRT.getState()) { + wstate += "Wa"; + } else { + wstate += "W0"; + } + String LCW = "L0W"; + if (SoftSwitches.LCWRITE.isOn()) { + if (SoftSwitches.AUXZP.isOff()) { + LCW = "L1W"; + if (SoftSwitches.LCBANK1.isOff()) { + LCW = "L2W"; + } + } else { + LCW = "L1aW"; + if (SoftSwitches.LCBANK1.isOff()) { + LCW = "L2aW"; + } + } + } + wstate += LCW; + return wstate; + } + + public String getAuxZPConfiguration() { + String astate = ""; + if (SoftSwitches._80STORE.isOn()) { + astate += "80S"; + if (SoftSwitches.PAGE2.isOn()) { + astate += "2"; + } + if (SoftSwitches.HIRES.isOn()) { + astate += "H"; + } + } + + // Handle zero-page bankswitching + if (SoftSwitches.AUXZP.getState()) { + astate += "Za"; + } else { + astate += "Z0"; + } + return astate; + } + + public PagedMemory buildReadConfiguration() { + PagedMemory read = new PagedMemory(0x10000, PagedMemory.Type.RAM); + // First off, set up read/write for main memory (might get changed later on) + read.fillBanks(SoftSwitches.RAMRD.getState() ? getAuxMemory() : mainMemory); + + // Handle language card softswitches + read.fillBanks(rom); + if (SoftSwitches.LCRAM.isOn()) { + if (SoftSwitches.AUXZP.isOff()) { + read.fillBanks(languageCard); + if (SoftSwitches.LCBANK1.isOff()) { + read.fillBanks(languageCard2); + } + } else { + read.fillBanks(getAuxLanguageCard()); + if (SoftSwitches.LCBANK1.isOff()) { + read.fillBanks(getAuxLanguageCard2()); + } + } + } + + // Handle 80STORE logic for bankswitching video ram + if (SoftSwitches._80STORE.isOn()) { + read.setBanks(0x04, 0x04, 0x04, + SoftSwitches.PAGE2.isOn() ? getAuxMemory() : mainMemory); + if (SoftSwitches.HIRES.isOn()) { + read.setBanks(0x020, 0x020, 0x020, + SoftSwitches.PAGE2.isOn() ? getAuxMemory() : mainMemory); + } + } + + // Handle zero-page bankswitching + if (SoftSwitches.AUXZP.getState()) { + // Aux pages 0 and 1 + read.setBanks(0, 2, 0, getAuxMemory()); + } else { + // Main pages 0 and 1 + read.setBanks(0, 2, 0, mainMemory); + } + + /* + INTCXROM SLOTC3ROM C1,C2,C4-CF C3 + 0 0 slot rom + 0 1 slot slot + 1 - rom rom + */ + if (SoftSwitches.CXROM.getState()) { + // Enable C1-CF to point to rom + read.setBanks(0, 0x0F, 0x0C1, cPageRom); + } else { + // Enable C1-CF to point to slots + for (int slot = 1; slot <= 7; slot++) { + PagedMemory page = getCard(slot).map(Card::getCxRom).orElse(blank); + read.setBanks(0, 1, 0x0c0 + slot, page); + } + if (getActiveSlot() == 0) { + for (int i = 0x0C8; i < 0x0D0; i++) { + read.set(i, blank.get(0)); + } + } else { + getCard(getActiveSlot()).ifPresent(c -> read.setBanks(0, 8, 0x0c8, c.getC8Rom())); + } + if (SoftSwitches.SLOTC3ROM.isOff()) { + // Enable C3 to point to internal ROM + read.setBanks(2, 1, 0x0C3, cPageRom); + } + if (SoftSwitches.INTC8ROM.isOn()) { + // Enable C8-CF to point to internal ROM + read.setBanks(7, 8, 0x0C8, cPageRom); + } + } + // All ROM reads not intecepted will return 0xFF! + read.set(0x0c0, blank.get(0)); + return read; + } + + public PagedMemory buildWriteConfiguration() { + PagedMemory write = new PagedMemory(0x10000, PagedMemory.Type.RAM); + // First off, set up read/write for main memory (might get changed later on) + write.fillBanks(SoftSwitches.RAMWRT.getState() ? getAuxMemory() : mainMemory); + + // Handle language card softswitches + for (int i = 0x0c0; i < 0x0d0; i++) { + write.set(i, null); + } + if (SoftSwitches.LCWRITE.isOn()) { + if (SoftSwitches.AUXZP.isOff()) { + write.fillBanks(languageCard); + if (SoftSwitches.LCBANK1.isOff()) { + write.fillBanks(languageCard2); + } + } else { + write.fillBanks(getAuxLanguageCard()); + if (SoftSwitches.LCBANK1.isOff()) { + write.fillBanks(getAuxLanguageCard2()); + } + } + } else { + // Make 0xd000 - 0xffff non-writable! + for (int i = 0x0d0; i < 0x0100; i++) { + write.set(i, null); + } + } + + // Handle 80STORE logic for bankswitching video ram + if (SoftSwitches._80STORE.isOn()) { + write.setBanks(0x04, 0x04, 0x04, + SoftSwitches.PAGE2.isOn() ? getAuxMemory() : mainMemory); + if (SoftSwitches.HIRES.isOn()) { + write.setBanks(0x020, 0x020, 0x020, + SoftSwitches.PAGE2.isOn() ? getAuxMemory() : mainMemory); + } + } + + // Handle zero-page bankswitching + if (SoftSwitches.AUXZP.getState()) { + // Aux pages 0 and 1 + write.setBanks(0, 2, 0, getAuxMemory()); + } else { + // Main pages 0 and 1 + write.setBanks(0, 2, 0, mainMemory); + } + + return write; + } /** * */ @Override public void configureActiveMemory() { - try { - log("MMU Switches"); - configurationSemaphone.acquire(); - // First off, set up read/write for main memory (might get changed later on) - activeRead.fillBanks(SoftSwitches.RAMRD.getState() ? getAuxMemory() : mainMemory); - activeWrite.fillBanks(SoftSwitches.RAMWRT.getState() ? getAuxMemory() : mainMemory); + String auxZpConfiguration = getAuxZPConfiguration(); + String readConfiguration = getReadConfiguration() + auxZpConfiguration; + String writeConfiguration = getWriteConfiguration() + auxZpConfiguration; + String newState = readConfiguration + ";" + writeConfiguration; + if (newState.equals(state)) { + return; + } + state = newState; - // Handle language card softswitches - activeRead.fillBanks(rom); - //activeRead.fillBanks(cPageRom); - for (int i = 0x0c0; i < 0x0d0; i++) { - activeWrite.set(i, null); - } - if (SoftSwitches.LCRAM.isOn()) { - if (SoftSwitches.AUXZP.isOff()) { - activeRead.fillBanks(languageCard); - if (SoftSwitches.LCBANK1.isOff()) { - activeRead.fillBanks(languageCard2); - } - } else { - activeRead.fillBanks(getAuxLanguageCard()); - if (SoftSwitches.LCBANK1.isOff()) { - activeRead.fillBanks(getAuxLanguageCard2()); - } - } - } + log("MMU Switches"); - if (SoftSwitches.LCWRITE.isOn()) { - if (SoftSwitches.AUXZP.isOff()) { - activeWrite.fillBanks(languageCard); - if (SoftSwitches.LCBANK1.isOff()) { - activeWrite.fillBanks(languageCard2); - } - } else { - activeWrite.fillBanks(getAuxLanguageCard()); - if (SoftSwitches.LCBANK1.isOff()) { - activeWrite.fillBanks(getAuxLanguageCard2()); - } - } - } else { - // Make 0xd000 - 0xffff non-writable! - for (int i = 0x0d0; i < 0x0100; i++) { - activeWrite.set(i, null); - } - } + if (memoryConfigurations.containsKey(readConfiguration)) { + activeRead = memoryConfigurations.get(readConfiguration); + } else { + activeRead = buildReadConfiguration(); + memoryConfigurations.put(readConfiguration, activeRead); + } - // Handle 80STORE logic for bankswitching video ram - if (SoftSwitches._80STORE.isOn()) { - activeRead.setBanks(0x04, 0x04, 0x04, - SoftSwitches.PAGE2.isOn() ? getAuxMemory() : mainMemory); - activeWrite.setBanks(0x04, 0x04, 0x04, - SoftSwitches.PAGE2.isOn() ? getAuxMemory() : mainMemory); - if (SoftSwitches.HIRES.isOn()) { - activeRead.setBanks(0x020, 0x020, 0x020, - SoftSwitches.PAGE2.isOn() ? getAuxMemory() : mainMemory); - activeWrite.setBanks(0x020, 0x020, 0x020, - SoftSwitches.PAGE2.isOn() ? getAuxMemory() : mainMemory); - } - } - - // Handle zero-page bankswitching - if (SoftSwitches.AUXZP.getState()) { - // Aux pages 0 and 1 - activeRead.setBanks(0, 2, 0, getAuxMemory()); - activeWrite.setBanks(0, 2, 0, getAuxMemory()); - } else { - // Main pages 0 and 1 - activeRead.setBanks(0, 2, 0, mainMemory); - activeWrite.setBanks(0, 2, 0, mainMemory); - } - - /* - INTCXROM SLOTC3ROM C1,C2,C4-CF C3 - 0 0 slot rom - 0 1 slot slot - 1 - rom rom - */ - if (SoftSwitches.CXROM.getState()) { - // Enable C1-CF to point to rom - activeRead.setBanks(0, 0x0F, 0x0C1, cPageRom); - } else { - // Enable C1-CF to point to slots - for (int slot = 1; slot <= 7; slot++) { - PagedMemory page = getCard(slot).map(Card::getCxRom).orElse(blank); - activeRead.setBanks(0, 1, 0x0c0 + slot, page); - } - if (getActiveSlot() == 0) { - for (int i = 0x0C8; i < 0x0D0; i++) { - activeRead.set(i, blank.get(0)); - } - } else { - getCard(getActiveSlot()).ifPresent(c -> activeRead.setBanks(0, 8, 0x0c8, c.getC8Rom())); - } - if (SoftSwitches.SLOTC3ROM.isOff()) { - // Enable C3 to point to internal ROM - activeRead.setBanks(2, 1, 0x0C3, cPageRom); - } - if (SoftSwitches.INTC8ROM.isOn()) { - // Enable C8-CF to point to internal ROM - activeRead.setBanks(7, 8, 0x0C8, cPageRom); - } - } - // All ROM reads not intecepted will return 0xFF! (TODO: floating bus) - activeRead.set(0x0c0, blank.get(0)); - configurationSemaphone.release(); - } catch (InterruptedException ex) { - Logger.getLogger(RAM128k.class.getName()).log(Level.SEVERE, null, ex); + if (memoryConfigurations.containsKey(writeConfiguration)) { + activeWrite = memoryConfigurations.get(writeConfiguration); + } else { + activeWrite = buildWriteConfiguration(); + memoryConfigurations.put(writeConfiguration, activeWrite); } } public void log(String message) { - CPU cpu = computer.getCpu(); - if (cpu != null && cpu.isLogEnabled()) { - String stack = ""; - for (StackTraceElement e : Thread.currentThread().getStackTrace()) { - stack += e.getClassName() + "." + e.getMethodName() + "(" + e.getLineNumber() + ");"; + Emulator.withComputer(computer -> { + CPU cpu = computer.getCpu(); + if (cpu != null && cpu.isLogEnabled()) { + StringBuilder stack = new StringBuilder(); + for (StackTraceElement e : Thread.currentThread().getStackTrace()) { + stack.append(String.format("%s.%s(%s);",e.getClassName(), e.getMethodName(), e.getLineNumber())); + } + cpu.log(stack.toString()); + String switches = Stream.of( + SoftSwitches.RAMRD, SoftSwitches.RAMWRT, SoftSwitches.AUXZP, + SoftSwitches._80STORE, SoftSwitches.HIRES, SoftSwitches.PAGE2, + SoftSwitches.LCBANK1, SoftSwitches.LCRAM, SoftSwitches.LCWRITE + ).map(Object::toString).collect(Collectors.joining(";")); + cpu.log(String.join(";", message, switches)); } - cpu.log(stack); - cpu.log(message + ";" + SoftSwitches.RAMRD + ";" + SoftSwitches.RAMWRT + ";" + SoftSwitches.AUXZP + ";" + SoftSwitches._80STORE + ";" + SoftSwitches.HIRES + ";" + SoftSwitches.PAGE2 + ";" + SoftSwitches.LCBANK1 + ";" + SoftSwitches.LCRAM + ";" + SoftSwitches.LCWRITE); - } + }); } /** @@ -285,14 +461,21 @@ abstract public class RAM128k extends RAM { protected void loadRom(String path) throws IOException { // Remap writable ram to reflect rom file structure byte[] ignore = new byte[256]; - activeWrite.set(0, ignore); // Ignore first bank of data - for (int i = 1; i < 17; i++) { + byte[][] restore = new byte[18][]; + for (int i = 0; i < 17; i++) { + restore[i] = activeWrite.get(i); activeWrite.set(i, ignore); } activeWrite.setBanks(0, cPageRom.getMemory().length, 0x011, cPageRom); activeWrite.setBanks(0, rom.getMemory().length, 0x020, rom); //---------------------- - InputStream inputRom = getClass().getClassLoader().getResourceAsStream(path); + InputStream inputRom = getClass().getResourceAsStream(path); + if (inputRom == null) { + LOG.log(Level.SEVERE, "Rom not found: {0}", path); + return; + } + // Clear cached configurations as we might have outdated references now + memoryConfigurations.clear(); int read = 0; int addr = 0; byte[] in = new byte[1024]; @@ -303,6 +486,9 @@ abstract public class RAM128k extends RAM { } // System.out.println("Finished reading rom with " + inputRom.available() + " bytes left unread!"); //dump(); + for (int i = 0; i < 17; i++) { + activeWrite.set(i, restore[i]); + } configureActiveMemory(); } @@ -349,16 +535,27 @@ abstract public class RAM128k extends RAM { return rom; } - void copyFrom(RAM128k currentMemory) { + @Override + public void copyFrom(RAM otherMemory) { + RAM128k currentMemory = (RAM128k) otherMemory; + // This is really quick and dirty but should be sufficient to avoid most crashes... blank = currentMemory.blank; cPageRom = currentMemory.cPageRom; rom = currentMemory.rom; - listeners = currentMemory.listeners; mainMemory = currentMemory.mainMemory; languageCard = currentMemory.languageCard; languageCard2 = currentMemory.languageCard2; cards = currentMemory.cards; activeSlot = currentMemory.activeSlot; + // Clear cached configurations as we might have outdated references now + memoryConfigurations.clear(); + + super.copyFrom(otherMemory); + } + + @Override + public void resetState() { + memoryConfigurations.clear(); } } diff --git a/src/main/java/jace/apple2e/SoftSwitches.java b/src/main/java/jace/apple2e/SoftSwitches.java index 9b7cca1..f366348 100644 --- a/src/main/java/jace/apple2e/SoftSwitches.java +++ b/src/main/java/jace/apple2e/SoftSwitches.java @@ -1,23 +1,22 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.apple2e; +import jace.Emulator; import jace.apple2e.softswitch.IntC8SoftSwitch; import jace.apple2e.softswitch.KeyboardSoftSwitch; import jace.apple2e.softswitch.Memory2SoftSwitch; @@ -25,6 +24,7 @@ import jace.apple2e.softswitch.MemorySoftSwitch; import jace.apple2e.softswitch.VideoSoftSwitch; import jace.core.RAMEvent; import jace.core.SoftSwitch; +import jace.core.Video; /** * Softswitches reside in the addresses C000-C07f and control everything from @@ -62,7 +62,7 @@ public enum SoftSwitches { @Override public void stateChanged() { super.stateChanged(); - computer.getVideo().forceRefresh(); + Video.forceRefresh(); } }), TEXT(new VideoSoftSwitch("Text", 0x0c050, 0x0c051, 0x0c01a, RAMEvent.TYPE.ANY, true)), @@ -70,21 +70,11 @@ public enum SoftSwitches { PAGE2(new VideoSoftSwitch("Page2", 0x0c054, 0x0c055, 0x0c01c, RAMEvent.TYPE.ANY, false) { @Override public void stateChanged() { -// if (computer == null) { -// return; -// } -// if (computer == null && computer.getMemory() == null) { -// return; -// } -// if (computer == null && computer.getVideo() == null) { -// return; -// } - // PAGE2 is a hybrid switch; 80STORE ? memory : video if (_80STORE.isOn()) { - computer.getMemory().configureActiveMemory(); + Emulator.withMemory(m->m.configureActiveMemory()); } else { - computer.getVideo().configureVideoMode(); + Emulator.withVideo(v->v.configureVideoMode()); } } }), @@ -101,7 +91,7 @@ public enum SoftSwitches { @Override protected byte readSwitch() { setState(true); - return computer.getVideo().getFloatingBus(); + return Emulator.withComputer(c->c.getVideo().getFloatingBus(), (byte) 0); } @Override @@ -128,7 +118,7 @@ public enum SoftSwitches { KEYBOARD_STROBE_READ(new SoftSwitch("KeyStrobe_Read", 0x0c010, -1, -1, RAMEvent.TYPE.READ, false) { @Override protected byte readSwitch() { - return computer.getVideo().getFloatingBus(); + return Emulator.withComputer(c->c.getVideo().getFloatingBus(), (byte) 0); } @Override @@ -141,10 +131,7 @@ public enum SoftSwitches { FLOATING_BUS(new SoftSwitch("FloatingBus", null, null, new int[]{0x0C050, 0x0C051, 0x0C052, 0x0C053, 0x0C054}, RAMEvent.TYPE.READ, null) { @Override protected byte readSwitch() { - if (computer.getVideo() == null) { - return 0; - } - return computer.getVideo().getFloatingBus(); + return Emulator.withComputer(c->c.getVideo().getFloatingBus(), (byte) 0); } @Override @@ -167,7 +154,7 @@ public enum SoftSwitches { /** * Creates a new instance of SoftSwitches */ - private SoftSwitches(SoftSwitch softswitch) { + SoftSwitches(SoftSwitch softswitch) { this.softswitch = softswitch; } diff --git a/src/main/java/jace/apple2e/Speaker.java b/src/main/java/jace/apple2e/Speaker.java index b0103c5..3911711 100644 --- a/src/main/java/jace/apple2e/Speaker.java +++ b/src/main/java/jace/apple2e/Speaker.java @@ -1,43 +1,43 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.apple2e; -import jace.JaceApplication; -import jace.config.ConfigurableField; -import jace.core.Computer; -import jace.core.Device; -import jace.core.Motherboard; -import jace.core.RAMEvent; -import jace.core.RAMListener; -import jace.core.SoundMixer; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; -import java.util.Timer; -import java.util.TimerTask; +import java.util.concurrent.ExecutionException; import java.util.logging.Level; import java.util.logging.Logger; + +import jace.Emulator; +import jace.JaceApplication; +import jace.config.ConfigurableField; +import jace.config.InvokableAction; +import jace.core.Device; +import jace.core.RAMEvent; +import jace.core.RAMListener; +import jace.core.SoundMixer; +import jace.core.SoundMixer.SoundBuffer; +import jace.core.SoundMixer.SoundError; +import jace.core.TimedDevice; +import jace.core.Utility; import javafx.stage.FileChooser; -import javax.sound.sampled.LineUnavailableException; -import javax.sound.sampled.SourceDataLine; /** * Apple // Speaker Emulation Created on May 9, 2007, 9:55 PM @@ -48,7 +48,14 @@ public class Speaker extends Device { static boolean fileOutputActive = false; static OutputStream out; + + @ConfigurableField(category = "sound", name = "1mhz timing", description = "Force speaker output to 1mhz?") + public static boolean force1mhz = true; + @ConfigurableField(category = "sound", name = "Show sound", description = "Use black color value to show sound output") + public static boolean showSound = false; + + @InvokableAction(category = "sound", name = "Record sound", description="Toggles recording (saving) sound output to a file", defaultKeyMapping = "ctrl+shift+w") public static void toggleFileOutput() { if (fileOutputActive) { try { @@ -64,12 +71,6 @@ public class Speaker extends Device { if (f == null) { return; } -// if (f.exists()) { -// int i = JOptionPane.showConfirmDialog(null, "Overwrite existing file?"); -// if (i != JOptionPane.OK_OPTION && i != JOptionPane.YES_OPTION) { -// return; -// } -// } try { out = new FileOutputStream(f); fileOutputActive = true; @@ -78,6 +79,7 @@ public class Speaker extends Device { } } } + /** * Counter tracks the number of cycles between sampling */ @@ -91,57 +93,27 @@ public class Speaker extends Device { * (used to deactivate sound when not in use) */ private int idleCycles = 0; - /** - * Number of samples in buffer - */ - static int BUFFER_SIZE = (int) (SoundMixer.RATE * 0.4); - // Number of samples available in output stream before playback happens (avoid extra blocking) -// static int MIN_PLAYBACK_BUFFER = BUFFER_SIZE / 2; - static int MIN_PLAYBACK_BUFFER = 64; /** * Playback volume (should be < 1423) */ @ConfigurableField(name = "Speaker Volume", shortName = "vol", description = "Should be under 1400") - public static int VOLUME = 600; - /** - * Number of idle cycles until speaker playback is deactivated - */ - @ConfigurableField(name = "Idle cycles before sleep", shortName = "idle") - public static int MAX_IDLE_CYCLES = 2000000; - /** - * Java sound output - */ - private SourceDataLine sdl; + public static int VOLUME = 400; + private int currentVolume = 0; + private int fadeOffAmount = 1; /** * Manifestation of the apple speaker softswitch */ private boolean speakerBit = false; - // - /** - * Locking semaphore to prevent race conditions when working with buffer or - * related variables - */ - private final Object bufferLock = new Object(); - /** - * Double-buffer used for playing processed sound -- as one is played the - * other fills up. - */ - byte[] primaryBuffer; - byte[] secondaryBuffer; - int bufferPos = 0; - Timer playbackTimer; - private final double TICKS_PER_SAMPLE = ((double) Motherboard.SPEED) / SoundMixer.RATE; - private final double TICKS_PER_SAMPLE_FLOOR = Math.floor(TICKS_PER_SAMPLE); + private static double TICKS_PER_SAMPLE = ((double) TimedDevice.NTSC_1MHZ) / SoundMixer.RATE; private RAMListener listener = null; + private SoundBuffer buffer = null; /** - * Creates a new instance of Speaker - * - * @param computer + * Number of idle cycles until speaker playback is deactivated */ - public Speaker(Computer computer) { - super(computer); - } + @ConfigurableField(name = "Idle cycles before sleep", shortName = "idle") + // public static int MAX_IDLE_CYCLES = (int) (SoundMixer.BUFFER_SIZE * TICKS_PER_SAMPLE * 2); + public static int MAX_IDLE_CYCLES = (int) TimedDevice.NTSC_1MHZ / 4; /** * Suspend playback of sound @@ -151,11 +123,17 @@ public class Speaker extends Device { @Override public boolean suspend() { boolean result = super.suspend(); - playbackTimer.cancel(); speakerBit = false; - sdl = null; - computer.getMotherboard().cancelSpeedRequest(this); - computer.mixer.returnLine(this); + if (buffer != null) { + try { + buffer.shutdown(); + } catch (InterruptedException | ExecutionException | SoundError e) { + // Ignore + } finally { + buffer = null; + } + } + Emulator.withComputer(c->c.getMotherboard().cancelSpeedRequest(this)); return result; } @@ -165,48 +143,41 @@ public class Speaker extends Device { */ @Override public void resume() { - if (sdl != null && isRunning()) { + if (Utility.isHeadlessMode()) { return; } - try { - if (sdl == null || !sdl.isOpen()) { - sdl = computer.mixer.getLine(this); + if (buffer == null || !buffer.isAlive()) { + try { + buffer = SoundMixer.createBuffer(false); + } catch (InterruptedException | ExecutionException | SoundError e) { + e.printStackTrace(); + detach(); + return; } - sdl.start(); - setRun(true); + } + if (buffer != null) { counter = 0; idleCycles = 0; level = 0; - bufferPos = 0; - playbackTimer = new Timer(); - playbackTimer.scheduleAtFixedRate(new TimerTask() { - @Override - public void run() { - playCurrentBuffer(); - } - }, 10, 30); - } catch (LineUnavailableException ex) { - Logger.getLogger(getClass().getName()).log(Level.SEVERE, "ERROR: Could not output sound", ex); + } else { + Logger.getLogger(getClass().getName()).severe("Unable to get audio buffer for speaker!"); + detach(); + return; } - } - public void playCurrentBuffer() { - byte[] buffer; - int len; - synchronized (bufferLock) { - len = bufferPos; - buffer = primaryBuffer; - primaryBuffer = secondaryBuffer; - bufferPos = 0; + if (force1mhz) { + TICKS_PER_SAMPLE = ((double) TimedDevice.NTSC_1MHZ) / SoundMixer.RATE; + } else { + TICKS_PER_SAMPLE = Emulator.withComputer(c-> ((double) c.getMotherboard().getSpeedInHz()) / SoundMixer.RATE, 0.0); } - secondaryBuffer = buffer; - sdl.write(buffer, 0, len); + super.resume(); } /** * Reset idle counter whenever sound playback occurs */ public void resetIdle() { + currentVolume = VOLUME; idleCycles = 0; if (!isRunning()) { resume(); @@ -220,59 +191,88 @@ public class Speaker extends Device { */ @Override public void tick() { - if (!isRunning() || sdl == null) { - return; - } - if (idleCycles++ >= MAX_IDLE_CYCLES) { - suspend(); - } if (speakerBit) { level++; + if (showSound) { + VideoNTSC.CHANGE_BLACK_COLOR(40, 20, 20); + } + } else if (showSound) { + VideoNTSC.CHANGE_BLACK_COLOR(20,20,40); + } + if (idleCycles++ >= MAX_IDLE_CYCLES && (currentVolume <= 0 || !speakerBit)) { + suspend(); + if (showSound) { + VideoNTSC.CHANGE_BLACK_COLOR(0,0,0); + } } counter += 1.0d; if (counter >= TICKS_PER_SAMPLE) { - int sample = level * VOLUME; - int bytes = SoundMixer.BITS >> 3; - int shift = SoundMixer.BITS; - - while (bufferPos >= primaryBuffer.length) { - Thread.yield(); - } - synchronized (bufferLock) { - int index = bufferPos; - for (int i = 0; i < SoundMixer.BITS; i += 8, index++) { - shift -= 8; - primaryBuffer[index] = primaryBuffer[index + bytes] = (byte) ((sample >> shift) & 0x0ff); - } - - bufferPos += bytes * 2; + if (idleCycles >= MAX_IDLE_CYCLES) { + currentVolume -= fadeOffAmount; } + playSample(level * currentVolume); + // Emulator.withComputer(c->c.getMotherboard().requestSpeed(this)); // Set level back to 0 level = 0; // Set counter to 0 - counter -= TICKS_PER_SAMPLE_FLOOR; + counter -= TICKS_PER_SAMPLE; } } private void toggleSpeaker(RAMEvent e) { - if (e.getType() == RAMEvent.TYPE.WRITE) { - level += 2; - } else { - speakerBit = !speakerBit; - } + // if (e.getType() == RAMEvent.TYPE.WRITE) { + // level += 2; + // } + speakerBit = !speakerBit; resetIdle(); } + + private void playSample(int sample) { + try { + if (buffer == null || !buffer.isAlive()) { + // Logger.getLogger(getClass().getName()).severe("Audio buffer not initalized properly!"); + buffer = SoundMixer.createBuffer(false); + if (buffer == null) { + System.err.println("Unable to create emergency audio buffer, detaching speaker"); + detach(); + return; + } + } + buffer.playSample((short) sample); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } catch (SoundError e) { + System.err.println("Sound error, detaching speaker: " + e.getMessage()); + e.printStackTrace(); + detach(); + buffer = null; + } + + if (fileOutputActive) { + byte[] bytes = new byte[2]; + bytes[0] = (byte) (sample & 0x0ff); + bytes[1] = (byte) ((sample >> 8) & 0x0ff); + + try { + out.write(bytes, 0, 2); + } catch (IOException ex) { + Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Error recording sound", ex); + toggleFileOutput(); + } + } + + } /** * Add a memory event listener for C03x for capturing speaker events */ private void configureListener() { - listener = computer.getMemory().observe(RAMEvent.TYPE.ANY, 0x0c030, 0x0c03f, this::toggleSpeaker); + listener = Emulator.withMemory(m->m.observe("Speaker", RAMEvent.TYPE.ANY, 0x0c030, 0x0c03f, this::toggleSpeaker), null); } private void removeListener() { - computer.getMemory().removeListener(listener); + Emulator.withMemory(m->m.removeListener(listener)); } /** @@ -292,24 +292,16 @@ public class Speaker extends Device { @Override public final void reconfigure() { - if (primaryBuffer != null && secondaryBuffer != null) { - return; - } - BUFFER_SIZE = 20000 * (SoundMixer.BITS >> 3); - primaryBuffer = new byte[BUFFER_SIZE]; - secondaryBuffer = new byte[BUFFER_SIZE]; } @Override public void attach() { configureListener(); - resume(); } @Override public void detach() { removeListener(); - suspend(); super.detach(); } } diff --git a/src/main/java/jace/apple2e/VideoDHGR.java b/src/main/java/jace/apple2e/VideoDHGR.java index 323ed3c..641c334 100644 --- a/src/main/java/jace/apple2e/VideoDHGR.java +++ b/src/main/java/jace/apple2e/VideoDHGR.java @@ -1,33 +1,28 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.apple2e; -import jace.core.Computer; +import java.util.logging.Logger; + import jace.core.Font; import jace.core.Palette; import jace.core.RAMEvent; import jace.core.Video; -import static jace.core.Video.hiresOffset; -import static jace.core.Video.hiresRowLookup; -import static jace.core.Video.textRowLookup; import jace.core.VideoWriter; -import java.util.logging.Logger; import javafx.scene.image.PixelWriter; import javafx.scene.image.WritableImage; import javafx.scene.paint.Color; @@ -65,7 +60,7 @@ public class VideoDHGR extends Video { private VideoWriter dhiresPage1; private VideoWriter dhiresPage2; // Mixed mode - private final VideoWriter mixed; + private VideoWriter mixed; private VideoWriter currentGraphicsWriter = null; private VideoWriter currentTextWriter = null; @@ -74,8 +69,142 @@ public class VideoDHGR extends Video { * * @param computer */ - public VideoDHGR(Computer computer) { - super(computer); + public VideoDHGR() { + super(); + + initCharMap(); + initHgrDhgrTables(); + initVideoWriters(); + registerDirtyFlagChecks(); + currentTextWriter = textPage1; + currentGraphicsWriter = loresPage1; + } + + // Take two consecutive bytes and double them, taking hi-bit into account + // This should yield a 28-bit word of 7 color dhgr pixels + // This looks like crap on text... + final int[][] HGR_TO_DHGR = new int[512][256]; + // Take two consecutive bytes and double them, disregarding hi-bit + // Useful for text mode + final int[][] HGR_TO_DHGR_BW = new int[256][256]; + final int[] TIMES_14 = new int[40]; + final int[] FLIP_BITS = new int[256]; + + private void initHgrDhgrTables() { + // complete reverse of 8 bits + for (int i = 0; i < 256; i++) { + FLIP_BITS[i] = (((i * 0x0802 & 0x22110) | (i * 0x8020 & 0x88440)) * 0x10101 >> 16) & 0x0ff; + } + + for (int i = 0; i < 40; i++) { + TIMES_14[i] = i * 14; + } + + for (int bb1 = 0; bb1 < 512; bb1++) { + for (int bb2 = 0; bb2 < 256; bb2++) { + int value = ((bb1 & 0x0181) >= 0x0101) ? 1 : 0; + int b1 = byteDoubler((byte) (bb1 & 0x07f)); + if ((bb1 & 0x080) != 0) { + b1 <<= 1; + } + int b2 = byteDoubler((byte) (bb2 & 0x07f)); + if ((bb2 & 0x080) != 0) { + b2 <<= 1; + } + if ((bb1 & 0x040) == 0x040 && (bb2 & 1) != 0) { + b2 |= 1; + } + value |= b1 | (b2 << 14); + if ((bb2 & 0x040) != 0) { + value |= 0x10000000; + } + HGR_TO_DHGR[bb1][bb2] = value; + HGR_TO_DHGR_BW[bb1 & 0x0ff][bb2] + = byteDoubler((byte) bb1) | (byteDoubler((byte) bb2) << 14); + } + } + } + + boolean flashInverse = false; + int flashTimer = 0; + int FLASH_SPEED = 16; // UTAIIe:8-13,P7 - FLASH toggles every 16 scans + final int[] CHAR_MAP1 = new int[256]; + final int[] CHAR_MAP2 = new int[256]; + final int[] CHAR_MAP3 = new int[256]; + int[] currentCharMap = CHAR_MAP1; + + private void initCharMap() { + // Generate screen text lookup maps ahead of time + // ALTCHR clear + // 00-3F - Inverse characters (uppercase only) "@P 0" + // 40-7F - Flashing characters (uppercase only) "@P 0" + // 80-BF - Normal characters (uppercase only) "@P 0" + // C0-DF - Normal characters (repeat 80-9F) "@P" + // E0-FF - Normal characters (lowercase) "`p" + + // ALTCHR set + // 00-3f - Inverse characters (uppercase only) "@P 0" + // 40-5f - Mousetext (//gs alts are at 0x46 and 0x47, swap with 0x11 and 0x12 for //e and //c) + // 60-7f - Inverse characters (lowercase only) + // 80-BF - Normal characters (uppercase only) + // C0-DF - Normal characters (repeat 80-9F) + // E0-FF - Normal characters (lowercase) + // MAP1: Normal map, flash inverse = false + // MAP2: Normal map, flash inverse = true + // MAP3: Alt map, mousetext mode + for (int b = 0; b < 256; b++) { + int mod = b % 0x020; + // Inverse + if (b < 0x020) { + CHAR_MAP1[b] = mod + 0x0c0; + CHAR_MAP2[b] = mod + 0x0c0; + CHAR_MAP3[b] = mod + 0x0c0; + } else if (b < 0x040) { + CHAR_MAP1[b] = mod + 0x0a0; + CHAR_MAP2[b] = mod + 0x0a0; + CHAR_MAP3[b] = mod + 0x0a0; + } else if (b < 0x060) { + // Flash/Mouse + CHAR_MAP1[b] = mod + 0x0c0; + CHAR_MAP2[b] = mod + 0x040; + if (!USE_GS_MOUSETEXT && mod == 6) { + CHAR_MAP3[b] = 0x011; + } else if (!USE_GS_MOUSETEXT && mod == 7) { + CHAR_MAP3[b] = 0x012; + } else { + CHAR_MAP3[b] = mod + 0x080; + } + } else if (b < 0x080) { + // Flash/Inverse lowercase + CHAR_MAP1[b] = mod + 0x0a0; + CHAR_MAP2[b] = mod + 0x020; + CHAR_MAP3[b] = mod + 0x0e0; + } else if (b < 0x0a0) { + // Normal uppercase + CHAR_MAP1[b] = mod + 0x040; + CHAR_MAP2[b] = mod + 0x040; + CHAR_MAP3[b] = mod + 0x040; + } else if (b < 0x0c0) { + // Normal uppercase + CHAR_MAP1[b] = mod + 0x020; + CHAR_MAP2[b] = mod + 0x020; + CHAR_MAP3[b] = mod + 0x020; + } else if (b < 0x0e0) { + // Normal uppercase (repeat) + CHAR_MAP1[b] = mod + 0x040; + CHAR_MAP2[b] = mod + 0x040; + CHAR_MAP3[b] = mod + 0x040; + } else { + // Normal lowercase + CHAR_MAP1[b] = mod + 0x060; + CHAR_MAP2[b] = mod + 0x060; + CHAR_MAP3[b] = mod + 0x060; + } + } + } + + + private void initVideoWriters() { hiresPage1 = new VideoWriter() { @Override public int getYOffset(int y) { @@ -287,23 +416,23 @@ public class VideoDHGR extends Video { return true; } }; - registerDirtyFlagChecks(); - } + } + // color burst per byte (chat mauve compatibility) boolean[] useColor = new boolean[80]; protected void displayDoubleHires(WritableImage screen, int xOffset, int y, int rowAddress) { // Skip odd columns since this does two at once - if ((xOffset & 0x01) == 1) { + if ((xOffset & 0x01) == 1 || xOffset < 0) { return; } - int b1 = ((RAM128k) computer.getMemory()).getAuxVideoMemory().readByte(rowAddress + xOffset ); - int b2 = ((RAM128k) computer.getMemory()).getMainMemory() .readByte(rowAddress + xOffset ); - int b3 = ((RAM128k) computer.getMemory()).getAuxVideoMemory().readByte(rowAddress + xOffset + 1); - int b4 = ((RAM128k) computer.getMemory()).getMainMemory() .readByte(rowAddress + xOffset + 1); + int b1 = ((RAM128k) getMemory()).getAuxVideoMemory().readByte(rowAddress + xOffset ); + int b2 = ((RAM128k) getMemory()).getMainMemory() .readByte(rowAddress + xOffset ); + int b3 = ((RAM128k) getMemory()).getAuxVideoMemory().readByte(rowAddress + xOffset + 1); + int b4 = ((RAM128k) getMemory()).getMainMemory() .readByte(rowAddress + xOffset + 1); int useColOffset = xOffset << 1; // This shouldn't be necessary but prevents an index bounds exception when graphics modes are flipped (Race condition?) - if (useColOffset >= 77) { + if (useColOffset >= 77 || useColOffset < 0) { useColOffset = 76; } useColor[useColOffset ] = (b1 & 0x80) != 0; @@ -320,67 +449,21 @@ public class VideoDHGR extends Video { protected void displayHires(WritableImage screen, int xOffset, int y, int rowAddress) { // Skip odd columns since this does two at once - if ((xOffset & 0x01) == 1) { + if ((xOffset & 0x01) == 1 || xOffset < 0 || xOffset > 39) { return; } - int b1 = 0x0ff & ((RAM128k) computer.getMemory()).getMainMemory().readByte(rowAddress + xOffset); - int b2 = 0x0ff & ((RAM128k) computer.getMemory()).getMainMemory().readByte(rowAddress + xOffset + 1); + int b1 = 0x0ff & ((RAM128k) getMemory()).getMainMemory().readByte(rowAddress + xOffset); + int b2 = 0x0ff & ((RAM128k) getMemory()).getMainMemory().readByte(rowAddress + xOffset + 1); int dhgrWord = HGR_TO_DHGR[(extraHalfBit && xOffset > 0) ? b1 | 0x0100 : b1][b2]; extraHalfBit = (dhgrWord & 0x10000000) != 0; showDhgr(screen, TIMES_14[xOffset], y, dhgrWord & 0xfffffff); // If you want monochrome, use this instead... // showBW(screen, times14[xOffset], y, dhgrWord); } - // Take two consecutive bytes and double them, taking hi-bit into account - // This should yield a 28-bit word of 7 color dhgr pixels - // This looks like crap on text... - static final int[][] HGR_TO_DHGR; - // Take two consecutive bytes and double them, disregarding hi-bit - // Useful for text mode - static final int[][] HGR_TO_DHGR_BW; - static final int[] TIMES_14; - static final int[] FLIP_BITS; - - static { - // complete reverse of 8 bits - FLIP_BITS = new int[256]; - for (int i = 0; i < 256; i++) { - FLIP_BITS[i] = (((i * 0x0802 & 0x22110) | (i * 0x8020 & 0x88440)) * 0x10101 >> 16) & 0x0ff; - } - - TIMES_14 = new int[40]; - for (int i = 0; i < 40; i++) { - TIMES_14[i] = i * 14; - } - HGR_TO_DHGR = new int[512][256]; - HGR_TO_DHGR_BW = new int[256][256]; - for (int bb1 = 0; bb1 < 512; bb1++) { - for (int bb2 = 0; bb2 < 256; bb2++) { - int value = ((bb1 & 0x0181) >= 0x0101) ? 1 : 0; - int b1 = byteDoubler((byte) (bb1 & 0x07f)); - if ((bb1 & 0x080) != 0) { - b1 <<= 1; - } - int b2 = byteDoubler((byte) (bb2 & 0x07f)); - if ((bb2 & 0x080) != 0) { - b2 <<= 1; - } - if ((bb1 & 0x040) == 0x040 && (bb2 & 1) != 0) { - b2 |= 1; - } - value |= b1 | (b2 << 14); - if ((bb2 & 0x040) != 0) { - value |= 0x10000000; - } - HGR_TO_DHGR[bb1][bb2] = value; - HGR_TO_DHGR_BW[bb1 & 0x0ff][bb2] - = byteDoubler((byte) bb1) | (byteDoubler((byte) bb2) << 14); - } - } - } - + protected void displayLores(WritableImage screen, int xOffset, int y, int rowAddress) { - int c1 = ((RAM128k) computer.getMemory()).getMainMemory().readByte(rowAddress + xOffset) & 0x0FF; + if (xOffset < 0) return; + int c1 = ((RAM128k) getMemory()).getMainMemory().readByte(rowAddress + xOffset) & 0x0FF; if ((y & 7) < 4) { c1 &= 15; } else { @@ -403,12 +486,13 @@ public class VideoDHGR extends Video { writer.setColor(xx++, y, color); writer.setColor(xx++, y, color); writer.setColor(xx++, y, color); - writer.setColor(xx++, y, color); + writer.setColor(xx, y, color); } protected void displayDoubleLores(WritableImage screen, int xOffset, int y, int rowAddress) { - int c1 = ((RAM128k) computer.getMemory()).getAuxVideoMemory().readByte(rowAddress + xOffset) & 0x0FF; - int c2 = ((RAM128k) computer.getMemory()).getMainMemory().readByte(rowAddress + xOffset) & 0x0FF; + if (xOffset < 0) return; + int c1 = ((RAM128k) getMemory()).getAuxVideoMemory().readByte(rowAddress + xOffset) & 0x0FF; + int c2 = ((RAM128k) getMemory()).getMainMemory().readByte(rowAddress + xOffset) & 0x0FF; if ((y & 7) < 4) { c1 &= 15; c2 &= 15; @@ -435,89 +519,9 @@ public class VideoDHGR extends Video { writer.setColor(xx++, y, color); writer.setColor(xx++, y, color); writer.setColor(xx++, y, color); - writer.setColor(xx++, y, color); - } - boolean flashInverse = false; - int flashTimer = 0; - int FLASH_SPEED = 16; // UTAIIe:8-13,P7 - FLASH toggles every 16 scans - int[] currentCharMap = CHAR_MAP1; - static final int[] CHAR_MAP1; - static final int[] CHAR_MAP2; - static final int[] CHAR_MAP3; - - static { - // Generate screen text lookup maps ahead of time - // ALTCHR clear - // 00-3F - Inverse characters (uppercase only) "@P 0" - // 40-7F - Flashing characters (uppercase only) "@P 0" - // 80-BF - Normal characters (uppercase only) "@P 0" - // C0-DF - Normal characters (repeat 80-9F) "@P" - // E0-FF - Normal characters (lowercase) "`p" - - // ALTCHR set - // 00-3f - Inverse characters (uppercase only) "@P 0" - // 40-5f - Mousetext (//gs alts are at 0x46 and 0x47, swap with 0x11 and 0x12 for //e and //c) - // 60-7f - Inverse characters (lowercase only) - // 80-BF - Normal characters (uppercase only) - // C0-DF - Normal characters (repeat 80-9F) - // E0-FF - Normal characters (lowercase) - // MAP1: Normal map, flash inverse = false - CHAR_MAP1 = new int[256]; - // MAP2: Normal map, flash inverse = true - CHAR_MAP2 = new int[256]; - // MAP3: Alt map, mousetext mode - CHAR_MAP3 = new int[256]; - for (int b = 0; b < 256; b++) { - int mod = b % 0x020; - // Inverse - if (b < 0x020) { - CHAR_MAP1[b] = mod + 0x0c0; - CHAR_MAP2[b] = mod + 0x0c0; - CHAR_MAP3[b] = mod + 0x0c0; - } else if (b < 0x040) { - CHAR_MAP1[b] = mod + 0x0a0; - CHAR_MAP2[b] = mod + 0x0a0; - CHAR_MAP3[b] = mod + 0x0a0; - } else if (b < 0x060) { - // Flash/Mouse - CHAR_MAP1[b] = mod + 0x0c0; - CHAR_MAP2[b] = mod + 0x040; - if (!USE_GS_MOUSETEXT && mod == 6) { - CHAR_MAP3[b] = 0x011; - } else if (!USE_GS_MOUSETEXT && mod == 7) { - CHAR_MAP3[b] = 0x012; - } else { - CHAR_MAP3[b] = mod + 0x080; - } - } else if (b < 0x080) { - // Flash/Inverse lowercase - CHAR_MAP1[b] = mod + 0x0a0; - CHAR_MAP2[b] = mod + 0x020; - CHAR_MAP3[b] = mod + 0x0e0; - } else if (b < 0x0a0) { - // Normal uppercase - CHAR_MAP1[b] = mod + 0x040; - CHAR_MAP2[b] = mod + 0x040; - CHAR_MAP3[b] = mod + 0x040; - } else if (b < 0x0c0) { - // Normal uppercase - CHAR_MAP1[b] = mod + 0x020; - CHAR_MAP2[b] = mod + 0x020; - CHAR_MAP3[b] = mod + 0x020; - } else if (b < 0x0e0) { - // Normal uppercase (repeat) - CHAR_MAP1[b] = mod + 0x040; - CHAR_MAP2[b] = mod + 0x040; - CHAR_MAP3[b] = mod + 0x040; - } else { - // Normal lowercase - CHAR_MAP1[b] = mod + 0x060; - CHAR_MAP2[b] = mod + 0x060; - CHAR_MAP3[b] = mod + 0x060; - } - } - } - + writer.setColor(xx, y, color); + } + @Override public void vblankStart() { // ALTCHR set only affects character mapping and disables FLASH. @@ -526,7 +530,9 @@ public class VideoDHGR extends Video { } else { flashTimer--; if (flashTimer <= 0) { - markFlashDirtyBits(); + if (SoftSwitches.MIXED.isOn() || SoftSwitches.TEXT.isOn()) { + markFlashDirtyBits(); + } flashTimer = FLASH_SPEED; flashInverse = !flashInverse; if (flashInverse) { @@ -549,12 +555,12 @@ public class VideoDHGR extends Video { protected void displayText(WritableImage screen, int xOffset, int y, int rowAddress) { // Skip odd columns since this does two at once - if ((xOffset & 0x01) == 1) { + if ((xOffset & 0x01) == 1 || xOffset < 0) { return; } int yOffset = y & 7; - byte byte2 = ((RAM128k) computer.getMemory()).getMainMemory().readByte(rowAddress + xOffset + 1); - int c1 = getFontChar(((RAM128k) computer.getMemory()).getMainMemory().readByte(rowAddress + xOffset)); + byte byte2 = ((RAM128k) getMemory()).getMainMemory().readByte(rowAddress + xOffset + 1); + int c1 = getFontChar(((RAM128k) getMemory()).getMainMemory().readByte(rowAddress + xOffset)); int c2 = getFontChar(byte2); int b1 = Font.getByte(c1, yOffset); int b2 = Font.getByte(c2, yOffset); @@ -566,14 +572,14 @@ public class VideoDHGR extends Video { protected void displayText80(WritableImage screen, int xOffset, int y, int rowAddress) { // Skip odd columns since this does two at once - if ((xOffset & 0x01) == 1) { + if ((xOffset & 0x01) == 1 || xOffset < 0) { return; } int yOffset = y & 7; - int c1 = getFontChar(((RAM128k) computer.getMemory()).getAuxVideoMemory().readByte(rowAddress + xOffset)); - int c2 = getFontChar(((RAM128k) computer.getMemory()).getMainMemory().readByte(rowAddress + xOffset)); - int c3 = getFontChar(((RAM128k) computer.getMemory()).getAuxVideoMemory().readByte(rowAddress + xOffset + 1)); - int c4 = getFontChar(((RAM128k) computer.getMemory()).getMainMemory().readByte(rowAddress + xOffset + 1)); + int c1 = getFontChar(((RAM128k) getMemory()).getAuxVideoMemory().readByte(rowAddress + xOffset)); + int c2 = getFontChar(((RAM128k) getMemory()).getMainMemory().readByte(rowAddress + xOffset)); + int c3 = getFontChar(((RAM128k) getMemory()).getAuxVideoMemory().readByte(rowAddress + xOffset + 1)); + int c4 = getFontChar(((RAM128k) getMemory()).getMainMemory().readByte(rowAddress + xOffset + 1)); int bits = Font.getByte(c1, yOffset) | (Font.getByte(c2, yOffset) << 7) | (Font.getByte(c3, yOffset) << 14) | (Font.getByte(c4, yOffset) << 21); showBW(screen, TIMES_14[xOffset], y, bits); @@ -634,7 +640,7 @@ public class VideoDHGR extends Video { Logger.getLogger(getClass().getName()).warning("Went out of bounds in video display"); } } - static final Color BLACK = Color.BLACK; + static Color BLACK = Color.BLACK; static Color WHITE = Color.WHITE; static final int[][] XY_OFFSET; @@ -683,7 +689,6 @@ public class VideoDHGR extends Video { } private void markFlashDirtyBits() { - // TODO: Be smarter about detecting where flash is used... one day... for (int row = 0; row < 192; row++) { currentTextWriter.markDirty(row); } @@ -712,8 +717,8 @@ public class VideoDHGR extends Video { } private void registerDirtyFlagChecks() { - computer.getMemory().observe(RAMEvent.TYPE.WRITE, 0x0400, 0x0bff, this::registerTextDirtyFlag); - computer.getMemory().observe(RAMEvent.TYPE.WRITE, 0x02000, 0x05fff, this::registerHiresDirtyFlag); + getMemory().observe("Check for text changes", RAMEvent.TYPE.WRITE, 0x0400, 0x0bff, this::registerTextDirtyFlag); + getMemory().observe("Check for graphics changes", RAMEvent.TYPE.WRITE, 0x02000, 0x05fff, this::registerHiresDirtyFlag); } @Override diff --git a/src/main/java/jace/apple2e/VideoNTSC.java b/src/main/java/jace/apple2e/VideoNTSC.java index 6a31210..216a692 100644 --- a/src/main/java/jace/apple2e/VideoNTSC.java +++ b/src/main/java/jace/apple2e/VideoNTSC.java @@ -1,40 +1,37 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.apple2e; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + import jace.Emulator; import jace.EmulatorUILogic; import jace.config.ConfigurableField; import jace.config.InvokableAction; import jace.core.Computer; -import jace.core.RAM; import jace.core.RAMEvent; import jace.core.RAMListener; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; +import jace.core.Video; import javafx.scene.image.PixelWriter; import javafx.scene.image.WritableImage; import javafx.scene.paint.Color; -import static jace.apple2e.VideoDHGR.BLACK; - /** * Provides a clean color monitor simulation, complete with text-friendly * palette and mixed color/bw (mode 7) rendering. This class extends the @@ -52,35 +49,31 @@ import static jace.apple2e.VideoDHGR.BLACK; public class VideoNTSC extends VideoDHGR { @ConfigurableField(name = "Text palette", shortName = "textPalette", defaultValue = "false", description = "Use text-friendly color palette") - public boolean useTextPalette = true; - int activePalette[][] = TEXT_PALETTE; + public boolean useTextPalette = false; + final int[][] SOLID_PALETTE = new int[4][128]; + final int[][] TEXT_PALETTE = new int[4][128]; + int[][] activePalette = SOLID_PALETTE; @ConfigurableField(name = "Video 7", shortName = "video7", defaultValue = "true", description = "Enable Video 7 RGB rendering support") public boolean enableVideo7 = true; // Scanline represents 560 bits, divided up into 28-bit words - int[] scanline = new int[20]; - static public int[] divBy28 = new int[560]; + final int[] scanline = new int[20]; + final public int[] divBy28 = new int[560]; - @ConfigurableField(name = "Video Mode", category = "video", shortName = "mode", defaultValue = "TextFriendly", description = "Set Video Mode (Color|TextFriendly|Mode7|Mode7TextFriendly|Monochrome|Greenscreen|Amber)") - public static VideoMode videoMode = VideoMode.TextFriendly; - - static { - for (int i = 0; i < 560; i++) { - divBy28[i] = i / 28; - } - } protected boolean[] colorActive = new boolean[80]; int rowStart = 0; - - public VideoNTSC(Computer computer) { - super(computer); + + public VideoNTSC() { + super(); + initDivideTables(); + initNtscPalette(); registerStateListeners(); } - public static enum VideoMode { - Color("Color"), + public enum VideoMode { TextFriendly("Text-friendly color"), - Mode7("Mode7 Mixed RGB"), + Color("Color"), Mode7TextFriendly("Mode7 with Text-friendly palette"), + Mode7("Mode7 Mixed RGB"), Monochrome("Mono"), Greenscreen("Green"), Amber("Amber"); @@ -91,64 +84,64 @@ public class VideoNTSC extends VideoDHGR { } } + static int currentMode = -1; + @InvokableAction(name = "Toggle video mode", category = "video", alternatives = "Gfx mode;color;b&w;monochrome", defaultKeyMapping = {"ctrl+shift+g"}) public static void changeVideoMode() { - VideoNTSC thiss = (VideoNTSC) Emulator.computer.video; - int currentMode = Arrays.asList(VideoMode.values()).indexOf(thiss.getVideoMode()); - currentMode++; - if (currentMode >= VideoMode.values().length) { - currentMode = 0; - } - thiss.setVideoMode(VideoMode.values()[currentMode]); + currentMode = (currentMode + 1) % VideoMode.values().length; + Emulator.withVideo(v->((VideoNTSC) v)._setVideoMode(VideoMode.values()[currentMode], true)); } - public void setVideoMode(VideoMode mode) { - videoMode = mode; - monochomeMode = false; - WHITE = Color.WHITE; - switch (mode) { - case Amber: - monochomeMode = true; - WHITE = Color.web("ff8000"); - break; - case Greenscreen: - monochomeMode = true; - WHITE = Color.web("0ccc68"); - break; - case Monochrome: - monochomeMode = true; - break; - case Color: - useTextPalette = false; - enableVideo7 = false; - break; - case Mode7: - useTextPalette = false; - enableVideo7 = true; - break; - case Mode7TextFriendly: - useTextPalette = true; - enableVideo7 = true; - break; - case TextFriendly: - useTextPalette = true; - enableVideo7 = false; - break; - } - activePalette = useTextPalette ? TEXT_PALETTE : SOLID_PALETTE; - EmulatorUILogic.notify("Video mode: " + mode.name); - forceRefresh(); + public static void setVideoMode(VideoMode newMode, boolean showNotification) { + Emulator.withVideo(v->((VideoNTSC) v)._setVideoMode(newMode, showNotification)); } - public VideoMode getVideoMode() { - return videoMode; + private void _setVideoMode(VideoMode newMode, boolean showNotification) { + Emulator.withVideo(v-> { + VideoNTSC thiss = (VideoNTSC) v; + thiss.monochomeMode = false; + WHITE = Color.WHITE; + switch (newMode) { + case Amber -> { + thiss.monochomeMode = true; + WHITE = Color.web("ff8000"); + } + case Greenscreen -> { + thiss.monochomeMode = true; + WHITE = Color.web("0ccc68"); + } + case Monochrome -> thiss.monochomeMode = true; + case Color -> { + thiss.useTextPalette = false; + thiss.enableVideo7 = false; + } + case Mode7 -> { + thiss.useTextPalette = false; + thiss.enableVideo7 = true; + } + case Mode7TextFriendly -> { + thiss.useTextPalette = true; + thiss.enableVideo7 = true; + } + case TextFriendly -> { + thiss.useTextPalette = true; + thiss.enableVideo7 = false; + } + } + thiss.activePalette = thiss.useTextPalette ? TEXT_PALETTE : SOLID_PALETTE; + if (showNotification) { + EmulatorUILogic.notify("Video mode: " + newMode.name); + } + forceRefresh(); + }); } @Override protected void showBW(WritableImage screen, int x, int y, int dhgrWord) { + if (x < 0) return; int pos = divBy28[x]; if (rowStart < 0) { rowStart = pos; @@ -159,6 +152,7 @@ public class VideoNTSC extends VideoDHGR { @Override protected void showDhgr(WritableImage screen, int x, int y, int dhgrWord) { + if (x < 0) return; int pos = divBy28[x]; if (rowStart < 0) { rowStart = pos; @@ -169,7 +163,8 @@ public class VideoNTSC extends VideoDHGR { @Override protected void displayLores(WritableImage screen, int xOffset, int y, int rowAddress) { - int data = ((RAM128k) computer.getMemory()).getMainMemory().readByte(rowAddress + xOffset) & 0x0FF; + if (xOffset < 0) return; + int data = ((RAM128k) getMemory()).getMainMemory().readByte(rowAddress + xOffset) & 0x0FF; int pos = xOffset >> 1; if (rowStart < 0) { rowStart = pos; @@ -199,33 +194,34 @@ public class VideoNTSC extends VideoDHGR { @Override protected void displayDoubleLores(WritableImage screen, int xOffset, int y, int rowAddress) { + if (xOffset < 0) return; int pos = xOffset >> 1; if (rowStart < 0) { rowStart = pos; } colorActive[xOffset * 2] = colorActive[xOffset * 2 + 1] = true; - int c1 = ((RAM128k) computer.getMemory()).getAuxVideoMemory().readByte(rowAddress + xOffset) & 0x0FF; + int c1 = ((RAM128k) getMemory()).getAuxVideoMemory().readByte(rowAddress + xOffset) & 0x0FF; if ((y & 7) < 4) { c1 &= 15; } else { c1 >>= 4; } - int c2 = ((RAM128k) computer.getMemory()).getMainMemory().readByte(rowAddress + xOffset) & 0x0FF; + int c2 = ((RAM128k) getMemory()).getMainMemory().readByte(rowAddress + xOffset) & 0x0FF; if ((y & 7) < 4) { c2 &= 15; } else { c2 >>= 4; } + int pat; if ((xOffset & 0x01) == 0) { - int pat = c1 | (c1 & 7) << 4; + pat = c1 | (c1 & 7) << 4; pat |= c2 << 7 | (c2 & 7) << 11; - scanline[pos] = pat; } else { - int pat = scanline[pos]; + pat = scanline[pos]; pat |= (c1 & 12) << 12 | c1 << 16 | (c1 & 1) << 20; pat |= (c2 & 12) << 19 | c2 << 23 | (c2 & 1) << 27; - scanline[pos] = pat; } + scanline[pos] = pat; } @Override @@ -237,7 +233,7 @@ public class VideoNTSC extends VideoDHGR { // Offset is based on location in graphics buffer that corresponds with the row and // a number (0-20) that represents how much of the scanline was rendered // This is based off the xyOffset but is different because of P - static int pyOffset[][]; + static int[][] pyOffset; static { pyOffset = new int[192][21]; @@ -263,6 +259,7 @@ public class VideoNTSC extends VideoDHGR { // Reset scanline position int byteCounter = 0; for (int s = rowStart; s < 20; s++) { + if (s < 0) continue; int add = 0; int bits; if (hiresMode) { @@ -316,8 +313,6 @@ public class VideoNTSC extends VideoDHGR { public static final double MAX_I = 0.5957; // q Range [-0.5226, 0.5226] public static final double MAX_Q = 0.5226; - static final int SOLID_PALETTE[][] = new int[4][128]; - static final int[][] TEXT_PALETTE = new int[4][128]; static final double[][] YIQ_VALUES = { {0.0, 0.0, 0.0}, //0000 0 {0.25, 0.5, 0.5}, //0001 1 @@ -337,7 +332,26 @@ public class VideoNTSC extends VideoDHGR { {1.0, 0.0, 0.0}, //1111 f }; - static { + public static void CHANGE_BLACK_COLOR(int r, int g, int b) { + Emulator.withVideo(v->{ + VideoNTSC vntsc = (VideoNTSC) v; + BLACK = Color.rgb(r, g, b); + int c = colorToInt(BLACK); + for (int i1 = 0; i1 < 4; i1++) { + vntsc.SOLID_PALETTE[i1][0] = c; + vntsc.TEXT_PALETTE[i1][0] = c; + } + }); + Video.forceRefresh(); + } + + private void initDivideTables() { + for (int i = 0; i < 560; i++) { + divBy28[i] = i / 28; + } + } + + private void initNtscPalette() { int maxLevel = 10; for (int offset = 0; offset < 4; offset++) { for (int pattern = 0; pattern < 128; pattern++) { @@ -361,25 +375,29 @@ public class VideoNTSC extends VideoDHGR { } static public int yiqToRgb(double y, double i, double q) { + return colorToInt(yiqToRgbColor(y, i, q)); + } + + static public Color yiqToRgbColor(double y, double i, double q) { int r = (int) (normalize((y + 0.956 * i + 0.621 * q), 0, 1) * 255); int g = (int) (normalize((y - 0.272 * i - 0.647 * q), 0, 1) * 255); int b = (int) (normalize((y - 1.105 * i + 1.702 * q), 0, 1) * 255); - return (255 << 24) | (r << 16) | (g << 8) | b; + return Color.rgb(r, g, b); + } + + static public int colorToInt(Color c) { + return (int) (255 << 24) | (int) (c.getRed() * 255) << 16 | (int) (c.getGreen() * 255) << 8 | (int) (c.getBlue() * 255); } public static double normalize(double x, double minX, double maxX) { if (x < minX) { return minX; } - if (x > maxX) { - return maxX; - } - return x; + return Math.min(x, maxX); } @Override public void reconfigure() { - setVideoMode(videoMode); activePalette = useTextPalette ? TEXT_PALETTE : SOLID_PALETTE; super.reconfigure(); } @@ -390,7 +408,7 @@ public class VideoNTSC extends VideoDHGR { // http://apple2.info/download/Ext80ColumnAppleColorCardHR.pdf rgbMode graphicsMode = rgbMode.MIX; - public static enum rgbMode { + public enum rgbMode { COLOR(true), MIX(true), BW(false), COL_160(false); boolean colorMode = false; @@ -404,10 +422,6 @@ public class VideoNTSC extends VideoDHGR { } } - public static enum ModeStateChanges { - - SET_AN3, CLEAR_AN3, SET_80, CLEAR_80; - } boolean f1 = true; boolean f2 = true; boolean an3 = false; @@ -424,15 +438,14 @@ public class VideoNTSC extends VideoDHGR { Set rgbStateListeners = new HashSet<>(); private void registerStateListeners() { - if (!rgbStateListeners.isEmpty() || computer.getVideo() != this) { + if (!rgbStateListeners.isEmpty() || Emulator.withComputer(Computer::getVideo, null) != this) { return; } - RAM memory = computer.getMemory(); - rgbStateListeners.add(memory.observe(RAMEvent.TYPE.ANY, 0x0c05e, (e) -> { + rgbStateListeners.add(getMemory().observe("NTSC: AN3 state change", RAMEvent.TYPE.ANY, 0x0c05e, (e) -> { an3 = false; rgbStateChange(); })); - rgbStateListeners.add(memory.observe(RAMEvent.TYPE.ANY, 0x0c05f, (e) -> { + rgbStateListeners.add(getMemory().observe("NTSC: 80COL state change", RAMEvent.TYPE.ANY, 0x0c05f, (e) -> { if (!an3) { f2 = f1; f1 = SoftSwitches._80COL.getState(); @@ -440,7 +453,7 @@ public class VideoNTSC extends VideoDHGR { an3 = true; rgbStateChange(); })); - rgbStateListeners.add(memory.observe(RAMEvent.TYPE.EXECUTE, 0x0fa62, (e) -> { + rgbStateListeners.add(getMemory().observe("NTSC: Reset hook for reverting RGB mode", RAMEvent.TYPE.EXECUTE, 0x0fa62, (e) -> { // When reset hook is called, reset the graphics mode // This is useful in case a program is running that // is totally clueless how to set the RGB state correctly. @@ -456,7 +469,7 @@ public class VideoNTSC extends VideoDHGR { public void detach() { rgbStateListeners.stream().forEach((l) -> { - computer.getMemory().removeListener(l); + getMemory().removeListener(l); }); rgbStateListeners.clear(); super.detach(); diff --git a/src/main/java/jace/apple2e/softswitch/IntC8SoftSwitch.java b/src/main/java/jace/apple2e/softswitch/IntC8SoftSwitch.java index 225076f..079c262 100644 --- a/src/main/java/jace/apple2e/softswitch/IntC8SoftSwitch.java +++ b/src/main/java/jace/apple2e/softswitch/IntC8SoftSwitch.java @@ -1,23 +1,22 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.apple2e.softswitch; +import jace.Emulator; import jace.apple2e.SoftSwitches; import jace.core.RAMEvent; import jace.core.RAMListener; @@ -39,7 +38,7 @@ public class IntC8SoftSwitch extends SoftSwitch { super("InternalC8Rom", false); // INTC8Rom should activate whenever C3xx memory is accessed and SLOTC3ROM is off addListener( - new RAMListener(RAMEvent.TYPE.ANY, RAMEvent.SCOPE.RANGE, RAMEvent.VALUE.ANY) { + new RAMListener("Softswitch " + getName() + " on", RAMEvent.TYPE.ANY, RAMEvent.SCOPE.RANGE, RAMEvent.VALUE.ANY) { @Override protected void doConfig() { setScopeStart(0x0C300); @@ -56,7 +55,7 @@ public class IntC8SoftSwitch extends SoftSwitch { // INTCXRom shoud deactivate whenever CFFF is accessed addListener( - new RAMListener(RAMEvent.TYPE.ANY, RAMEvent.SCOPE.ADDRESS, RAMEvent.VALUE.ANY) { + new RAMListener("Softswitch " + getName() + " off", RAMEvent.TYPE.ANY, RAMEvent.SCOPE.ADDRESS, RAMEvent.VALUE.ANY) { @Override protected void doConfig() { setScopeStart(0x0CFFF); @@ -76,8 +75,6 @@ public class IntC8SoftSwitch extends SoftSwitch { @Override public void stateChanged() { - if (computer.getMemory() != null) { - computer.getMemory().configureActiveMemory(); - } + Emulator.withMemory(m->m.configureActiveMemory()); } } \ No newline at end of file diff --git a/src/main/java/jace/apple2e/softswitch/KeyboardSoftSwitch.java b/src/main/java/jace/apple2e/softswitch/KeyboardSoftSwitch.java index 04e784d..783afd0 100644 --- a/src/main/java/jace/apple2e/softswitch/KeyboardSoftSwitch.java +++ b/src/main/java/jace/apple2e/softswitch/KeyboardSoftSwitch.java @@ -1,21 +1,19 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.apple2e.softswitch; import jace.core.Keyboard; diff --git a/src/main/java/jace/apple2e/softswitch/Memory2SoftSwitch.java b/src/main/java/jace/apple2e/softswitch/Memory2SoftSwitch.java index 9780bb2..5a93181 100644 --- a/src/main/java/jace/apple2e/softswitch/Memory2SoftSwitch.java +++ b/src/main/java/jace/apple2e/softswitch/Memory2SoftSwitch.java @@ -1,21 +1,19 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.apple2e.softswitch; import jace.core.RAMEvent.TYPE; diff --git a/src/main/java/jace/apple2e/softswitch/MemorySoftSwitch.java b/src/main/java/jace/apple2e/softswitch/MemorySoftSwitch.java index 4003b0b..4714511 100644 --- a/src/main/java/jace/apple2e/softswitch/MemorySoftSwitch.java +++ b/src/main/java/jace/apple2e/softswitch/MemorySoftSwitch.java @@ -1,23 +1,22 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.apple2e.softswitch; +import jace.Emulator; import jace.core.RAMEvent; import jace.core.SoftSwitch; @@ -25,7 +24,7 @@ import jace.core.SoftSwitch; * A memory softswitch is a softswitch which triggers a memory reconfiguration * after its value is changed. * - * @author Brendan Robert (BLuRry) brendan.robert@gmail.com + * @author Brendan Robert (BLuRry) brendan.robert@gmail.com */ public class MemorySoftSwitch extends SoftSwitch { @@ -40,23 +39,17 @@ public class MemorySoftSwitch extends SoftSwitch { @Override public void stateChanged() { // System.out.println(getName()+ " was switched to "+getState()); - if (computer.getMemory() != null) { - computer.getMemory().configureActiveMemory(); - } + Emulator.withMemory(m->m.configureActiveMemory()); } // Todo: Implement floating bus, maybe? @Override protected byte readSwitch() { - if (computer.getVideo() == null) { - return 0x00; + byte value = Emulator.withComputer(c->c.getVideo().getFloatingBus(), (byte) 0); + if (getState()) { + return (byte) (value | 0x080); } else { - byte value = computer.getVideo().getFloatingBus(); - if (getState()) { - return (byte) (value | 0x080); - } else { - return (byte) (value & 0x07f); - } + return (byte) (value & 0x07f); } } -} +} \ No newline at end of file diff --git a/src/main/java/jace/apple2e/softswitch/VideoSoftSwitch.java b/src/main/java/jace/apple2e/softswitch/VideoSoftSwitch.java index 3c627d1..1f996c9 100644 --- a/src/main/java/jace/apple2e/softswitch/VideoSoftSwitch.java +++ b/src/main/java/jace/apple2e/softswitch/VideoSoftSwitch.java @@ -1,23 +1,22 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.apple2e.softswitch; +import jace.Emulator; import jace.core.RAMEvent; import jace.core.SoftSwitch; @@ -40,9 +39,7 @@ public class VideoSoftSwitch extends SoftSwitch { @Override public void stateChanged() { // System.out.println("Set "+getName()+" -> "+getState()); - if (computer.getVideo() != null) { - computer.getVideo().configureVideoMode(); - } + Emulator.withVideo(video -> video.configureVideoMode()); } @Override diff --git a/src/main/java/jace/applesoft/ApplesoftHandler.java b/src/main/java/jace/applesoft/ApplesoftHandler.java index f60cbc7..930ab86 100644 --- a/src/main/java/jace/applesoft/ApplesoftHandler.java +++ b/src/main/java/jace/applesoft/ApplesoftHandler.java @@ -1,14 +1,15 @@ package jace.applesoft; -import jace.Emulator; -import jace.ide.Program; -import jace.ide.CompileResult; -import jace.ide.LanguageHandler; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import jace.Emulator; +import jace.ide.CompileResult; +import jace.ide.LanguageHandler; +import jace.ide.Program; + /** * * @author blurry @@ -17,7 +18,7 @@ public class ApplesoftHandler implements LanguageHandler { @Override public String getNewDocumentContent() { - return ApplesoftProgram.fromMemory(Emulator.computer.getMemory()).toString(); + return Emulator.withComputer(c->ApplesoftProgram.fromMemory(c.getMemory()).toString(), ""); } @Override @@ -41,7 +42,7 @@ public class ApplesoftHandler implements LanguageHandler { @Override public Map getErrors() { - return Collections.EMPTY_MAP; + return Collections.emptyMap(); } @Override @@ -51,12 +52,12 @@ public class ApplesoftHandler implements LanguageHandler { @Override public List getOtherMessages() { - return Collections.EMPTY_LIST; + return Collections.emptyList(); } @Override public List getRawOutput() { - return Collections.EMPTY_LIST; + return Collections.emptyList(); } }; } diff --git a/src/main/java/jace/applesoft/ApplesoftProgram.java b/src/main/java/jace/applesoft/ApplesoftProgram.java index e93459a..6e42f2b 100755 --- a/src/main/java/jace/applesoft/ApplesoftProgram.java +++ b/src/main/java/jace/applesoft/ApplesoftProgram.java @@ -1,37 +1,30 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.applesoft; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + import jace.Emulator; import jace.core.RAM; import jace.core.RAMEvent; import jace.core.RAMListener; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; /** * Decode an applesoft program into a list of program lines Right now this is an @@ -54,23 +47,7 @@ public class ApplesoftProgram { public static final int RUNNING_FLAG = 0x076; public static final int NOT_RUNNING = 0x0FF; public static final int GOTO_CMD = 0x0D944; //actually starts at D93E - int startingAddress = 0x0801; - - public static void main(String... args) { - byte[] source = null; - try { - File f = new File("/home/brobert/Documents/Personal/a2gameserver/lib/data/games/LEMONADE#fc0801"); - FileInputStream in = new FileInputStream(f); - source = new byte[(int) f.length()]; - in.read(source); - } catch (FileNotFoundException ex) { - Logger.getLogger(ApplesoftProgram.class.getName()).log(Level.SEVERE, null, ex); - } catch (IOException ex) { - Logger.getLogger(ApplesoftProgram.class.getName()).log(Level.SEVERE, null, ex); - } - ApplesoftProgram test = ApplesoftProgram.fromBinary(Arrays.asList(toObjects(source))); - System.out.println(test.toString()); - } + public static final int START_ADDRESS = 0x0801; public static Byte[] toObjects(byte[] bytesPrim) { Byte[] bytes = new Byte[bytesPrim.length]; @@ -93,7 +70,7 @@ public class ApplesoftProgram { } public static ApplesoftProgram fromBinary(List binary) { - return fromBinary(binary, 0x0801); + return fromBinary(binary, START_ADDRESS); } public static ApplesoftProgram fromBinary(List binary, int startAddress) { @@ -149,70 +126,70 @@ public class ApplesoftProgram { } public void run() { - RAM memory = Emulator.computer.memory; - Emulator.computer.pause(); - int programStart = memory.readWordRaw(START_OF_PROG_POINTER); - int programEnd = programStart + getProgramSize(); - if (isProgramRunning()) { - whenReady(()->{ - relocateVariables(programEnd); + Emulator.whileSuspended(c-> { + int programStart = c.getMemory().readWordRaw(START_OF_PROG_POINTER); + int programEnd = programStart + getProgramSize(); + if (isProgramRunning()) { + whenReady(()->{ + relocateVariables(programEnd); + injectProgram(); + }); + } else { injectProgram(); - }); - } else { - injectProgram(); - clearVariables(programEnd); - } - Emulator.computer.resume(); + clearVariables(programEnd); + } + }); } private void injectProgram() { - RAM memory = Emulator.computer.memory; - int pos = memory.readWordRaw(START_OF_PROG_POINTER); - for (Line line : lines) { - int nextPos = pos + line.getLength(); - memory.writeWord(pos, nextPos, false, true); - pos += 2; - memory.writeWord(pos, line.getNumber(), false, true); - pos += 2; - boolean isFirst = true; - for (Command command : line.getCommands()) { - if (!isFirst) { - memory.write(pos++, (byte) ':', false, true); - } - isFirst = false; - for (Command.ByteOrToken part : command.parts) { - memory.write(pos++, part.getByte(), false, true); + Emulator.withMemory(memory->{ + int pos = memory.readWordRaw(START_OF_PROG_POINTER); + for (Line line : lines) { + int nextPos = pos + line.getLength(); + memory.writeWord(pos, nextPos, false, true); + pos += 2; + memory.writeWord(pos, line.getNumber(), false, true); + pos += 2; + boolean isFirst = true; + for (Command command : line.getCommands()) { + if (!isFirst) { + memory.write(pos++, (byte) ':', false, true); + } + isFirst = false; + for (Command.ByteOrToken part : command.parts) { + memory.write(pos++, part.getByte(), false, true); + } } + memory.write(pos++, (byte) 0, false, true); } memory.write(pos++, (byte) 0, false, true); - } - memory.write(pos++, (byte) 0, false, true); - memory.write(pos++, (byte) 0, false, true); - memory.write(pos++, (byte) 0, false, true); - memory.write(pos++, (byte) 0, false, true); + memory.write(pos++, (byte) 0, false, true); + memory.write(pos++, (byte) 0, false, true); + memory.write(pos++, (byte) 0, false, true); + }); } private boolean isProgramRunning() { - RAM memory = Emulator.computer.memory; - return (memory.readRaw(RUNNING_FLAG) & 0x0FF) != NOT_RUNNING; + return Emulator.withComputer(c->(c.getMemory().readRaw(RUNNING_FLAG) & 0x0FF) != NOT_RUNNING, false); } /** * If the program is running, wait until it advances to the next line */ private void whenReady(Runnable r) { - RAM memory = Emulator.computer.memory; - memory.addListener(new RAMListener(RAMEvent.TYPE.EXECUTE, RAMEvent.SCOPE.ADDRESS, RAMEvent.VALUE.ANY) { - @Override - protected void doConfig() { - setScopeStart(GOTO_CMD); - } + Emulator.withMemory(memory->{ + memory.addListener(new RAMListener("Applesoft: Trap GOTO command", RAMEvent.TYPE.EXECUTE, RAMEvent.SCOPE.ADDRESS, RAMEvent.VALUE.ANY) { + @Override + protected void doConfig() { + setScopeStart(GOTO_CMD); + } - @Override - protected void doEvent(RAMEvent e) { - r.run(); - memory.removeListener(this); - } + @Override + protected void doEvent(RAMEvent e) { + r.run(); + memory.removeListener(this); + } + }); }); } @@ -222,11 +199,12 @@ public class ApplesoftProgram { * @param programEnd Program ending address */ private void clearVariables(int programEnd) { - RAM memory = Emulator.computer.memory; - memory.writeWord(ARRAY_TABLE, programEnd, false, true); - memory.writeWord(VARIABLE_TABLE, programEnd, false, true); - memory.writeWord(VARIABLE_TABLE_END, programEnd, false, true); - memory.writeWord(END_OF_PROG_POINTER, programEnd, false, true); + Emulator.withMemory(memory->{ + memory.writeWord(ARRAY_TABLE, programEnd, false, true); + memory.writeWord(VARIABLE_TABLE, programEnd, false, true); + memory.writeWord(VARIABLE_TABLE_END, programEnd, false, true); + memory.writeWord(END_OF_PROG_POINTER, programEnd, false, true); + }); } /** @@ -234,24 +212,29 @@ public class ApplesoftProgram { * @param programEnd Program ending address */ private void relocateVariables(int programEnd) { - RAM memory = Emulator.computer.memory; - int currentEnd = memory.readWordRaw(END_OF_PROG_POINTER); - memory.writeWord(END_OF_PROG_POINTER, programEnd, false, true); - if (programEnd > currentEnd) { - int diff = programEnd - currentEnd; - int himem = memory.readWordRaw(HIMEM); - for (int i=himem - diff; i >= programEnd; i--) { - memory.write(i+diff, memory.readRaw(i), false, true); + Emulator.withMemory(memory->{ + int currentEnd = memory.readWordRaw(END_OF_PROG_POINTER); + memory.writeWord(END_OF_PROG_POINTER, programEnd, false, true); + if (programEnd > currentEnd) { + int diff = programEnd - currentEnd; + int himem = memory.readWordRaw(HIMEM); + for (int i=himem - diff; i >= programEnd; i--) { + memory.write(i+diff, memory.readRaw(i), false, true); + } + memory.writeWord(VARIABLE_TABLE, memory.readWordRaw(VARIABLE_TABLE) + diff, false, true); + memory.writeWord(ARRAY_TABLE, memory.readWordRaw(ARRAY_TABLE) + diff, false, true); + memory.writeWord(VARIABLE_TABLE_END, memory.readWordRaw(VARIABLE_TABLE_END) + diff, false, true); + memory.writeWord(STRING_TABLE, memory.readWordRaw(STRING_TABLE) + diff, false, true); } - memory.writeWord(VARIABLE_TABLE, memory.readWordRaw(VARIABLE_TABLE) + diff, false, true); - memory.writeWord(ARRAY_TABLE, memory.readWordRaw(ARRAY_TABLE) + diff, false, true); - memory.writeWord(VARIABLE_TABLE_END, memory.readWordRaw(VARIABLE_TABLE_END) + diff, false, true); - memory.writeWord(STRING_TABLE, memory.readWordRaw(STRING_TABLE) + diff, false, true); - } + }); } private int getProgramSize() { int size = lines.stream().collect(Collectors.summingInt(Line::getLength)) + 4; return size; } + + public int getLength() { + return lines.size(); + } } diff --git a/src/main/java/jace/applesoft/Command.java b/src/main/java/jace/applesoft/Command.java index 50edef0..9ab5b40 100755 --- a/src/main/java/jace/applesoft/Command.java +++ b/src/main/java/jace/applesoft/Command.java @@ -1,21 +1,19 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.applesoft; import java.util.ArrayList; @@ -30,7 +28,7 @@ import java.util.stream.Collectors; */ public class Command { - public static enum TOKEN { + public enum TOKEN { END((byte) 0x080, "END"), FOR((byte) 0x081, "FOR"), @@ -160,7 +158,7 @@ public class Command { } return null; } - private String str; + private final String str; public byte code; TOKEN(byte b, String str) { diff --git a/src/main/java/jace/applesoft/Line.java b/src/main/java/jace/applesoft/Line.java index 7cf2086..a852bdf 100755 --- a/src/main/java/jace/applesoft/Line.java +++ b/src/main/java/jace/applesoft/Line.java @@ -1,28 +1,28 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.applesoft; -import jace.applesoft.Command.TOKEN; import static java.lang.Character.isDigit; + import java.util.ArrayList; import java.util.List; +import jace.applesoft.Command.TOKEN; + /** * Representation of a line of applesoft basic, having a line number and a list * of program commands. diff --git a/src/main/java/jace/assembly/ACME_README.md b/src/main/java/jace/assembly/ACME_README.md new file mode 100644 index 0000000..5ad5cd9 --- /dev/null +++ b/src/main/java/jace/assembly/ACME_README.md @@ -0,0 +1,85 @@ +# Notes on compiling ACME Cross Assembler + +Acme is a very handy macro assembler for the 6502 family of processors. It is also very easy to build. Because of this, we can port ACME to Java without even having to alter the source thanks to NestedVM. + +A word of caution: NestedVM is very old and very unmaintained, so it goes without saying that there be dragons. Re-transpiling new versions of ACME is still possible (as of Feb 2024) but it is not easy. + +## Getting set up + +First use a fork of NestedVM (the original is buggy and not maintained at all, wherease newer forks are at least a little better) + +- https://github.com/bgould/nestedvm/tree/master + +Next, check the urls in the upstream/Makefile to ensure they are valid. Currently, I found that I needed to make the following changes: + +``` +diff --git a/upstream/Makefile b/upstream/Makefile +index 83eaa0a..d1f1cbb 100644 +--- a/upstream/Makefile ++++ b/upstream/Makefile +@@ -211,7 +211,7 @@ configure_binutils = --target=mips-unknown-elf --disable-werror + ## newlib ############################################################################## + + version_newlib = 1.20.0 +-url_newlib = ftp://sources.redhat.com/pub/newlib/newlib-$(version_newlib).tar.gz ++url_newlib = ftp://sourceware.org/pub/newlib/newlib-$(version_newlib).tar.gz + patches_newlib = newlib-mips.patch newlib-tzset.patch newlib-malloc.patch newlib-nomemcpy.patch newlib-unix.patch newlib-unistd.patch newlib-nestedvm-define.patch newlib-sdata.patch newlib-new.patch + configure_newlib = --enable-multilib --target=mips-unknown-elf + +@@ -236,13 +236,14 @@ tasks/build_openbsdglob: tasks/download_openbsdglob tasks/build_newlib + + ## regex ############################################################################## + +-url_regex = http://www.arglist.com/regex/files/regex3.8a.tar.gz ++#url_regex = http://www.arglist.com/regex/files/regex3.8a.tar.gz ++url_regex = https://github.com/garyhouston/regex/archive/refs/tags/alpha3.8p1.tar.gz + + tasks/build_regex: tasks/download_regex tasks/build_newlib + @mkdir -p $(usr)/mips-unknown-elf/{include,lib} + mkdir -p build/regex build/regex/fake + cd build && \ +- tar xvzf ../download/regex3.8a.tar.gz && cd regex && \ ++ tar xvzf ../download/alpha3.8p1.tar.gz && cd regex-alpha3.8p1 && \ + make CC=mips-unknown-elf-gcc CFLAGS="-I. $(MIPS_CFLAGS)" regcomp.o regexec.o regerror.o regfree.o && \ + mips-unknown-elf-ar cr libregex.a regcomp.o regexec.o regerror.o regfree.o && \ + mips-unknown-elf-ranlib libregex.a && \ +``` + +From here it's a matter of running Make from the main folder and waiting a long time (approx 2 hours, it has to compile GCC) + +Next: Use these commands to build the rest of the things you might need: + +``` +make env.sh +``` +This will create a convenient shell script that demonstrates all the GCC and linker flags you'll need for Acme, so it's good for future reference. + +``` +make test +``` +Quick sanity check. If you look closely it reveals how to use the nestedvm compiler... sort of. + +## Building ACME + +With the MIPS GCC binary available, now grab the source for ACME you want to use and extract to another folder. Modify the Makefile like so: +``` +CC=mips-unknown-elf-gcc +CXX=mips-unknown-elf-g++ +AS=mips-unknown-elf-as +AR=mips-unknown-elf-ar +LD=mips-unknown-elf-ld +RANLIB=mips-unknown-elf-ranlib +CFLAGS= -O2 -mmemcpy -ffunction-sections -fdata-sections -falign-functions=512 -fno-rename-registers -fno-schedule-insns -fno-delayed-branch -Wstrict-prototypes -march=mips1 -specs=/Users/brobert/Documents/code/nestedvm/upstream/install/mips-unknown-elf/lib/crt0-override.spec -static -mmemcpy --static -Wl,--gc-sect> +``` +Note that I used -O2 not -O3. It probably doesn't make much of a functional difference but -O3 produced something that was 20% larger. + +Also remove the `strip acme` line because nestedvm needs the symbol table. + +## Converting to Java +After you build acme, next you need to transpile it to java. I used the following command to do that: +``` +java -cp ../nestedvm/build:../nestedvm/upstream/build/classgen/build org.ibex.nestedvm.Compiler -outformat java -outfile AcmeCrossAssembler.java -o unixRuntime jace.assembly.AcmeCrossAssembler acme +``` + +This produces a file called AcmeCrossAssembler.java which can replace the current one. You should run tests via `mvn test` in Jace to make sure that ACME is working properly. Since the CPU unit tests use it heavily, that's a pretty good test for Acme as well. :) + diff --git a/src/main/java/jace/assembly/AcmeCompiler.java b/src/main/java/jace/assembly/AcmeCompiler.java index a25ef1d..f2aade4 100644 --- a/src/main/java/jace/assembly/AcmeCompiler.java +++ b/src/main/java/jace/assembly/AcmeCompiler.java @@ -7,6 +7,8 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintStream; +import java.nio.ByteBuffer; +import java.nio.file.Files; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashMap; @@ -20,10 +22,10 @@ import java.util.stream.Collectors; * * @author blurry */ -public class AcmeCompiler implements CompileResult { +public class AcmeCompiler implements CompileResult { boolean successful = false; - File compiledAsset = null; + ByteBuffer compiledAsset = null; Map errors = new LinkedHashMap<>(); Map warnings = new LinkedHashMap<>(); List otherWarnings = new ArrayList<>(); @@ -35,7 +37,7 @@ public class AcmeCompiler implements CompileResult { } @Override - public File getCompiledAsset() { + public ByteBuffer getCompiledAsset() { return compiledAsset; } @@ -100,21 +102,26 @@ public class AcmeCompiler implements CompileResult { private void invokeAcme(File sourceFile, File workingDirectory) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IOException { String oldPath = System.getProperty("user.dir"); + File tempFile = null; redirectSystemOutput(); try { - compiledAsset = File.createTempFile(sourceFile.getName(), "bin", sourceFile.getParentFile()); + tempFile = File.createTempFile(sourceFile.getName(), "bin", sourceFile.getParentFile()); + tempFile.deleteOnExit(); System.setProperty("user.dir", workingDirectory.getAbsolutePath()); AcmeCrossAssembler acme = new AcmeCrossAssembler(); - String[] params = {"--outfile", normalizeWindowsPath(compiledAsset.getAbsolutePath()), "-f", "cbm", "--maxerrors","16",normalizeWindowsPath(sourceFile.getAbsolutePath())}; + String[] params = {"--outfile", normalizeWindowsPath(tempFile.getAbsolutePath()), "-f", "cbm", "--maxerrors","16",normalizeWindowsPath(sourceFile.getAbsolutePath())}; int status = acme.run("Acme", params); successful = status == 0; - if (!successful) { - compiledAsset.delete(); - compiledAsset = null; + if (successful) { + compiledAsset = ByteBuffer.wrap(Files.readAllBytes(tempFile.toPath())); } + tempFile.delete(); } finally { restoreSystemOutput(); System.setProperty("user.dir", oldPath); + if (tempFile != null && tempFile.exists()) { + tempFile.delete(); + } } rawOutput.add("Error output:"); extractOutput(baosErr.toString()); diff --git a/src/main/java/jace/assembly/AcmeCrossAssembler.java b/src/main/java/jace/assembly/AcmeCrossAssembler.java index 1264223..598ee04 100644 --- a/src/main/java/jace/assembly/AcmeCrossAssembler.java +++ b/src/main/java/jace/assembly/AcmeCrossAssembler.java @@ -1,7 +1,20 @@ package jace.assembly; -import org.ibex.nestedvm.UnixRuntime; -/* This file was generated from acme by Mips2Java on Tue Jul 14 00:46:52 CDT 2015 */ +import org.ibex.nestedvm.UnixRuntime; + +// Note: Based on R336 branch of ACME cross assembler +// https://sourceforge.net/projects/acme-crossass/ +// Compiled with these C flags: +// CFLAGS= -O3 -mmemcpy -ffunction-sections -fdata-sections -falign-functions=512 -fno-rename-registers -fno-schedule-insns -fno-delayed-branch -Wstrict-prototypes -march=mips1 -specs=/Users/brobert/Documents/code/nestedvm/upstream/install/mips-unknown-elf/lib/crt0-override.spec -static -mmemcpy --static -Wl,--gc-sections +// Converted with NestedVM using: +// java -cp ../nestedvm/build:../nestedvm/upstream/build/classgen/build org.ibex.nestedvm.Compiler -outformat java -outfile acme.java -o unixRuntime -o assumeTailCalls -o onePage -o maxInsnPerMethod=512 jace.assembly.AcmeCrossAssembler acme + +// Auto-generated file, don't perform any code lint checks +@SuppressWarnings("all") + +/* + * This file was generated from acme by Mips2Java on Thu Feb 15 14:30:54 CST 2024 + */ public final class AcmeCrossAssembler extends UnixRuntime { /* program counter */ @@ -22,151 +35,134 @@ public final class AcmeCrossAssembler extends UnixRuntime { /* FP Control Register */ private int fcsr = 0; - private final void run_10000() throws ExecutionException { /* 0x10000 - 0x10200 */ + private final int[] page = readPages[0]; + private final void run_10000() throws ExecutionException { /* 0x10000 - 0x10800 */ int addr, tmp; for(;;) { switch(pc) { case 0x10000: r29 = r29 + -32; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; + page[(r29+20)>>>2] = r31; if(r0 >= 0) { - /* Next insn is delay slot */ r31=0x10010; pc=0x10010; continue; } case 0x10010: - /* Next insn is delay slot */ r31=0x10018; pc=0x101ac; continue; case 0x10018: if(r0 >= 0) { - /* Next insn is delay slot */ r31=0x10020; pc=0x10020; continue; } case 0x10020: - /* Next insn is delay slot */ r31=0x10028; pc=0x10208; - run_10200(); return; + continue; case 0x10028: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r31= page[(r29+20)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; case 0x10038: r29 = r29 + -32; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; + page[(r29+20)>>>2] = r31; if(r0 >= 0) { - /* Next insn is delay slot */ r31=0x10048; pc=0x10048; continue; } case 0x10048: - /* Next insn is delay slot */ r31=0x10050; pc=0x100e4; continue; case 0x10050: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r31= page[(r29+20)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; case 0x10060: - r4 = 7 << 16; - r2 = 7 << 16; - r4 = r4 + 12296; - r2 = r2 + 12299; + r4 = 6 << 16; + r2 = 6 << 16; + r4 = r4 + 26296; + r2 = r2 + 26299; r2 = r2 - r4; r2 = (r2&0xffffffffL) < (7&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ r25 = 0 << 16; pc=0x10088; continue; } r25 = 0 << 16; case 0x10080: - /* Next insn is delay slot */ pc=r31; return; case 0x10088: r25 = r25 + 0; if(r25 == r0) { - /* Next insn is delay slot */ pc=0x10080; continue; } - /* Next insn is delay slot */ pc=r25; return; case 0x1009c: - r4 = 7 << 16; - r2 = 7 << 16; - r4 = r4 + 12296; - r2 = r2 + 12296; + r4 = 6 << 16; + r2 = 6 << 16; + r4 = r4 + 26296; + r2 = r2 + 26296; r2 = r2 - r4; r2 = r2 >> 2; r3 = r2 >>> 31; r2 = r3 + r2; r5 = r2 >> 1; if(r5 != r0) { - /* Next insn is delay slot */ r25 = 0 << 16; pc=0x100d0; continue; } r25 = 0 << 16; case 0x100c8: - /* Next insn is delay slot */ pc=r31; return; case 0x100d0: r25 = r25 + 0; if(r25 == r0) { - /* Next insn is delay slot */ pc=0x100c8; continue; } - /* Next insn is delay slot */ pc=r25; return; case 0x100e4: r29 = r29 + -40; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - r19 = 7 << 16; - addr=r19+14512; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + page[(r29+32)>>>2] = r19; + r19 = 6 << 16; + addr=r19+27816; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r2 = tmp; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; + page[(r29+36)>>>2] = r31; + page[(r29+28)>>>2] = r18; + page[(r29+24)>>>2] = r17; if(r2 != r0) { - /* Next insn is delay slot */ - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; + page[(r29+20)>>>2] = r16; pc=0x10190; continue; } - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r18 = 7 << 16; - r17 = 7 << 16; - r18 = r18 + -14840; - r17 = r17 + -14836; - r16 = 7 << 16; + page[(r29+20)>>>2] = r16; + r18 = 6 << 16; + r17 = 6 << 16; + r18 = r18 + -8184; + r17 = r17 + -8180; + r16 = 6 << 16; r17 = r17 - r18; - r2 = readPages[(r16+14516)>>>12][((r16+14516)>>>2)&0x3ff]; + r2= page[(r16+27820)>>>2]; r17 = r17 >> 2; r17 = r17 + -1; r3 = ((r2 & 0xffffffffL) < (r17 & 0xffffffffL)) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ r2 = r2 + 1; pc=0x10164; continue; @@ -175,24 +171,21 @@ public final class AcmeCrossAssembler extends UnixRuntime { case 0x10138: r3 = r2 << 2; r3 = r18 + r3; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - writePages[(r16+14516)>>>12][((r16+14516)>>>2)&0x3ff] = r2; + r3= page[(r3+0)>>>2]; + page[(r16+27820)>>>2] = r2; pc=r3; r31=0x10150; return; case 0x10150: - r2 = readPages[(r16+14516)>>>12][((r16+14516)>>>2)&0x3ff]; + r2= page[(r16+27820)>>>2]; r3 = ((r2 & 0xffffffffL) < (r17 & 0xffffffffL)) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ r2 = r2 + 1; pc=0x10138; continue; } r2 = r2 + 1; case 0x10164: - /* Next insn is delay slot */ r31=0x1016c; pc=0x10060; continue; @@ -200,32 +193,29 @@ public final class AcmeCrossAssembler extends UnixRuntime { r2 = 0 << 16; r2 = r2 + 0; if(r2 == r0) { - /* Next insn is delay slot */ r2 = r0 + 1; pc=0x1018c; continue; } r2 = r0 + 1; - r4 = 7 << 16; - /* Next insn is delay slot */ - r4 = r4 + 5436; + r4 = 6 << 16; + r4 = r4 + 15256; r31=0x10188; pc=0x0; throw new ExecutionException("Branch to addr 0x0"); case 0x10188: r2 = r0 + 1; case 0x1018c: - addr=r19+14512; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + addr=r19+27816; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; case 0x10190: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - /* Next insn is delay slot */ + r31= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r29 = r29 + 40; pc=r31; return; @@ -234,25 +224,22 @@ public final class AcmeCrossAssembler extends UnixRuntime { r29 = r29 + -24; r2 = r2 + 0; if(r2 == r0) { - /* Next insn is delay slot */ - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; + page[(r29+20)>>>2] = r31; pc=0x101d4; continue; } - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - r4 = 7 << 16; - r5 = 7 << 16; - r4 = r4 + 5436; - /* Next insn is delay slot */ - r5 = r5 + 14520; + page[(r29+20)>>>2] = r31; + r4 = 6 << 16; + r5 = 6 << 16; + r4 = r4 + 15256; + r5 = r5 + 27824; r31=0x101d4; pc=0x0; throw new ExecutionException("Branch to addr 0x0"); case 0x101d4: - r4 = 7 << 16; - r2 = readPages[(r4+5440)>>>12][((r4+5440)>>>2)&0x3ff]; + r4 = 6 << 16; + r2= page[(r4+15260)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ r2 = 0 << 16; pc=0x101fc; continue; @@ -260,86 +247,64 @@ public final class AcmeCrossAssembler extends UnixRuntime { r2 = 0 << 16; r2 = r2 + 0; if(r2 == r0) { - /* Next insn is delay slot */ pc=0x101fc; continue; } - /* Next insn is delay slot */ - r4 = r4 + 5440; + r4 = r4 + 15260; pc=r2; r31=0x101fc; return; case 0x101fc: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - case 0x10200: - pc=0x10200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_10200() throws ExecutionException { /* 0x10200 - 0x10400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x10200: - /* Next insn is delay slot */ + r31= page[(r29+20)>>>2]; r29 = r29 + 24; pc=0x1009c; - run_10000(); return; + continue; case 0x10208: - r2 = 7 << 16; - r2 = readPages[(r2+-14848)>>>12][((r2+-14848)>>>2)&0x3ff]; + r2 = 6 << 16; + r2= page[(r2+-8192)>>>2]; r3 = r0 + -1; if(r2 == r3) { - /* Next insn is delay slot */ pc=0x10260; continue; } r29 = r29 + -32; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r16 = 7 << 16; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r16 = r16 + -14852; + page[(r29+20)>>>2] = r16; + r16 = 6 << 16; + page[(r29+24)>>>2] = r17; + page[(r29+28)>>>2] = r31; + r16 = r16 + -8196; r17 = r0 + -1; case 0x10238: - /* Next insn is delay slot */ r16 = r16 + -4; pc=r2; r31=0x10240; return; case 0x10240: - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + r2= page[(r16+4)>>>2]; if(r2 != r17) { - /* Next insn is delay slot */ pc=0x10238; continue; } - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r29 = r29 + 32; case 0x10260: - /* Next insn is delay slot */ pc=r31; return; case 0x10268: r2 = r4 + 1; case 0x1026c: addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r3 = tmp; if(r3 != r0) { - /* Next insn is delay slot */ r4 = r4 + 1; pc=0x1026c; continue; } r4 = r4 + 1; - /* Next insn is delay slot */ r2 = r4 - r2; pc=r31; return; @@ -350,9 +315,8 @@ public final class AcmeCrossAssembler extends UnixRuntime { r5 = r6 + r0; r6 = r7 + r0; r7 = r16 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r18; - /* Next insn is delay slot */ + page[(r29+16)>>>2] = r17; + page[(r29+20)>>>2] = r18; pc=r2; r31=0x102ac; return; @@ -375,45 +339,29 @@ public final class AcmeCrossAssembler extends UnixRuntime { return; } case 0x102c4: - case 0x10400: - pc=0x10400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_10400() throws ExecutionException { /* 0x10400 - 0x10600 */ - int addr, tmp; - for(;;) { - switch(pc) { case 0x10400: r29 = r29 + -24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; + page[(r29+16)>>>2] = r16; + page[(r29+20)>>>2] = r31; r16 = r4 + r0; if(r28 == r0) { - /* Next insn is delay slot */ pc=0x1047c; continue; } case 0x10418: - writePages[(r28+-31080)>>>12][((r28+-31080)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ + page[(r28+-31520)>>>2] = r5; r31=0x10424; pc=0x10000; - run_10000(); return; + continue; case 0x10424: r4 = 1 << 16; r4 = r4 + 56; - /* Next insn is delay slot */ r31=0x10434; - pc=0x38a00; - run_38a00(); return; + pc=0x49600; + run_49000(); return; case 0x10434: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + r2= page[(r16+0)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ pc=0x1048c; continue; } @@ -421,566 +369,1106 @@ public final class AcmeCrossAssembler extends UnixRuntime { r4 = r0 + r0; case 0x1044c: r2 = r2 + 4; - r6 = readPages[(r2+-4)>>>12][((r2+-4)>>>2)&0x3ff]; + r6= page[(r2+-4)>>>2]; r4 = r4 + 1; if(r6 != r0) { - /* Next insn is delay slot */ pc=0x1044c; continue; } case 0x10460: - r6 = readPages[(r28+-31080)>>>12][((r28+-31080)>>>2)&0x3ff]; + r6= page[(r28+-31520)>>>2]; r5 = r16 + r0; - /* Next insn is delay slot */ r31=0x10470; - pc=0x11c00; - run_11c00(); return; + pc=0x12400; + run_12000(); return; case 0x10470: r4 = r2 + r0; - /* Next insn is delay slot */ r31=0x1047c; - pc=0x38e00; - run_38e00(); return; + pc=0x49a00; + run_49800(); return; case 0x1047c: - r2 = 8 << 16; - r28 = r2 + -20464; - /* Next insn is delay slot */ + r2 = 7 << 16; + r28 = r2 + -6464; pc=0x10418; continue; case 0x1048c: r4 = r0 + r0; - /* Next insn is delay slot */ pc=0x10460; continue; case 0x10600: - pc=0x10600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_10600() throws ExecutionException { /* 0x10600 - 0x10800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x10600: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; + r2= page[(r28+-31512)>>>2]; r7 = r4 + r0; - r5 = 7 << 16; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r6 = 7 << 16; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r6 = 6 << 16; r29 = r29 + -24; - r5 = r5 + -12288; - r6 = r6 + -7904; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ + r5 = r5 + -4096; + r6 = r6 + 3672; + page[(r29+20)>>>2] = r31; r31=0x1062c; - pc=0x3bc00; - run_3bc00(); return; + pc=0x4b800; + run_4b800(); return; case 0x1062c: r4 = r0 + 1; - /* Next insn is delay slot */ r31=0x10638; - pc=0x38e00; - run_38e00(); return; + pc=0x49a00; + run_49800(); return; case 0x10638: case 0x10800: pc=0x10800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_10800() throws ExecutionException { /* 0x10800 - 0x10a00 */ + private final void run_10800() throws ExecutionException { /* 0x10800 - 0x11000 */ int addr, tmp; for(;;) { switch(pc) { case 0x10800: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r6 = 7 << 16; + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r6 = 6 << 16; r29 = r29 + -24; - r5 = r5 + -12260; - r6 = r6 + -7904; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ + r5 = r5 + -4068; + r6 = r6 + 10824; + page[(r29+20)>>>2] = r31; r31=0x10828; - pc=0x3bc00; - run_3bc00(); return; + pc=0x4b800; + run_4b800(); return; case 0x10828: r4 = r0 + 1; - /* Next insn is delay slot */ r31=0x10834; - pc=0x38e00; - run_38e00(); return; + pc=0x49a00; + run_49800(); return; case 0x10834: - case 0x10a00: - pc=0x10a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_10a00() throws ExecutionException { /* 0x10a00 - 0x10c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x10a00: - r4 = 7 << 16; + r2= page[(r28+-31512)>>>2]; + r7 = r4 + r0; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r6 = 6 << 16; r29 = r29 + -24; - r4 = r4 + -12200; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ + r5 = r5 + -4036; + r6 = r6 + 3672; + page[(r29+20)>>>2] = r31; + r31=0x10860; + pc=0x4b800; + run_4b800(); return; + case 0x10860: + r4 = r0 + 1; + r31=0x1086c; + pc=0x49a00; + run_49800(); return; + case 0x1086c: + case 0x10a00: + r4 = 6 << 16; + r29 = r29 + -24; + r4 = r4 + -3992; + page[(r29+20)>>>2] = r31; r31=0x10a18; - pc=0x40400; - run_40400(); return; + pc=0x4f800; + run_4f800(); return; case 0x10a18: - r4 = 7 << 16; - r4 = r4 + -12104; - /* Next insn is delay slot */ + r4 = 6 << 16; + r4 = r4 + -3896; r31=0x10a28; - pc=0x40400; - run_40400(); return; + pc=0x4f800; + run_4f800(); return; case 0x10a28: - r4 = 7 << 16; - r4 = r4 + -12016; - /* Next insn is delay slot */ + r4 = 6 << 16; + r4 = r4 + -3816; r31=0x10a38; - pc=0x40400; - run_40400(); return; + pc=0x4f800; + run_4f800(); return; case 0x10a38: r4 = r0 + r0; - /* Next insn is delay slot */ r31=0x10a44; - pc=0x38e00; - run_38e00(); return; + pc=0x49a00; + run_49800(); return; case 0x10a44: - case 0x10c00: - pc=0x10c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_10c00() throws ExecutionException { /* 0x10c00 - 0x10e00 */ - int addr, tmp; - for(;;) { - switch(pc) { case 0x10c00: r29 = r29 + -64; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r16; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r21; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r20; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r19; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r18; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r17; + page[(r29+32)>>>2] = r17; + page[(r29+60)>>>2] = r31; + page[(r29+56)>>>2] = r23; + page[(r29+52)>>>2] = r22; + page[(r29+48)>>>2] = r21; + page[(r29+44)>>>2] = r20; + page[(r29+40)>>>2] = r19; + page[(r29+36)>>>2] = r18; + page[(r29+28)>>>2] = r16; addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r16 = r4 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x10d7c; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r16 = tmp; + r17 = r4 + r0; + if(r16 == r0) { + pc=0x10df0; continue; } - r21 = 7 << 16; - r20 = 7 << 16; - r18 = 7 << 16; - r21 = r21 + -9536; - r20 = r20 + -9308; - r19 = 7 << 16; - r18 = r18 + -9268; - r17 = 7 << 16; - case 0x10c50: - r3 = r2 + -68; - r3 = r3 & 255; - r5 = (r3&0xffffffffL) < (51&0xffffffffL) ? 1 : 0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x10d10; + r22 = 6 << 16; + r20 = 6 << 16; + r19 = 6 << 16; + r22 = r22 + 360; + r21 = 6 << 16; + r20 = r20 + 588; + r19 = r19 + 628; + r18 = 6 << 16; + case 0x10c58: + r2 = r16 + -68; + r2 = r2 & 255; + r3 = (r2&0xffffffffL) < (51&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x10d74; continue; } - r3 = r3 << 2; - r3 = r21 + r3; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r3; + r2 = r2 << 2; + r2 = r22 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; return; - case 0x10c7c: - r16 = r18 + r0; - case 0x10c80: - addr=r16+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + case 0x10c84: + r19 = 6 << 16; + r4 = r19 + 17104; + r31=0x10c94; + pc=0x1be00; + run_1b800(); return; + case 0x10c94: + addr=r17+1; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + r20 = r17 + 1; + r2 = r0 + 61; + r16 = r20 + r0; + if(r5 == r2) { + pc=0x10cec; + continue; + } + if(r5 == r0) { + pc=0x10fbc; + continue; + } + r18 = r19 + 17104; + r17 = r0 + 61; + pc=0x10ccc; + continue; + case 0x10cc4: + if(r5 == r0) { + pc=0x10fbc; + continue; + } + case 0x10ccc: + r16 = r16 + 1; + r4 = r18 + r0; + r31=0x10cdc; + pc=0x1c400; + run_1c000(); return; + case 0x10cdc: + addr=r16+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + if(r5 != r17) { + pc=0x10cc4; + continue; + } + case 0x10cec: + addr=r16+1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x10f34; - run_10e00(); return; + pc=0x10fbc; + continue; } r3 = r0 + 37; r4 = r16 + 1; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x10f4c; - run_10e00(); return; + pc=0x1101c; + run_11000(); return; } r3 = r0 + 38; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x10f94; - run_10e00(); return; + pc=0x11044; + run_11000(); return; } r3 = r0 + 36; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x10fa4; - run_10e00(); return; + pc=0x11054; + run_11000(); return; } r3 = r0 + 48; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x10f5c; - run_10e00(); return; + pc=0x10ff0; + continue; } - case 0x10cc4: + case 0x10d30: r6 = r0 + 10; - case 0x10cc8: + case 0x10d34: r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x10cd4; - pc=0x43600; - run_43600(); return; - case 0x10cd4: - r4 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r16 = r2 + r0; + r31=0x10d40; + pc=0x52000; + run_52000(); return; + case 0x10d40: + r4= page[(r29+16)>>>2]; + r17 = r2 + r0; addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x10fb4; - run_10e00(); return; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r16 = tmp; + if(r16 != r0) { + pc=0x11064; + run_11000(); return; } - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; + r4 = r19 + 17104; r5 = r0 + r0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x10d00; - pc=0x17c00; - run_17c00(); return; - case 0x10d00: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x10d0c; - pc=0x30200; - run_30200(); return; - case 0x10d0c: - r2 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - case 0x10d10: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r21 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r20 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r19 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r18 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r17 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r16 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + r31=0x10d68; + pc=0x1c400; + run_1c000(); return; + case 0x10d68: + r4 = r17 + r0; + r31=0x10d74; + pc=0x41200; + run_41000(); return; + case 0x10d74: + r31= page[(r29+60)>>>2]; + r2 = r16 + r0; + r23= page[(r29+56)>>>2]; + r22= page[(r29+52)>>>2]; + r21= page[(r29+48)>>>2]; + r20= page[(r29+44)>>>2]; + r19= page[(r29+40)>>>2]; + r18= page[(r29+36)>>>2]; + r17= page[(r29+32)>>>2]; + r16= page[(r29+28)>>>2]; r29 = r29 + 64; - /* Next insn is delay slot */ pc=r31; return; - case 0x10d38: - r2 = readPages[(r28+-30736)>>>12][((r28+-30736)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r28+-30736)>>>12][((r28+-30736)>>>2)&0x3ff] = r2; - addr=r16+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + case 0x10da8: + r2 = r21 + 31340; + r3= page[(r2+4)>>>2]; + r3 = r3 + 1; + page[(r2+4)>>>2] = r3; + addr=r17+1; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = r2 + -48; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r16 = tmp; + r3 = r16 + -48; r4 = r3 & 255; r4 = (r4&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x10d70; + pc=0x10de4; continue; } - writePages[(r28+-30736)>>>12][((r28+-30736)>>>2)&0x3ff] = r3; - addr=r16+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + page[(r2+4)>>>2] = r3; + addr=r17+2; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r16 = r16 + 1; - case 0x10d70: - r16 = r16 + 1; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x10c50; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r16 = tmp; + r17 = r17 + 1; + case 0x10de4: + r17 = r17 + 1; + if(r16 != r0) { + pc=0x10c58; continue; } - case 0x10d7c: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x10d10; - continue; - case 0x10d88: - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r3 = r0 + 61; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r0; - addr=r16+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - r18 = r16 + 1; - if(r5 == r3) { - /* Next insn is delay slot */ - pc=0x10c7c; - continue; - } - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x10f34; - run_10e00(); return; - } - r4 = r2 + r0; - r16 = r18 + r0; - r17 = r0 + 61; - /* Next insn is delay slot */ - pc=0x10dcc; - continue; - case 0x10dc0: - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x10f34; - run_10e00(); return; - } - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - case 0x10dcc: - r16 = r16 + 1; - /* Next insn is delay slot */ - r31=0x10dd8; - pc=0x17c00; - run_17c00(); return; - case 0x10dd8: - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - if(r5 != r17) { - /* Next insn is delay slot */ - pc=0x10dc0; - continue; - } - /* Next insn is delay slot */ - pc=0x10c80; - continue; case 0x10df0: - r4 = 7 << 16; - r4 = r4 + -12104; - /* Next insn is delay slot */ - r31=0x10e00; - pc=0x40400; - run_40400(); return; - case 0x10e00: - pc=0x10e00; + r16 = r0 + r0; + pc=0x10d74; + continue; + case 0x10dfc: + addr=r17+1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r16 = tmp; + if(r16 == r0) { + pc=0x10f98; + continue; + } + r4 = r17 + 1; + r31=0x10e18; + pc=0x28000; + run_28000(); return; + case 0x10e18: + r16 = r0 + r0; + pc=0x10d74; + continue; + case 0x10e24: + r4 = 6 << 16; + r4 = r4 + -3896; + r31=0x10e34; + pc=0x4f800; + run_4f800(); return; + case 0x10e34: + r4 = r0 + r0; + r31=0x10e40; + pc=0x49a00; + run_49800(); return; + case 0x10e40: + r31=0x10e48; + pc=0x10a00; + continue; + case 0x10e48: + r4 = r18 + 604; + r31=0x10e54; + pc=0x1b000; + run_1b000(); return; + case 0x10e54: + page[(r28+-31396)>>>2] = r2; + addr=r17+1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r16 = tmp; + pc=0x10de4; + continue; + case 0x10e64: + r4 = r19 + r0; + r31=0x10e70; + pc=0x1b000; + run_1b000(); return; + case 0x10e70: + page[(r28+-31404)>>>2] = r2; + addr=r17+1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r16 = tmp; + pc=0x10de4; + continue; + case 0x10e80: + r4 = r20 + r0; + r31=0x10e8c; + pc=0x1b000; + run_1b000(); return; + case 0x10e8c: + page[(r28+-31408)>>>2] = r2; + addr=r17+1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r16 = tmp; + pc=0x10de4; + continue; + case 0x10e9c: + r17 = r17 + 1; + r5 = 6 << 16; + r4 = r17 + r0; + r5 = r5 + -1392; + r31=0x10eb4; + pc=0x51600; + run_51000(); return; + case 0x10eb4: + if(r2 == r0) { + pc=0x10fc8; + continue; + } + r5 = 6 << 16; + r4 = r17 + r0; + r5 = r5 + -1376; + r31=0x10ed0; + pc=0x51600; + run_51000(); return; + case 0x10ed0: + if(r2 == r0) { + pc=0x1102c; + run_11000(); return; + } + r5 = 6 << 16; + r4 = r17 + r0; + r5 = r5 + -1364; + r31=0x10eec; + pc=0x51600; + run_51000(); return; + case 0x10eec: + if(r2 == r0) { + pc=0x10fdc; + continue; + } + r5 = 6 << 16; + r4 = r17 + r0; + r5 = r5 + -1352; + r31=0x10f08; + pc=0x51600; + run_51000(); return; + case 0x10f08: + if(r2 != r0) { + pc=0x1106c; + run_11000(); return; + } + r3 = r0 + 1; + r2 = 6 << 16; + page[(r2+31352)>>>2] = r3; + r16 = r0 + r0; + pc=0x10d74; + continue; + case 0x10f28: + r31=0x10f30; + pc=0x1ac00; + run_1a800(); return; + case 0x10f30: + r23 = r2 + r0; + if(r2 == r0) { + pc=0x110c0; + run_11000(); return; + } + r16 = 6 << 16; + r4 = r16 + 17104; + r31=0x10f4c; + pc=0x1be00; + run_1b800(); return; + case 0x10f4c: + r4 = r16 + 17104; + r5 = r23 + r0; + r31=0x10f5c; + pc=0x1c600; + run_1c000(); return; + case 0x10f5c: + r4 = r16 + 17104; + r5 = r0 + r0; + r31=0x10f6c; + pc=0x1c400; + run_1c000(); return; + case 0x10f6c: + r4 = r16 + 17104; + r5 = r4 + r0; + r31=0x10f7c; + pc=0x1cc00; + run_1c800(); return; + case 0x10f7c: + r31=0x10f84; + pc=0x34e00; + run_34800(); return; + case 0x10f84: + if(r2 != r0) { + pc=0x11098; + run_11000(); return; + } + addr=r17+1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r16 = tmp; + pc=0x10de4; + continue; + case 0x10f98: + r4 = 6 << 16; + r4 = r4 + -1408; + r31=0x10fa8; + pc=0x1b000; + run_1b000(); return; + case 0x10fa8: + r4 = r2 + r0; + r31=0x10fb4; + pc=0x28000; + run_28000(); return; + case 0x10fb4: + pc=0x10d74; + continue; + case 0x10fbc: + r4 = r20 + r0; + r31=0x10fc8; + pc=0x10600; + run_10000(); return; + case 0x10fc8: + r2 = 6 << 16; + page[(r2+31348)>>>2] = r0; + r16 = r0 + r0; + pc=0x10d74; + continue; + case 0x10fdc: + r2 = 6 << 16; + page[(r2+31356)>>>2] = r0; + r16 = r0 + r0; + pc=0x10d74; + continue; + case 0x10ff0: + addr=r16+2; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r3 = tmp; + r2 = r0 + 88; + r3 = r3 & 223; + r3 = r3 << 24; + case 0x11000: + pc=0x11000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_10e00() throws ExecutionException { /* 0x10e00 - 0x11000 */ + private final void run_11000() throws ExecutionException { /* 0x11000 - 0x11800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x10e00: - r4 = r0 + r0; - /* Next insn is delay slot */ - r31=0x10e0c; - pc=0x38e00; - run_38e00(); return; - case 0x10e0c: - /* Next insn is delay slot */ - r31=0x10e14; - pc=0x10a00; - run_10a00(); return; - case 0x10e14: - r4 = r19 + -9292; - /* Next insn is delay slot */ - r31=0x10e20; - pc=0x16a00; - run_16a00(); return; - case 0x10e20: - writePages[(r28+-30840)>>>12][((r28+-30840)>>>2)&0x3ff] = r2; - addr=r16+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x10d70; - run_10c00(); return; - case 0x10e30: - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x10e3c; - pc=0x16a00; - run_16a00(); return; - case 0x10e3c: - writePages[(r28+-30848)>>>12][((r28+-30848)>>>2)&0x3ff] = r2; - addr=r16+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x10d70; - run_10c00(); return; - case 0x10e4c: - r4 = r20 + r0; - /* Next insn is delay slot */ - r31=0x10e58; - pc=0x16a00; - run_16a00(); return; - case 0x10e58: - writePages[(r28+-30852)>>>12][((r28+-30852)>>>2)&0x3ff] = r2; - addr=r16+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x10d70; - run_10c00(); return; - case 0x10e68: - r16 = r16 + 1; - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -10396; - /* Next insn is delay slot */ - r31=0x10e80; - pc=0x42c00; - run_42c00(); return; - case 0x10e80: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x10f40; - continue; + case 0x11000: + r3 = r3 >> 24; + if(r3 != r2) { + pc=0x10d30; + run_10800(); return; } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -10380; - /* Next insn is delay slot */ - r31=0x10e9c; - pc=0x42c00; - run_42c00(); return; - case 0x10e9c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x10f88; - continue; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -10368; - /* Next insn is delay slot */ - r31=0x10eb8; - pc=0x42c00; - run_42c00(); return; - case 0x10eb8: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x10fc4; - continue; - } - r2 = r0 + 1; - writePages[(r28+-30740)>>>12][((r28+-30740)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x10d10; - run_10c00(); return; - case 0x10ed4: - r4 = r17 + -10412; - /* Next insn is delay slot */ - r31=0x10ee0; - pc=0x16a00; - run_16a00(); return; - case 0x10ee0: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r2 + r0; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - r31=0x10ef4; - pc=0x17e00; - run_17e00(); return; - case 0x10ef4: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x10f04; - pc=0x17c00; - run_17c00(); return; - case 0x10f04: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r4 + r0; - /* Next insn is delay slot */ - r31=0x10f18; - pc=0x18000; - run_18000(); return; - case 0x10f18: - /* Next insn is delay slot */ - r31=0x10f20; - pc=0x26800; - run_26800(); return; - case 0x10f20: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x10fbc; - continue; - } - addr=r16+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x10d70; - run_10c00(); return; - case 0x10f34: - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x10f40; - pc=0x10600; - run_10600(); return; - case 0x10f40: - writePages[(r28+-32332)>>>12][((r28+-32332)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x10d10; - run_10c00(); return; - case 0x10f4c: + r4 = r16 + 3; + r6 = r0 + 16; + pc=0x10d34; + run_10800(); return; + case 0x1101c: r4 = r16 + 2; r6 = r0 + 2; - /* Next insn is delay slot */ - pc=0x10cc8; - run_10c00(); return; - case 0x10f5c: - addr=r16+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + pc=0x10d34; + run_10800(); return; + case 0x1102c: + r3 = r0 + 4; + r2 = 6 << 16; + page[(r2+31392)>>>2] = r3; + r16 = r0 + r0; + pc=0x10d74; + run_10800(); return; + case 0x11044: + r4 = r16 + 2; + r6 = r0 + 8; + pc=0x10d34; + run_10800(); return; + case 0x11054: + r4 = r16 + 2; + r6 = r0 + 16; + pc=0x10d34; + run_10800(); return; + case 0x11064: + r31=0x1106c; + pc=0x10600; + run_10000(); return; + case 0x1106c: + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r6 = 6 << 16; + r5 = r5 + -1336; + r6 = r6 + 3672; + r31=0x1108c; + pc=0x4b800; + run_4b800(); return; + case 0x1108c: + r4 = r0 + 1; + r31=0x11098; + pc=0x49a00; + run_49800(); return; + case 0x11098: + r2= page[(r28+-31512)>>>2]; + r4 = 6 << 16; + r7= page[(r2+12)>>>2]; + r4 = r4 + -1476; + r5 = r0 + 1; + r6 = r0 + 30; + r31=0x110b8; + pc=0x4d600; + run_4d000(); return; + case 0x110b8: + r31=0x110c0; + pc=0x10800; + run_10800(); return; + case 0x110c0: + r2= page[(r28+-31512)>>>2]; + r4 = 6 << 16; + r7= page[(r2+12)>>>2]; + r4 = r4 + -1444; + r5 = r0 + 1; + r6 = r0 + 35; + r31=0x110e0; + pc=0x4d600; + run_4d000(); return; + case 0x110e0: + r31=0x110e8; + pc=0x10800; + run_10800(); return; + case 0x110e8: + case 0x11200: + r5 = 6 << 16; + r29 = r29 + -40; + r5 = r5 + -1308; + page[(r29+24)>>>2] = r16; + page[(r29+36)>>>2] = r31; + page[(r29+32)>>>2] = r18; + page[(r29+28)>>>2] = r17; + r16 = r4 + r0; + r31=0x11228; + pc=0x51600; + run_51000(); return; + case 0x11228: + if(r2 == r0) { + pc=0x11e08; + run_11800(); return; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -1300; + r31=0x11244; + pc=0x51600; + run_51000(); return; + case 0x11244: + if(r2 == r0) { + pc=0x11540; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -1292; + r31=0x11260; + pc=0x51600; + run_51000(); return; + case 0x11260: + if(r2 == r0) { + pc=0x115c4; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -1284; + r31=0x1127c; + pc=0x51600; + run_51000(); return; + case 0x1127c: + if(r2 == r0) { + pc=0x114ec; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -1272; + r31=0x11298; + pc=0x51600; + run_51000(); return; + case 0x11298: + if(r2 == r0) { + pc=0x114ec; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -1260; + r31=0x112b4; + pc=0x51600; + run_51000(); return; + case 0x112b4: + if(r2 == r0) { + pc=0x115fc; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -1248; + r31=0x112d0; + pc=0x51600; + run_51000(); return; + case 0x112d0: + if(r2 == r0) { + pc=0x1161c; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -1240; + r31=0x112ec; + pc=0x51600; + run_51000(); return; + case 0x112ec: + if(r2 == r0) { + pc=0x11654; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -1216; + r31=0x11308; + pc=0x51600; + run_51000(); return; + case 0x11308: + if(r2 == r0) { + pc=0x11710; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -1152; + r31=0x11324; + pc=0x51600; + run_51000(); return; + case 0x11324: + if(r2 == r0) { + pc=0x1187c; + run_11800(); return; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -1060; + r31=0x11340; + pc=0x51600; + run_51000(); return; + case 0x11340: + if(r2 == r0) { + pc=0x118f0; + run_11800(); return; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -996; + r31=0x1135c; + pc=0x51600; + run_51000(); return; + case 0x1135c: + if(r2 == r0) { + pc=0x119fc; + run_11800(); return; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -964; + r31=0x11378; + pc=0x51600; + run_51000(); return; + case 0x11378: + if(r2 == r0) { + pc=0x11aac; + run_11800(); return; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -936; + r31=0x11394; + pc=0x51600; + run_51000(); return; + case 0x11394: + if(r2 == r0) { + pc=0x1150c; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -924; + r31=0x113b0; + pc=0x51600; + run_51000(); return; + case 0x113b0: + if(r2 == r0) { + pc=0x114d4; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -916; + r31=0x113cc; + pc=0x51600; + run_51000(); return; + case 0x113cc: + if(r2 == r0) { + pc=0x11528; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -904; + r31=0x113e8; + pc=0x51600; + run_51000(); return; + case 0x113e8: + if(r2 == r0) { + pc=0x115b0; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -888; + r31=0x11404; + pc=0x51600; + run_51000(); return; + case 0x11404: + if(r2 == r0) { + pc=0x115e4; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -872; + r31=0x11420; + pc=0x51600; + run_51000(); return; + case 0x11420: + if(r2 == r0) { + pc=0x1163c; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -864; + r31=0x1143c; + pc=0x51600; + run_51000(); return; + case 0x1143c: + if(r2 == r0) { + pc=0x11b74; + run_11800(); return; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -704; + r31=0x11458; + pc=0x51600; + run_51000(); return; + case 0x11458: + if(r2 == r0) { + pc=0x11bec; + run_11800(); return; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -680; + r31=0x11474; + pc=0x51600; + run_51000(); return; + case 0x11474: + if(r2 == r0) { + pc=0x119d0; + run_11800(); return; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -672; + r31=0x11490; + pc=0x51600; + run_51000(); return; + case 0x11490: + if(r2 == r0) { + pc=0x11b5c; + run_11800(); return; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + -664; + r31=0x114ac; + pc=0x51600; + run_51000(); return; + case 0x114ac: + if(r2 == r0) { + pc=0x11c9c; + run_11800(); return; + } + case 0x114b4: + r31= page[(r29+36)>>>2]; + r2 = r16 + r0; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r29 = r29 + 40; + pc=r31; + return; + case 0x114d4: + r3 = r0 + 1; + r2 = 6 << 16; + page[(r2+31364)>>>2] = r3; + r16 = r0 + r0; + pc=0x114b4; + continue; + case 0x114ec: + r4 = 6 << 16; + r4 = r4 + 604; + r31=0x114fc; + pc=0x1b000; + run_1b000(); return; + case 0x114fc: + page[(r28+-31396)>>>2] = r2; + r16 = r0 + r0; + pc=0x114b4; + continue; + case 0x1150c: + r2= page[(r28+-31512)>>>2]; + r16 = r0 + r0; + r3= page[(r2+8)>>>2]; + r2 = 6 << 16; + page[(r2+31372)>>>2] = r3; + pc=0x114b4; + continue; + case 0x11528: + r3 = r0 + 46; + r2 = 6 << 16; + addr=r2+31340; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r16 = r0 + r0; + pc=0x114b4; + continue; + case 0x11540: + r31=0x11548; + pc=0x1ac00; + run_1a800(); return; + case 0x11548: + r17 = r2 + r0; + if(r2 == r0) { + pc=0x11ee4; + run_11800(); return; + } + r16 = 6 << 16; + r4 = r16 + 17104; + r31=0x11564; + pc=0x1be00; + run_1b800(); return; + case 0x11564: + r4 = r16 + 17104; + r5 = r17 + r0; + r31=0x11574; + pc=0x1c600; + run_1c000(); return; + case 0x11574: + r4 = r16 + 17104; + r5 = r0 + r0; + r31=0x11584; + pc=0x1c400; + run_1c000(); return; + case 0x11584: + r4 = r16 + 17104; + r5 = r4 + r0; + r31=0x11594; + pc=0x1cc00; + run_1c800(); return; + case 0x11594: + r31=0x1159c; + pc=0x34e00; + run_34800(); return; + case 0x1159c: + if(r2 != r0) { + pc=0x11f0c; + run_11800(); return; + } + case 0x115a4: + r16 = r0 + r0; + pc=0x114b4; + continue; + case 0x115b0: + r2 = 6 << 16; + page[(r2+31376)>>>2] = r0; + r16 = r0 + r0; + pc=0x114b4; + continue; + case 0x115c4: + r4 = 6 << 16; + r4 = r4 + 628; + r31=0x115d4; + pc=0x1b000; + run_1b000(); return; + case 0x115d4: + page[(r28+-31404)>>>2] = r2; + r16 = r0 + r0; + pc=0x114b4; + continue; + case 0x115e4: + r3 = r0 + -2; + r2 = 6 << 16; + page[(r2+31380)>>>2] = r3; + r16 = r0 + r0; + pc=0x114b4; + continue; + case 0x115fc: + r4 = 6 << 16; + r4 = r4 + 564; + r31=0x1160c; + pc=0x1b000; + run_1b000(); return; + case 0x1160c: + page[(r28+-31400)>>>2] = r2; + r16 = r0 + r0; + pc=0x114b4; + continue; + case 0x1161c: + r4 = 6 << 16; + r4 = r4 + 588; + r31=0x1162c; + pc=0x1b000; + run_1b000(); return; + case 0x1162c: + page[(r28+-31408)>>>2] = r2; + r16 = r0 + r0; + pc=0x114b4; + continue; + case 0x1163c: + r3 = r0 + 1; + r2 = 6 << 16; + page[(r2+31384)>>>2] = r3; + r16 = r0 + r0; + pc=0x114b4; + continue; + case 0x11654: + r4 = 6 << 16; + r4 = r4 + -1232; + r31=0x11664; + pc=0x1b000; + run_1b000(); return; + case 0x11664: + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r16 = r2 + r0; + r2 = r0 + 37; + if(r3 == r2) { + pc=0x11cb8; + run_11800(); return; + } + r2 = r0 + 38; + if(r3 == r2) { + pc=0x11d18; + run_11800(); return; + } + r2 = r0 + 36; + if(r3 == r2) { + pc=0x11d78; + run_11800(); return; + } + r2 = r0 + 48; + if(r3 == r2) { + pc=0x116e4; + continue; + } + case 0x1169c: + r4 = r16 + r0; + r6 = r0 + 10; + case 0x116a4: + r5 = r29 + 16; + r31=0x116b0; + pc=0x52000; + run_52000(); return; + case 0x116b0: + r4= page[(r29+16)>>>2]; + addr=r4+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + if(r3 != r0) { + pc=0x11f40; + run_11800(); return; + } + if(r2 < 0) { + pc=0x11f34; + run_11800(); return; + } + r3 = 6 << 16; + page[(r3+31408)>>>2] = r2; + r16 = r0 + r0; + pc=0x114b4; + continue; + case 0x116e4: + addr=r16+1; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r3 = tmp; r2 = r0 + 88; @@ -988,6032 +1476,2557 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = r3 << 24; r3 = r3 >> 24; if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x10cc4; - run_10c00(); return; + pc=0x1169c; + continue; } - r4 = r16 + 3; - r6 = r0 + 16; - /* Next insn is delay slot */ - pc=0x10cc8; - run_10c00(); return; - case 0x10f88: - writePages[(r28+-32336)>>>12][((r28+-32336)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x10d10; - run_10c00(); return; - case 0x10f94: - r4 = r16 + 2; - r6 = r0 + 8; - /* Next insn is delay slot */ - pc=0x10cc8; - run_10c00(); return; - case 0x10fa4: r4 = r16 + 2; r6 = r0 + 16; - /* Next insn is delay slot */ - pc=0x10cc8; - run_10c00(); return; - case 0x10fb4: - /* Next insn is delay slot */ - r31=0x10fbc; - pc=0x10600; - run_10600(); return; - case 0x10fbc: - /* Next insn is delay slot */ - r31=0x10fc4; - pc=0x10800; - run_10800(); return; - case 0x10fc4: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r6 = 7 << 16; - r5 = r5 + -10352; - r6 = r6 + -7904; - /* Next insn is delay slot */ - r31=0x10fe4; - pc=0x3bc00; - run_3bc00(); return; - case 0x10fe4: - r4 = r0 + 1; - /* Next insn is delay slot */ - r31=0x10ff0; - pc=0x38e00; - run_38e00(); return; - case 0x10ff0: - case 0x11000: - pc=0x11000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_11000() throws ExecutionException { /* 0x11000 - 0x11200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x11000: - r5 = 7 << 16; - r29 = r29 + -32; - r5 = r5 + -10324; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r16 = r4 + r0; - /* Next insn is delay slot */ - r31=0x11020; - pc=0x42c00; - run_42c00(); return; - case 0x11020: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x11730; - run_11600(); return; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -10316; - /* Next insn is delay slot */ - r31=0x1103c; - pc=0x42c00; - run_42c00(); return; - case 0x1103c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x11218; - run_11200(); return; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -10308; - /* Next insn is delay slot */ - r31=0x11058; - pc=0x42c00; - run_42c00(); return; - case 0x11058: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1128c; - run_11200(); return; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -10300; - /* Next insn is delay slot */ - r31=0x11074; - pc=0x42c00; - run_42c00(); return; - case 0x11074: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x111dc; - continue; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -10288; - /* Next insn is delay slot */ - r31=0x11090; - pc=0x42c00; - run_42c00(); return; - case 0x11090: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x111dc; - continue; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -10276; - /* Next insn is delay slot */ - r31=0x110ac; - pc=0x42c00; - run_42c00(); return; - case 0x110ac: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x112ac; - run_11200(); return; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -10264; - /* Next insn is delay slot */ - r31=0x110c8; - pc=0x42c00; - run_42c00(); return; - case 0x110c8: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x112cc; - run_11200(); return; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -10256; - /* Next insn is delay slot */ - r31=0x110e4; - pc=0x42c00; - run_42c00(); return; - case 0x110e4: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x112ec; - run_11200(); return; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -10188; - /* Next insn is delay slot */ - r31=0x11100; - pc=0x42c00; - run_42c00(); return; - case 0x11100: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x113c8; - run_11200(); return; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -10108; - /* Next insn is delay slot */ - r31=0x1111c; - pc=0x42c00; - run_42c00(); return; - case 0x1111c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x11430; - run_11400(); return; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -10044; - /* Next insn is delay slot */ - r31=0x11138; - pc=0x42c00; - run_42c00(); return; - case 0x11138: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x114f8; - run_11400(); return; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -10012; - /* Next insn is delay slot */ - r31=0x11154; - pc=0x42c00; - run_42c00(); return; - case 0x11154: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x115a4; - run_11400(); return; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -9984; - /* Next insn is delay slot */ - r31=0x11170; - pc=0x42c00; - run_42c00(); return; - case 0x11170: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x111fc; - continue; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -9972; - /* Next insn is delay slot */ - r31=0x1118c; - pc=0x42c00; - run_42c00(); return; - case 0x1118c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x111c8; - continue; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -9964; - /* Next insn is delay slot */ - r31=0x111a8; - pc=0x42c00; - run_42c00(); return; - case 0x111a8: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x11654; - run_11600(); return; - } - case 0x111b0: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r16 + r0; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x111c8: - r2 = r0 + 1; - writePages[(r28+-30748)>>>12][((r28+-30748)>>>2)&0x3ff] = r2; - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x111b0; + pc=0x116a4; continue; - case 0x111dc: - r4 = 7 << 16; - r4 = r4 + -9292; - /* Next insn is delay slot */ - r31=0x111ec; - pc=0x16a00; - run_16a00(); return; - case 0x111ec: - writePages[(r28+-30840)>>>12][((r28+-30840)>>>2)&0x3ff] = r2; - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x111b0; - continue; - case 0x111fc: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - case 0x11200: - pc=0x11200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_11200() throws ExecutionException { /* 0x11200 - 0x11400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x11200: - r16 = r0 + r0; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - writePages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x111b0; - run_11000(); return; - case 0x11218: - r4 = 7 << 16; - r4 = r4 + -10412; - /* Next insn is delay slot */ - r31=0x11228; - pc=0x16a00; - run_16a00(); return; - case 0x11228: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r2 + r0; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - r31=0x1123c; - pc=0x17e00; - run_17e00(); return; - case 0x1123c: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x1124c; - pc=0x17c00; - run_17c00(); return; - case 0x1124c: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r4 + r0; - /* Next insn is delay slot */ - r31=0x11260; - pc=0x18000; - run_18000(); return; - case 0x11260: - /* Next insn is delay slot */ - r31=0x11268; - pc=0x26800; - run_26800(); return; - case 0x11268: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x11738; - run_11600(); return; - } - case 0x11270: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = r0 + r0; - r2 = r16 + r0; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x1128c: - r4 = 7 << 16; - r4 = r4 + -9268; - /* Next insn is delay slot */ - r31=0x1129c; - pc=0x16a00; - run_16a00(); return; - case 0x1129c: - writePages[(r28+-30848)>>>12][((r28+-30848)>>>2)&0x3ff] = r2; - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x111b0; - run_11000(); return; - case 0x112ac: - r4 = 7 << 16; - r4 = r4 + -9332; - /* Next insn is delay slot */ - r31=0x112bc; - pc=0x16a00; - run_16a00(); return; - case 0x112bc: - writePages[(r28+-30844)>>>12][((r28+-30844)>>>2)&0x3ff] = r2; - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x111b0; - run_11000(); return; - case 0x112cc: - r4 = 7 << 16; - r4 = r4 + -9308; - /* Next insn is delay slot */ - r31=0x112dc; - pc=0x16a00; - run_16a00(); return; - case 0x112dc: - writePages[(r28+-30852)>>>12][((r28+-30852)>>>2)&0x3ff] = r2; - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x111b0; - run_11000(); return; - case 0x112ec: - r4 = 7 << 16; - r4 = r4 + -10248; - /* Next insn is delay slot */ - r31=0x112fc; - pc=0x16a00; - run_16a00(); return; - case 0x112fc: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r4 = r0 + 37; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x11670; - run_11600(); return; - } - r4 = r0 + 38; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x116b0; - run_11600(); return; - } - r4 = r0 + 36; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x116f0; - run_11600(); return; - } - r4 = r0 + 48; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x1139c; - continue; - } - case 0x11330: - r6 = r0 + 10; - case 0x11334: - r4 = r2 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x11344; - pc=0x43600; - run_43600(); return; - case 0x11344: - r4 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x11740; - run_11600(); return; - } - r3 = 1 << 16; - writePages[(r28+-32752)>>>12][((r28+-32752)>>>2)&0x3ff] = r2; - r2 = ((r2 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x11270; - continue; - } - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r5 = r5 + -10232; - case 0x11380: - r6 = 7 << 16; - r6 = r6 + -7904; - /* Next insn is delay slot */ - r31=0x11390; - pc=0x3bc00; - run_3bc00(); return; - case 0x11390: - r4 = r0 + 1; - /* Next insn is delay slot */ - r31=0x1139c; - pc=0x38e00; - run_38e00(); return; - case 0x1139c: - addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r3 = r0 + 88; - r4 = r4 & 223; - r4 = r4 << 24; - r4 = r4 >> 24; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x11330; - continue; - } - r2 = r2 + 2; - r6 = r0 + 16; - /* Next insn is delay slot */ - pc=0x11334; - continue; - case 0x113c8: - r4 = 7 << 16; - r4 = r4 + -10184; - /* Next insn is delay slot */ - r31=0x113d8; - pc=0x16a00; - run_16a00(); return; - case 0x113d8: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r2 + r0; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - r31=0x113ec; - pc=0x17e00; - run_17e00(); return; - case 0x113ec: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x113fc; - pc=0x17c00; - run_17c00(); return; - case 0x113fc: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - case 0x11400: - pc=0x11400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_11400() throws ExecutionException { /* 0x11400 - 0x11600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x11400: - r5 = r4 + r0; - /* Next insn is delay slot */ - r31=0x11410; - pc=0x18000; - run_18000(); return; - case 0x11410: - /* Next insn is delay slot */ - r31=0x11418; - pc=0x17000; - run_17000(); return; - case 0x11418: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x11748; - run_11600(); return; - } - writePages[(r28+-30836)>>>12][((r28+-30836)>>>2)&0x3ff] = r2; - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x111b0; - run_11000(); return; - case 0x11430: - r4 = 7 << 16; - r4 = r4 + -10100; - /* Next insn is delay slot */ - r31=0x11440; - pc=0x16a00; - run_16a00(); return; - case 0x11440: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r4 = r0 + 37; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x11680; - run_11600(); return; - } - r4 = r0 + 38; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x116c0; - run_11600(); return; - } - r4 = r0 + 36; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x11700; - run_11600(); return; - } - r4 = r0 + 48; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x114cc; - continue; - } - case 0x11474: - r6 = r0 + 10; - case 0x11478: - r4 = r2 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x11488; - pc=0x43600; - run_43600(); return; - case 0x11488: - r4 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x11740; - run_11600(); return; - } - writePages[(r28+-32756)>>>12][((r28+-32756)>>>2)&0x3ff] = r2; - r2 = r2 + 128; - r2 = (r2&0xffffffffL) < (384&0xffffffffL) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x11270; - run_11200(); return; - } - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r5 = r5 + -10084; - /* Next insn is delay slot */ - pc=0x11380; - run_11200(); return; - case 0x114cc: - addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r3 = r0 + 88; - r4 = r4 & 223; - r4 = r4 << 24; - r4 = r4 >> 24; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x11474; - continue; - } - r2 = r2 + 2; - r6 = r0 + 16; - /* Next insn is delay slot */ - pc=0x11478; - continue; - case 0x114f8: - r4 = 7 << 16; - r4 = r4 + -10032; - /* Next insn is delay slot */ - r31=0x11508; - pc=0x16a00; - run_16a00(); return; - case 0x11508: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r4 = r0 + 37; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x11690; - run_11600(); return; - } - r4 = r0 + 38; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x116d0; - run_11600(); return; - } - r4 = r0 + 36; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x11710; - run_11600(); return; - } - r4 = r0 + 48; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x11578; - continue; - } - case 0x1153c: - r6 = r0 + 10; - case 0x11540: - r4 = r2 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x11550; - pc=0x43600; - run_43600(); return; - case 0x11550: - r4 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x11740; - run_11600(); return; - } - writePages[(r28+-32340)>>>12][((r28+-32340)>>>2)&0x3ff] = r2; - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x111b0; - run_11000(); return; - case 0x11578: - addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r3 = r0 + 88; - r4 = r4 & 223; - r4 = r4 << 24; - r4 = r4 >> 24; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x1153c; - continue; - } - r2 = r2 + 2; - r6 = r0 + 16; - /* Next insn is delay slot */ - pc=0x11540; - continue; - case 0x115a4: - r4 = 7 << 16; - r4 = r4 + -10000; - /* Next insn is delay slot */ - r31=0x115b4; - pc=0x16a00; - run_16a00(); return; - case 0x115b4: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r4 = r0 + 37; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x116a0; - run_11600(); return; - } - r4 = r0 + 38; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x116e0; - run_11600(); return; - } - r4 = r0 + 36; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x11720; - run_11600(); return; - } - r4 = r0 + 48; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x11628; - run_11600(); return; - } - case 0x115e8: - r6 = r0 + 10; - case 0x115ec: - r4 = r2 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x115fc; - pc=0x43600; - run_43600(); return; - case 0x115fc: - r4 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - case 0x11600: - pc=0x11600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_11600() throws ExecutionException { /* 0x11600 - 0x11800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x11600: - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x11740; - continue; - } - writePages[(r28+-32764)>>>12][((r28+-32764)>>>2)&0x3ff] = r2; - writePages[(r28+-32760)>>>12][((r28+-32760)>>>2)&0x3ff] = r2; - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x111b0; - run_11000(); return; - case 0x11628: - addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r3 = r0 + 88; - r4 = r4 & 223; - r4 = r4 << 24; - r4 = r4 >> 24; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x115e8; - run_11400(); return; - } - r2 = r2 + 2; - r6 = r0 + 16; - /* Next insn is delay slot */ - pc=0x115ec; - run_11400(); return; - case 0x11654: - r4 = 7 << 16; - r4 = r4 + -12104; - /* Next insn is delay slot */ - r31=0x11664; - pc=0x40400; - run_40400(); return; - case 0x11664: - r4 = r0 + r0; - /* Next insn is delay slot */ - r31=0x11670; - pc=0x38e00; - run_38e00(); return; - case 0x11670: - r2 = r2 + 1; - r6 = r0 + 2; - /* Next insn is delay slot */ - pc=0x11334; - run_11200(); return; - case 0x11680: - r2 = r2 + 1; - r6 = r0 + 2; - /* Next insn is delay slot */ - pc=0x11478; - run_11400(); return; - case 0x11690: - r2 = r2 + 1; - r6 = r0 + 2; - /* Next insn is delay slot */ - pc=0x11540; - run_11400(); return; - case 0x116a0: - r2 = r2 + 1; - r6 = r0 + 2; - /* Next insn is delay slot */ - pc=0x115ec; - run_11400(); return; - case 0x116b0: - r2 = r2 + 1; - r6 = r0 + 8; - /* Next insn is delay slot */ - pc=0x11334; - run_11200(); return; - case 0x116c0: - r2 = r2 + 1; - r6 = r0 + 8; - /* Next insn is delay slot */ - pc=0x11478; - run_11400(); return; - case 0x116d0: - r2 = r2 + 1; - r6 = r0 + 8; - /* Next insn is delay slot */ - pc=0x11540; - run_11400(); return; - case 0x116e0: - r2 = r2 + 1; - r6 = r0 + 8; - /* Next insn is delay slot */ - pc=0x115ec; - run_11400(); return; - case 0x116f0: - r2 = r2 + 1; - r6 = r0 + 16; - /* Next insn is delay slot */ - pc=0x11334; - run_11200(); return; - case 0x11700: - r2 = r2 + 1; - r6 = r0 + 16; - /* Next insn is delay slot */ - pc=0x11478; - run_11400(); return; case 0x11710: - r2 = r2 + 1; - r6 = r0 + 16; - /* Next insn is delay slot */ - pc=0x11540; - run_11400(); return; + r4 = 6 << 16; + r4 = r4 + -1208; + r31=0x11720; + pc=0x1b000; + run_1b000(); return; case 0x11720: - r2 = r2 + 1; - r6 = r0 + 16; - /* Next insn is delay slot */ - pc=0x115ec; - run_11400(); return; - case 0x11730: - /* Next insn is delay slot */ - r31=0x11738; - pc=0x10a00; - run_10a00(); return; - case 0x11738: - /* Next insn is delay slot */ - r31=0x11740; - pc=0x10800; - run_10800(); return; - case 0x11740: - /* Next insn is delay slot */ - r31=0x11748; - pc=0x10600; - run_10600(); return; - case 0x11748: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r5 = r5 + -10172; - /* Next insn is delay slot */ - pc=0x11380; - run_11200(); return; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r16 = r2 + r0; + r2 = r0 + 37; + if(r3 == r2) { + pc=0x11cd8; + run_11800(); return; + } + r2 = r0 + 38; + if(r3 == r2) { + pc=0x11d38; + run_11800(); return; + } + r2 = r0 + 36; + if(r3 == r2) { + pc=0x11d98; + run_11800(); return; + } + r2 = r0 + 48; + if(r3 == r2) { + pc=0x11850; + run_11800(); return; + } + case 0x11758: + r4 = r16 + r0; + r6 = r0 + 10; + case 0x11760: + r5 = r29 + 16; + r31=0x1176c; + pc=0x52000; + run_52000(); return; + case 0x1176c: + r4= page[(r29+16)>>>2]; + addr=r4+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + if(r3 != r0) { + pc=0x11f40; + run_11800(); return; + } + if(r2 < 0) { + pc=0x11f34; + run_11800(); return; + } + r17 = 6 << 16; + r4 = 6 << 16; + r17 = r17 + 31340; + r4 = r4 + -1176; + page[(r17+72)>>>2] = r2; + r31=0x117a8; + pc=0x1b000; + run_1b000(); return; + case 0x117a8: + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r16 = r2 + r0; + r2 = r0 + 37; + if(r3 == r2) { + pc=0x11cc8; + run_11800(); return; + } + r2 = r0 + 38; + if(r3 == r2) { + pc=0x11d28; + run_11800(); return; + } + r2 = r0 + 36; + if(r3 == r2) { + pc=0x11d88; + run_11800(); return; + } + r2 = r0 + 48; + if(r3 == r2) { + pc=0x11824; + run_11800(); return; + } + case 0x117e0: + r4 = r16 + r0; + r6 = r0 + 10; + case 0x117e8: + r5 = r29 + 16; + r31=0x117f4; + pc=0x52000; + run_52000(); return; + case 0x117f4: + r4= page[(r29+16)>>>2]; + addr=r4+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; case 0x11800: pc=0x11800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_11800() throws ExecutionException { /* 0x11800 - 0x11a00 */ + private final void run_11800() throws ExecutionException { /* 0x11800 - 0x12000 */ int addr, tmp; for(;;) { switch(pc) { case 0x11800: - r29 = r29 + -32; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r16 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r17 = r4 + r0; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x1183c; + if(r3 != r0) { + pc=0x11f40; continue; } - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1183c; + if(r2 < 0) { + pc=0x11f34; continue; } - /* Next insn is delay slot */ - r31=0x11838; - pc=0x39200; - run_39200(); return; - case 0x11838: - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r0; - case 0x1183c: - r4 = readPages[(r28+-30840)>>>12][((r28+-30840)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1187c; - continue; - } - r5 = r28 + -32744; - /* Next insn is delay slot */ - r31=0x11858; - pc=0x3b800; - run_3b800(); return; - case 0x11858: - r16 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x11914; - continue; - } - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x11870; - pc=0x30400; - run_30400(); return; - case 0x11870: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x1187c; - pc=0x39200; - run_39200(); return; - case 0x1187c: - r4 = readPages[(r28+-30844)>>>12][((r28+-30844)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x118bc; - continue; - } - r5 = r28 + -32744; - /* Next insn is delay slot */ - r31=0x11898; - pc=0x3b800; - run_3b800(); return; - case 0x11898: - r16 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x118d8; - continue; - } - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x118b0; - pc=0x30600; - run_30600(); return; - case 0x118b0: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x118bc; - pc=0x39200; - run_39200(); return; - case 0x118bc: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r17 + r0; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x118d8: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r6 = readPages[(r28+-30844)>>>12][((r28+-30844)>>>2)&0x3ff]; - r5 = r5 + -9912; - /* Next insn is delay slot */ - r31=0x118f4; - pc=0x3bc00; - run_3bc00(); return; - case 0x118f4: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = r0 + 1; - r2 = r17 + r0; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x11914: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r6 = readPages[(r28+-30840)>>>12][((r28+-30840)>>>2)&0x3ff]; - r5 = r5 + -9956; - /* Next insn is delay slot */ - r31=0x11930; - pc=0x3bc00; - run_3bc00(); return; - case 0x11930: - r17 = r0 + 1; - /* Next insn is delay slot */ - pc=0x1187c; - continue; - case 0x11a00: - pc=0x11a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_11a00() throws ExecutionException { /* 0x11a00 - 0x11c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x11a00: - r29 = r29 + -40; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x11a20; - pc=0x27600; - run_27600(); return; - case 0x11a20: - r4 = readPages[(r28+-30836)>>>12][((r28+-30836)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x11a2c; - pc=0x17400; - run_17400(); return; - case 0x11a2c: - r4 = readPages[(r28+-32752)>>>12][((r28+-32752)>>>2)&0x3ff]; - r2 = r0 + -1; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x11a48; - continue; - } - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x11a48; - pc=0x27e00; - run_27e00(); return; - case 0x11a48: - /* Next insn is delay slot */ - r31=0x11a50; - pc=0x18e00; - run_18e00(); return; - case 0x11a50: - /* Next insn is delay slot */ - r31=0x11a58; - pc=0x2e800; - run_2e800(); return; - case 0x11a58: - r2 = readPages[(r28+-30832)>>>12][((r28+-30832)>>>2)&0x3ff]; - writePages[(r28+-30576)>>>12][((r28+-30576)>>>2)&0x3ff] = r0; - writePages[(r28+-30580)>>>12][((r28+-30580)>>>2)&0x3ff] = r0; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x11b34; - continue; - } - r18 = 7 << 16; - r19 = 7 << 16; + page[(r17+76)>>>2] = r2; r16 = r0 + r0; - r18 = r18 + 12832; - r19 = r19 + -9864; - /* Next insn is delay slot */ - pc=0x11ab8; - continue; - case 0x11a88: - r3 = readPages[(r28+-30828)>>>12][((r28+-30828)>>>2)&0x3ff]; - r4 = r2 + r0; - r17 = r3 + r17; - r5 = readPages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff]; - r16 = r16 + 1; - /* Next insn is delay slot */ - r31=0x11aa4; - pc=0x19c00; - run_19c00(); return; - case 0x11aa4: - r2 = readPages[(r28+-30832)>>>12][((r28+-30832)>>>2)&0x3ff]; - r2 = r16 < r2 ? 1 : 0; + pc=0x114b4; + run_11000(); return; + case 0x11824: + addr=r16+1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r3 = tmp; + r2 = r0 + 88; + r3 = r3 & 223; + r3 = r3 << 24; + r3 = r3 >> 24; + if(r3 != r2) { + pc=0x117e0; + run_11000(); return; + } + r4 = r16 + 2; + r6 = r0 + 16; + pc=0x117e8; + run_11000(); return; + case 0x11850: + addr=r16+1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r3 = tmp; + r2 = r0 + 88; + r3 = r3 & 223; + r3 = r3 << 24; + r3 = r3 >> 24; + if(r3 != r2) { + pc=0x11758; + run_11000(); return; + } + r4 = r16 + 2; + r6 = r0 + 16; + pc=0x11760; + run_11000(); return; + case 0x1187c: + r31=0x11884; + pc=0x1ac00; + run_1a800(); return; + case 0x11884: + r17 = r2 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x11b24; + pc=0x11f94; continue; } - case 0x11ab8: - r2 = readPages[(r28+-30828)>>>12][((r28+-30828)>>>2)&0x3ff]; - r17 = r16 << 2; - r2 = r2 + r17; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r5 = r18 + r0; - /* Next insn is delay slot */ - r31=0x11ad4; - pc=0x3b800; - run_3b800(); return; - case 0x11ad4: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x11a88; - continue; - } - r2 = readPages[(r28+-30828)>>>12][((r28+-30828)>>>2)&0x3ff]; - r5 = r19 + r0; - r17 = r2 + r17; - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = readPages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff]; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r16 = r16 + 1; - /* Next insn is delay slot */ - r31=0x11b00; - pc=0x3bc00; - run_3bc00(); return; - case 0x11b00: - r2 = readPages[(r28+-30580)>>>12][((r28+-30580)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r28+-30580)>>>12][((r28+-30580)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-30832)>>>12][((r28+-30832)>>>2)&0x3ff]; - r2 = r16 < r2 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x11ab8; - continue; - } - case 0x11b24: - r2 = readPages[(r28+-30580)>>>12][((r28+-30580)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x11b60; - continue; - } - case 0x11b34: - /* Next insn is delay slot */ - r31=0x11b3c; - pc=0x27800; - run_27800(); return; - case 0x11b3c: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = readPages[(r28+-30576)>>>12][((r28+-30576)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x11b60: - r4 = r0 + 1; - /* Next insn is delay slot */ - r31=0x11b6c; - pc=0x11800; - run_11800(); return; - case 0x11b6c: - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x11b78; - pc=0x38e00; - run_38e00(); return; - case 0x11b78: - case 0x11c00: - pc=0x11c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_11c00() throws ExecutionException { /* 0x11c00 - 0x11e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x11c00: - r29 = r29 + -32; - r2 = r0 + 1; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x11f10; - run_11e00(); return; - } - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r2 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - writePages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x11c38; - pc=0x16c00; - run_16c00(); return; - case 0x11c38: - /* Next insn is delay slot */ - r31=0x11c40; - pc=0x18200; - run_18200(); return; - case 0x11c40: - /* Next insn is delay slot */ - r31=0x11c48; - pc=0x28600; - run_28600(); return; - case 0x11c48: - r4 = 1 << 16; - r5 = 1 << 16; - r4 = r4 + 3072; - r5 = r5 + 4096; - /* Next insn is delay slot */ - r31=0x11c60; - pc=0x16800; - run_16800(); return; - case 0x11c60: - r6 = 7 << 16; - r5 = r28 + -30828; - r6 = r6 + -9824; - r4 = r28 + -30832; - /* Next insn is delay slot */ - r31=0x11c78; - pc=0x16e00; - run_16e00(); return; - case 0x11c78: - /* Next insn is delay slot */ - r31=0x11c80; - pc=0x15800; - run_15800(); return; - case 0x11c80: - /* Next insn is delay slot */ - r31=0x11c88; - pc=0x20400; - run_20400(); return; - case 0x11c88: - /* Next insn is delay slot */ - r31=0x11c90; - pc=0x22400; - run_22400(); return; - case 0x11c90: - r4 = readPages[(r28+-32756)>>>12][((r28+-32756)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x11c9c; - pc=0x26e00; - run_26e00(); return; - case 0x11c9c: - /* Next insn is delay slot */ - r31=0x11ca4; - pc=0x2e000; - run_2e000(); return; - case 0x11ca4: - r3 = 7 << 16; - r2 = r3 + 14544; - writePages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff] = r2; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r0; - r2 = readPages[(r28+-30736)>>>12][((r28+-30736)>>>2)&0x3ff]; - writePages[(r3+14544)>>>12][((r3+14544)>>>2)&0x3ff] = r0; - r2 = r2 < 2 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x11ce0; - continue; - } - r4 = 7 << 16; - r4 = r4 + -9796; - /* Next insn is delay slot */ - r31=0x11ce0; - pc=0x40400; - run_40400(); return; - case 0x11ce0: - writePages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - r31=0x11cec; - pc=0x11a00; - run_11a00(); return; - case 0x11cec: - r16 = r2 + r0; + r16 = 6 << 16; + r4 = r16 + 17104; + r31=0x118a0; + pc=0x1be00; + run_1b800(); return; + case 0x118a0: + r4 = r16 + 17104; + r5 = r17 + r0; + r31=0x118b0; + pc=0x1c600; + run_1c000(); return; + case 0x118b0: + r4 = r16 + 17104; + r5 = r0 + r0; + r31=0x118c0; + pc=0x1c400; + run_1c000(); return; + case 0x118c0: + r4 = r16 + 17104; + r5 = r4 + r0; + r31=0x118d0; + pc=0x1cc00; + run_1c800(); return; + case 0x118d0: + r31=0x118d8; + pc=0x1b600; + run_1b000(); return; + case 0x118d8: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x11d58; + pc=0x11f48; continue; } - r17 = 7 << 16; - r17 = r17 + -9784; - /* Next insn is delay slot */ - pc=0x11d18; - continue; - case 0x11d08: - r16 = r2 < r16 ? 1 : 0; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x11e50; - run_11e00(); return; + page[(r28+-31392)>>>2] = r2; + r16 = r0 + r0; + pc=0x114b4; + run_11000(); return; + case 0x118f0: + r4 = 6 << 16; + r4 = r4 + -1052; + r31=0x11900; + pc=0x1b000; + run_1b000(); return; + case 0x11900: + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r4 = r0 + 37; + if(r3 == r4) { + pc=0x11ce8; + continue; } - r16 = r2 + r0; - case 0x11d18: - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-30736)>>>12][((r28+-30736)>>>2)&0x3ff]; - r2 = r2 < 2 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ + r4 = r0 + 38; + if(r3 == r4) { pc=0x11d48; continue; } - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x11d48; - pc=0x40400; - run_40400(); return; - case 0x11d48: - /* Next insn is delay slot */ - r31=0x11d50; - pc=0x11a00; - run_11a00(); return; - case 0x11d50: + r4 = r0 + 36; + if(r3 == r4) { + pc=0x11da8; + continue; + } + r4 = r0 + 48; + if(r3 == r4) { + pc=0x119a4; + continue; + } + case 0x11934: + r6 = r0 + 10; + case 0x11938: + r4 = r2 + r0; + r5 = r29 + 16; + r31=0x11948; + pc=0x52000; + run_52000(); return; + case 0x11948: + r4= page[(r29+16)>>>2]; + addr=r4+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + if(r3 != r0) { + pc=0x11f40; + continue; + } + r3 = 6 << 16; + page[(r3+31404)>>>2] = r2; + r2 = r2 + 128; + r2 = (r2&0xffffffffL) < (384&0xffffffffL) ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ + pc=0x115a4; + run_11000(); return; + } + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r6 = 6 << 16; + r5 = r5 + -1036; + r6 = r6 + 3672; + r31=0x11998; + pc=0x4b800; + run_4b800(); return; + case 0x11998: + r4 = r0 + 1; + r31=0x119a4; + pc=0x49a00; + run_49800(); return; + case 0x119a4: + addr=r2+1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r3 = r0 + 88; + r4 = r4 & 223; + r4 = r4 << 24; + r4 = r4 >> 24; + if(r4 != r3) { + pc=0x11934; + continue; + } + r2 = r2 + 2; + r6 = r0 + 16; + pc=0x11938; + continue; + case 0x119d0: + r2 = 6 << 16; + r2 = r2 + 31340; + r3 = r0 + 8; + page[(r2+52)>>>2] = r3; + r3 = r0 + 1; + page[(r2+48)>>>2] = r3; + r3 = 256 << 16; + page[(r2+60)>>>2] = r3; + r16 = r0 + r0; + pc=0x114b4; + run_11000(); return; + case 0x119fc: + r4 = 6 << 16; + r4 = r4 + -984; + r31=0x11a0c; + pc=0x1b000; + run_1b000(); return; + case 0x11a0c: + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r4 = r0 + 37; + if(r3 == r4) { + pc=0x11cf8; + continue; + } + r4 = r0 + 38; + if(r3 == r4) { + pc=0x11d58; + continue; + } + r4 = r0 + 36; + if(r3 == r4) { + pc=0x11db8; + continue; + } + r4 = r0 + 48; + if(r3 == r4) { + pc=0x11a80; + continue; + } + case 0x11a40: + r6 = r0 + 10; + case 0x11a44: + r4 = r2 + r0; + r5 = r29 + 16; + r31=0x11a54; + pc=0x52000; + run_52000(); return; + case 0x11a54: + r4= page[(r29+16)>>>2]; + addr=r4+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + if(r3 != r0) { + pc=0x11f40; + continue; + } + r3 = 6 << 16; + page[(r3+31360)>>>2] = r2; + r16 = r0 + r0; + pc=0x114b4; + run_11000(); return; + case 0x11a80: + addr=r2+1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r3 = r0 + 88; + r4 = r4 & 223; + r4 = r4 << 24; + r4 = r4 >> 24; + if(r4 != r3) { + pc=0x11a40; + continue; + } + r2 = r2 + 2; + r6 = r0 + 16; + pc=0x11a44; + continue; + case 0x11aac: + r4 = 6 << 16; + r4 = r4 + -952; + r31=0x11abc; + pc=0x1b000; + run_1b000(); return; + case 0x11abc: + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r4 = r0 + 37; + if(r3 == r4) { pc=0x11d08; continue; } - case 0x11d58: - r16 = readPages[(r28+-30852)>>>12][((r28+-30852)>>>2)&0x3ff]; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x11df4; + r4 = r0 + 38; + if(r3 == r4) { + pc=0x11d68; continue; } - r2 = readPages[(r28+-30736)>>>12][((r28+-30736)>>>2)&0x3ff]; - r2 = r2 < 2 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x11d90; + r4 = r0 + 36; + if(r3 == r4) { + pc=0x11dc8; continue; } - r4 = 7 << 16; - r4 = r4 + -9768; - /* Next insn is delay slot */ - r31=0x11d8c; - pc=0x40400; - run_40400(); return; - case 0x11d8c: - r16 = readPages[(r28+-30852)>>>12][((r28+-30852)>>>2)&0x3ff]; - case 0x11d90: - r17 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r4 = r16 + r0; - r5 = r28 + -32744; - /* Next insn is delay slot */ - r31=0x11da4; - pc=0x3b800; - run_3b800(); return; - case 0x11da4: - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x11ea0; - run_11e00(); return; - } - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x11dc8; - pc=0x11a00; - run_11a00(); return; - case 0x11dc8: - r16 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x11df4; - continue; - } - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x11df4; - continue; - } - /* Next insn is delay slot */ - r31=0x11df0; - pc=0x39200; - run_39200(); return; - case 0x11df0: - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r0; - case 0x11df4: - r4 = readPages[(r28+-30848)>>>12][((r28+-30848)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x11ec4; - run_11e00(); return; - } - case 0x11e00: - pc=0x11e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_11e00() throws ExecutionException { /* 0x11e00 - 0x12000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x11e00: - r5 = r28 + -32748; - /* Next insn is delay slot */ - r31=0x11e10; - pc=0x3b800; - run_3b800(); return; - case 0x11e10: - r16 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x11eec; + r4 = r0 + 48; + if(r3 == r4) { + pc=0x11b30; continue; } + case 0x11af0: + r6 = r0 + 10; + case 0x11af4: r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x11e28; - pc=0x27000; - run_27000(); return; - case 0x11e28: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x11e34; - pc=0x39200; - run_39200(); return; - case 0x11e34: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r4 = r0 + r0; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x11800; - run_11800(); return; - case 0x11e50: - r2 = readPages[(r28+-30736)>>>12][((r28+-30736)>>>2)&0x3ff]; - r2 = r2 < 2 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x11e74; + r5 = r29 + 16; + r31=0x11b04; + pc=0x52000; + run_52000(); return; + case 0x11b04: + r4= page[(r29+16)>>>2]; + addr=r4+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + if(r3 != r0) { + pc=0x11f40; continue; } - r4 = 7 << 16; - r4 = r4 + -9688; - /* Next insn is delay slot */ - r31=0x11e74; - pc=0x40400; - run_40400(); return; - case 0x11e74: - r2 = 2 << 16; - r2 = r2 + -20480; - writePages[(r28+-30824)>>>12][((r28+-30824)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; + page[(r28+-32768)>>>2] = r2; + page[(r28+-32764)>>>2] = r2; + r16 = r0 + r0; + pc=0x114b4; + run_11000(); return; + case 0x11b30: + addr=r2+1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r3 = r0 + 88; + r4 = r4 & 223; + r4 = r4 << 24; + r4 = r4 >> 24; + if(r4 != r3) { + pc=0x11af0; + continue; + } + r2 = r2 + 2; + r6 = r0 + 16; + pc=0x11af4; + continue; + case 0x11b5c: + r3 = r0 + 1; + r2 = 6 << 16; + page[(r2+31368)>>>2] = r3; + r16 = r0 + r0; + pc=0x114b4; + run_11000(); return; + case 0x11b74: + r31=0x11b7c; + pc=0x1ac00; + run_1a800(); return; + case 0x11b7c: + r17 = r2 + r0; + if(r2 == r0) { + pc=0x11eb4; + continue; + } + r18 = 6 << 16; + r18 = r18 + 15264; + r5= page[(r18+4)>>>2]; + if(r5 == r0) { + pc=0x11e10; + continue; + } + r16 = r18 + r0; + pc=0x11bc0; + continue; + case 0x11bac: + r16 = r16 + 12; + r5= page[(r16+4)>>>2]; + if(r5 == r0) { + pc=0x11e10; + continue; + } + case 0x11bc0: + r4 = r17 + r0; + r31=0x11bcc; + pc=0x51600; + run_51000(); return; + case 0x11bcc: + if(r2 != r0) { + pc=0x11bac; + continue; + } + r3= page[(r16+0)>>>2]; + r2 = 6 << 16; + page[(r2+31392)>>>2] = r3; + r16 = r0 + r0; + pc=0x114b4; + run_11000(); return; + case 0x11bec: + r4 = 6 << 16; + r4 = r4 + -692; + r31=0x11bfc; + pc=0x1b000; + run_1b000(); return; + case 0x11bfc: + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r4 = r0 + 37; + if(r3 == r4) { + pc=0x11dd8; + continue; + } + r4 = r0 + 38; + if(r3 == r4) { + pc=0x11de8; + continue; + } + r4 = r0 + 36; + if(r3 == r4) { + pc=0x11df8; + continue; + } + r4 = r0 + 48; + if(r3 == r4) { + pc=0x11c70; + continue; + } + case 0x11c30: + r6 = r0 + 10; + case 0x11c34: + r4 = r2 + r0; + r5 = r29 + 16; + r31=0x11c44; + pc=0x52000; + run_52000(); return; + case 0x11c44: + r4= page[(r29+16)>>>2]; + addr=r4+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + if(r3 != r0) { + pc=0x11f40; + continue; + } + r3 = 6 << 16; + page[(r3+31396)>>>2] = r2; + r16 = r0 + r0; + pc=0x114b4; + run_11000(); return; + case 0x11c70: + addr=r2+1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r3 = r0 + 88; + r4 = r4 & 223; + r4 = r4 << 24; + r4 = r4 >> 24; + if(r4 != r3) { + pc=0x11c30; + continue; + } + r2 = r2 + 2; + r6 = r0 + 16; + pc=0x11c34; + continue; + case 0x11c9c: + r4 = 6 << 16; + r4 = r4 + -3896; + r31=0x11cac; + pc=0x4f800; + run_4f800(); return; + case 0x11cac: + r4 = r0 + r0; + r31=0x11cb8; + pc=0x49a00; + run_49800(); return; + case 0x11cb8: + r4 = r16 + 1; + r6 = r0 + 2; + pc=0x116a4; + run_11000(); return; + case 0x11cc8: + r4 = r16 + 1; + r6 = r0 + 2; + pc=0x117e8; + run_11000(); return; + case 0x11cd8: + r4 = r16 + 1; + r6 = r0 + 2; + pc=0x11760; + run_11000(); return; + case 0x11ce8: r2 = r2 + 1; - writePages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x11e98; - pc=0x11a00; - run_11a00(); return; - case 0x11e98: - /* Next insn is delay slot */ - pc=0x11e34; + r6 = r0 + 2; + pc=0x11938; continue; - case 0x11ea0: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r5 = r5 + -9728; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x11ebc; - pc=0x3bc00; - run_3bc00(); return; - case 0x11ebc: - /* Next insn is delay slot */ - pc=0x11df4; - run_11c00(); return; - case 0x11ec4: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r4 = 7 << 16; - r7 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r4 = r4 + -9652; - r5 = r0 + 1; - r6 = r0 + 75; - /* Next insn is delay slot */ - r31=0x11ee4; - pc=0x3dc00; - run_3dc00(); return; - case 0x11ee4: - /* Next insn is delay slot */ - pc=0x11e34; + case 0x11cf8: + r2 = r2 + 1; + r6 = r0 + 2; + pc=0x11a44; continue; - case 0x11eec: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r6 = readPages[(r28+-30848)>>>12][((r28+-30848)>>>2)&0x3ff]; - r5 = r5 + -9576; - /* Next insn is delay slot */ - r31=0x11f08; - pc=0x3bc00; - run_3bc00(); return; - case 0x11f08: - /* Next insn is delay slot */ - pc=0x11e34; + case 0x11d08: + r2 = r2 + 1; + r6 = r0 + 2; + pc=0x11af4; continue; - case 0x11f10: - /* Next insn is delay slot */ - r31=0x11f18; + case 0x11d18: + r4 = r16 + 1; + r6 = r0 + 8; + pc=0x116a4; + run_11000(); return; + case 0x11d28: + r4 = r16 + 1; + r6 = r0 + 8; + pc=0x117e8; + run_11000(); return; + case 0x11d38: + r4 = r16 + 1; + r6 = r0 + 8; + pc=0x11760; + run_11000(); return; + case 0x11d48: + r2 = r2 + 1; + r6 = r0 + 8; + pc=0x11938; + continue; + case 0x11d58: + r2 = r2 + 1; + r6 = r0 + 8; + pc=0x11a44; + continue; + case 0x11d68: + r2 = r2 + 1; + r6 = r0 + 8; + pc=0x11af4; + continue; + case 0x11d78: + r4 = r16 + 1; + r6 = r0 + 16; + pc=0x116a4; + run_11000(); return; + case 0x11d88: + r4 = r16 + 1; + r6 = r0 + 16; + pc=0x117e8; + run_11000(); return; + case 0x11d98: + r4 = r16 + 1; + r6 = r0 + 16; + pc=0x11760; + run_11000(); return; + case 0x11da8: + r2 = r2 + 1; + r6 = r0 + 16; + pc=0x11938; + continue; + case 0x11db8: + r2 = r2 + 1; + r6 = r0 + 16; + pc=0x11a44; + continue; + case 0x11dc8: + r2 = r2 + 1; + r6 = r0 + 16; + pc=0x11af4; + continue; + case 0x11dd8: + r2 = r2 + 1; + r6 = r0 + 2; + pc=0x11c34; + continue; + case 0x11de8: + r2 = r2 + 1; + r6 = r0 + 8; + pc=0x11c34; + continue; + case 0x11df8: + r2 = r2 + 1; + r6 = r0 + 16; + pc=0x11c34; + continue; + case 0x11e08: + r31=0x11e10; pc=0x10a00; - run_10a00(); return; - case 0x11f18: + run_10800(); return; + case 0x11e10: + r2= page[(r28+-31512)>>>2]; + r4 = 6 << 16; + r7= page[(r2+12)>>>2]; + r4 = r4 + -856; + r5 = r0 + 1; + r6 = r0 + 34; + r31=0x11e30; + pc=0x4d600; + run_4d000(); return; + case 0x11e30: + r2= page[(r28+-31512)>>>2]; + r4 = 6 << 16; + r7= page[(r2+12)>>>2]; + r6 = r0 + 69; + r4 = r4 + -788; + r5 = r0 + 1; + r31=0x11e50; + pc=0x4d600; + run_4d000(); return; + case 0x11e50: + r6= page[(r18+4)>>>2]; + if(r6 == r0) { + pc=0x11e94; + continue; + } + r16 = 6 << 16; + r16 = r16 + -716; + case 0x11e68: + r2= page[(r28+-31512)>>>2]; + r7= page[(r18+8)>>>2]; + r4= page[(r2+12)>>>2]; + r5 = r16 + r0; + r18 = r18 + 12; + r31=0x11e84; + pc=0x4b800; + run_4b800(); return; + case 0x11e84: + r6= page[(r18+4)>>>2]; + if(r6 != r0) { + pc=0x11e68; + continue; + } + case 0x11e94: + r2= page[(r28+-31512)>>>2]; + r4 = r0 + 10; + r5= page[(r2+12)>>>2]; + r31=0x11ea8; + pc=0x4ba00; + run_4b800(); return; + case 0x11ea8: + r4 = r0 + 1; + r31=0x11eb4; + pc=0x49a00; + run_49800(); return; + case 0x11eb4: + r2= page[(r28+-31512)>>>2]; + r4 = 6 << 16; + r7= page[(r2+12)>>>2]; + r4 = r4 + -820; + r5 = r0 + 1; + r6 = r0 + 29; + r18 = 6 << 16; + r31=0x11ed8; + pc=0x4d600; + run_4d000(); return; + case 0x11ed8: + r18 = r18 + 15264; + pc=0x11e30; + continue; + case 0x11ee4: + r2= page[(r28+-31512)>>>2]; + r4 = 6 << 16; + r7= page[(r2+12)>>>2]; + r4 = r4 + -1444; + r5 = r0 + 1; + r6 = r0 + 35; + r31=0x11f04; + pc=0x4d600; + run_4d000(); return; + case 0x11f04: + r31=0x11f0c; + pc=0x10800; + run_10800(); return; + case 0x11f0c: + r2= page[(r28+-31512)>>>2]; + r4 = 6 << 16; + r7= page[(r2+12)>>>2]; + r4 = r4 + -1476; + r5 = r0 + 1; + r6 = r0 + 30; + r31=0x11f2c; + pc=0x4d600; + run_4d000(); return; + case 0x11f2c: + pc=0x11f04; + continue; + case 0x11f34: + r4 = r16 + r0; + r31=0x11f40; + pc=0x10834; + run_10800(); return; + case 0x11f40: + r31=0x11f48; + pc=0x10600; + run_10000(); return; + case 0x11f48: + r2= page[(r28+-31512)>>>2]; + r4 = 6 << 16; + r7= page[(r2+12)>>>2]; + r4 = r4 + -1148; + r5 = r0 + 1; + r6 = r0 + 25; + r31=0x11f68; + pc=0x4d600; + run_4d000(); return; + case 0x11f68: + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r6 = 6 << 16; + r5 = r5 + -1088; + r6 = r6 + 3824; + r31=0x11f88; + pc=0x4b800; + run_4b800(); return; + case 0x11f88: + r4 = r0 + 1; + r31=0x11f94; + pc=0x49a00; + run_49800(); return; + case 0x11f94: + r2= page[(r28+-31512)>>>2]; + r4 = 6 << 16; + r7= page[(r2+12)>>>2]; + r4 = r4 + -1120; + r5 = r0 + 1; + r6 = r0 + 30; + r31=0x11fb4; + pc=0x4d600; + run_4d000(); return; + case 0x11fb4: + pc=0x11f68; + continue; case 0x12000: pc=0x12000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_12000() throws ExecutionException { /* 0x12000 - 0x12200 */ + private final void run_12000() throws ExecutionException { /* 0x12000 - 0x12800 */ int addr, tmp; for(;;) { switch(pc) { case 0x12000: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r29 = r29 + -24; - r3 = r2 << 3; - r2 = r2 << 5; - r2 = r2 - r3; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - r16 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r2 + -24; - r16 = r16 + r2; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - r3 = r2 & 256; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x120b0; + r29 = r29 + -32; + page[(r29+20)>>>2] = r16; + r16= page[(r28+-31340)>>>2]; + page[(r29+24)>>>2] = r17; + page[(r29+28)>>>2] = r31; + r17 = r4 + r0; + if(r16 == r0) { + pc=0x1203c; continue; } - f12 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - f13 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - case 0x12044: - f0 = readPages[(r28+-32404)>>>12][((r28+-32404)>>>2)&0x3ff]; - f1 = readPages[(r28+-32408)>>>12][((r28+-32408)>>>2)&0x3ff]; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<=(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x12084; + r4= page[(r16+0)>>>2]; + if(r4 == r0) { + pc=0x1203c; continue; } - f0 = readPages[(r28+-32396)>>>12][((r28+-32396)>>>2)&0x3ff]; - f1 = readPages[(r28+-32400)>>>12][((r28+-32400)>>>2)&0x3ff]; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))<=(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x12104; + r31=0x12038; + pc=0x49e00; + run_49800(); return; + case 0x12038: + page[(r16+0)>>>2] = r0; + case 0x1203c: + r4= page[(r28+-31396)>>>2]; + if(r4 == r0) { + pc=0x1207c; continue; } - case 0x12084: - r2 = r2 & 16; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x120d0; - continue; - } - case 0x12090: - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = r0; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r0; - case 0x12098: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r0; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x120b0: - f0 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r2 = r2 | 256; - { long l = Double.doubleToLongBits(((double)f0)); f13 = (int)(l >>> 32); f12 = (int)l; } - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = f12; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = f13; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x12044; - continue; - case 0x120d0: - r4 = 7 << 16; - r4 = r4 + -9252; - /* Next insn is delay slot */ - r31=0x120e0; - pc=0x1b000; - run_1b000(); return; - case 0x120e0: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r16 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r2 << 3; - r2 = r2 << 5; - r2 = r2 - r3; - r2 = r2 + -24; - r16 = r16 + r2; - /* Next insn is delay slot */ - pc=0x12090; - continue; - case 0x12104: - /* Next insn is delay slot */ - pc=r4; - r31=0x1210c; - return; - case 0x1210c: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = f0; - r3 = r2 << 3; - r2 = r2 << 5; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = f1; - r2 = r2 - r3; - r16 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r2 + -24; - r16 = r16 + r2; - /* Next insn is delay slot */ - pc=0x12098; - continue; - case 0x12200: - pc=0x12200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_12200() throws ExecutionException { /* 0x12200 - 0x12400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x12200: - r29 = r29 + -40; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - r18 = r5 + r0; - r5 = r0 + 32; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - r17 = r6 + r0; - /* Next insn is delay slot */ - r31=0x1222c; - pc=0x2f400; - run_2f400(); return; - case 0x1222c: + r5 = r28 + -32756; + r31=0x12058; + pc=0x4b600; + run_4b000(); return; + case 0x12058: r16 = r2 + r0; - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r19 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = r2 & 16; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x122d4; + pc=0x12114; continue; } - case 0x12250: - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x12270; + r4 = r2 + r0; + r31=0x12070; + pc=0x41400; + run_41000(); return; + case 0x12070: + r4 = r16 + r0; + r31=0x1207c; + pc=0x49e00; + run_49800(); return; + case 0x1207c: + r4= page[(r28+-31400)>>>2]; + if(r4 == r0) { + pc=0x120bc; continue; } - r2 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r2; - case 0x12270: - r17 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r5 = r16 + r0; - r2 = r17 << 3; - r3 = r17 << 5; - r3 = r3 - r2; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r6 = r0 + 24; - r3 = r2 + r3; - r4 = r3 + r0; - /* Next insn is delay slot */ - r31=0x1229c; - pc=0x48fdc; - run_48e00(); return; - case 0x1229c: - r3 = r2 + r0; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r17 = r17 + 1; - r2 = r2 | 64; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff] = r17; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ + r5 = r28 + -32756; + r31=0x12098; + pc=0x4b600; + run_4b000(); return; + case 0x12098: + r16 = r2 + r0; + if(r2 == r0) { + pc=0x120d8; + continue; + } + r4 = r2 + r0; + r31=0x120b0; + pc=0x41600; + run_41000(); return; + case 0x120b0: + r4 = r16 + r0; + r31=0x120bc; + pc=0x49e00; + run_49800(); return; + case 0x120bc: + r31= page[(r29+28)>>>2]; + r2 = r17 + r0; + r16= page[(r29+20)>>>2]; + r17= page[(r29+24)>>>2]; + r29 = r29 + 32; pc=r31; return; - case 0x122d4: - r4 = readPages[(r28+-30788)>>>12][((r28+-30788)>>>2)&0x3ff]; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x12328; - continue; - } - case 0x122e8: - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x122f4; - pc=0x17e00; - run_17e00(); return; - case 0x122f4: - r4 = readPages[(r28+-30788)>>>12][((r28+-30788)>>>2)&0x3ff]; - r5 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = ((r5 & 0xffffffffL) < (r17 & 0xffffffffL)) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x12344; - continue; - } - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r17; - case 0x12314: - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x12320; - pc=0x17c00; - run_17c00(); return; - case 0x12320: - /* Next insn is delay slot */ - pc=0x12250; - continue; - case 0x12328: - r5 = r0 + 46; - /* Next insn is delay slot */ - r31=0x12334; - pc=0x17c00; - run_17c00(); return; - case 0x12334: - r17 = r17 + 1; - r4 = readPages[(r28+-30788)>>>12][((r28+-30788)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x122e8; - continue; - case 0x12344: - r4 = 7 << 16; - r4 = r4 + -9228; - r5 = r5 - r17; - /* Next insn is delay slot */ - r31=0x12358; - pc=0x1b800; - run_1b800(); return; - case 0x12358: - r4 = readPages[(r28+-30788)>>>12][((r28+-30788)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x12314; - continue; - case 0x12400: - pc=0x12400; + case 0x120d8: + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r6= page[(r28+-31400)>>>2]; + r5 = r5 + -612; + r31=0x120f4; + pc=0x4b800; + run_4b800(); return; + case 0x120f4: + r31= page[(r29+28)>>>2]; + r17 = r0 + 1; + r2 = r17 + r0; + r16= page[(r29+20)>>>2]; + r17= page[(r29+24)>>>2]; + r29 = r29 + 32; + pc=r31; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_12400() throws ExecutionException { /* 0x12400 - 0x12600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x12400: - r29 = r29 + -136; - writePages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff] = f20; - writePages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff] = f21; - f20 = readPages[(r28+-32396)>>>12][((r28+-32396)>>>2)&0x3ff]; - r2 = r0 + 1; - writePages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff] = r2; - f21 = readPages[(r28+-32400)>>>12][((r28+-32400)>>>2)&0x3ff]; - r2 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r23; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = r19; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r18; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r17; - r23 = r28 + -32444; - r19 = 7 << 16; - r18 = 7 << 16; - r17 = 7 << 16; - writePages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff] = r22; - writePages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff] = r21; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r20; - writePages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff] = f22; - writePages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff] = f23; - writePages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff] = r31; - writePages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff] = r30; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r16; - writePages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff] = f28; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = f29; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = f26; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = f27; - writePages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff] = f24; - writePages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff] = f25; - r21 = r4 + r0; - writePages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff] = r0; - writePages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff] = r0; - writePages[(r28+-30808)>>>12][((r28+-30808)>>>2)&0x3ff] = r0; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r23; - r22 = r0 + 1; - r20 = r0 + r0; - r19 = r19 + -7236; - r18 = r18 + -8652; - f22 = f20; - f23 = f21; - r17 = r17 + -8284; - case 0x124a4: - r5 = readPages[(r28+-32736)>>>12][((r28+-32736)>>>2)&0x3ff]; - r22 = r22 < r5 ? 1 : 0; - if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x125fc; + case 0x12114: + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r6= page[(r28+-31396)>>>2]; + r5 = r5 + -656; + r31=0x12130; + pc=0x4b800; + run_4b800(); return; + case 0x12130: + r17 = r0 + 1; + pc=0x1207c; + continue; + case 0x12200: + r29 = r29 + -48; + page[(r29+32)>>>2] = r19; + r19 = 6 << 16; + r2= page[(r19+31320)>>>2]; + page[(r29+44)>>>2] = r31; + r2 = r2 + 1; + page[(r19+31320)>>>2] = r2; + page[(r29+40)>>>2] = r21; + page[(r29+36)>>>2] = r20; + page[(r29+28)>>>2] = r18; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + r31=0x12238; + pc=0x35c00; + run_35800(); return; + case 0x12238: + r4= page[(r28+-31392)>>>2]; + r31=0x12244; + pc=0x1ba00; + run_1b800(); return; + case 0x12244: + r2 = 6 << 16; + r4= page[(r2+31408)>>>2]; + r2 = r0 + -1; + if(r4 == r2) { + pc=0x12264; continue; } - case 0x124b8: - r2 = readPages[(r28+-32740)>>>12][((r28+-32740)>>>2)&0x3ff]; - r3 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = r3 < r2 ? 1 : 0; + r5 = r0 + r0; + r31=0x12264; + pc=0x36800; + run_36800(); return; + case 0x12264: + r31=0x1226c; + pc=0x1d800; + run_1d800(); return; + case 0x1226c: + r31=0x12274; + pc=0x40000; + run_40000(); return; + case 0x12274: + r2= page[(r28+-31388)>>>2]; + r19 = r19 + 31320; + page[(r19+4)>>>2] = r0; + page[(r19+8)>>>2] = r0; + page[(r19+12)>>>2] = r0; + if(r2 <= 0) { + pc=0x12370; + continue; + } + r18 = 6 << 16; + r20 = 6 << 16; + r21 = 6 << 16; + r16 = r0 + r0; + r18 = r18 + 26384; + r20 = r20 + -564; + r21 = r21 + -524; + pc=0x122e4; + continue; + case 0x122b4: + r3= page[(r28+-31384)>>>2]; + r4 = r2 + r0; + r17 = r3 + r17; + r5= page[(r17+0)>>>2]; + r16 = r16 + 1; + r31=0x122d0; + pc=0x1ee00; + run_1e800(); return; + case 0x122d0: + r2= page[(r28+-31388)>>>2]; + r2 = r16 < r2 ? 1 : 0; + if(r2 == r0) { + pc=0x12370; + continue; + } + case 0x122e4: + r2= page[(r28+-31384)>>>2]; + r17 = r16 << 2; + r2 = r2 + r17; + r4= page[(r2+0)>>>2]; + r5 = r18 + r0; + r31=0x12300; + pc=0x4b600; + run_4b000(); return; + case 0x12300: + if(r2 != r0) { + pc=0x122b4; + continue; + } + r2= page[(r28+-31384)>>>2]; + r3= page[(r28+-31512)>>>2]; + r2 = r2 + r17; + r4= page[(r3+12)>>>2]; + r6= page[(r2+0)>>>2]; + r5 = r20 + r0; + r31=0x12328; + pc=0x4b800; + run_4b800(); return; + case 0x12328: + r2= page[(r28+-31384)>>>2]; + r17 = r2 + r17; + r2= page[(r17+0)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 45; + if(r3 == r2) { + pc=0x123b0; + continue; + } + case 0x1234c: + r2= page[(r19+8)>>>2]; + r16 = r16 + 1; + r2 = r2 + 1; + page[(r19+8)>>>2] = r2; + r2= page[(r28+-31388)>>>2]; + r2 = r16 < r2 ? 1 : 0; + if(r2 != r0) { + pc=0x122e4; + continue; + } + case 0x12370: + r31=0x12378; + pc=0x35e00; + run_35800(); return; + case 0x12378: + r2= page[(r19+8)>>>2]; + if(r2 != r0) { + pc=0x123d4; + continue; + } + r31= page[(r29+44)>>>2]; + r21= page[(r29+40)>>>2]; + r20= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 48; + pc=r31; + return; + case 0x123b0: + r2= page[(r28+-31512)>>>2]; + r4 = r21 + r0; + r7= page[(r2+12)>>>2]; + r5 = r0 + 1; + r6 = r0 + 65; + r31=0x123cc; + pc=0x4d600; + run_4d000(); return; + case 0x123cc: + pc=0x1234c; + continue; + case 0x123d4: + r4 = r0 + 1; + r31=0x123e0; + pc=0x12000; + continue; + case 0x123e0: + r4 = r2 + r0; + r31=0x123ec; + pc=0x49a00; + run_49800(); return; + case 0x123ec: + case 0x12400: + r29 = r29 + -48; + page[(r29+32)>>>2] = r17; + r17 = 6 << 16; + page[(r29+28)>>>2] = r16; + r16 = r4 + r0; + r4 = r17 + 31340; + page[(r29+16)>>>2] = r5; + page[(r29+44)>>>2] = r31; + page[(r29+40)>>>2] = r19; + page[(r29+36)>>>2] = r18; + r31=0x12430; + pc=0x1f000; + run_1f000(); return; + case 0x12430: + r2 = r0 + 1; + r5= page[(r29+16)>>>2]; + if(r16 == r2) { + pc=0x127e0; + continue; + } + r4 = r16 + r0; + r31=0x1244c; + pc=0x1b200; + run_1b000(); return; + case 0x1244c: + r31=0x12454; + pc=0x37a00; + run_37800(); return; + case 0x12454: + r4 = 1 << 16; + r5 = 1 << 16; + r4 = r4 + 3072; + r5 = r5 + 4608; + r31=0x1246c; + pc=0x1ae00; + run_1a800(); return; + case 0x1246c: + r6 = 6 << 16; + r4 = r28 + -31388; + r5 = r28 + -31384; + r6 = r6 + -456; + r17 = r17 + 31340; + r31=0x12488; + pc=0x1b400; + run_1b000(); return; + case 0x12488: + r2= page[(r17+68)>>>2]; + r3 = r0 + -1; + if(r2 == r3) { + pc=0x124ac; + continue; + } + r3= page[(r17+60)>>>2]; + r2 = r2 < r3 ? 1 : 0; + if(r2 == r0) { + pc=0x127c8; + continue; + } + case 0x124ac: + r2= page[(r17+72)>>>2]; + r3 = r0 + -1; + if(r2 == r3) { + pc=0x124d0; + continue; + } + r3= page[(r17+60)>>>2]; + r3 = r2 < r3 ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x12648; - run_12600(); return; + pc=0x127b0; + continue; } case 0x124d0: - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - r3 = r0 + 1; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x12694; - run_12600(); return; + r3= page[(r17+76)>>>2]; + r4 = r0 + -1; + if(r3 == r4) { + pc=0x12508; + continue; } - case 0x124e0: + r5= page[(r17+60)>>>2]; + r5 = r5 < r3 ? 1 : 0; + if(r5 != r0) { + pc=0x12798; + continue; + } + if(r2 == r4) { + pc=0x12508; + continue; + } + r2 = r2 < r3 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x126d4; - run_12600(); return; - } - r3 = r0 + 2; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x125d8; + pc=0x1276c; continue; } - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r2 = r22 < 2 ? 1 : 0; + case 0x12508: + r31=0x12510; + pc=0x35400; + run_35000(); return; + case 0x12510: + r3 = 6 << 16; + r2 = r3 + 27848; + page[(r28+-31340)>>>2] = r2; + page[(r2+8)>>>2] = r0; + page[(r2+12)>>>2] = r0; + page[(r2+4)>>>2] = r0; + r2= page[(r17+4)>>>2]; + page[(r3+27848)>>>2] = r0; + r2 = r2 < 2 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x12720; - run_12600(); return; - } - r2 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - r3 = r22 << 2; - r3 = r3 + -8; - r16 = r2 + r3; - r3 = r3 + 4; - r2 = r2 + r3; - r6 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r30 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - addr=r6+4; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - addr=r30+4; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - r3 = r4 < r5 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x12720; - run_12600(); return; - } - if(r4 == r5) { - /* Next insn is delay slot */ - pc=0x12714; - run_12600(); return; - } - case 0x12548: - r5 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - r3 = (r5&0xffffffffL) < (38&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1435c; - run_14200(); return; - } - r4 = 7 << 16; - r3 = r5 << 2; - r4 = r4 + -8804; - r3 = r4 + r3; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r3; - return; - case 0x1257c: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = r0 + 32; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x143c4; - run_14200(); return; - } - case 0x1258c: - r2 = r2 & 255; - r2 = r19 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r2 & 8; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x13338; - run_13200(); return; + pc=0x1254c; + continue; } + r4 = 6 << 16; + r4 = r4 + -232; + r31=0x1254c; + pc=0x4f800; + run_4f800(); return; + case 0x1254c: + r2 = 6 << 16; + r18 = r2 + 31320; + r3 = r0 + -1; + page[(r18+16)>>>2] = r0; + page[(r2+31320)>>>2] = r3; + r31=0x12568; + pc=0x12200; + continue; + case 0x12568: + r16= page[(r18+4)>>>2]; if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x13314; - run_13200(); return; - } - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r3 = r28 + -32644; - r2 = r22 + 1; - writePages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - r22 = r22 << 2; - r2 = r2 + r22; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - case 0x125d8: - r3 = (r2&0xffffffffL) < (3&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1275c; - run_12600(); return; - } - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r5 = readPages[(r28+-32736)>>>12][((r28+-32736)>>>2)&0x3ff]; - r22 = r22 < r5 ? 1 : 0; - if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x124b8; + pc=0x125d0; continue; } - case 0x125fc: - r4 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - case 0x12600: - pc=0x12600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_12600() throws ExecutionException { /* 0x12600 - 0x12800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x12600: - r2 = r5 << 1; - r5 = r5 << 3; - writePages[(r28+-32736)>>>12][((r28+-32736)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x12614; - pc=0x40600; - run_40600(); return; - case 0x12614: - writePages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff] = r2; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x124b8; - run_12400(); return; + r19 = 6 << 16; + r19 = r19 + -220; + pc=0x12598; + continue; + case 0x12588: + r16 = r2 < r16 ? 1 : 0; + if(r16 == r0) { + pc=0x126c0; + continue; + } + r16 = r2 + r0; + case 0x12598: + r2= page[(r17+4)>>>2]; + r2 = r2 < 2 ? 1 : 0; + if(r2 != r0) { + pc=0x125b8; + continue; + } + r4 = r19 + r0; + r31=0x125b8; + pc=0x4f800; + run_4f800(); return; + case 0x125b8: + r31=0x125c0; + pc=0x12200; + continue; + case 0x125c0: + r2= page[(r18+4)>>>2]; + if(r2 != r0) { + pc=0x12588; + continue; + } + case 0x125d0: + r16= page[(r28+-31408)>>>2]; + if(r16 == r0) { + pc=0x1265c; + continue; + } + r2= page[(r17+4)>>>2]; + r2 = r2 < 2 ? 1 : 0; + if(r2 != r0) { + pc=0x12608; + continue; + } + r4 = 6 << 16; + r4 = r4 + -204; + r31=0x12604; + pc=0x4f800; + run_4f800(); return; + case 0x12604: + r16= page[(r28+-31408)>>>2]; + case 0x12608: + r17= page[(r28+-31340)>>>2]; + r4 = r16 + r0; + r5 = r28 + -32756; + r31=0x1261c; + pc=0x4b600; + run_4b000(); return; + case 0x1261c: + page[(r17+0)>>>2] = r2; + if(r2 == r0) { + pc=0x126fc; + continue; } - r4 = 7 << 16; - r4 = r4 + -6876; - /* Next insn is delay slot */ r31=0x12630; - pc=0x1b200; - run_1b200(); return; + pc=0x12200; + continue; case 0x12630: - r2 = readPages[(r28+-32740)>>>12][((r28+-32740)>>>2)&0x3ff]; - r3 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = r3 < r2 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x124d0; - run_12400(); return; + r16= page[(r28+-31340)>>>2]; + if(r16 == r0) { + pc=0x1265c; + continue; } - case 0x12648: - r3 = r2 << 1; - r5 = r2 << 4; - r4 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r2 << 6; - r5 = r2 - r5; - writePages[(r28+-32740)>>>12][((r28+-32740)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x12668; - pc=0x40600; - run_40600(); return; - case 0x12668: - writePages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff] = r2; + r4= page[(r16+0)>>>2]; + if(r4 == r0) { + pc=0x1265c; + continue; + } + r31=0x12658; + pc=0x49e00; + run_49800(); return; + case 0x12658: + page[(r16+0)>>>2] = r0; + case 0x1265c: + r4= page[(r28+-31404)>>>2]; + if(r4 == r0) { + pc=0x12720; + continue; + } + r5 = r28 + -32760; + r31=0x12678; + pc=0x4b600; + run_4b000(); return; + case 0x12678: + r16 = r2 + r0; + if(r2 == r0) { + pc=0x12748; + continue; + } + r4 = r2 + r0; + r31=0x12690; + pc=0x35600; + run_35000(); return; + case 0x12690: + r4 = r16 + r0; + r31=0x1269c; + pc=0x49e00; + run_49800(); return; + case 0x1269c: + r31= page[(r29+44)>>>2]; + r19= page[(r29+40)>>>2]; + r18= page[(r29+36)>>>2]; + r17= page[(r29+32)>>>2]; + r16= page[(r29+28)>>>2]; + r4 = r0 + r0; + r29 = r29 + 48; + pc=0x12000; + continue; + case 0x126c0: + r2= page[(r17+4)>>>2]; + r2 = r2 < 2 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x124d0; - run_12400(); return; - } - r4 = 7 << 16; - r4 = r4 + -6876; - /* Next insn is delay slot */ - r31=0x12684; - pc=0x1b200; - run_1b200(); return; - case 0x12684: - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - r3 = r0 + 1; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x124e0; - run_12400(); return; - } - case 0x12694: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = r0 + 32; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x129b8; - run_12800(); return; - } - r3 = r2 + r0; - case 0x126a8: - r2 = r3 + -33; - r2 = r2 & 255; - r4 = (r2&0xffffffffL) < (92&0xffffffffL) ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x13038; - run_13000(); return; - } - r2 = r2 << 2; - r2 = r18 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x126d4: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = r0 + 32; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x129cc; - run_12800(); return; - } - r22 = r2 + r0; - case 0x126e8: - r2 = r22 + -33; - r2 = r2 & 255; - r3 = (r2&0xffffffffL) < (62&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x12804; - run_12800(); return; - } - r2 = r2 << 2; - r2 = r17 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x12714: - r4 = r4 & 1; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x12548; - run_12400(); return; + pc=0x126e4; + continue; } + r4 = 6 << 16; + r4 = r4 + -124; + r31=0x126e4; + pc=0x4f800; + run_4f800(); return; + case 0x126e4: + r2 = r0 + 1; + page[(r18+16)>>>2] = r2; + r31=0x126f4; + pc=0x12200; + continue; + case 0x126f4: + pc=0x1269c; + continue; + case 0x126fc: + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r5 = r5 + -164; + r6 = r16 + r0; + r31=0x12718; + pc=0x4b800; + run_4b800(); return; + case 0x12718: + pc=0x1265c; + continue; case 0x12720: - writePages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x124a4; - run_12400(); return; - case 0x1272c: - /* Next insn is delay slot */ - r31=0x12734; - pc=0x1c000; - run_1c000(); return; - case 0x12734: - r3 = r0 + 61; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x131a8; - run_13000(); return; - } - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x12750; - pc=0x1b000; - run_1b000(); return; - case 0x12750: - r2 = r0 + 4; - writePages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff] = r2; - r2 = r0 + 4; - case 0x1275c: - r3 = r0 + 5; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x128a4; - run_12800(); return; - } - case 0x12768: - f28 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; - f26 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - f24 = readPages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff]; - f22 = readPages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff]; - f20 = readPages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff]; - r31 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - r2 = r20 + r0; - r30 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r23 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r22 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r21 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - r20 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r19 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r18 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r17 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r16 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - f29 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - f27 = readPages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff]; - f25 = readPages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff]; - f23 = readPages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff]; - f21 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r29 = r29 + 136; - /* Next insn is delay slot */ - pc=r31; - return; + r2= page[(r28+-31512)>>>2]; + r4 = 6 << 16; + r7= page[(r2+12)>>>2]; + r4 = r4 + -88; + r5 = r0 + 1; + r6 = r0 + 75; + r31=0x12740; + pc=0x4d600; + run_4d000(); return; + case 0x12740: + pc=0x1269c; + continue; + case 0x12748: + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r6= page[(r28+-31404)>>>2]; + r5 = r5 + -12; + r31=0x12764; + pc=0x4b800; + run_4b800(); return; + case 0x12764: + pc=0x1269c; + continue; + case 0x1276c: + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r5 = r5 + -280; + case 0x1277c: + r6 = 6 << 16; + r6 = r6 + 3672; + r31=0x1278c; + pc=0x4b800; + run_4b800(); return; + case 0x1278c: + r4 = r0 + 1; + r31=0x12798; + pc=0x49a00; + run_49800(); return; + case 0x12798: + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r5 = r5 + -328; + pc=0x1277c; + continue; + case 0x127b0: + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r5 = r5 + -384; + pc=0x1277c; + continue; case 0x127c8: - r16 = r28 + -32596; - case 0x127cc: - /* Next insn is delay slot */ - r31=0x127d4; - pc=0x1c000; - run_1c000(); return; - case 0x127d4: - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r3 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - r2 = r22 + r0; - r2 = r2 << 2; - r2 = r3 + r2; - r22 = r22 + 1; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r16; - r2 = r0 + 2; - writePages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff] = r22; - writePages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x124a4; - run_12400(); return; + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r5 = r5 + -428; + pc=0x1277c; + continue; + case 0x127e0: + r31=0x127e8; + pc=0x10a00; + run_10800(); return; + case 0x127e8: case 0x12800: pc=0x12800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_12800() throws ExecutionException { /* 0x12800 - 0x12a00 */ + private final void run_12800() throws ExecutionException { /* 0x12800 - 0x13000 */ int addr, tmp; for(;;) { switch(pc) { case 0x12800: - case 0x12804: - r22 = r22 & 255; - r2 = r22 + -48; - r2 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x13370; - run_13200(); return; - } - r22 = r19 + r22; - addr=r22+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1445c; - run_14400(); return; - } - r3 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r4 = r3 << 5; - r2 = r3 << 3; - r2 = r4 - r2; - r3 = r3 + 1; - r4 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - writePages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff] = r3; - r3 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r2 = r4 + r2; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r0; - r4 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - r2 = r3 << 2; - r2 = r2 + -4; - r2 = r4 + r2; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - if(r4 == r23) { - /* Next insn is delay slot */ - pc=0x13504; - run_13400(); return; - } - case 0x12880: - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x12890; - pc=0x1b000; - run_1b000(); return; - case 0x12890: - r2 = r0 + 4; - r3 = r0 + 5; - writePages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff] = r2; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x12768; - run_12600(); return; - } - case 0x128a4: - r5 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = r0 + 1; - if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x128c4; - continue; - } - r4 = 7 << 16; - r4 = r4 + -8912; - /* Next insn is delay slot */ - r31=0x128c4; - pc=0x1b800; - run_1b800(); return; - case 0x128c4: - r5 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r2 = r0 + 1; - if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x128e4; - continue; - } - r4 = 7 << 16; - r4 = r4 + -8888; - /* Next insn is delay slot */ - r31=0x128e4; - pc=0x1b800; - run_1b800(); return; - case 0x128e4: - r5 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r21 + r0; - r6 = r0 + 24; - /* Next insn is delay slot */ - r31=0x128f8; - pc=0x48fdc; - run_48e00(); return; - case 0x128f8: - r3 = readPages[(r28+-30808)>>>12][((r28+-30808)>>>2)&0x3ff]; - r2 = readPages[(r21+0)>>>12][((r21+0)>>>2)&0x3ff]; - r2 = r3 | r2; - r4 = r2 & 4; - r3 = r2 + r0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x12ad4; - run_12a00(); return; - } - r4 = r2 & 2; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x131f4; - run_13000(); return; - } - writePages[(r21+0)>>>12][((r21+0)>>>2)&0x3ff] = r2; - case 0x12928: - r4 = r2 & 64; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x12940; - continue; - } - r3 = r0 + -17; - r3 = r2 & r3; - writePages[(r21+0)>>>12][((r21+0)>>>2)&0x3ff] = r3; - case 0x12940: - r2 = r3 & 256; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x131b4; - run_13000(); return; - } - r2 = r3 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x13250; - run_13200(); return; - } - r2 = r3 & 32; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x12768; - run_12600(); return; - } - f0 = readPages[(r21+12)>>>12][((r21+12)>>>2)&0x3ff]; - f2 = readPages[(r28+-32372)>>>12][((r28+-32372)>>>2)&0x3ff]; - f1 = readPages[(r21+8)>>>12][((r21+8)>>>2)&0x3ff]; - f3 = readPages[(r28+-32376)>>>12][((r28+-32376)>>>2)&0x3ff]; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<=(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x12768; - run_12600(); return; - } - f2 = readPages[(r28+-32364)>>>12][((r28+-32364)>>>2)&0x3ff]; - f3 = readPages[(r28+-32368)>>>12][((r28+-32368)>>>2)&0x3ff]; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<=(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x12768; - run_12600(); return; - } - r3 = r3 | 8; - writePages[(r21+0)>>>12][((r21+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x12768; - run_12600(); return; - case 0x129b8: - /* Next insn is delay slot */ - r31=0x129c0; - pc=0x1c000; - run_1c000(); return; - case 0x129c0: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - /* Next insn is delay slot */ - pc=0x126a8; - run_12600(); return; - case 0x129cc: - /* Next insn is delay slot */ - r31=0x129d4; - pc=0x1c000; - run_1c000(); return; - case 0x129d4: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r22 = tmp; - /* Next insn is delay slot */ - pc=0x126e8; - run_12600(); return; - case 0x129e0: - r16 = r28 + -32652; - /* Next insn is delay slot */ - pc=0x127cc; - run_12600(); return; - case 0x129ec: - r16 = r28 + -32636; - /* Next insn is delay slot */ - pc=0x127cc; - run_12600(); return; - case 0x129f8: - r16 = r28 + -32492; - /* Next insn is delay slot */ - pc=0x127cc; - run_12600(); return; - case 0x12a00: - pc=0x12a00; + r2= page[(r4+8)>>>2]; + r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; + pc=r31; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_12a00() throws ExecutionException { /* 0x12a00 - 0x12c00 */ - int addr, tmp; - for(;;) { - switch(pc) { case 0x12a00: - case 0x12a04: - r16 = r28 + -32452; - /* Next insn is delay slot */ - pc=0x127cc; - run_12600(); return; - case 0x12a10: - r16 = r28 + -32612; - /* Next insn is delay slot */ - pc=0x127cc; - run_12600(); return; - case 0x12a1c: - r16 = r28 + -32604; - /* Next insn is delay slot */ - pc=0x127cc; - run_12600(); return; - case 0x12a28: - r16 = r28 + -32620; - /* Next insn is delay slot */ - pc=0x127cc; - run_12600(); return; - case 0x12a34: - /* Next insn is delay slot */ - r31=0x12a3c; - pc=0x1c000; - run_1c000(); return; - case 0x12a3c: - r3 = r0 + 61; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x134d0; - run_13400(); return; + r29 = r29 + -32; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + page[(r29+28)>>>2] = r31; + r2= page[(r4+8)>>>2]; + r17 = r4 + r0; + r16= page[(r2+0)>>>2]; + if(r2 != r16) { + pc=0x12a44; + continue; } - r3 = r0 + 62; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x131a8; - run_13000(); return; + pc=0x12a80; + continue; + case 0x12a30: + r16= page[(r16+0)>>>2]; + r2= page[(r17+8)>>>2]; + if(r2 == r16) { + pc=0x12a80; + continue; } - r3 = r0 + 60; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x134c4; - run_13400(); return; + case 0x12a44: + r2= page[(r16+8)>>>2]; + r4 = r16 + 8; + r2= page[(r2+4)>>>2]; + pc=r2; + r31=0x12a5c; + return; + case 0x12a5c: + if(r2 != r0) { + pc=0x12a30; + continue; } - r16 = r28 + -32524; - /* Next insn is delay slot */ - pc=0x127d4; - run_12600(); return; - case 0x12a6c: - /* Next insn is delay slot */ - r31=0x12a74; - pc=0x1c000; - run_1c000(); return; - case 0x12a74: - r3 = r0 + 61; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x14378; - run_14200(); return; + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r2 = r0 + r0; + r29 = r29 + 32; + pc=r31; + return; + case 0x12a80: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 32; + pc=r31; + return; + case 0x12c00: + r2 = r0 + 1; + pc=r31; + return; + case 0x12e00: + r2= page[(r4+12)>>>2]; + r3 = r2 & 4; + if(r3 != r0) { + pc=0x12e34; + continue; } - r16 = r28 + -32500; - /* Next insn is delay slot */ - pc=0x127d4; - run_12600(); return; - case 0x12a8c: - r16 = r28 + -32468; - /* Next insn is delay slot */ - pc=0x127cc; - run_12600(); return; - case 0x12a98: - /* Next insn is delay slot */ - r31=0x12aa0; - pc=0x1c000; - run_1c000(); return; - case 0x12aa0: - r16 = r2 + r0; - r2 = r0 + 61; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x134f8; - run_13400(); return; + r3 = r2 & 2; + if(r3 == r0) { + pc=0x12e2c; + continue; } - r2 = r0 + 62; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x134dc; - run_13400(); return; - } - r2 = r0 + 60; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x131a8; - run_13000(); return; - } - r16 = r28 + -32540; - /* Next insn is delay slot */ - pc=0x127d4; - run_12600(); return; - case 0x12ad4: + r3 = r0 + -2; + r2 = r2 & r3; + page[(r4+12)>>>2] = r2; + case 0x12e2c: + pc=r31; + return; + case 0x12e34: r3 = r0 + -4; r2 = r2 & r3; - writePages[(r21+0)>>>12][((r21+0)>>>2)&0x3ff] = r2; - r3 = r2 + r0; - /* Next insn is delay slot */ - pc=0x12928; - run_12800(); return; - case 0x12aec: - r16 = r28 + -32548; - case 0x12af0: - /* Next insn is delay slot */ - r31=0x12af8; - pc=0x1c000; - run_1c000(); return; - case 0x12af8: - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r2 = r22 + 1; - writePages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - r22 = r22 << 2; - r22 = r2 + r22; - writePages[(r22+0)>>>12][((r22+0)>>>2)&0x3ff] = r16; - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x125d8; - run_12400(); return; - case 0x12b24: - r16 = r28 + -32556; - /* Next insn is delay slot */ - pc=0x12af0; - continue; - case 0x12b30: - r16 = r28 + -32564; - /* Next insn is delay slot */ - pc=0x12af0; - continue; - case 0x12b3c: - /* Next insn is delay slot */ - r31=0x12b44; - pc=0x1c000; - run_1c000(); return; - case 0x12b44: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r3 = r2 + -48; - r3 = (r3&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1320c; - run_13200(); return; - } - f26 = readPages[(r28+-32396)>>>12][((r28+-32396)>>>2)&0x3ff]; - f28 = r0; - f24 = readPages[(r28+-32388)>>>12][((r28+-32388)>>>2)&0x3ff]; - f27 = readPages[(r28+-32400)>>>12][((r28+-32400)>>>2)&0x3ff]; - f29 = r0; - f25 = readPages[(r28+-32392)>>>12][((r28+-32392)>>>2)&0x3ff]; - case 0x12b78: - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f29&0xffffffffL) << 32) | (f28&0xffffffffL)))*(Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))); f29 = (int)(l >>> 32); f28 = (int)l; } - r2 = r2 & 15; - f2 = r2; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))*(Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))); f27 = (int)(l >>> 32); f26 = (int)l; } - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f29&0xffffffffL) << 32) | (f28&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f29 = (int)(l >>> 32); f28 = (int)l; } - /* Next insn is delay slot */ - r31=0x12b98; - pc=0x1c000; - run_1c000(); return; - case 0x12b98: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r3 = r2 + -48; - r3 = (r3&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x12b78; - continue; - } - case 0x12bb0: - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f29&0xffffffffL) << 32) | (f28&0xffffffffL)))/(Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))); f27 = (int)(l >>> 32); f26 = (int)l; } - r3 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r4 = r3 << 5; - r2 = r3 << 3; - r2 = r4 - r2; - r4 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r3 + 1; - r2 = r4 + r2; - r4 = r0 + 336; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r4; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = f26; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = f27; - writePages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff] = r3; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x12c58; - run_12c00(); return; - case 0x12bf4: - /* Next insn is delay slot */ - r31=0x12bfc; - pc=0x1c000; - run_1c000(); return; - case 0x12bfc: - r4 = r29 + 16; - case 0x12c00: - pc=0x12c00; + page[(r4+12)>>>2] = r2; + pc=r31; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_12c00() throws ExecutionException { /* 0x12c00 - 0x12e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x12c00: - /* Next insn is delay slot */ - r31=0x12c08; - pc=0x28000; - run_28000(); return; - case 0x12c08: - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r3 = r2 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x13260; - run_13200(); return; - } - r4 = r2 + r0; - case 0x12c20: - r3 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r4 = r4 | 64; - r5 = r3 << 5; - r2 = r3 << 3; - r2 = r5 - r2; - r5 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r3 + 1; - r2 = r5 + r2; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r4; - writePages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff] = r3; - r4 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r3 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r4; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r3; - case 0x12c58: - r2 = r0 + 1; - writePages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff] = r2; - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x124a4; - run_12400(); return; - case 0x12c6c: - r16 = r28 + -32660; - /* Next insn is delay slot */ - pc=0x12af0; - run_12a00(); return; - case 0x12c78: - /* Next insn is delay slot */ - r31=0x12c80; - pc=0x1c000; - run_1c000(); return; - case 0x12c80: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r3 = r2 + -48; - r3 = (r3&0xffffffffL) < (8&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x144a4; - run_14400(); return; - } - r22 = r0 + r0; - r16 = r0 + r0; - case 0x12ca0: - r2 = r2 & 7; - r16 = r16 << 3; - r16 = r16 + r2; - /* Next insn is delay slot */ - r31=0x12cb4; - pc=0x1c000; - run_1c000(); return; - case 0x12cb4: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r22 = r22 + 1; - r3 = r2 + -48; - r3 = (r3&0xffffffffL) < (8&0xffffffffL) ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x12ca0; - continue; - } - r2 = r22 < 4 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1319c; - run_13000(); return; - } - r22 = r22 < 7 ? 1 : 0; - if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x12e18; - run_12e00(); return; - } - case 0x12ce4: - r2 = r16 < 256 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1319c; - run_13000(); return; - } - r5 = r0 + 82; - /* Next insn is delay slot */ - pc=0x12e2c; - run_12e00(); return; - case 0x12cfc: - r16 = r28 + -32460; - /* Next insn is delay slot */ - pc=0x12af0; - run_12a00(); return; - case 0x12d08: - r22 = r0 + r0; - r16 = r0 + -1; - case 0x12d10: - /* Next insn is delay slot */ - r31=0x12d18; - pc=0x1c000; - run_1c000(); return; - case 0x12d18: - r2 = r2 & 255; - r3 = r19 + r2; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r16 = r16 + 1; - r3 = r3 & 32; - r2 = r2 | r3; - r3 = r2 + -48; - r4 = r2 << 24; - r3 = (r3&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - r4 = r4 >> 24; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x13138; - run_13000(); return; - } - r2 = r2 + -97; - r2 = (r2&0xffffffffL) < (6&0xffffffffL) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x13154; - run_13000(); return; - } - r2 = r16 < 3 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x12d80; - continue; - } - r16 = r16 < 5 ? 1 : 0; - if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x13320; - run_13200(); return; - } - r2 = 1 << 16; - r2 = r22 < r2 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x14264; - run_14200(); return; - } - case 0x12d80: - r5 = r0 + 80; - case 0x12d84: - r3 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r4 = r3 << 5; - r2 = r3 << 3; - r2 = r4 - r2; - r4 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r3 + 1; - r2 = r4 + r2; - writePages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff] = r3; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r5; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r22; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x12c58; - continue; - case 0x12dbc: - r30 = r0 + -1; - r16 = r0 + r0; - r22 = r0 + 46; - case 0x12dc8: - r30 = r30 + 1; - /* Next insn is delay slot */ - r31=0x12dd4; - pc=0x1c000; - run_1c000(); return; - case 0x12dd4: - if(r2 == r22) { - /* Next insn is delay slot */ - pc=0x13190; - run_13000(); return; - } - case 0x12ddc: - r4 = r2 < 47 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x13168; - run_13000(); return; - } - r4 = r0 + 48; - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x13190; - run_13000(); return; - } - r5 = r0 + 49; - if(r2 == r5) { - /* Next insn is delay slot */ - pc=0x13174; - run_13000(); return; - } - case 0x12e00: - pc=0x12e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_12e00() throws ExecutionException { /* 0x12e00 - 0x13000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x12e00: - r2 = r30 < 9 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1319c; - run_13000(); return; - } - r3 = r30 < 17 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x12ce4; - run_12c00(); return; - } - case 0x12e18: - r2 = 1 << 16; - r2 = r16 < r2 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1319c; - run_13000(); return; - } - r5 = r0 + 84; - case 0x12e2c: - r3 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r4 = r3 << 5; - r2 = r3 << 3; - r2 = r4 - r2; - r4 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r3 + 1; - r2 = r4 + r2; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r5; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r16; - writePages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff] = r3; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x12c58; - run_12c00(); return; - case 0x12e64: - /* Next insn is delay slot */ - r31=0x12e6c; - pc=0x1c600; - run_1c600(); return; - case 0x12e6c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x12c58; - run_12c00(); return; - } - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - if(r4 == r22) { - /* Next insn is delay slot */ - pc=0x143f8; - run_14200(); return; - } - /* Next insn is delay slot */ - r31=0x12e8c; - pc=0x18c00; - run_18c00(); return; - case 0x12e8c: - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x12e98; - pc=0x1c600; - run_1c600(); return; - case 0x12e98: - if(r2 == r22) { - /* Next insn is delay slot */ - pc=0x1471c; - run_14600(); return; - } - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x143d8; - run_14200(); return; - } - case 0x12eb0: - r3 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r4 = r3 << 5; - r2 = r3 << 3; - r2 = r4 - r2; - r4 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r4 + r2; - r4 = r0 + 88; - case 0x12ed4: - r3 = r3 + 1; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r4; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r16; - writePages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff] = r3; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x12c58; - run_12c00(); return; - case 0x12ef0: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r2 = r0 + r0; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - r22 = r0 + 43; - r16 = r0 + 43; - /* Next insn is delay slot */ - pc=0x12f3c; - continue; - case 0x12f0c: - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r5 = r2 + 1; - r2 = r3 + r2; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r5; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r22&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x12f28; - pc=0x1c000; - run_1c000(); return; - case 0x12f28: - if(r2 != r16) { - /* Next insn is delay slot */ - pc=0x12f84; - continue; - } - case 0x12f30: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - case 0x12f3c: - r3 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x12f0c; - continue; - } - /* Next insn is delay slot */ - r31=0x12f54; - pc=0x17800; - run_17800(); return; - case 0x12f54: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r5 = r2 + 1; - r2 = r3 + r2; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r5; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r22&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x12f7c; - pc=0x1c000; - run_1c000(); return; - case 0x12f7c: - if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x12f30; - continue; - } - case 0x12f84: - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r4 = r0 + r0; - r16 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x12f98; - pc=0x30800; - run_30800(); return; - case 0x12f98: - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r5 = r0 + r0; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x12fb0; - pc=0x12200; - run_12200(); return; - case 0x12fb0: - /* Next insn is delay slot */ - pc=0x12c58; - run_12c00(); return; - case 0x12fb8: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r2 = r0 + r0; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - r16 = r0 + r0; - r30 = r0 + 45; - r22 = r0 + 45; - /* Next insn is delay slot */ - pc=0x1300c; - run_13000(); return; - case 0x12fd8: - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r5 = r2 + 1; - r2 = r3 + r2; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r5; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r30&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r16 = r16 ^ 1; - /* Next insn is delay slot */ - r31=0x12ff8; - pc=0x1c000; - run_1c000(); return; - case 0x12ff8: - if(r2 != r22) { - /* Next insn is delay slot */ - pc=0x1257c; - run_12400(); return; - } case 0x13000: pc=0x13000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_13000() throws ExecutionException { /* 0x13000 - 0x13200 */ + private final void run_13000() throws ExecutionException { /* 0x13000 - 0x13800 */ int addr, tmp; for(;;) { switch(pc) { case 0x13000: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - case 0x1300c: - r3 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x12fd8; - run_12e00(); return; - } - /* Next insn is delay slot */ - r31=0x13024; - pc=0x17800; - run_17800(); return; - case 0x13024: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x12fd8; - run_12e00(); return; - case 0x13038: - r3 = r3 & 255; - r3 = r19 + r3; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x14394; - run_14200(); return; - } - r16 = r28 + -30776; - /* Next insn is delay slot */ - pc=0x127d4; - run_12600(); return; - case 0x1305c: - r4 = 7 << 16; - r4 = r4 + -8976; - /* Next insn is delay slot */ - r31=0x1306c; - pc=0x1ae00; - run_1ae00(); return; - case 0x1306c: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 5; - r3 = r6 << 3; - r3 = r4 - r3; - r4 = r3 + -24; - r3 = r3 + -48; - r4 = r2 + r4; - r3 = r2 + r3; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = r7 | r5; - r2 = r2 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1427c; - run_14200(); return; - } - case 0x130ac: - r8 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r2 = r8 ^ r2; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - r8 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; - r2 = r8 + r2; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r2; - case 0x130d4: - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r16 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - r2 = r22 << 2; - r2 = r2 + -8; - r16 = r16 + r2; - r30 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - case 0x130f0: - r5 = r5 & 103; - r5 = r5 | r7; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r5; - r7 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r4 = r0 + -17; - r4 = r7 | r4; - r5 = r5 & r4; - r4 = r0 + -9; - r5 = r5 & r4; - r6 = r6 + -1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r5; - writePages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff] = r6; - case 0x13120: - writePages[(r28+-30808)>>>12][((r28+-30808)>>>2)&0x3ff] = r0; - case 0x13124: - r22 = r22 + -1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r30; - writePages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff] = r22; - /* Next insn is delay slot */ - pc=0x125d8; - run_12400(); return; - case 0x13138: - r2 = r2 + -97; - r22 = r22 << 4; - r3 = r4 + -48; - r2 = (r2&0xffffffffL) < (6&0xffffffffL) ? 1 : 0; - r22 = r22 + r3; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x12d10; - run_12c00(); return; - } - case 0x13154: - r22 = r22 << 4; - r22 = r4 + r22; - r22 = r22 + -87; - /* Next insn is delay slot */ - pc=0x12d10; - run_12c00(); return; - case 0x13168: - r3 = r0 + 35; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x12e00; - run_12e00(); return; - } - case 0x13174: - r16 = r16 << 1; - r16 = r16 | 1; - r30 = r30 + 1; - /* Next insn is delay slot */ - r31=0x13188; - pc=0x1c000; - run_1c000(); return; - case 0x13188: - if(r2 != r22) { - /* Next insn is delay slot */ - pc=0x12ddc; - run_12c00(); return; - } - case 0x13190: - r16 = r16 << 1; - /* Next insn is delay slot */ - pc=0x12dc8; - run_12c00(); return; - case 0x1319c: - r5 = r0 + 80; - /* Next insn is delay slot */ - pc=0x12e2c; - run_12e00(); return; - case 0x131a8: - r16 = r28 + -32508; - /* Next insn is delay slot */ - pc=0x127cc; - run_12600(); return; - case 0x131b4: - r2 = r3 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x13244; - run_13200(); return; - } - r2 = r3 & 32; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x12768; - run_12600(); return; - } - r2 = readPages[(r21+8)>>>12][((r21+8)>>>2)&0x3ff]; - r2 = r2 + 128; - r2 = (r2&0xffffffffL) < (384&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x12768; - run_12600(); return; - } - r3 = r3 | 8; - writePages[(r21+0)>>>12][((r21+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x12768; - run_12600(); return; - case 0x131f4: - r3 = r0 + -2; - r2 = r2 & r3; - writePages[(r21+0)>>>12][((r21+0)>>>2)&0x3ff] = r2; + pc=r31; + return; case 0x13200: - pc=0x13200; + r2 = r0 + -1; + pc=r31; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_13200() throws ExecutionException { /* 0x13200 - 0x13400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x13200: - r3 = r2 + r0; - /* Next insn is delay slot */ - pc=0x12928; - run_12800(); return; - case 0x1320c: - /* Next insn is delay slot */ - r31=0x13214; - pc=0x1ec00; - run_1ec00(); return; - case 0x13214: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x12890; - run_12800(); return; - } - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + 1; - r6 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r6 = r6 + -1; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1323c; - pc=0x12200; - run_12200(); return; - case 0x1323c: - /* Next insn is delay slot */ - pc=0x12c58; - run_12c00(); return; - case 0x13244: - writePages[(r21+8)>>>12][((r21+8)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x12768; - run_12600(); return; - case 0x13250: - writePages[(r21+12)>>>12][((r21+12)>>>2)&0x3ff] = r0; - writePages[(r21+8)>>>12][((r21+8)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x12768; - run_12600(); return; - case 0x13260: - r4 = readPages[(r28+-30788)>>>12][((r28+-30788)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - r5 = r5 + -9164; - /* Next insn is delay slot */ - r31=0x13278; - pc=0x17e00; - run_17e00(); return; - case 0x13278: - r4 = readPages[(r28+-30788)>>>12][((r28+-30788)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1443c; - run_14400(); return; - } - r2 = r0 + 1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - case 0x13298: - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x132a4; - pc=0x17c00; - run_17c00(); return; - case 0x132a4: - r4 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x12c20; - run_12c00(); return; - case 0x132b0: - r2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r3 = r0 + 110; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r4 = r4 | 32; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x14474; - run_14400(); return; - } - addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r3 = r0 + 111; - r4 = r4 | 32; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x14474; - run_14400(); return; - } - addr=r2+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 116; - r3 = r3 | 32; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x14474; - run_14400(); return; - } - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r3 = r28 + -32660; - r2 = r22 + 1; - writePages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - r22 = r22 << 2; - r2 = r2 + r22; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - case 0x13314: - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x125d8; - run_12400(); return; - case 0x13320: - r2 = r22 < 256 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x12d80; - run_12c00(); return; - } - r5 = r0 + 82; - /* Next insn is delay slot */ - pc=0x12d84; - run_12c00(); return; - case 0x13338: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x13348; - pc=0x17c00; - run_17c00(); return; - case 0x13348: - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + r0; - r6 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r6 = r6 + -1; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x13368; - pc=0x12200; - run_12200(); return; - case 0x13368: - /* Next insn is delay slot */ - pc=0x12c58; - run_12c00(); return; - case 0x13370: - r16 = r22 & 15; - /* Next insn is delay slot */ - r31=0x1337c; - pc=0x1c000; - run_1c000(); return; - case 0x1337c: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x13478; - run_13400(); return; - } - r2 = r0 + 98; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x15480; - run_15400(); return; - } - r2 = r0 + 120; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x13478; - run_13400(); return; - } - r16 = r0 + r0; - r22 = r0 + -1; - case 0x133a8: - /* Next insn is delay slot */ - r31=0x133b0; - pc=0x1c000; - run_1c000(); return; - case 0x133b0: - r2 = r2 & 255; - r3 = r19 + r2; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r22 = r22 + 1; - r3 = r3 & 32; - r2 = r2 | r3; - r4 = r2 + -48; - r3 = r2 << 24; - r4 = (r4&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - r3 = r3 >> 24; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x146ec; - run_14600(); return; - } - r2 = r2 + -97; - r2 = (r2&0xffffffffL) < (6&0xffffffffL) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x14708; - run_14600(); return; - } - r2 = r22 < 3 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x15474; - run_15400(); return; - } - r22 = r22 < 5 ? 1 : 0; case 0x13400: - pc=0x13400; + r2= page[(r4+8)>>>2]; + r2= page[(r2+8)>>>2]; + pc=r31; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_13400() throws ExecutionException { /* 0x13400 - 0x13600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x13400: - if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x15590; - run_15400(); return; - } - r2 = 1 << 16; - r2 = r16 < r2 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x15474; - run_15400(); return; - } - r2 = r0 + 84; - case 0x1341c: - r4 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r5 = r4 << 5; - r3 = r4 << 3; - r3 = r5 - r3; - r5 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r4 + 1; - r3 = r5 + r3; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r16; - writePages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff] = r4; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x12c58; - run_12c00(); return; - case 0x13454: - r3 = r16 << 1; - r16 = r16 << 3; - r16 = r3 + r16; - r2 = r2 & 15; - r16 = r16 + r2; - /* Next insn is delay slot */ - r31=0x13470; - pc=0x1c000; - run_1c000(); return; - case 0x13470: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - case 0x13478: - r2 = r3 & 255; - r4 = r2 + -48; - r4 = (r4&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x13454; - continue; - } - r2 = r0 + 46; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x15278; - run_15200(); return; - } - r3 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r4 = r3 << 5; - r2 = r3 << 3; - r2 = r4 - r2; - r4 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r4 + r2; - r4 = r0 + 80; - /* Next insn is delay slot */ - pc=0x12ed4; - run_12e00(); return; - case 0x134c4: - r16 = r28 + -32572; - /* Next insn is delay slot */ - pc=0x127cc; - run_12600(); return; - case 0x134d0: - r16 = r28 + -32516; - /* Next insn is delay slot */ - pc=0x127cc; - run_12600(); return; - case 0x134dc: - /* Next insn is delay slot */ - r31=0x134e4; - pc=0x1c000; - run_1c000(); return; - case 0x134e4: - if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x14270; - run_14200(); return; - } - r16 = r28 + -32580; - /* Next insn is delay slot */ - pc=0x127d4; - run_12600(); return; - case 0x134f8: - r16 = r28 + -32532; - /* Next insn is delay slot */ - pc=0x127cc; - run_12600(); return; - case 0x13504: - r22 = r3 + 1; - r3 = r28 + -30776; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - r2 = r0 + 2; - writePages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff] = r22; - writePages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x124a4; - run_12400(); return; - case 0x13524: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 5; - r3 = r6 << 3; - r3 = r4 - r3; - r4 = r3 + -24; - r3 = r3 + -48; - r4 = r2 + r4; - r3 = r2 + r3; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = r7 | r5; - r2 = r2 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x15124; - run_15000(); return; - } - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r8 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - r2 = r8 < r2 ? 1 : 0; - r2 = r2 ^ 1; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x13588: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 5; - r3 = r6 << 3; - r3 = r4 - r3; - r4 = r3 + -24; - r3 = r3 + -48; - r4 = r2 + r4; - r3 = r2 + r3; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = r7 | r5; - r2 = r2 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x14bd0; - run_14a00(); return; - } - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r8 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - r2 = r8 < r2 ? 1 : 0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x135e8: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 5; - r3 = r6 << 3; - r3 = r4 - r3; - r4 = r3 + -24; case 0x13600: - pc=0x13600; + r2= page[(r4+8)>>>2]; + r2= page[(r2+0)>>>2]; + pc=r31; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_13600() throws ExecutionException { /* 0x13600 - 0x13800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x13600: - r3 = r3 + -48; - r4 = r2 + r4; - r3 = r2 + r3; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = r7 | r5; - r2 = r2 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x14c4c; - run_14c00(); return; - } - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r8 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - r2 = r2 < r8 ? 1 : 0; - r2 = r2 ^ 1; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x1364c: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 5; - r3 = r6 << 3; - r3 = r4 - r3; - r4 = r3 + -24; - r3 = r3 + -48; - r4 = r2 + r4; - r3 = r2 + r3; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = r7 | r5; - r2 = r2 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x14890; - run_14800(); return; - } - r8 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r2 = r8 ^ r2; - r2 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - case 0x136a4: - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x136b4: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 5; - r3 = r6 << 3; - r3 = r4 - r3; - r4 = r3 + -24; - r3 = r3 + -48; - r4 = r2 + r4; - r3 = r2 + r3; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = r7 | r5; - r2 = r2 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1503c; - run_15000(); return; - } - r8 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r2 = r8 - r2; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - case 0x13708: - r8 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; - r2 = r8 - r2; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r2; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x13728: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 5; - r3 = r6 << 3; - r3 = r4 - r3; - r4 = r3 + -24; - r3 = r3 + -48; - r4 = r2 + r4; - r3 = r2 + r3; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = r7 | r5; - r2 = r2 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x14a60; - run_14a00(); return; - } - r8 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r2 = r8 + r2; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - case 0x1377c: - r8 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; - r2 = r8 + r2; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r2; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x1379c: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 3; - r5 = r6 << 5; - r5 = r5 - r4; - r4 = r5 + -24; - r4 = r3 + r4; - r7 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r8 = r7 & 256; - if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x144b4; - run_14400(); return; - } - r8 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - case 0x137d0: - r5 = r5 + -48; - r3 = r3 + r5; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r5 = r7 & 256; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x147a4; - run_14600(); return; - } - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r8 = r2 << (r8&0x1f); - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r8; - case 0x137fc: - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; case 0x13800: pc=0x13800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_13800() throws ExecutionException { /* 0x13800 - 0x13a00 */ + private final void run_13800() throws ExecutionException { /* 0x13800 - 0x14000 */ int addr, tmp; for(;;) { switch(pc) { case 0x13800: - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x13810: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 5; - r3 = r6 << 3; - r3 = r4 - r3; - r4 = r3 + -24; - r3 = r3 + -48; - r4 = r2 + r4; - r3 = r2 + r3; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = r7 | r5; - r2 = r2 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x14f40; - run_14e00(); return; - } - r2 = r0 + 2; - case 0x13854: - r8 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r9 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - r8 = r9 >>> (r8&0x1f); - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r8; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x13870: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 5; - r3 = r6 << 3; - r3 = r4 - r3; - r4 = r3 + -24; - r4 = r2 + r4; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = r5 & 256; - if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x14520; - run_14400(); return; - } - r8 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - case 0x138a4: - r3 = r3 + -48; - r3 = r2 + r3; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = r7 & 256; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x14500; - run_14400(); return; - } - r2 = r0 + 1; - r8 = r2 << (r8&0x1f); - f0 = r8; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - { long l = Double.doubleToLongBits(((double)f0)); f3 = (int)(l >>> 32); f2 = (int)l; } - f0 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r2 = r0 + 2; - f1 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))/(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x138f8: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 5; - r3 = r6 << 3; - r3 = r4 - r3; - r4 = r3 + -24; - r3 = r3 + -48; - r4 = r2 + r4; - r3 = r2 + r3; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = r7 | r5; - r2 = r2 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x150b0; - run_15000(); return; - } - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r8 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - { long hilo = (r8) * r2; hi = (int) (hilo >>> 32); lo = (int) hilo; } - r2 = lo; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x1395c: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 3; - r7 = r6 << 5; - r7 = r7 - r4; - r4 = r7 + -24; - r7 = r7 + -48; - r4 = r3 + r4; - r3 = r3 + r7; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r8 = r7 | r5; - r8 = r8 & 256; - if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x14cc8; - run_14c00(); return; - } - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x15204; - run_15200(); return; - } - r8 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r9 = r0 + 1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x139e8; - continue; - } - case 0x139bc: - r10 = r2 & 1; - { long hilo = (r9) * r8; hi = (int) (hilo >>> 32); lo = (int) hilo; } - if(r10 == r0) { - /* Next insn is delay slot */ - pc=0x139d0; - continue; - } - r9 = lo; - case 0x139d0: - r2 = r2 >> 1; - { long hilo = (r8) * r8; hi = (int) (hilo >>> 32); lo = (int) hilo; } - r8 = lo; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x139bc; - continue; - } - case 0x139e8: - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r9; - r2 = r0 + 2; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x139fc: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; + r4 = 6 << 16; + r4 = r4 + 644; + r5 = r6 + r0; + pc=0x21400; + run_21000(); return; case 0x13a00: - pc=0x13a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_13a00() throws ExecutionException { /* 0x13a00 - 0x13c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x13a00: - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r2 << 3; - r6 = r2 << 5; - r6 = r6 - r4; - r4 = r6 + -24; - r6 = r6 + -48; - r4 = r3 + r4; - r3 = r3 + r6; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r6 = r7 | r5; - r6 = r6 & 256; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x14e6c; - run_14e00(); return; - } - case 0x13a3c: - r6 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x14418; - run_14400(); return; - } - r8 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - if(r6 != r0) { - /* Next insn is delay slot */ - hi = r8%r6; lo = r8/r6; - pc=0x13a60; - continue; - } - hi = r8%r6; lo = r8/r6; - throw new ExecutionException("Break"); - case 0x13a60: - r6 = lo; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r6; - r6 = r2 + r0; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x13a78: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r2 << 3; - r6 = r2 << 5; - r6 = r6 - r4; - r4 = r6 + -24; - r6 = r6 + -48; - r4 = r3 + r4; - r3 = r3 + r6; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r6 = r7 | r5; - r6 = r6 & 256; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x13a3c; - continue; - } - r6 = r7 & 256; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x13ae0; - continue; - } - f2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 | 256; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - case 0x13ae0: - r6 = r5 & 256; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x153a8; - run_15200(); return; - } - f2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 | 256; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = f0; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f1; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - case 0x13b04: - f2 = r0; - f3 = r0; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))==(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x152ec; - run_15200(); return; - } - f2 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r6 = r2 + r0; - f3 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - r2 = r0 + 2; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x13b50: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r6 << 3; - r7 = r6 << 5; - r7 = r7 - r3; - r4 = r7 + -24; - r3 = r7 + -48; - r4 = r2 + r4; - r3 = r2 + r3; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r8 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r9 = r8 | r5; - r9 = r9 & 256; - if(r9 != r0) { - /* Next insn is delay slot */ - pc=0x14910; - run_14800(); return; - } - case 0x13b90: - r8 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x1456c; - run_14400(); return; - } - r3 = r7 + -48; - r3 = r2 + r3; - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - if(r8 != r0) { - /* Next insn is delay slot */ - hi = r2%r8; lo = r2/r8; - pc=0x13bbc; - continue; - } - hi = r2%r8; lo = r2/r8; - throw new ExecutionException("Break"); - case 0x13bbc: - r7 = hi; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r7; - case 0x13bc4: - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x130d4; - run_13000(); return; - case 0x13bd4: - r4 = 7 << 16; - r4 = r4 + -9064; - /* Next insn is delay slot */ - r31=0x13be4; - pc=0x1b000; - run_1b000(); return; - case 0x13be4: - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r16 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - r2 = r22 << 2; - r2 = r2 + -8; - r16 = r16 + r2; - r30 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; + r2= page[(r4+8)>>>2]; + r4 = r5 + r0; + r5 = r2 + 8; + pc=0x1c600; + run_1c000(); return; case 0x13c00: - pc=0x13c00; + r29 = r29 + -40; + page[(r29+28)>>>2] = r18; + page[(r29+20)>>>2] = r16; + r18 = r5 + r0; + r16 = r4 + r0; + r4 = r5 + r0; + r5 = r0 + 91; + page[(r29+24)>>>2] = r17; + page[(r29+36)>>>2] = r31; + page[(r29+32)>>>2] = r19; + r31=0x13c30; + pc=0x1c400; + run_1c000(); return; + case 0x13c30: + r2= page[(r16+8)>>>2]; + r17= page[(r2+8)>>>2]; + r16= page[(r2+0)>>>2]; + if(r17 == r0) { + pc=0x13c94; + continue; + } + r5 = 6 << 16; + r5 = r5 + -4072; + r19 = 6 << 16; + pc=0x13c60; + continue; + case 0x13c5c: + r5 = r19 + 664; + case 0x13c60: + r4 = r18 + r0; + r31=0x13c6c; + pc=0x1c600; + run_1c000(); return; + case 0x13c6c: + r2= page[(r16+8)>>>2]; + r4 = r16 + 8; + r2= page[(r2+28)>>>2]; + r5 = r18 + r0; + r17 = r17 + -1; + pc=r2; + r31=0x13c88; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_13c00() throws ExecutionException { /* 0x13c00 - 0x13e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x13c00: - /* Next insn is delay slot */ - pc=0x13120; - run_13000(); return; - case 0x13c08: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = r2 << 3; - r2 = r2 << 5; - r2 = r2 - r3; - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r2 + -24; - r2 = r3 + r2; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r3 & 256; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x1458c; - run_14400(); return; + case 0x13c88: + r16= page[(r16+0)>>>2]; + if(r17 != r0) { + pc=0x13c5c; + continue; } - r4 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = r4 >> 16; - /* Next insn is delay slot */ - pc=0x140e4; - run_14000(); return; - case 0x13c50: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 5; - r3 = r6 << 3; - r3 = r4 - r3; - r4 = r3 + -24; - r3 = r3 + -48; - r4 = r2 + r4; - r3 = r2 + r3; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = r7 | r5; - r2 = r2 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x14d70; - run_14c00(); return; - } - r2 = r0 + 2; case 0x13c94: - r9 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r8 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r8 = r9 & r8; - case 0x13ca4: - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r8; - r9 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r8 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; - r8 = r9 + r8; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r8; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x13cc4: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 5; - r3 = r6 << 3; - r3 = r4 - r3; - r4 = r3 + -24; - r3 = r3 + -48; - r4 = r2 + r4; - r3 = r2 + r3; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = r7 | r5; - r2 = r2 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x14804; - run_14800(); return; - } - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r8 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - r2 = r8 ^ r2; - r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x13d28: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = r2 << 3; - r2 = r2 << 5; - r2 = r2 - r3; - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r2 + -24; - r2 = r3 + r2; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r3 & 256; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x14678; - run_14600(); return; - } - r4 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = r4 >> 8; - /* Next insn is delay slot */ - pc=0x140e4; - run_14000(); return; - case 0x13d70: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 5; - r3 = r6 << 3; - r3 = r4 - r3; - r4 = r3 + -24; - r3 = r3 + -48; - r4 = r2 + r4; - r3 = r2 + r3; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = r7 | r5; - r2 = r2 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x149e4; - run_14800(); return; - } - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r8 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - r2 = r2 < r8 ? 1 : 0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x13dd0: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = r2 << 3; - r2 = r2 << 5; - r2 = r2 - r3; - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r2 + -24; - r2 = r3 + r2; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r3 & 256; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x14740; - run_14600(); return; - } + r31= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r4 = r18 + r0; + r18= page[(r29+28)>>>2]; + r5 = r0 + 93; + r29 = r29 + 40; + pc=0x1c400; + run_1c000(); return; case 0x13e00: - pc=0x13e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_13e00() throws ExecutionException { /* 0x13e00 - 0x14000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x13e00: - f0 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r3 = r3 | 256; - { long l = Double.doubleToLongBits(((double)f0)); f13 = (int)(l >>> 32); f12 = (int)l; } - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - case 0x13e14: - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x13e20; - pc=0x32e00; - run_32e00(); return; - case 0x13e20: - r2 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = f0; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = f1; - case 0x13e30: - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x13120; - run_13000(); return; - case 0x13e40: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = r2 << 3; - r2 = r2 << 5; - r2 = r2 - r3; - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r2 + -24; - r2 = r3 + r2; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r3 & 256; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x1472c; - run_14600(); return; - } - f2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r3 = r3 | 256; - { long l = Double.doubleToLongBits(((double)f2)); f13 = (int)(l >>> 32); f12 = (int)l; } - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - case 0x13e84: - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x13e90; - pc=0x32800; - run_32800(); return; - case 0x13e90: - /* Next insn is delay slot */ - pc=0x13e20; - continue; - case 0x13e98: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = r2 << 3; - r2 = r2 << 5; - r2 = r2 - r3; - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r2 + -24; - r2 = r3 + r2; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r3 & 256; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x146c4; - run_14600(); return; - } - f0 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r3 = r3 | 256; - { long l = Double.doubleToLongBits(((double)f0)); f13 = (int)(l >>> 32); f12 = (int)l; } - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - case 0x13edc: - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x13ee8; - pc=0x32c00; - run_32c00(); return; - case 0x13ee8: - /* Next insn is delay slot */ - pc=0x13e20; - continue; - case 0x13ef0: - r5 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r2 = r0 + 128; - writePages[(r28+-30808)>>>12][((r28+-30808)>>>2)&0x3ff] = r2; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x14770; - run_14600(); return; - } - r2 = r0 + 17; - if(r5 != r2) { - /* Next insn is delay slot */ - pc=0x14754; - run_14600(); return; - } - r22 = r22 + -2; - r2 = r0 + 1; - writePages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff] = r22; - writePages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x124a4; - run_12400(); return; - case 0x13f28: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = r2 << 3; - r2 = r2 << 5; - r2 = r2 - r3; - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r2 + -24; - r2 = r3 + r2; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r3 & 256; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x13e30; + r4= page[(r4+8)>>>2]; + r5= page[(r5+8)>>>2]; + r6= page[(r4+0)>>>2]; + r2= page[(r5+0)>>>2]; + if(r6 == r2) { + pc=0x13e28; continue; } - f0 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r4 = r0 + -257; - f1 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r3 = r3 & r4; - r6 = fcsr; - r6 = fcsr; - r1 = r6 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity - } - fcsr = r6; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = f2; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x13120; - run_13000(); return; - case 0x13fac: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = r2 << 3; - r2 = r2 << 5; - r2 = r2 - r3; - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r3 + r2; - r3 = r0 + 1; - writePages[(r2+-8)>>>12][((r2+-8)>>>2)&0x3ff] = r3; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x13120; - run_13000(); return; - case 0x13fe0: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = r2 << 3; - r2 = r2 << 5; - r2 = r2 - r3; - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r2 + -24; - r2 = r3 + r2; + r2 = r0 + 1; + pc=r31; + return; + case 0x13e28: + r29 = r29 + -24; + r4 = r4 + 8; + r5 = r5 + 8; + page[(r29+20)>>>2] = r31; + r31=0x13e40; + pc=0x4ec00; + run_4e800(); return; + case 0x13e40: + r31= page[(r29+20)>>>2]; + r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; + r29 = r29 + 24; + pc=r31; + return; case 0x14000: pc=0x14000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_14000() throws ExecutionException { /* 0x14000 - 0x14200 */ + private final void run_14000() throws ExecutionException { /* 0x14000 - 0x14800 */ int addr, tmp; for(;;) { switch(pc) { case 0x14000: - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r3 & 256; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1461c; - run_14600(); return; + r29 = r29 + -48; + page[(r29+40)>>>2] = r21; + page[(r29+36)>>>2] = r20; + page[(r29+32)>>>2] = r19; + page[(r29+28)>>>2] = r18; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + page[(r29+44)>>>2] = r31; + r16 = r0 + -1; + r17 = r0 + r0; + r18 = r0 + 46; + r19 = r0 + 48; + r21 = r0 + 49; + r20 = r0 + 35; + case 0x14038: + r16 = r16 + 1; + r31=0x14044; + pc=0x23000; + run_23000(); return; + case 0x14044: + if(r2 == r18) { + pc=0x140ec; + continue; } - r5 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = 32768 << 16; - r4 = r5 ^ r4; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r4; - case 0x14024: - r4 = r0 + -9; - r3 = r3 & r4; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r3 = r0 - r3; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r3; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x13120; - run_13000(); return; case 0x1404c: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = r2 << 3; - r2 = r2 << 5; - r2 = r2 - r3; - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r2 + -24; - r2 = r3 + r2; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r3 & 256; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x145d8; - run_14400(); return; - } - r4 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - case 0x14088: - r4 = ~(r0 | r4); - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r4; - r4 = r0 + -9; - r3 = r3 & r4; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x13120; - run_13000(); return; - case 0x140a8: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = r2 << 3; - r2 = r2 << 5; - r2 = r2 - r3; - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r2 + -24; - r2 = r3 + r2; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r3 & 256; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x14634; - run_14600(); return; - } - r4 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - case 0x140e4: - r4 = r4 & 255; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r4; - r3 = r3 | 8; - r4 = r0 + -8; - r3 = r3 & r4; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x13120; - run_13000(); return; - case 0x1410c: - r4 = 3 << 16; - r4 = r4 + 12288; - /* Next insn is delay slot */ - r31=0x1411c; - pc=0x12000; - run_12000(); return; - case 0x1411c: - /* Next insn is delay slot */ - pc=0x13be4; - run_13a00(); return; - case 0x14124: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = r2 << 3; - r2 = r2 << 5; - r2 = r2 - r3; - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r2 + -24; - r2 = r3 + r2; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r3 & 256; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x13e30; - run_13e00(); return; - } - f2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r3 = r3 | 256; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = f0; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = f1; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x13120; - run_13000(); return; - case 0x14180: - r22 = r22 + -1; - r2 = r0 + 5; - writePages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff] = r22; - writePages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x1275c; - run_12600(); return; - case 0x14198: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r4 = r6 << 5; - r3 = r6 << 3; - r3 = r4 - r3; - r4 = r3 + -24; - r3 = r3 + -48; - r4 = r2 + r4; - r3 = r2 + r3; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = r7 | r5; - r2 = r2 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x14ad4; - run_14a00(); return; - } - r2 = r0 + 2; - case 0x141dc: - r9 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r8 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r8 = r9 | r8; - /* Next insn is delay slot */ - pc=0x13ca4; - run_13c00(); return; - case 0x141f4: - r2 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r3 = r2 << 3; - case 0x14200: - pc=0x14200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_14200() throws ExecutionException { /* 0x14200 - 0x14400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x14200: - r2 = r2 << 5; - r2 = r2 - r3; - r3 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r2 = r2 + -24; - r2 = r3 + r2; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r3 & 256; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x146d8; - run_14600(); return; - } - f2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r3 = r3 | 256; - { long l = Double.doubleToLongBits(((double)f2)); f13 = (int)(l >>> 32); f12 = (int)l; } - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - case 0x14238: - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x14244; - pc=0x32400; - run_32400(); return; - case 0x14244: - /* Next insn is delay slot */ - pc=0x13e20; - run_13e00(); return; - case 0x1424c: - r4 = 3 << 16; - r4 = r4 + 12800; - /* Next insn is delay slot */ - r31=0x1425c; - pc=0x12000; - run_12000(); return; - case 0x1425c: - /* Next insn is delay slot */ - pc=0x13be4; - run_13a00(); return; - case 0x14264: - r5 = r0 + 84; - /* Next insn is delay slot */ - pc=0x12d84; - run_12c00(); return; - case 0x14270: - r16 = r28 + -32588; - /* Next insn is delay slot */ - pc=0x127cc; - run_12600(); return; - case 0x1427c: - r2 = r7 & 256; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x142cc; - continue; - } - f0 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f1 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 & r2; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - r8 = fcsr; - r8 = fcsr; - r1 = r8 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity - } - fcsr = r8; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f2; - case 0x142cc: - r2 = r5 & 256; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x14318; - continue; - } - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 & r2; - r6 = fcsr; - r6 = fcsr; - r1 = r6 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity - } - fcsr = r6; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f2; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - case 0x14318: - r4 = 7 << 16; - r4 = r4 + -9024; - /* Next insn is delay slot */ - r31=0x14328; - pc=0x1ae00; - run_1ae00(); return; - case 0x14328: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r6 << 3; - r4 = r6 << 5; - r4 = r4 - r3; - r3 = r4 + -48; - r4 = r4 + -24; - r3 = r2 + r3; - r4 = r2 + r4; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x130ac; - run_13000(); return; - case 0x1435c: - r4 = 7 << 16; - r4 = r4 + -8936; - /* Next insn is delay slot */ - r31=0x1436c; - pc=0x1b800; - run_1b800(); return; - case 0x1436c: - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x125d8; - run_12400(); return; - case 0x14378: - r4 = 7 << 16; - r4 = r4 + -9140; - /* Next insn is delay slot */ - r31=0x14388; - pc=0x1ae00; - run_1ae00(); return; - case 0x14388: - r16 = r28 + -32500; - /* Next insn is delay slot */ - pc=0x127cc; - run_12600(); return; - case 0x14394: - /* Next insn is delay slot */ - r31=0x1439c; - pc=0x1f400; - run_1f400(); return; - case 0x1439c: - r4 = readPages[(r28+-30816)>>>12][((r28+-30816)>>>2)&0x3ff]; - r6 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x143b0; - pc=0x31000; - run_31000(); return; - case 0x143b0: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x14780; - run_14600(); return; - } - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x127d4; - run_12600(); return; - case 0x143c4: - /* Next insn is delay slot */ - r31=0x143cc; - pc=0x1c000; - run_1c000(); return; - case 0x143cc: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x1258c; - run_12400(); return; - case 0x143d8: - r4 = 7 << 16; - r4 = r4 + -9200; - /* Next insn is delay slot */ - r31=0x143e8; - pc=0x1b000; - run_1b000(); return; - case 0x143e8: - /* Next insn is delay slot */ - r31=0x143f0; - pc=0x1c800; - run_1c800(); return; - case 0x143f0: - /* Next insn is delay slot */ - pc=0x12eb0; - run_12e00(); return; - case 0x143f8: - r4 = 7 << 16; - r4 = r4 + -6844; - case 0x14400: - pc=0x14400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_14400() throws ExecutionException { /* 0x14400 - 0x14600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x14400: - /* Next insn is delay slot */ - r31=0x14408; - pc=0x1b000; - run_1b000(); return; - case 0x14408: - /* Next insn is delay slot */ - r31=0x14410; - pc=0x1c800; - run_1c800(); return; - case 0x14410: - /* Next insn is delay slot */ - pc=0x12c58; - run_12c00(); return; - case 0x14418: - r6 = r5 & 16; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x151a0; - run_15000(); return; - } - r6 = r2 + r0; - case 0x14428: - r2 = r0 + 2; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r0; - case 0x14430: - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x1443c: - r4 = 7 << 16; - r4 = r4 + -9228; - r5 = r0 + -1; - /* Next insn is delay slot */ - r31=0x14450; - pc=0x1b800; - run_1b800(); return; - case 0x14450: - r4 = readPages[(r28+-30788)>>>12][((r28+-30788)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x13298; - run_13200(); return; - case 0x1445c: - /* Next insn is delay slot */ - r31=0x14464; - pc=0x1ec00; - run_1ec00(); return; - case 0x14464: - r3 = r0 + 3; - r5 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x132b0; - run_13200(); return; - } - case 0x14474: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 40; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x15420; - run_15400(); return; - } - r6 = readPages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff]; - r4 = r0 + r0; - r5 = r0 + r0; - r6 = r6 + -1; - /* Next insn is delay slot */ - r31=0x1449c; - pc=0x12200; - run_12200(); return; - case 0x1449c: - /* Next insn is delay slot */ - pc=0x12c58; - run_12c00(); return; - case 0x144a4: - r16 = r0 + r0; - r5 = r0 + 80; - /* Next insn is delay slot */ - pc=0x12e2c; - run_12e00(); return; - case 0x144b4: - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - r9 = r0 + -257; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r7 = r7 & r9; - r10 = fcsr; - r10 = fcsr; - r1 = r10 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity - } - fcsr = r10; - r8 = f2; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f2; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - pc=0x137d0; - run_13600(); return; - case 0x14500: - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x15318; - run_15200(); return; - } - r2 = r2 >> (r8&0x1f); - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x136a4; - run_13600(); return; - case 0x14520: - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - r7 = r0 + -257; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 & r7; - r10 = fcsr; - r10 = fcsr; - r1 = r10 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity - } - fcsr = r10; - r8 = f2; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f2; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=0x138a4; - run_13800(); return; - case 0x1456c: - r3 = r5 & 16; + r3 = r2 < 47 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x15220; - run_15200(); return; + pc=0x140c8; + continue; } - case 0x14578: - r3 = r7 + -48; - r3 = r2 + r3; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x13bc4; - run_13a00(); return; - case 0x1458c: - f0 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r4 = r0 + -257; - f1 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r3 = r3 & r4; - r6 = fcsr; - r6 = fcsr; - r1 = r6 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity + if(r2 == r19) { + pc=0x140ec; + continue; } - fcsr = r6; - r4 = f2; - r4 = r4 >> 16; - /* Next insn is delay slot */ - pc=0x140e4; - run_14000(); return; - case 0x145d8: - f0 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r4 = r0 + -257; - f1 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r3 = r3 & r4; - r6 = fcsr; - r6 = fcsr; - r1 = r6 | 3; - r1 = r1 ^ 2; - fcsr = r1; - case 0x14600: - pc=0x14600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_14600() throws ExecutionException { /* 0x14600 - 0x14800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x14600: - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity + if(r2 == r21) { + pc=0x140d0; + continue; } - fcsr = r6; - r4 = f2; - /* Next insn is delay slot */ - pc=0x14088; - run_14000(); return; - case 0x1461c: - r4 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = r0 - r4; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=0x14024; - run_14000(); return; - case 0x14634: - f0 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r4 = r0 + -257; - f1 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r3 = r3 & r4; - r6 = fcsr; - r6 = fcsr; - r1 = r6 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity + case 0x14068: + if(r16 == r0) { + pc=0x14174; + continue; } - fcsr = r6; - r4 = f2; - /* Next insn is delay slot */ - pc=0x140e4; - run_14000(); return; - case 0x14678: - f0 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r4 = r0 + -257; - f1 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r3 = r3 & r4; - r6 = fcsr; - r6 = fcsr; - r1 = r6 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity + r18 = 6 << 16; + r18 = r18 + 31340; + r2= page[(r18+16)>>>2]; + r2 = r16 & r2; + if(r2 != r0) { + pc=0x1415c; + continue; } - fcsr = r6; - r4 = f2; - r4 = r4 >> 8; - /* Next insn is delay slot */ - pc=0x140e4; - run_14000(); return; - case 0x146c4: - f12 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - f13 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x13edc; - run_13e00(); return; - case 0x146d8: - f12 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - f13 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x14238; - run_14200(); return; - case 0x146ec: - r2 = r2 + -97; - r16 = r16 << 4; - r4 = r3 + -48; - r2 = (r2&0xffffffffL) < (6&0xffffffffL) ? 1 : 0; - r16 = r16 + r4; + case 0x1408c: + r2= page[(r18+36)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x133a8; - run_13200(); return; + pc=0x140f8; + continue; } - case 0x14708: - r16 = r16 << 4; - r3 = r3 + r16; - r16 = r3 + -87; - /* Next insn is delay slot */ - pc=0x133a8; - run_13200(); return; - case 0x1471c: - /* Next insn is delay slot */ - r31=0x14724; - pc=0x1c000; - run_1c000(); return; - case 0x14724: - /* Next insn is delay slot */ - pc=0x12eb0; - run_12e00(); return; - case 0x1472c: - f12 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - f13 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x13e84; - run_13e00(); return; + r2 = r16 < 9 ? 1 : 0; + if(r2 != r0) { + pc=0x140f8; + continue; + } + r16 = r16 < 17 ? 1 : 0; + if(r16 != r0) { + pc=0x14194; + continue; + } + r3 = 1 << 16; + r3 = r17 < r3 ? 1 : 0; + r3 = r3 << 2; + pc=0x140fc; + continue; + case 0x140c8: + if(r2 != r20) { + pc=0x14068; + continue; + } + case 0x140d0: + r17 = r17 << 1; + r17 = r17 | 1; + r16 = r16 + 1; + r31=0x140e4; + pc=0x23000; + run_23000(); return; + case 0x140e4: + if(r2 != r18) { + pc=0x1404c; + continue; + } + case 0x140ec: + r17 = r17 << 1; + pc=0x14038; + continue; + case 0x140f8: + r3 = r0 + r0; + case 0x140fc: + r4= page[(r28+-31376)>>>2]; + r5= page[(r28+-31372)>>>2]; + r2 = r4 << 5; + r2 = r5 + r2; + r5 = 6 << 16; + r5 = r5 + 15440; + page[(r2+0)>>>2] = r5; + r5 = r0 + 1; + page[(r2+8)>>>2] = r5; + page[(r2+12)>>>2] = r3; + page[(r2+16)>>>2] = r17; + page[(r2+24)>>>2] = r0; + r31= page[(r29+44)>>>2]; + r4 = r4 + 1; + r21= page[(r29+40)>>>2]; + r20= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + page[(r28+-31376)>>>2] = r4; + r29 = r29 + 48; + pc=r31; + return; + case 0x1415c: + r4 = 6 << 16; + r4 = r4 + 704; + r31=0x1416c; + pc=0x21200; + run_21000(); return; + case 0x1416c: + pc=0x1408c; + continue; + case 0x14174: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 668; + r31=0x14188; + pc=0x1fc00; + run_1f800(); return; + case 0x14188: + r3 = r0 + r0; + pc=0x140fc; + continue; + case 0x14194: + r3 = r17 < 256 ? 1 : 0; + r3 = r3 << 1; + pc=0x140fc; + continue; + case 0x14200: + r29 = r29 + -32; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + page[(r29+28)>>>2] = r31; + r17 = r0 + r0; + r16 = r0 + -1; + case 0x14218: + r31=0x14220; + pc=0x23000; + run_23000(); return; + case 0x14220: + r3 = r2 & 255; + r4 = r3 + -48; + r4 = (r4&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + r16 = r16 + 1; + if(r4 == r0) { + pc=0x14264; + continue; + } + case 0x14238: + r2 = r2 + -48; + r17 = r17 << 4; + r17 = r17 + r2; + r31=0x1424c; + pc=0x23000; + run_23000(); return; + case 0x1424c: + r3 = r2 & 255; + r4 = r3 + -48; + r4 = (r4&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + r16 = r16 + 1; + if(r4 != r0) { + pc=0x14238; + continue; + } + case 0x14264: + r4 = r3 + -97; + r4 = (r4&0xffffffffL) < (6&0xffffffffL) ? 1 : 0; + if(r4 == r0) { + pc=0x14288; + continue; + } + r17 = r17 << 4; + r17 = r2 + r17; + r17 = r17 + -87; + pc=0x14218; + continue; + case 0x14288: + r3 = r3 + -65; + r3 = (r3&0xffffffffL) < (6&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x142ac; + continue; + } + r17 = r17 << 4; + r17 = r2 + r17; + r17 = r17 + -55; + pc=0x14218; + continue; + case 0x142ac: + if(r16 == r0) { + pc=0x14348; + continue; + } + r2 = 6 << 16; + r2= page[(r2+31376)>>>2]; + if(r2 == r0) { + pc=0x142f4; + continue; + } + r2 = r16 < 3 ? 1 : 0; + if(r2 != r0) { + pc=0x142f4; + continue; + } + r16 = r16 < 5 ? 1 : 0; + if(r16 != r0) { + pc=0x14368; + continue; + } + r3 = 1 << 16; + r3 = r17 < r3 ? 1 : 0; + r3 = r3 << 2; + pc=0x142f8; + continue; + case 0x142f4: + r3 = r0 + r0; + case 0x142f8: + r4= page[(r28+-31376)>>>2]; + r5= page[(r28+-31372)>>>2]; + r2 = r4 << 5; + r2 = r5 + r2; + r5 = 6 << 16; + r5 = r5 + 15440; + page[(r2+0)>>>2] = r5; + r5 = r0 + 1; + page[(r2+8)>>>2] = r5; + page[(r2+12)>>>2] = r3; + page[(r2+16)>>>2] = r17; + page[(r2+24)>>>2] = r0; + r31= page[(r29+28)>>>2]; + r4 = r4 + 1; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + page[(r28+-31376)>>>2] = r4; + r29 = r29 + 32; + pc=r31; + return; + case 0x14348: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 752; + r31=0x1435c; + pc=0x1fc00; + run_1f800(); return; + case 0x1435c: + r3 = r0 + r0; + pc=0x142f8; + continue; + case 0x14368: + r3 = r17 < 256 ? 1 : 0; + r3 = r3 << 1; + pc=0x142f8; + continue; + case 0x14400: + r2= page[(r4+8)>>>2]; + if(r2 == r0) { + pc=0x1449c; + continue; + } + r3= page[(r5+8)>>>2]; + if(r3 == r0) { + pc=0x1449c; + continue; + } + r6 = r0 + 1; + if(r2 == r6) { + pc=0x14460; + continue; + } + if(r3 == r6) { + pc=0x144a8; + continue; + } + f2= page[(r4+20)>>>2]; + f0= page[(r5+20)>>>2]; + f3= page[(r4+16)>>>2]; + f1= page[(r5+16)>>>2]; + r2 = r0 + 1; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (1!=0)) { + pc=0x1449c; + continue; + } + case 0x14458: + pc=r31; + return; + case 0x14460: + if(r3 == r2) { + pc=0x144e4; + continue; + } + r2= page[(r4+16)>>>2]; + f0 = r2; + r2 = r0 + 1; + { long l = Double.doubleToLongBits(((double)f0)); f3 = (int)(l >>> 32); f2 = (int)l; } + f0= page[(r5+20)>>>2]; + f1= page[(r5+16)>>>2]; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (0!=0)) { + pc=0x14458; + continue; + } + case 0x1449c: + r2 = r0 + r0; + pc=r31; + return; + case 0x144a8: + r2= page[(r5+16)>>>2]; + f2 = r2; + r2 = r0 + 1; + { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } + f2= page[(r4+20)>>>2]; + f3= page[(r4+16)>>>2]; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (1!=0)) { + pc=0x1449c; + continue; + } + pc=r31; + return; + case 0x144e4: + r3= page[(r4+16)>>>2]; + r2= page[(r5+16)>>>2]; + r2 = r3 ^ r2; + r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; + pc=r31; + return; + case 0x14600: + r29 = r29 + -40; + page[(r29+32)>>>2] = r20; + page[(r29+24)>>>2] = r18; + page[(r29+36)>>>2] = r31; + page[(r29+28)>>>2] = r19; + page[(r29+20)>>>2] = r17; + page[(r29+16)>>>2] = r16; + r3= page[(r4+8)>>>2]; + r2= page[(r5+8)>>>2]; + r20 = r4 + r0; + r18 = r5 + r0; + r4= page[(r2+8)>>>2]; + r5= page[(r3+8)>>>2]; + if(r5 == r4) { + pc=0x14668; + continue; + } + case 0x14640: + r2 = r0 + 1; + case 0x14644: + r31= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 40; + pc=r31; + return; + case 0x14668: + r17= page[(r3+0)>>>2]; + r16= page[(r2+0)>>>2]; + if(r3 == r17) { + pc=0x146fc; + continue; + } + r19 = 6 << 16; + r19 = r19 + 784; + if(r2 == r16) { + pc=0x146dc; + continue; + } + case 0x14688: + r2= page[(r17+8)>>>2]; + r3= page[(r16+8)>>>2]; + if(r2 != r3) { + pc=0x14640; + continue; + } + r2= page[(r2+8)>>>2]; + r4 = r17 + 8; + r5 = r16 + 8; + pc=r2; + r31=0x146b0; + return; + case 0x146b0: + if(r2 != r0) { + pc=0x14640; + continue; + } + r17= page[(r17+0)>>>2]; + r2= page[(r20+8)>>>2]; + r16= page[(r16+0)>>>2]; + if(r2 == r17) { + pc=0x146f4; + continue; + } + r2= page[(r18+8)>>>2]; + if(r2 != r16) { + pc=0x14688; + continue; + } + case 0x146dc: + r4 = r19 + r0; + r5 = r0 + r0; + r31=0x146ec; + pc=0x21400; + run_21000(); return; + case 0x146ec: + pc=0x14688; + continue; + case 0x146f4: + r2= page[(r18+8)>>>2]; + case 0x146fc: + if(r2 == r16) { + pc=0x14740; + continue; + } + r4 = 6 << 16; + r4 = r4 + 784; + r5 = r0 + 1; + r31=0x14718; + pc=0x21400; + run_21000(); return; + case 0x14718: + r31= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r2 = r0 + r0; + r29 = r29 + 40; + pc=r31; + return; case 0x14740: - f12 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - f13 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x13e14; - run_13e00(); return; - case 0x14754: - r4 = 7 << 16; - r4 = r4 + -9084; - /* Next insn is delay slot */ - r31=0x14764; - pc=0x1b800; - run_1b800(); return; - case 0x14764: - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x125d8; - run_12400(); return; - case 0x14770: - r20 = r20 + 1; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x13124; - run_13000(); return; - case 0x14780: - r4 = 7 << 16; - r4 = r4 + -9104; - /* Next insn is delay slot */ - r31=0x14790; - pc=0x1b000; - run_1b000(); return; - case 0x14790: - r2 = r0 + 4; - writePages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff] = r2; - r2 = r0 + 4; - /* Next insn is delay slot */ - pc=0x1275c; - run_12600(); return; - case 0x147a4: - f12 = readPages[(r28+-32380)>>>12][((r28+-32380)>>>2)&0x3ff]; - f24 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - f0 = r8; - f13 = readPages[(r28+-32384)>>>12][((r28+-32384)>>>2)&0x3ff]; - f25 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits(((double)f0)); f15 = (int)(l >>> 32); f14 = (int)l; } - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r2; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r3; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r4; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - r31=0x147d4; - pc=0x33400; - run_33400(); return; - case 0x147d4: - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - r3 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - r2 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r4 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r30 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r6 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x137fc; - run_13600(); return; + r2 = r0 + r0; + pc=0x14644; + continue; case 0x14800: pc=0x14800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_14800() throws ExecutionException { /* 0x14800 - 0x14a00 */ + private final void run_14800() throws ExecutionException { /* 0x14800 - 0x15000 */ int addr, tmp; for(;;) { switch(pc) { case 0x14800: - case 0x14804: - r2 = r7 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1482c; + r29 = r29 + -88; + page[(r29+80)>>>2] = r16; + page[(r29+84)>>>2] = r31; + r16 = r5 + r0; + r5= page[(r4+8)>>>2]; + r3 = r4 + r0; + if(r5 == r0) { + pc=0x1485c; continue; } - f2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 | 256; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - case 0x1482c: - r2 = r5 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x15330; - run_15200(); return; - } - f2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 | 256; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = f0; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f1; - case 0x14854: - f2 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f3 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 & r2; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - r2 = r0 + 1; - if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x14904; + r6 = r0 + 1; + if(r5 == r6) { + pc=0x148c4; continue; } - case 0x14878: - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r2 = r0 + 2; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x14890: - r2 = r7 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x148b8; + r6 = r0 + 2; + if(r5 == r6) { + pc=0x14884; continue; } - f2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 | 256; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - case 0x148b8: - r2 = r5 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x153f8; - run_15200(); return; - } - f2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 | 256; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = f0; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f1; + r4 = 6 << 16; + r4 = r4 + 840; + r31=0x14848; + pc=0x21400; + run_21000(); return; + case 0x14848: + r31= page[(r29+84)>>>2]; + r16= page[(r29+80)>>>2]; + r29 = r29 + 88; + pc=r31; + return; + case 0x1485c: + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + 800; + r31=0x14870; + pc=0x1c600; + run_1c000(); return; + case 0x14870: + r31= page[(r29+84)>>>2]; + r16= page[(r29+80)>>>2]; + r29 = r29 + 88; + pc=r31; + return; + case 0x14884: + r7= page[(r3+20)>>>2]; + r6= page[(r3+16)>>>2]; + r5 = 6 << 16; + r4 = r29 + 16; + r5 = r5 + 832; + r31=0x148a0; + pc=0x50c00; + run_50800(); return; + case 0x148a0: + r4 = r16 + r0; + r5 = r29 + 16; + r31=0x148b0; + pc=0x1c600; + run_1c000(); return; + case 0x148b0: + r31= page[(r29+84)>>>2]; + r16= page[(r29+80)>>>2]; + r29 = r29 + 88; + pc=r31; + return; + case 0x148c4: + r6= page[(r4+16)>>>2]; + r5 = 6 << 16; + r4 = r29 + 16; + r5 = r5 + 820; + r7 = r6 + r0; + r31=0x148e0; + pc=0x50c00; + run_50800(); return; case 0x148e0: - f2 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f3 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 & r2; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - r2 = r0 + 1; - if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x14878; - continue; - } - case 0x14904: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x14878; + r4 = r16 + r0; + r5 = r29 + 16; + r31=0x148f0; + pc=0x1c600; + run_1c000(); return; + case 0x148f0: + pc=0x14848; continue; - case 0x14910: - r2 = r8 & 256; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x14960; - continue; - } - f0 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f1 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r8 = r8 & r2; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r8; - r6 = fcsr; - r6 = fcsr; - r1 = r6 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity - } - fcsr = r6; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f2; - case 0x14960: - r2 = r5 & 256; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x149ac; - continue; - } - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 & r2; - r6 = fcsr; - r6 = fcsr; - r1 = r6 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity - } - fcsr = r6; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f2; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - case 0x149ac: - r4 = 7 << 16; - r4 = r4 + -9024; - /* Next insn is delay slot */ - r31=0x149bc; - pc=0x1ae00; - run_1ae00(); return; - case 0x149bc: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r6 << 3; - r7 = r6 << 5; - r7 = r7 - r3; - r4 = r7 + -24; - r4 = r2 + r4; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x13b90; - run_13a00(); return; - case 0x149e4: - r2 = r7 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x14a0c; - run_14a00(); return; - } - f2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 | 256; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } case 0x14a00: - pc=0x14a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_14a00() throws ExecutionException { /* 0x14a00 - 0x14c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x14a00: - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - case 0x14a0c: - r2 = r5 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x153bc; - run_15200(); return; - } - f2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 | 256; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = f0; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f1; - case 0x14a34: - f2 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f3 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 & r2; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - r2 = r0 + 1; - if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x14878; - run_14800(); return; - } - /* Next insn is delay slot */ - pc=0x14904; - run_14800(); return; - case 0x14a60: - r2 = r7 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x14a88; + r29 = r29 + -40; + r3= page[(r5+4)>>>2]; + page[(r29+32)>>>2] = r19; + page[(r29+28)>>>2] = r18; + page[(r29+24)>>>2] = r17; + page[(r29+36)>>>2] = r31; + page[(r29+20)>>>2] = r16; + r18 = r4 + r0; + r17 = r5 + r0; + r19 = r6 + r0; + if(r4 == r0) { + pc=0x14b20; continue; } - f2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 | 256; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - case 0x14a88: - r2 = r5 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x15344; - run_15200(); return; - } - f2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 | 256; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = f0; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f1; - case 0x14ab0: - f2 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - f3 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x1377c; - run_13600(); return; - case 0x14ad4: - r2 = r7 & 256; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x14b24; - continue; - } - f0 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f1 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 & r2; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - r8 = fcsr; - r8 = fcsr; - r1 = r8 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity - } - fcsr = r8; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f2; - case 0x14b24: - r2 = r5 & 256; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x14b70; - continue; - } - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 & r2; - r6 = fcsr; - r6 = fcsr; - r1 = r6 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity - } - fcsr = r6; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f2; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - case 0x14b70: - r4 = 7 << 16; - r4 = r4 + -9024; - /* Next insn is delay slot */ - r31=0x14b80; - pc=0x1ae00; - run_1ae00(); return; - case 0x14b80: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r6 << 3; - r4 = r6 << 5; - r4 = r4 - r3; - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r3 = r4 + -48; - r4 = r4 + -24; - r3 = r2 + r3; - r4 = r2 + r4; - r16 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - r2 = r22 << 2; - r2 = r2 + -8; - r16 = r16 + r2; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r30 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x141dc; - run_14000(); return; - case 0x14bd0: - r2 = r7 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x14bf8; - continue; - } - f2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 | 256; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - case 0x14bf8: - r2 = r5 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x153d0; - run_15200(); return; - } - case 0x14c00: - pc=0x14c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_14c00() throws ExecutionException { /* 0x14c00 - 0x14e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x14c00: - f2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 | 256; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = f0; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f1; - case 0x14c20: - f2 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f3 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 & r2; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - r2 = r0 + 1; - if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x14878; - run_14800(); return; - } - /* Next insn is delay slot */ - pc=0x14904; - run_14800(); return; - case 0x14c4c: - r2 = r7 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x14c74; - continue; - } - f2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 | 256; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - case 0x14c74: - r2 = r5 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1536c; - run_15200(); return; - } - f2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 | 256; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = f0; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f1; - case 0x14c9c: - f2 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f3 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 & r2; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<=(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - r2 = r0 + 1; - if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x14878; - run_14800(); return; - } - /* Next insn is delay slot */ - pc=0x14904; - run_14800(); return; - case 0x14cc8: - r8 = r7 & 256; - if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x14cf0; - continue; - } - f2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 | 256; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - case 0x14cf0: - r7 = r5 & 256; - if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x1540c; - run_15400(); return; - } - f0 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 | 256; - { long l = Double.doubleToLongBits(((double)f0)); f15 = (int)(l >>> 32); f14 = (int)l; } - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = f14; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f15; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - case 0x14d14: - f12 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - f13 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r2; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r3; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r4; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - r31=0x14d38; - pc=0x33400; - run_33400(); return; - case 0x14d38: - r3 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - r2 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r4 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r30 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r6 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x14d70: - r2 = r7 & 256; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x14dc0; + if(r3 == r2) { + pc=0x14a50; continue; } - f0 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f1 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 & r2; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - r8 = fcsr; - r8 = fcsr; - r1 = r8 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity + r4 = 6 << 16; + r5= page[(r5+8)>>>2]; + r4 = r4 + 860; + r31=0x14a50; + pc=0x21400; + run_21000(); return; + case 0x14a50: + r16 = 6 << 16; + r4 = r16 + 16012; + r31=0x14a60; + pc=0x1be00; + run_1b800(); return; + case 0x14a60: + r5 = 6 << 16; + r4 = r16 + 16012; + r5 = r5 + 904; + r31=0x14a74; + pc=0x1c600; + run_1c000(); return; + case 0x14a74: + r5= page[(r17+12)>>>2]; + r4 = r16 + 16012; + r31=0x14a84; + pc=0x1c600; + run_1c000(); return; + case 0x14a84: + r5 = 6 << 16; + r4 = r16 + 16012; + r5 = r5 + 944; + r31=0x14a98; + pc=0x1c600; + run_1c000(); return; + case 0x14a98: + r2= page[(r18+0)>>>2]; + r4 = r16 + 16012; + r5= page[(r2+0)>>>2]; + r31=0x14aac; + pc=0x1c600; + run_1c000(); return; + case 0x14aac: + r5 = 6 << 16; + r4 = r16 + 16012; + r5 = r5 + 952; + r31=0x14ac0; + pc=0x1c600; + run_1c000(); return; + case 0x14ac0: + r2= page[(r19+0)>>>2]; + r4 = r16 + 16012; + r5= page[(r2+0)>>>2]; + r31=0x14ad4; + pc=0x1c600; + run_1c000(); return; + case 0x14ad4: + r5 = 6 << 16; + r4 = r16 + 16012; + r5 = r5 + 12036; + r31=0x14ae8; + pc=0x1c600; + run_1c000(); return; + case 0x14ae8: + r4 = r16 + 16012; + r5 = r0 + r0; + r31=0x14af8; + pc=0x1c400; + run_1c000(); return; + case 0x14af8: + r31= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r5= page[(r16+16012)>>>2]; + r16= page[(r29+20)>>>2]; + r4 = r0 + -2; + r29 = r29 + 40; + pc=0x1fc00; + run_1f800(); return; + case 0x14b20: + r2 = r0 + 1; + if(r3 == r2) { + pc=0x14b40; + continue; } - fcsr = r8; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f2; - case 0x14dc0: - r2 = r5 & 256; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x14e0c; - run_14e00(); return; + r4 = 6 << 16; + r5= page[(r5+8)>>>2]; + r4 = r4 + 880; + r31=0x14b40; + pc=0x21400; + run_21000(); return; + case 0x14b40: + r16 = 6 << 16; + r4 = r16 + 16012; + r31=0x14b50; + pc=0x1be00; + run_1b800(); return; + case 0x14b50: + r5 = 6 << 16; + r4 = r16 + 16012; + r5 = r5 + 904; + r31=0x14b64; + pc=0x1c600; + run_1c000(); return; + case 0x14b64: + r5= page[(r17+12)>>>2]; + r4 = r16 + 16012; + r31=0x14b74; + pc=0x1c600; + run_1c000(); return; + case 0x14b74: + r5 = 6 << 16; + r4 = r16 + 16012; + r5 = r5 + 944; + r31=0x14b88; + pc=0x1c600; + run_1c000(); return; + case 0x14b88: + pc=0x14ac0; + continue; + case 0x14c00: + r29 = r29 + -40; + page[(r29+24)>>>2] = r18; + page[(r29+20)>>>2] = r17; + page[(r29+16)>>>2] = r16; + page[(r29+28)>>>2] = r31; + page[(r29+36)>>>2] = f20; + page[(r29+32)>>>2] = f21; + r2= page[(r6+8)>>>2]; + r3 = r0 + 2; + r16 = r4 + r0; + r18 = r5 + r0; + r17 = r6 + r0; + if(r2 == r3) { + pc=0x14cb0; + continue; } - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 & r2; - r6 = fcsr; - r6 = fcsr; - r1 = r6 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity + r7 = r0 + 1; + if(r2 != r7) { + pc=0x14c8c; + continue; } - fcsr = r6; - case 0x14e00: - pc=0x14e00; + r5= page[(r5+8)>>>2]; + r4 = r5 + -23; + r6 = (r4&0xffffffffL) < (20&0xffffffffL) ? 1 : 0; + if(r6 == r0) { + pc=0x14c80; + continue; + } + r4 = r2 << (r4&0x1f); + r6 = r4 & 65295; + if(r6 != r0) { + pc=0x14ce8; + continue; + } + r3 = 15 << 16; + r3 = r3 + 240; + r4 = r4 & r3; + if(r4 != r0) { + pc=0x14cb8; + continue; + } + case 0x14c80: + r4 = r16 + r0; + r5 = r18 + r0; + r6 = r17 + r0; + case 0x14c8c: + f20= page[(r29+36)>>>2]; + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + f21= page[(r29+32)>>>2]; + r29 = r29 + 40; + pc=0x14a00; + continue; + case 0x14cb0: + r5= page[(r5+8)>>>2]; + case 0x14cb8: + r3 = r5 + -23; + r4 = (r3&0xffffffffL) < (20&0xffffffffL) ? 1 : 0; + if(r4 == r0) { + pc=0x14c80; + continue; + } + r4 = 6 << 16; + r3 = r3 << 2; + r4 = r4 + 2352; + r3 = r4 + r3; + r3= page[(r3+0)>>>2]; + pc=r3; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_14e00() throws ExecutionException { /* 0x14e00 - 0x15000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x14e00: - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f2; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - case 0x14e0c: - r4 = 7 << 16; - r4 = r4 + -9024; - /* Next insn is delay slot */ - r31=0x14e1c; - pc=0x1ae00; - run_1ae00(); return; - case 0x14e1c: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r6 << 3; - r4 = r6 << 5; - r4 = r4 - r3; - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r3 = r4 + -48; - r4 = r4 + -24; - r3 = r2 + r3; - r4 = r2 + r4; - r16 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - r2 = r22 << 2; - r2 = r2 + -8; - r16 = r16 + r2; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r30 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x13c94; - run_13c00(); return; - case 0x14e6c: - r6 = r7 & 256; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x14e94; - continue; - } - f2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 | 256; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; + case 0x14ce8: + f2= page[(r17+16)>>>2]; + page[(r17+8)>>>2] = r3; { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - case 0x14e94: - r6 = r5 & 256; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x15358; - run_15200(); return; + page[(r17+20)>>>2] = f0; + page[(r17+16)>>>2] = f1; + r2 = r0 + 2; + pc=0x14cb8; + continue; + case 0x14d08: + r4 = 6 << 16; + r4 = r4 + 3456; + r31=0x14d18; + pc=0x21200; + run_21000(); return; + case 0x14d18: + f0= page[(r16+20)>>>2]; + f20= page[(r29+36)>>>2]; + f1= page[(r16+16)>>>2]; + r2 = r0 + 1; + r4 = fcsr; + r4 = fcsr; + r1 = r4 | 3; + r1 = r1 ^ 2; + fcsr = r1; + switch(fcsr & 3) { + case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest + case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero + case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity + case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity } - f2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 | 256; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = f0; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f1; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - case 0x14eb8: + fcsr = r4; + r31= page[(r29+28)>>>2]; + f21= page[(r29+32)>>>2]; + page[(r16+8)>>>2] = r2; + page[(r16+16)>>>2] = f2; + r4 = r16 + r0; + r5 = r18 + r0; + r16= page[(r29+16)>>>2]; + r18= page[(r29+24)>>>2]; + r6 = r17 + r0; + r17= page[(r29+20)>>>2]; + r29 = r29 + 40; + pc=0x15200; + run_15000(); return; + case 0x14d84: + f0= page[(r17+20)>>>2]; f2 = r0; + f1= page[(r17+16)>>>2]; f3 = r0; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))==(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x15258; - run_15200(); return; + pc=0x1511c; + run_15000(); return; } - f2 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - f3 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; + f2= page[(r16+20)>>>2]; + f3= page[(r16+16)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - r6 = fcsr; - r6 = fcsr; - r1 = r6 | 3; + r4 = fcsr; + r4 = fcsr; + r1 = r4 | 3; r1 = r1 ^ 2; fcsr = r1; switch(fcsr & 3) { @@ -7022,1033 +4035,284 @@ public final class AcmeCrossAssembler extends UnixRuntime { case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity } - fcsr = r6; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f2; - r6 = r2 + r0; - r2 = r0 + 2; - case 0x14f20: - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r5 = r0 + -257; - r7 = r7 & r5; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x14f40: - r2 = r7 & 256; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x14f90; + fcsr = r4; + page[(r16+16)>>>2] = f2; + case 0x14de8: + r2 = r0 + 1; + page[(r16+8)>>>2] = r2; + r2 = r0 + r0; + case 0x14df4: + page[(r16+24)>>>2] = r2; + r2= page[(r17+12)>>>2]; + r3= page[(r16+12)>>>2]; + r2 = r2 & 23; + f20= page[(r29+36)>>>2]; + r2 = r2 | r3; + r31= page[(r29+28)>>>2]; + r3 = r0 + -9; + r2 = r2 & r3; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + f21= page[(r29+32)>>>2]; + page[(r16+12)>>>2] = r2; + r16= page[(r29+16)>>>2]; + r29 = r29 + 40; + pc=r31; + return; + case 0x14e38: + f0= page[(r17+20)>>>2]; + f2= page[(r16+20)>>>2]; + f1= page[(r17+16)>>>2]; + f3= page[(r16+16)>>>2]; + r3= page[(r16+24)>>>2]; + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } + r2= page[(r17+24)>>>2]; + page[(r16+20)>>>2] = f0; + page[(r16+16)>>>2] = f1; + r2 = r3 + r2; + pc=0x14df4; + continue; + case 0x14e68: + f0= page[(r17+20)>>>2]; + f2= page[(r16+20)>>>2]; + f1= page[(r17+16)>>>2]; + f3= page[(r16+16)>>>2]; + r3= page[(r16+24)>>>2]; + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } + r2= page[(r17+24)>>>2]; + page[(r16+20)>>>2] = f0; + page[(r16+16)>>>2] = f1; + r2 = r3 - r2; + pc=0x14df4; + continue; + case 0x14e98: + f2= page[(r16+20)>>>2]; + f0= page[(r17+20)>>>2]; + f3= page[(r16+16)>>>2]; + f1= page[(r17+16)>>>2]; + r2 = r0 + 1; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (0!=0)) { + pc=0x14f38; continue; } - f0 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f1 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 & r2; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - r8 = fcsr; - r8 = fcsr; - r1 = r8 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity - } - fcsr = r8; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f2; - case 0x14f90: - r2 = r5 & 256; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x14fdc; + case 0x14ebc: + r3= page[(r17+12)>>>2]; + page[(r16+16)>>>2] = r2; + r2= page[(r16+12)>>>2]; + r4 = 6 << 16; + r2 = r3 | r2; + f20= page[(r29+36)>>>2]; + r4 = r4 + 15440; + r31= page[(r29+28)>>>2]; + r2 = r2 & 16; + page[(r16+0)>>>2] = r4; + r2 = r2 | 8; + r4 = r0 + 1; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + f21= page[(r29+32)>>>2]; + page[(r16+8)>>>2] = r4; + page[(r16+24)>>>2] = r0; + page[(r16+12)>>>2] = r2; + r16= page[(r29+16)>>>2]; + r29 = r29 + 40; + pc=r31; + return; + case 0x14f14: + f2= page[(r16+20)>>>2]; + f0= page[(r17+20)>>>2]; + f3= page[(r16+16)>>>2]; + f1= page[(r17+16)>>>2]; + r2 = r0 + 1; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<=(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (1!=0)) { + pc=0x14ebc; continue; } - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 & r2; - r6 = fcsr; - r6 = fcsr; - r1 = r6 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity + case 0x14f38: + r2 = r0 + r0; + pc=0x14ebc; + continue; + case 0x14f44: + f2= page[(r16+20)>>>2]; + f0= page[(r17+20)>>>2]; + f3= page[(r16+16)>>>2]; + f1= page[(r17+16)>>>2]; + r2 = r0 + 1; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (1!=0)) { + pc=0x14ebc; + continue; } - fcsr = r6; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f2; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - case 0x14fdc: - r4 = 7 << 16; - r4 = r4 + -9024; - /* Next insn is delay slot */ - r31=0x14fec; - pc=0x1ae00; - run_1ae00(); return; - case 0x14fec: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r6 << 3; - r4 = r6 << 5; - r4 = r4 - r3; + pc=0x14f38; + continue; + case 0x14f70: + f2= page[(r16+20)>>>2]; + f0= page[(r17+20)>>>2]; + f3= page[(r16+16)>>>2]; + f1= page[(r17+16)>>>2]; + r2 = r0 + 1; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<=(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (1!=0)) { + pc=0x14ebc; + continue; + } + pc=0x14f38; + continue; + case 0x14f9c: + f2= page[(r16+20)>>>2]; + f0= page[(r17+20)>>>2]; + f3= page[(r16+16)>>>2]; + f1= page[(r17+16)>>>2]; + r2 = r0 + 1; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (1!=0)) { + pc=0x14ebc; + continue; + } + pc=0x14f38; + continue; + case 0x14fc8: + f2= page[(r16+20)>>>2]; + f0= page[(r17+20)>>>2]; + f3= page[(r16+16)>>>2]; + f1= page[(r17+16)>>>2]; + r2 = r0 + 1; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (0!=0)) { + pc=0x14ebc; + continue; + } + pc=0x14f38; + continue; + case 0x14ff4: + f12= page[(r16+20)>>>2]; + f14= page[(r17+20)>>>2]; + f13= page[(r16+16)>>>2]; case 0x15000: pc=0x15000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_15000() throws ExecutionException { /* 0x15000 - 0x15200 */ + private final void run_15000() throws ExecutionException { /* 0x15000 - 0x15800 */ int addr, tmp; for(;;) { switch(pc) { case 0x15000: - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r3 = r4 + -48; - r4 = r4 + -24; - r3 = r2 + r3; - r4 = r2 + r4; - r16 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - r2 = r22 << 2; - r2 = r2 + -8; - r16 = r16 + r2; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r30 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x13854; - run_13800(); return; - case 0x1503c: - r2 = r7 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x15064; - continue; - } - f2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 | 256; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - case 0x15064: - r2 = r5 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x15380; - run_15200(); return; - } - f2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 | 256; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = f0; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f1; - case 0x1508c: - f2 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - f3 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x13708; - run_13600(); return; - case 0x150b0: - r2 = r7 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x150d8; - continue; - } - f2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 | 256; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - case 0x150d8: - r2 = r5 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x153e4; - run_15200(); return; - } - f2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 | 256; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = f0; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f1; - case 0x15100: - f2 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - f3 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r2 = r0 + 2; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x15124: - r2 = r7 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1514c; - continue; - } - f2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 | 256; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f1; - case 0x1514c: - r2 = r5 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x15394; - run_15200(); return; - } - f2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r5 = r5 | 256; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = f0; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = f1; - case 0x15174: - f2 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r2 = r0 + -257; - f3 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r7 = r7 & r2; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<=(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r7; - r2 = r0 + 1; - if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x14878; - run_14800(); return; - } - /* Next insn is delay slot */ - pc=0x14904; - run_14800(); return; - case 0x151a0: - r4 = 7 << 16; - r4 = r4 + -8004; - case 0x151a8: - /* Next insn is delay slot */ - r31=0x151b0; - pc=0x1b000; - run_1b000(); return; - case 0x151b0: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r6 << 3; - r4 = r6 << 5; - r4 = r4 - r3; - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r3 = r4 + -48; - r4 = r4 + -24; - r3 = r2 + r3; - r4 = r2 + r4; - r16 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - r2 = r22 << 2; - r2 = r2 + -8; - r16 = r16 + r2; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r30 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x14430; - run_14400(); return; - case 0x15200: - pc=0x15200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_15200() throws ExecutionException { /* 0x15200 - 0x15400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x15200: - case 0x15204: - r2 = r5 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x14428; - run_14400(); return; - } - r4 = 7 << 16; - r4 = r4 + -9048; - /* Next insn is delay slot */ - pc=0x151a8; - run_15000(); return; - case 0x15220: - r4 = 7 << 16; - r4 = r4 + -8004; - /* Next insn is delay slot */ - r31=0x15230; - pc=0x1b000; - run_1b000(); return; - case 0x15230: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r6 << 3; - r7 = r6 << 5; - r7 = r7 - r3; - r4 = r7 + -24; - r4 = r2 + r4; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x14578; - run_14400(); return; - case 0x15258: - r5 = r5 & 16; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x15604; - run_15600(); return; - } - r6 = r2 + r0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r0; - r2 = r0 + 2; - /* Next insn is delay slot */ - pc=0x14f20; - run_14e00(); return; - case 0x15278: - /* Next insn is delay slot */ - r31=0x15280; - pc=0x1c000; - run_1c000(); return; - case 0x15280: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - f0 = r16; - r3 = r2 + -48; - r3 = (r3&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - { long l = Double.doubleToLongBits(((double)f0)); f29 = (int)(l >>> 32); f28 = (int)l; } - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x15660; - run_15600(); return; - } - f24 = readPages[(r28+-32388)>>>12][((r28+-32388)>>>2)&0x3ff]; - f26 = f22; - f27 = f23; - f25 = readPages[(r28+-32392)>>>12][((r28+-32392)>>>2)&0x3ff]; - case 0x152ac: - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f29&0xffffffffL) << 32) | (f28&0xffffffffL)))*(Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))); f29 = (int)(l >>> 32); f28 = (int)l; } - r2 = r2 & 15; - f2 = r2; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))*(Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))); f27 = (int)(l >>> 32); f26 = (int)l; } - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f29&0xffffffffL) << 32) | (f28&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f29 = (int)(l >>> 32); f28 = (int)l; } - /* Next insn is delay slot */ - r31=0x152cc; - pc=0x1c000; - run_1c000(); return; - case 0x152cc: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r3 = r2 + -48; - r3 = (r3&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x152ac; - continue; - } - /* Next insn is delay slot */ - pc=0x12bb0; - run_12a00(); return; - case 0x152ec: - r6 = r5 & 16; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x155a8; - run_15400(); return; - } - r6 = r2 + r0; - r2 = r0 + 2; - case 0x15300: - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r0; - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x130f0; - run_13000(); return; - case 0x15318: - r2 = ~(r0 | r2); - r2 = r2 >> (r8&0x1f); - r2 = ~(r0 | r2); - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x136a4; - run_13600(); return; - case 0x15330: - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x14854; - run_14800(); return; - case 0x15344: - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x14ab0; - run_14a00(); return; - case 0x15358: - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x14eb8; - run_14e00(); return; - case 0x1536c: - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x14c9c; - run_14c00(); return; - case 0x15380: - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1508c; - run_15000(); return; - case 0x15394: - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x15174; - run_15000(); return; - case 0x153a8: - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x13b04; - run_13a00(); return; - case 0x153bc: - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x14a34; - run_14a00(); return; - case 0x153d0: - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x14c20; - run_14c00(); return; - case 0x153e4: - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x15100; - run_15000(); return; - case 0x153f8: - f0 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - case 0x15400: - pc=0x15400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_15400() throws ExecutionException { /* 0x15400 - 0x15600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x15400: - f1 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x148e0; - run_14800(); return; - case 0x1540c: - f14 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - f15 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x14d14; - run_14c00(); return; - case 0x15420: - r4 = readPages[(r28+-30784)>>>12][((r28+-30784)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1542c; - pc=0x18000; - run_18000(); return; - case 0x1542c: - r4 = readPages[(r28+-30820)>>>12][((r28+-30820)>>>2)&0x3ff]; - r6 = readPages[(r28+-30784)>>>12][((r28+-30784)>>>2)&0x3ff]; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x15440; - pc=0x31000; - run_31000(); return; - case 0x15440: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1555c; - continue; - } - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r22 + 1; - writePages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - r22 = r22 << 2; - r2 = r2 + r22; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x125d8; - run_12400(); return; - case 0x15474: - r2 = r0 + 80; - /* Next insn is delay slot */ - pc=0x1341c; - run_13400(); return; - case 0x15480: - r30 = r0 + -1; - r22 = r0 + r0; - r16 = r0 + 46; - case 0x1548c: - r30 = r30 + 1; - /* Next insn is delay slot */ - r31=0x15498; - pc=0x1c000; - run_1c000(); return; - case 0x15498: - if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x15528; - continue; - } - r5 = r2 < 47 ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x15534; - continue; - } - r4 = r0 + 48; - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x15528; - continue; - } - r5 = r0 + 49; - if(r2 == r5) { - /* Next insn is delay slot */ - pc=0x15540; - continue; - } - case 0x154c4: - r2 = r30 < 9 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x15550; - continue; - } - r4 = r30 < 17 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x15578; - continue; - } - r2 = 1 << 16; - r2 = r22 < r2 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x15550; - continue; - } - r2 = r0 + 84; - case 0x154f0: - r5 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r6 = r5 << 5; - r4 = r5 << 3; - r4 = r6 - r4; - r6 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r5 = r5 + 1; - r4 = r6 + r4; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r2; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = r22; - writePages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff] = r5; - writePages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x12c58; - run_12c00(); return; - case 0x15528: - r22 = r22 << 1; - /* Next insn is delay slot */ - pc=0x1548c; - continue; - case 0x15534: - r3 = r0 + 35; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x154c4; - continue; - } - case 0x15540: - r3 = r22 << 1; - r22 = r3 | 1; - /* Next insn is delay slot */ - pc=0x1548c; - continue; - case 0x15550: - r2 = r0 + 80; - /* Next insn is delay slot */ - pc=0x154f0; - continue; - case 0x1555c: - r4 = 7 << 16; - r4 = r4 + -9160; - /* Next insn is delay slot */ - r31=0x1556c; - pc=0x1b000; - run_1b000(); return; - case 0x1556c: - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x125d8; - run_12400(); return; - case 0x15578: - r2 = r22 < 256 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x15550; - continue; - } - r2 = r0 + 82; - /* Next insn is delay slot */ - pc=0x154f0; - continue; - case 0x15590: - r2 = r16 < 256 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x15474; - continue; - } - r2 = r0 + 82; - /* Next insn is delay slot */ - pc=0x1341c; - run_13400(); return; - case 0x155a8: - r4 = 7 << 16; - r4 = r4 + -8004; - /* Next insn is delay slot */ - r31=0x155b8; - pc=0x1b000; - run_1b000(); return; - case 0x155b8: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r6 << 3; - r4 = r6 << 5; - r4 = r4 - r3; - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r3 = r4 + -48; - r4 = r4 + -24; - r4 = r2 + r4; - r3 = r2 + r3; - r16 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - r2 = r22 << 2; - r2 = r2 + -8; - r16 = r16 + r2; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r30 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x15300; - run_15200(); return; - case 0x15600: - pc=0x15600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_15600() throws ExecutionException { /* 0x15600 - 0x15800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x15600: - case 0x15604: - r4 = 7 << 16; - r4 = r4 + -8004; - /* Next insn is delay slot */ - r31=0x15614; - pc=0x1b000; - run_1b000(); return; - case 0x15614: - r6 = readPages[(r28+-30804)>>>12][((r28+-30804)>>>2)&0x3ff]; - r2 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r6 << 3; - r4 = r6 << 5; - r4 = r4 - r3; - r22 = readPages[(r28+-30796)>>>12][((r28+-30796)>>>2)&0x3ff]; - r3 = r4 + -48; - r4 = r4 + -24; - r3 = r2 + r3; - r4 = r2 + r4; - r16 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - r2 = r22 << 2; - r2 = r2 + -8; - r16 = r16 + r2; - r30 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-30812)>>>12][((r28+-30812)>>>2)&0x3ff]; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x14f20; - run_14e00(); return; - case 0x15660: - f26 = f20; - f27 = f21; - /* Next insn is delay slot */ - pc=0x12bb0; - run_12a00(); return; - case 0x15800: - pc=0x15800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_15800() throws ExecutionException { /* 0x15800 - 0x15a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x15800: - r29 = r29 + -24; - r4 = r0 + 256; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x15814; - pc=0x17600; - run_17600(); return; - case 0x15814: - r4 = r0 + 8; - writePages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x15824; - pc=0x17600; - run_17600(); return; - case 0x15824: - r4 = r0 + 256; - writePages[(r28+-30784)>>>12][((r28+-30784)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x15834; - pc=0x17600; - run_17600(); return; - case 0x15834: - r5 = 7 << 16; - r4 = r28 + -30816; - r5 = r5 + 5648; - writePages[(r28+-30788)>>>12][((r28+-30788)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x1584c; - pc=0x30e00; - run_30e00(); return; - case 0x1584c: - r5 = 7 << 16; - r4 = r28 + -30820; - r5 = r5 + 5448; - /* Next insn is delay slot */ - r31=0x15860; - pc=0x30e00; - run_30e00(); return; - case 0x15860: - r5 = readPages[(r28+-32736)>>>12][((r28+-32736)>>>2)&0x3ff]; - r4 = readPages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff]; - r2 = r5 << 1; - r5 = r5 << 3; - writePages[(r28+-32736)>>>12][((r28+-32736)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x1587c; - pc=0x40600; - run_40600(); return; - case 0x1587c: - writePages[(r28+-30792)>>>12][((r28+-30792)>>>2)&0x3ff] = r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x158c8; - continue; - } - r2 = readPages[(r28+-32740)>>>12][((r28+-32740)>>>2)&0x3ff]; - r4 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r2 << 1; - r5 = r2 << 4; - r2 = r2 << 6; - r5 = r2 - r5; - writePages[(r28+-32740)>>>12][((r28+-32740)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x158ac; - pc=0x40600; - run_40600(); return; - case 0x158ac: - writePages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff] = r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x15908; - continue; - } - case 0x158b8: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x158c8: - r4 = 7 << 16; - r4 = r4 + -6876; - /* Next insn is delay slot */ - r31=0x158d8; - pc=0x1b200; - run_1b200(); return; - case 0x158d8: - r2 = readPages[(r28+-32740)>>>12][((r28+-32740)>>>2)&0x3ff]; - r4 = readPages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff]; - r3 = r2 << 1; - r5 = r2 << 4; - r2 = r2 << 6; - r5 = r2 - r5; - writePages[(r28+-32740)>>>12][((r28+-32740)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x158fc; - pc=0x40600; - run_40600(); return; - case 0x158fc: - writePages[(r28+-30800)>>>12][((r28+-30800)>>>2)&0x3ff] = r2; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x158b8; - continue; - } - case 0x15908: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r4 = 7 << 16; - r4 = r4 + -6876; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=0x1b200; - run_1b200(); return; - case 0x15a00: - pc=0x15a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_15a00() throws ExecutionException { /* 0x15a00 - 0x15c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x15a00: - r29 = r29 + -48; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r16; - r16 = r4 + r0; - r4 = r29 + 16; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x15a1c; - pc=0x12400; - run_12400(); return; - case 0x15a1c: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x15ad4; - continue; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r3 = r0 + 64; - r5 = r2 & 80; - if(r5 == r3) { - /* Next insn is delay slot */ - pc=0x15af8; - continue; - } - case 0x15a38: - r3 = r2 & 64; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x15abc; - continue; - } - r2 = r2 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x15a70; - continue; - } - r2 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - r16 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x15a70: - f0 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - f1 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r2 = r0 + 1; - r4 = fcsr; - r4 = fcsr; - r1 = r4 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity - } - fcsr = r4; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = f2; - r16 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x15abc: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r16 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; + f15= page[(r17+16)>>>2]; + r31=0x1500c; + pc=0x44000; + run_44000(); return; + case 0x1500c: + page[(r16+20)>>>2] = f0; + page[(r16+16)>>>2] = f1; r2 = r0 + r0; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x15ad4: - r4 = 7 << 16; - r4 = r4 + -8036; - /* Next insn is delay slot */ - r31=0x15ae4; - pc=0x1b000; - run_1b000(); return; - case 0x15ae4: - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r3 = r0 + 64; - r5 = r2 & 80; - if(r5 != r3) { - /* Next insn is delay slot */ - pc=0x15a38; + pc=0x14df4; + run_14800(); return; + case 0x15020: + f0= page[(r17+20)>>>2]; + f2= page[(r16+20)>>>2]; + f1= page[(r17+16)>>>2]; + f3= page[(r16+16)>>>2]; + r2 = r0 + r0; + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } + page[(r16+20)>>>2] = f0; + page[(r16+16)>>>2] = f1; + pc=0x14df4; + run_14800(); return; + case 0x15048: + f0= page[(r17+20)>>>2]; + f20 = r0; + f1= page[(r17+16)>>>2]; + f21 = r0; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))==(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (1!=0)) { + pc=0x1513c; continue; } - case 0x15af8: - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - r5 = r5 + -8864; - /* Next insn is delay slot */ - r31=0x15b10; - pc=0x17e00; - run_17e00(); return; - case 0x15b10: - r2 = readPages[(r28+-30788)>>>12][((r28+-30788)>>>2)&0x3ff]; - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x15b24; - pc=0x17e00; - run_17e00(); return; - case 0x15b24: - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = 7 << 16; - r5 = r5 + -6496; - /* Next insn is delay slot */ - r31=0x15b38; - pc=0x17e00; - run_17e00(); return; - case 0x15b38: - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x15b48; - pc=0x17c00; - run_17c00(); return; - case 0x15b48: - r2 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x15b5c; - pc=0x1b200; - run_1b200(); return; - case 0x15b5c: - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x15a38; - continue; - case 0x15c00: - pc=0x15c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_15c00() throws ExecutionException { /* 0x15c00 - 0x15e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x15c00: - r29 = r29 + -24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - r16 = r4 + r0; - /* Next insn is delay slot */ - r31=0x15c18; - pc=0x12400; - run_12400(); return; - case 0x15c18: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x15d28; + f2= page[(r16+20)>>>2]; + r2 = r0 + r0; + f3= page[(r16+16)>>>2]; + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } + page[(r16+20)>>>2] = f0; + page[(r16+16)>>>2] = f1; + pc=0x14df4; + run_14800(); return; + case 0x15090: + r3 = r0 + 2; + if(r2 == r3) { + pc=0x151ac; continue; } - case 0x15c20: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r2 & 256; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x15c74; + f14= page[(r17+16)>>>2]; + case 0x150a0: + f12= page[(r28+-32740)>>>2]; + f20= page[(r16+20)>>>2]; + f13= page[(r28+-32744)>>>2]; + f21= page[(r16+16)>>>2]; + { long l = Double.doubleToLongBits(((double)f14)); f15 = (int)(l >>> 32); f14 = (int)l; } + r31=0x150bc; + pc=0x44000; + run_44000(); return; + case 0x150bc: + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } + r2 = r0 + r0; + page[(r16+20)>>>2] = f0; + page[(r16+16)>>>2] = f1; + pc=0x14df4; + run_14800(); return; + case 0x150d4: + r3 = r0 + 2; + if(r2 == r3) { + pc=0x15164; continue; } - f0 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r3 = r0 + -257; - f1 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r2 = r2 & r3; + r3= page[(r17+16)>>>2]; + case 0x150e4: + r2 = r0 + 1; + r2 = r2 << (r3&0x1f); + f0 = r2; + r2 = r0 + r0; + { long l = Double.doubleToLongBits(((double)f0)); f3 = (int)(l >>> 32); f2 = (int)l; } + f0= page[(r16+20)>>>2]; + f1= page[(r16+16)>>>2]; + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))/(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } + page[(r16+20)>>>2] = f0; + page[(r16+16)>>>2] = f1; + pc=0x14df4; + run_14800(); return; + case 0x1511c: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 3572; + r31=0x15130; + pc=0x1fc00; + run_1f800(); return; + case 0x15130: + page[(r16+16)>>>2] = r0; + pc=0x14de8; + run_14800(); return; + case 0x1513c: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 3572; + r31=0x15150; + pc=0x1fc00; + run_1f800(); return; + case 0x15150: + page[(r16+20)>>>2] = f20; + page[(r16+16)>>>2] = f21; + r2 = r0 + r0; + pc=0x14df4; + run_14800(); return; + case 0x15164: + f0= page[(r17+20)>>>2]; + r2 = r0 + 1; + f1= page[(r17+16)>>>2]; + page[(r17+8)>>>2] = r2; r4 = fcsr; r4 = fcsr; r1 = r4 | 3; @@ -8061,159 +4325,15 @@ public final class AcmeCrossAssembler extends UnixRuntime { case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity } fcsr = r4; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = f2; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - case 0x15c74: - r3 = r2 & 64; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x15d40; - continue; - } - r2 = r2 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x15ca0; - continue; - } - case 0x15c8c: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x15ca0: - r2 = readPages[(r28+-30576)>>>12][((r28+-30576)>>>2)&0x3ff]; - r16 = readPages[(r28+-30824)>>>12][((r28+-30824)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r28+-30576)>>>12][((r28+-30576)>>>2)&0x3ff] = r2; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x15c8c; - continue; - } - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - r5 = r5 + -8864; - /* Next insn is delay slot */ - r31=0x15cd0; - pc=0x17e00; - run_17e00(); return; - case 0x15cd0: - r2 = readPages[(r28+-30788)>>>12][((r28+-30788)>>>2)&0x3ff]; - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x15ce4; - pc=0x17e00; - run_17e00(); return; - case 0x15ce4: - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = 7 << 16; - r5 = r5 + -6496; - /* Next insn is delay slot */ - r31=0x15cf8; - pc=0x17e00; - run_17e00(); return; - case 0x15cf8: - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x15d08; - pc=0x17c00; - run_17c00(); return; - case 0x15d08: - r2 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r25 = r16 + r0; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r25; - return; - case 0x15d28: - r4 = 7 << 16; - r4 = r4 + -8036; - /* Next insn is delay slot */ - r31=0x15d38; - pc=0x1b000; - run_1b000(); return; - case 0x15d38: - /* Next insn is delay slot */ - pc=0x15c20; + r3 = f2; + page[(r17+16)>>>2] = f2; + pc=0x150e4; continue; - case 0x15d40: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r4 = 7 << 16; - r4 = r4 + -8020; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=0x1b000; - run_1b000(); return; - case 0x15e00: - pc=0x15e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_15e00() throws ExecutionException { /* 0x15e00 - 0x16000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x15e00: - r29 = r29 + -48; - r4 = r29 + 16; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x15e18; - pc=0x12400; - run_12400(); return; - case 0x15e18: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x15ec8; - continue; - } - case 0x15e20: - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r3 = r2 & 64; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x15eac; - continue; - } - r3 = r2 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x15ee0; - continue; - } - case 0x15e40: - r2 = r2 & 256; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x15e64; - continue; - } - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r2 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x15e64: - f0 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - f1 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; + case 0x151ac: + f0= page[(r17+20)>>>2]; + r2 = r0 + 1; + f1= page[(r17+16)>>>2]; + page[(r17+8)>>>2] = r2; r4 = fcsr; r4 = fcsr; r1 = r4 | 3; @@ -8227,131 +4347,60 @@ public final class AcmeCrossAssembler extends UnixRuntime { } fcsr = r4; r2 = f2; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x15eac: - r4 = 7 << 16; - r4 = r4 + -8020; - /* Next insn is delay slot */ - r31=0x15ebc; - pc=0x1b000; - run_1b000(); return; - case 0x15ebc: - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x15e40; + page[(r17+16)>>>2] = f2; + f14 = r2; + pc=0x150a0; continue; - case 0x15ec8: - r4 = 7 << 16; - r4 = r4 + -8036; - /* Next insn is delay slot */ - r31=0x15ed8; - pc=0x1b000; - run_1b000(); return; - case 0x15ed8: - /* Next insn is delay slot */ - pc=0x15e20; - continue; - case 0x15ee0: - r3 = readPages[(r28+-30576)>>>12][((r28+-30576)>>>2)&0x3ff]; - r16 = readPages[(r28+-30824)>>>12][((r28+-30824)>>>2)&0x3ff]; - r3 = r3 + 1; - writePages[(r28+-30576)>>>12][((r28+-30576)>>>2)&0x3ff] = r3; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x15e40; - continue; - } - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - r5 = r5 + -8864; - /* Next insn is delay slot */ - r31=0x15f10; - pc=0x17e00; - run_17e00(); return; - case 0x15f10: - r2 = readPages[(r28+-30788)>>>12][((r28+-30788)>>>2)&0x3ff]; - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x15f24; - pc=0x17e00; - run_17e00(); return; - case 0x15f24: - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = 7 << 16; - r5 = r5 + -6496; - /* Next insn is delay slot */ - r31=0x15f38; - pc=0x17e00; - run_17e00(); return; - case 0x15f38: - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x15f48; - pc=0x17c00; - run_17c00(); return; - case 0x15f48: - r2 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r16; - r31=0x15f5c; - return; - case 0x15f5c: - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x15e40; - continue; - case 0x16000: - pc=0x16000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_16000() throws ExecutionException { /* 0x16000 - 0x16200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x16000: - r29 = r29 + -24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; + case 0x15200: + r29 = r29 + -32; + page[(r29+24)>>>2] = r18; + page[(r29+20)>>>2] = r17; + page[(r29+16)>>>2] = r16; + page[(r29+28)>>>2] = r31; + r2= page[(r6+8)>>>2]; + r3 = r0 + 1; r16 = r4 + r0; - /* Next insn is delay slot */ - r31=0x16018; - pc=0x12400; - run_12400(); return; - case 0x16018: + r18 = r5 + r0; + r17 = r6 + r0; + if(r2 == r3) { + pc=0x152c0; + continue; + } + r7 = r0 + 2; + if(r2 != r7) { + pc=0x15304; + continue; + } + r7= page[(r5+8)>>>2]; + r7 = r7 + -23; + r8 = (r7&0xffffffffL) < (20&0xffffffffL) ? 1 : 0; + if(r8 == r0) { + pc=0x152f8; + continue; + } + r3 = r3 << (r7&0x1f); + r7 = r3 & 65295; + if(r7 != r0) { + pc=0x15320; + continue; + } + r2 = 15 << 16; + r2 = r2 + 128; + r2 = r3 & r2; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x16094; + pc=0x156a8; continue; } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r2 & 16; + r3 = r3 & 112; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x160b8; + pc=0x152f8; continue; } - case 0x16034: - r3 = r2 & 256; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x16080; - continue; - } - f0 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r3 = r0 + -257; - f1 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r2 = r2 & r3; + case 0x15284: + f0= page[(r17+20)>>>2]; + r2 = r0 + 1; + f1= page[(r17+16)>>>2]; + page[(r17+8)>>>2] = r2; r4 = fcsr; r4 = fcsr; r1 = r4 | 3; @@ -8364,110 +4413,1370 @@ public final class AcmeCrossAssembler extends UnixRuntime { case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity } fcsr = r4; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = f2; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - case 0x16080: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x16094: - r4 = 7 << 16; - r4 = r4 + -8036; - /* Next insn is delay slot */ - r31=0x160a4; - pc=0x1b000; - run_1b000(); return; - case 0x160a4: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r2 & 16; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x16034; + page[(r17+16)>>>2] = f2; + case 0x152c0: + r2= page[(r18+8)>>>2]; + r2 = r2 + -23; + r3 = (r2&0xffffffffL) < (20&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x152f8; continue; } - case 0x160b8: - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - r5 = r5 + -8864; - /* Next insn is delay slot */ - r31=0x160d0; - pc=0x17e00; - run_17e00(); return; - case 0x160d0: - r2 = readPages[(r28+-30788)>>>12][((r28+-30788)>>>2)&0x3ff]; - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x160e4; - pc=0x17e00; - run_17e00(); return; - case 0x160e4: - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = 7 << 16; - r5 = r5 + -6496; - /* Next insn is delay slot */ - r31=0x160f8; - pc=0x17e00; - run_17e00(); return; - case 0x160f8: - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x16108; - pc=0x17c00; - run_17c00(); return; - case 0x16108: - r2 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1611c; - pc=0x1b200; - run_1b200(); return; - case 0x1611c: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x16034; + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 2432; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; + return; + case 0x152f8: + r4 = r16 + r0; + r5 = r18 + r0; + r6 = r17 + r0; + case 0x15304: + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=0x14a00; + run_14800(); return; + case 0x15320: + f2= page[(r4+16)>>>2]; + page[(r4+8)>>>2] = r2; + { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } + page[(r4+20)>>>2] = f0; + page[(r4+16)>>>2] = f1; + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=0x14c00; + run_14800(); return; + case 0x15350: + r4 = 6 << 16; + r4 = r4 + 984; + r31=0x15360; + pc=0x21200; + run_21000(); return; + case 0x15360: + r3= page[(r16+16)>>>2]; + r2= page[(r17+16)>>>2]; + r2 = r3 ^ r2; + page[(r16+16)>>>2] = r2; + r3= page[(r16+24)>>>2]; + r2= page[(r17+24)>>>2]; + r2 = r3 + r2; + case 0x15384: + page[(r16+24)>>>2] = r2; + r2= page[(r17+12)>>>2]; + r3= page[(r16+12)>>>2]; + r2 = r2 & 23; + r2 = r2 | r3; + r31= page[(r29+28)>>>2]; + r3 = r0 + -9; + r2 = r2 & r3; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + page[(r16+12)>>>2] = r2; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x153c0: + r2= page[(r17+16)>>>2]; + r3= page[(r16+16)>>>2]; + { long hilo = (long)(r3) * ((long)r2); hi = (int) (hilo >>> 32); lo = (int) hilo; } + r2 = lo; + page[(r16+16)>>>2] = r2; + r2 = r0 + r0; + pc=0x15384; continue; - case 0x16200: - pc=0x16200; + case 0x153e4: + r2= page[(r17+16)>>>2]; + if(r2 < 0) { + pc=0x15704; + continue; + } + r3= page[(r16+16)>>>2]; + r4 = r0 + 1; + if(r2 == r0) { + pc=0x15430; + continue; + } + case 0x15404: + r5 = r2 & 1; + { long hilo = (long)(r4) * ((long)r3); hi = (int) (hilo >>> 32); lo = (int) hilo; } + if(r5 == r0) { + pc=0x15418; + continue; + } + r4 = lo; + case 0x15418: + r2 = r2 >> 1; + { long hilo = (long)(r3) * ((long)r3); hi = (int) (hilo >>> 32); lo = (int) hilo; } + r3 = lo; + if(r2 != r0) { + pc=0x15404; + continue; + } + case 0x15430: + page[(r16+16)>>>2] = r4; + r2 = r0 + r0; + pc=0x15384; + continue; + case 0x15440: + r3= page[(r16+16)>>>2]; + r2= page[(r17+16)>>>2]; + r2 = r3 >>> (r2&0x1f); + page[(r16+16)>>>2] = r2; + r2 = r0 + r0; + pc=0x15384; + continue; + case 0x15460: + r3= page[(r16+16)>>>2]; + r2= page[(r17+16)>>>2]; + r2 = r3 + r2; + page[(r16+16)>>>2] = r2; + r3= page[(r16+24)>>>2]; + r2= page[(r17+24)>>>2]; + r2 = r3 + r2; + pc=0x15384; + continue; + case 0x1548c: + r3= page[(r16+16)>>>2]; + r2= page[(r17+16)>>>2]; + r2 = r3 - r2; + page[(r16+16)>>>2] = r2; + r3= page[(r16+24)>>>2]; + r2= page[(r17+24)>>>2]; + r2 = r3 - r2; + pc=0x15384; + continue; + case 0x154b8: + r2= page[(r16+16)>>>2]; + r3= page[(r17+16)>>>2]; + if(r2 < 0) { + pc=0x156e8; + continue; + } + r2 = r2 >> (r3&0x1f); + page[(r16+16)>>>2] = r2; + r2 = r0 + r0; + pc=0x15384; + continue; + case 0x154dc: + r3= page[(r16+16)>>>2]; + r2= page[(r17+16)>>>2]; + r2 = r3 ^ r2; + r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; + case 0x154f0: + r3= page[(r17+12)>>>2]; + page[(r16+16)>>>2] = r2; + r2= page[(r16+12)>>>2]; + r4 = 6 << 16; + r2 = r3 | r2; + r4 = r4 + 15440; + r31= page[(r29+28)>>>2]; + r2 = r2 & 16; + page[(r16+0)>>>2] = r4; + r2 = r2 | 8; + r4 = r0 + 1; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + page[(r16+8)>>>2] = r4; + page[(r16+24)>>>2] = r0; + page[(r16+12)>>>2] = r2; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x15540: + r3= page[(r16+16)>>>2]; + r2= page[(r17+16)>>>2]; + r2 = r3 & r2; + page[(r16+16)>>>2] = r2; + r3= page[(r16+24)>>>2]; + r2= page[(r17+24)>>>2]; + r2 = r3 + r2; + pc=0x15384; + continue; + case 0x1556c: + r3= page[(r16+16)>>>2]; + r2= page[(r17+16)>>>2]; + r2 = r3 | r2; + page[(r16+16)>>>2] = r2; + r3= page[(r16+24)>>>2]; + r2= page[(r17+24)>>>2]; + r2 = r3 + r2; + pc=0x15384; + continue; + case 0x15598: + r3= page[(r16+16)>>>2]; + r2= page[(r17+16)>>>2]; + r2 = r3 ^ r2; + r2 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + pc=0x154f0; + continue; + case 0x155b4: + r3= page[(r16+16)>>>2]; + r2= page[(r17+16)>>>2]; + r2 = r2 < r3 ? 1 : 0; + r2 = r2 ^ 1; + pc=0x154f0; + continue; + case 0x155d0: + r3= page[(r16+16)>>>2]; + r2= page[(r17+16)>>>2]; + r2 = r3 < r2 ? 1 : 0; + pc=0x154f0; + continue; + case 0x155e8: + r3= page[(r16+16)>>>2]; + r2= page[(r17+16)>>>2]; + r2 = r3 < r2 ? 1 : 0; + r2 = r2 ^ 1; + pc=0x154f0; + continue; + case 0x15604: + r3= page[(r16+16)>>>2]; + r2= page[(r17+16)>>>2]; + r2 = r2 < r3 ? 1 : 0; + pc=0x154f0; + continue; + case 0x1561c: + r2= page[(r17+16)>>>2]; + if(r2 != r0) { + pc=0x156c0; + continue; + } + case 0x1562c: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 3572; + r31=0x15640; + pc=0x1fc00; + run_1f800(); return; + case 0x15640: + page[(r16+16)>>>2] = r0; + r2 = r0 + r0; + pc=0x15384; + continue; + case 0x15650: + r2= page[(r17+16)>>>2]; + if(r2 == r0) { + pc=0x1562c; + continue; + } + r3= page[(r16+16)>>>2]; + if(r2 != r0) { + hi = r3%r2; lo = r3/r2; + pc=0x15674; + continue; + } + hi = r3%r2; lo = r3/r2; + throw new ExecutionException("Break"); + case 0x15674: + r2 = r0 + r0; + r4 = hi; + page[(r16+16)>>>2] = r4; + pc=0x15384; + continue; + case 0x15688: + r3= page[(r16+16)>>>2]; + r2= page[(r17+16)>>>2]; + r2 = r3 << (r2&0x1f); + page[(r16+16)>>>2] = r2; + r2 = r0 + r0; + pc=0x15384; + continue; + case 0x156a8: + r4 = 6 << 16; + r4 = r4 + 3456; + r31=0x156b8; + pc=0x21200; + run_21000(); return; + case 0x156b8: + pc=0x15284; + continue; + case 0x156c0: + r3= page[(r16+16)>>>2]; + if(r2 != r0) { + hi = r3%r2; lo = r3/r2; + pc=0x156d4; + continue; + } + hi = r3%r2; lo = r3/r2; + throw new ExecutionException("Break"); + case 0x156d4: + r2 = lo; + page[(r16+16)>>>2] = r2; + r2 = r0 + r0; + pc=0x15384; + continue; + case 0x156e8: + r2 = ~(r0 | r2); + r2 = r2 >> (r3&0x1f); + r2 = ~(r0 | r2); + page[(r16+16)>>>2] = r2; + r2 = r0 + r0; + pc=0x15384; + continue; + case 0x15704: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 960; + r31=0x15718; + pc=0x1fc00; + run_1f800(); return; + case 0x15718: + page[(r16+16)>>>2] = r0; + r2 = r0 + r0; + pc=0x15384; + continue; + case 0x15800: + pc=0x15800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_16200() throws ExecutionException { /* 0x16200 - 0x16400 */ + private final void run_15800() throws ExecutionException { /* 0x15800 - 0x16000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x16200: + case 0x15800: + r2 = 6 << 16; + r3= page[(r6+0)>>>2]; r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - r16 = r4 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x16218; - pc=0x12400; - run_12400(); return; - case 0x16218: - r3 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r4 = r3 & 256; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1626c; + r2 = r2 + 15440; + page[(r29+20)>>>2] = r16; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r17; + r16 = r6 + r0; + if(r3 == r2) { + pc=0x15840; continue; } - f0 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r4 = r0 + -257; - f1 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r3 = r3 & r4; - r6 = fcsr; - r6 = fcsr; - r1 = r6 | 3; + case 0x15828: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=0x14a00; + run_14800(); return; + case 0x15840: + r2= page[(r4+8)>>>2]; + r17 = r4 + r0; + r7 = r5 + r0; + if(r2 == r0) { + pc=0x158a0; + continue; + } + r3= page[(r6+8)>>>2]; + if(r3 == r0) { + pc=0x158a0; + continue; + } + r3 = r0 + 1; + if(r2 == r3) { + pc=0x159b4; + continue; + } + r3 = r0 + 2; + if(r2 == r3) { + pc=0x1599c; + continue; + } + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r4 = 6 << 16; + r4 = r4 + 1024; + r5 = r2 + r0; + r29 = r29 + 32; + pc=0x21400; + run_21000(); return; + case 0x158a0: + r2= page[(r7+8)>>>2]; + r2 = r2 + -23; + r3 = (r2&0xffffffffL) < (20&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x15950; + continue; + } + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 2512; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; + return; + case 0x158d8: + r4 = 6 << 16; + r4 = r4 + 984; + r31=0x158e8; + pc=0x21200; + run_21000(); return; + case 0x158e8: + r3= page[(r17+24)>>>2]; + r2= page[(r16+24)>>>2]; + r3 = r3 + r2; + case 0x158f8: + r2= page[(r16+12)>>>2]; + r4= page[(r17+12)>>>2]; + r2 = r2 & 7; + r2 = r2 | r4; + r4 = r0 + -9; + r2 = r2 & r4; + page[(r17+12)>>>2] = r2; + case 0x15914: + r4= page[(r16+12)>>>2]; + page[(r17+8)>>>2] = r0; + r4 = r4 & 16; + r2 = r2 | r4; + page[(r17+12)>>>2] = r2; + page[(r17+24)>>>2] = r3; + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x15944: + r3 = r0 + r0; + pc=0x158f8; + continue; + case 0x15950: + r4 = r17 + r0; + r5 = r7 + r0; + r6 = r16 + r0; + pc=0x15828; + continue; + case 0x15964: + r3= page[(r17+12)>>>2]; + r2 = r0 + -8; + r2 = r3 & r2; + r2 = r2 | 8; + page[(r17+12)>>>2] = r2; + r3 = r0 + r0; + pc=0x15914; + continue; + case 0x15984: + r3= page[(r17+24)>>>2]; + r2= page[(r16+24)>>>2]; + r3 = r3 - r2; + pc=0x158f8; + continue; + case 0x1599c: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=0x14c00; + run_14800(); return; + case 0x159b4: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=0x15200; + run_15000(); return; + case 0x15a00: + r5= page[(r28+-32748)>>>2]; + r4= page[(r28+-31364)>>>2]; + r29 = r29 + -24; + r2 = r5 << 1; + r5 = r5 << 3; + page[(r28+-32748)>>>2] = r2; + page[(r29+20)>>>2] = r31; + r31=0x15a24; + pc=0x4fa00; + run_4f800(); return; + case 0x15a24: + page[(r28+-31364)>>>2] = r2; + if(r2 == r0) { + pc=0x15a40; + continue; + } + r31= page[(r29+20)>>>2]; + r29 = r29 + 24; + pc=r31; + return; + case 0x15a40: + r31= page[(r29+20)>>>2]; + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5244; + r29 = r29 + 24; + pc=0x1fc00; + run_1f800(); return; + case 0x15c00: + r29 = r29 + -64; + page[(r29+60)>>>2] = r31; + page[(r29+44)>>>2] = r16; + page[(r29+56)>>>2] = r19; + r16 = r4 + r0; + page[(r29+52)>>>2] = r18; + page[(r29+48)>>>2] = r17; + r31=0x15c24; + pc=0x23000; + run_23000(); return; + case 0x15c24: + r4 = r29 + 16; + r31=0x15c30; + pc=0x36a00; + run_36800(); return; + case 0x15c30: + r2= page[(r29+16)>>>2]; + if(r2 == r0) { + pc=0x15cc8; + continue; + } + case 0x15c40: + if(r16 == r0) { + pc=0x15c64; + continue; + } + r31=0x15c50; + pc=0x37800; + run_37800(); return; + case 0x15c50: + r5 = r2 + r0; + r4 = r29 + 16; + r6 = r16 + r0; + r31=0x15c64; + pc=0x37600; + run_37000(); return; + case 0x15c64: + r3= page[(r28+-31376)>>>2]; + r4= page[(r28+-31372)>>>2]; + r2 = r3 << 5; + r2 = r4 + r2; + r4 = 6 << 16; + r4 = r4 + 15440; + page[(r2+0)>>>2] = r4; + r4 = r0 + 1; + page[(r2+8)>>>2] = r4; + r4= page[(r29+20)>>>2]; + r3 = r3 + 1; + page[(r2+12)>>>2] = r4; + page[(r28+-31376)>>>2] = r3; + r4= page[(r29+24)>>>2]; + r3= page[(r29+32)>>>2]; + page[(r2+16)>>>2] = r4; + page[(r2+24)>>>2] = r3; + r31= page[(r29+60)>>>2]; + r19= page[(r29+56)>>>2]; + r18= page[(r29+52)>>>2]; + r17= page[(r29+48)>>>2]; + r16= page[(r29+44)>>>2]; + r29 = r29 + 64; + pc=r31; + return; + case 0x15cc8: + r2 = 6 << 16; + r2= page[(r2+31336)>>>2]; + if(r2 == r0) { + pc=0x15c40; + continue; + } + r17 = 6 << 16; + r4 = r17 + 16012; + r31=0x15cec; + pc=0x1be00; + run_1b800(); return; + case 0x15cec: + r5 = 6 << 16; + r4 = r17 + 16012; + r5 = r5 + 1044; + r31=0x15d00; + pc=0x1c600; + run_1c000(); return; + case 0x15d00: + r18 = r17 + 16012; + r5 = 6 << 16; + r19= page[(r18+4)>>>2]; + r5 = r5 + 1064; + r4 = r18 + r0; + r31=0x15d1c; + pc=0x1c600; + run_1c000(); return; + case 0x15d1c: + r5= page[(r18+4)>>>2]; + r19 = r19 + 1; + r2 = ((r5 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; + if(r2 != r0) { + pc=0x15d70; + continue; + } + page[(r18+4)>>>2] = r19; + case 0x15d34: + r5 = 6 << 16; + r4 = r17 + 16012; + r5 = r5 + 5680; + r31=0x15d48; + pc=0x1c600; + run_1c000(); return; + case 0x15d48: + r4 = r17 + 16012; + r5 = r0 + r0; + r31=0x15d58; + pc=0x1c400; + run_1c000(); return; + case 0x15d58: + r5= page[(r17+16012)>>>2]; + r4 = r0 + -2; + r31=0x15d68; + pc=0x1fc00; + run_1f800(); return; + case 0x15d68: + pc=0x15c40; + continue; + case 0x15d70: + r4 = 6 << 16; + r4 = r4 + 1068; + r5 = r5 - r19; + r31=0x15d84; + pc=0x21400; + run_21000(); return; + case 0x15d84: + pc=0x15d34; + continue; + case 0x15e00: + r29 = r29 + -40; + page[(r29+32)>>>2] = r20; + page[(r29+28)>>>2] = r19; + page[(r29+24)>>>2] = r18; + page[(r29+16)>>>2] = r16; + page[(r29+36)>>>2] = r31; + page[(r29+20)>>>2] = r17; + r20 = r5 + r0; + r19 = r6 + r0; + r31=0x15e2c; + pc=0x40c00; + run_40800(); return; + case 0x15e2c: + r16 = r2 + r0; + r2 = r0 + 1; + page[(r16+36)>>>2] = r2; + r2= page[(r16+0)>>>2]; + r18 = 6 << 16; + r18 = r18 + 15440; + if(r2 == r0) { + pc=0x15fe0; + continue; + } + case 0x15e4c: + r17= page[(r28+-31376)>>>2]; + r5 = r16 + r0; + r2 = r17 + 1; + page[(r28+-31376)>>>2] = r2; + r2= page[(r28+-31372)>>>2]; + r17 = r17 << 5; + r17 = r2 + r17; + r4 = r17 + r0; + r6 = r0 + 32; + r31=0x15e78; + pc=0x56fe0; + run_56800(); return; + case 0x15e78: + if(r19 == r0) { + pc=0x15ea4; + continue; + } + r2= page[(r17+0)>>>2]; + if(r2 == r18) { + pc=0x15fc4; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 1092; + r31=0x15ea4; + pc=0x1fc00; + run_1f800(); return; + case 0x15ea4: + r2= page[(r17+0)>>>2]; + if(r2 == r18) { + pc=0x15ed8; + continue; + } + case 0x15eb4: + r31= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 40; + pc=r31; + return; + case 0x15ed8: + r2= page[(r17+8)>>>2]; + if(r2 != r0) { + pc=0x15eb4; + continue; + } + r2 = 6 << 16; + r18= page[(r2+17104)>>>2]; + r2 = 6 << 16; + r2= page[(r2+31336)>>>2]; + if(r2 == r0) { + pc=0x15eb4; + continue; + } + r2= page[(r16+40)>>>2]; + if(r2 != r0) { + pc=0x15eb4; + continue; + } + r2 = r0 + 1; + page[(r16+40)>>>2] = r2; + r16 = 6 << 16; + r4 = r16 + 16012; + r31=0x15f2c; + pc=0x1be00; + run_1b800(); return; + case 0x15f2c: + r5 = 6 << 16; + r17 = r16 + 16012; + r4 = r16 + 16012; + r5 = r5 + 1044; + r31=0x15f44; + pc=0x1c600; + run_1c000(); return; + case 0x15f44: + r2= page[(r17+4)>>>2]; + r5 = r18 + r0; + r4 = r17 + r0; + r20 = r20 + r2; + r31=0x15f5c; + pc=0x1c600; + run_1c000(); return; + case 0x15f5c: + r5= page[(r17+4)>>>2]; + r2 = ((r5 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; + if(r2 != r0) { + pc=0x15ffc; + continue; + } + page[(r17+4)>>>2] = r20; + case 0x15f74: + r5 = 6 << 16; + r4 = r16 + 16012; + r5 = r5 + 5680; + r31=0x15f88; + pc=0x1c600; + run_1c000(); return; + case 0x15f88: + r4 = r16 + 16012; + r5 = r0 + r0; + r31=0x15f98; + pc=0x1c400; + run_1c000(); return; + case 0x15f98: + r31= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r5= page[(r16+16012)>>>2]; + r16= page[(r29+16)>>>2]; + r4 = r0 + -2; + r29 = r29 + 40; + pc=0x1fc00; + run_1f800(); return; + case 0x15fc4: + r5= page[(r16+44)>>>2]; + r4 = r17 + 8; + r6 = r19 + r0; + r31=0x15fd8; + pc=0x37600; + run_37000(); return; + case 0x15fd8: + pc=0x15ea4; + continue; + case 0x15fe0: + r2 = r0 + 16; + page[(r16+0)>>>2] = r18; + page[(r16+8)>>>2] = r0; + page[(r16+12)>>>2] = r2; + page[(r16+24)>>>2] = r0; + pc=0x15e4c; + continue; + case 0x15ffc: + r4 = 6 << 16; + case 0x16000: + pc=0x16000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_16000() throws ExecutionException { /* 0x16000 - 0x16800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x16000: + r4 = r4 + 1068; + r5 = r5 - r20; + r31=0x16010; + pc=0x21400; + run_21000(); return; + case 0x16010: + pc=0x15f74; + run_15800(); return; + case 0x16200: + r29 = r29 + -32; + r2 = r4 + r0; + r4 = r5 + r0; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + r17 = r6 + r0; + r16 = r5 + r0; + r6 = r0 + 32; + r5 = r2 + r0; + page[(r29+28)>>>2] = r31; + r31=0x16230; + pc=0x56fe0; + run_56800(); return; + case 0x16230: + r2= page[(r16+8)>>>2]; + r17 = r2 + r17; + addr=r17+8; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r31=0x16248; + pc=0x1d600; + run_1d000(); return; + case 0x16248: + r3= page[(r16+8)>>>2]; + r31= page[(r29+28)>>>2]; + r4= page[(r3+4)>>>2]; + r17= page[(r29+24)>>>2]; + r4 = r4 + -1; + page[(r3+4)>>>2] = r4; + r3 = 6 << 16; + r3 = r3 + 15440; + page[(r16+0)>>>2] = r3; + r3 = r0 + 1; + page[(r16+8)>>>2] = r3; + page[(r16+12)>>>2] = r0; + page[(r16+16)>>>2] = r2; + page[(r16+24)>>>2] = r0; + r16= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x16400: + r29 = r29 + -32; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + page[(r29+28)>>>2] = r31; + r17 = r4 + r0; + r16 = r5 + r0; + if(r6 != r0) { + pc=0x16478; + continue; + } + r4= page[(r4+8)>>>2]; + r5= page[(r5+8)>>>2]; + r6= page[(r4+0)>>>2]; + r2= page[(r5+0)>>>2]; + if(r6 == r2) { + pc=0x16460; + continue; + } + case 0x1643c: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5036; + r29 = r29 + 32; + pc=0x1fc00; + run_1f800(); return; + case 0x16460: + r4 = r4 + 8; + r5 = r5 + 8; + r31=0x16470; + pc=0x4ec00; + run_4e800(); return; + case 0x16470: + if(r2 != r0) { + pc=0x1643c; + continue; + } + case 0x16478: + r4 = r17 + r0; + r5 = r16 + r0; + r6 = r0 + 32; + r31=0x1648c; + pc=0x56fe0; + run_56800(); return; + case 0x1648c: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x16600: + r29 = r29 + -24; + r2 = r4 + r0; + r4 = r5 + r0; + page[(r29+16)>>>2] = r16; + r5 = r2 + r0; + r16 = r6 + r0; + r6 = r0 + 32; + page[(r29+20)>>>2] = r31; + r31=0x16628; + pc=0x56fe0; + run_56800(); return; + case 0x16628: + r4= page[(r2+8)>>>2]; + r3 = r2 + r0; + r2= page[(r4+0)>>>2]; + if(r16 == r0) { + pc=0x1664c; + continue; + } + case 0x1663c: + r16 = r16 + -1; + r2= page[(r2+0)>>>2]; + if(r16 != r0) { + pc=0x1663c; + continue; + } + case 0x1664c: + r5= page[(r4+12)>>>2]; + r6 = r0 + 32; + r5 = r5 + -1; + page[(r4+12)>>>2] = r5; + r4 = r3 + r0; + r5 = r2 + 8; + r31=0x1666c; + pc=0x56fe0; + run_56800(); return; + case 0x1666c: + r31= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 24; + pc=r31; + return; + case 0x16800: + pc=0x16800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_16800() throws ExecutionException { /* 0x16800 - 0x17000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x16800: + r29 = r29 + -32; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + r3 = r4 + r0; + r16= page[(r4+12)>>>2]; + r17= page[(r5+12)>>>2]; + if(r6 == r0) { + pc=0x16884; + continue; + } + r2 = r0 + -9; + page[(r4+8)>>>2] = r0; + r16 = r16 & r2; + case 0x16830: + r4 = r3 + r0; + r6 = r0 + 32; + r31=0x16840; + pc=0x56fe0; + run_56800(); return; + case 0x16840: + r3 = r2 + r0; + case 0x16844: + r2 = r16 & 7; + if(r2 == r0) { + pc=0x16908; + continue; + } + r4 = r16 & 24; + r2 = r0 + 16; + if(r4 == r2) { + pc=0x16928; + continue; + } + case 0x16860: + r17 = r17 & 24; + r16 = r17 | r16; + page[(r3+12)>>>2] = r16; + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x16884: + r2= page[(r4+8)>>>2]; + if(r2 == r0) { + pc=0x16830; + continue; + } + r4= page[(r5+8)>>>2]; + if(r4 == r0) { + pc=0x16844; + continue; + } + r6 = r0 + 1; + if(r2 == r6) { + pc=0x16954; + continue; + } + if(r4 == r6) { + pc=0x169b0; + continue; + } + f0= page[(r3+20)>>>2]; + f2= page[(r5+20)>>>2]; + f1= page[(r3+16)>>>2]; + f3= page[(r5+16)>>>2]; + r2 = r0 + 1; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))==(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (1!=0)) { + pc=0x16988; + continue; + } + case 0x168dc: + if(r2 == r0) { + pc=0x16844; + continue; + } + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5036; + r29 = r29 + 32; + pc=0x1fc00; + run_1f800(); return; + case 0x16908: + r2 = r0 + -8; + r16 = r16 & r2; + r2 = r17 & 7; + r16 = r16 | r2; + r4 = r16 & 24; + r2 = r0 + 16; + if(r4 != r2) { + pc=0x16860; + continue; + } + case 0x16928: + r2 = r0 + -9; + r17 = r17 & r2; + r17 = r17 & 24; + r16 = r17 | r16; + page[(r3+12)>>>2] = r16; + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x16954: + if(r4 == r2) { + pc=0x16994; + continue; + } + f0= page[(r3+16)>>>2]; + r2 = r0 + 1; + { long l = Double.doubleToLongBits(((double)f0)); f3 = (int)(l >>> 32); f2 = (int)l; } + f0= page[(r5+20)>>>2]; + f1= page[(r5+16)>>>2]; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (0!=0)) { + pc=0x168dc; + continue; + } + case 0x16988: + r2 = r0 + r0; + pc=0x168dc; + continue; + case 0x16994: + r4= page[(r3+16)>>>2]; + r2= page[(r5+16)>>>2]; + r2 = r4 ^ r2; + r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; + pc=0x168dc; + continue; + case 0x169b0: + r2= page[(r5+16)>>>2]; + f0 = r2; + r2 = r0 + 1; + { long l = Double.doubleToLongBits(((double)f0)); f3 = (int)(l >>> 32); f2 = (int)l; } + f0= page[(r3+20)>>>2]; + f1= page[(r3+16)>>>2]; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))==(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (0!=0)) { + pc=0x168dc; + continue; + } + r2 = r0 + r0; + pc=0x168dc; + continue; + case 0x16a00: + r29 = r29 + -40; + page[(r29+32)>>>2] = r19; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + page[(r29+36)>>>2] = r31; + page[(r29+28)>>>2] = r18; + r18= page[(r4+8)>>>2]; + r2= page[(r5+8)>>>2]; + r7 = r0 + 33; + r16 = r4 + r0; + r3 = r5 + r0; + r17 = r6 + r0; + r19= page[(r18+0)>>>2]; + if(r2 == r7) { + pc=0x16bf4; + continue; + } + r7 = (r2&0xffffffffL) < (34&0xffffffffL) ? 1 : 0; + if(r7 != r0) { + pc=0x16b58; + continue; + } + r7 = r0 + 38; + if(r2 == r7) { + pc=0x16b18; + continue; + } + r7 = r0 + 44; + if(r2 != r7) { + pc=0x16b2c; + continue; + } + r18 = 6 << 16; + r2= page[(r6+0)>>>2]; + r18 = r18 + 15440; + if(r2 != r18) { + pc=0x16b38; + continue; + } + r5= page[(r6+8)>>>2]; + if(r5 == r0) { + pc=0x16d28; + continue; + } + r2 = r0 + 2; + if(r5 == r2) { + pc=0x16ce0; + continue; + } + case 0x16a90: + r2 = r0 + 1; + if(r5 == r2) { + pc=0x16aac; + continue; + } + r4 = 6 << 16; + r4 = r4 + 1168; + r31=0x16aac; + pc=0x21400; + run_21000(); return; + case 0x16aac: + r2= page[(r17+16)>>>2]; + if(r2 < 0) { + pc=0x16ca8; + continue; + } + case 0x16abc: + r19 = r2 < r19 ? 1 : 0; + if(r19 == r0) { + pc=0x16cb4; + continue; + } + r3= page[(r16+8)>>>2]; + r2 = r3 + r2; + addr=r2+8; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r31=0x16ae0; + pc=0x1d600; + run_1d000(); return; + case 0x16ae0: + r3= page[(r16+8)>>>2]; + r4= page[(r3+4)>>>2]; + r4 = r4 + -1; + page[(r3+4)>>>2] = r4; + r3 = r0 + 1; + page[(r16+0)>>>2] = r18; + page[(r16+8)>>>2] = r3; + page[(r16+12)>>>2] = r0; + page[(r16+16)>>>2] = r2; + page[(r16+24)>>>2] = r0; + pc=0x16c64; + continue; + case 0x16b18: + r2 = 6 << 16; + r4= page[(r6+0)>>>2]; + r2 = r2 + 15360; + if(r4 == r2) { + pc=0x16c84; + continue; + } + case 0x16b2c: + r4 = r16 + r0; + r5 = r3 + r0; + r6 = r17 + r0; + case 0x16b38: + r31= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 40; + pc=0x14a00; + run_14800(); return; + case 0x16b58: + r4 = r0 + 31; + if(r2 != r4) { + pc=0x16b2c; + continue; + } + r4 = 6 << 16; + r2= page[(r6+0)>>>2]; + r4 = r4 + 15360; + if(r2 != r4) { + pc=0x16b2c; + continue; + } + r17= page[(r6+8)>>>2]; + r3= page[(r17+0)>>>2]; + page[(r16+0)>>>2] = r2; + r19 = r19 + r3; + r4 = r19 + 12; + r31=0x16b98; + pc=0x20200; + run_20000(); return; + case 0x16b98: + page[(r16+8)>>>2] = r2; + r2 = r2 + r19; + addr=r2+8; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2= page[(r16+8)>>>2]; + r3 = r0 + 1; + page[(r2+0)>>>2] = r19; + page[(r2+4)>>>2] = r3; + r4= page[(r16+8)>>>2]; + r6= page[(r18+0)>>>2]; + r5 = r18 + 8; + r4 = r4 + 8; + r31=0x16bcc; + pc=0x56fe0; + run_56800(); return; + case 0x16bcc: + r2= page[(r18+0)>>>2]; + r4= page[(r16+8)>>>2]; + r2 = r2 + 8; + r6= page[(r17+0)>>>2]; + r4 = r4 + r2; + r5 = r17 + 8; + r31=0x16bec; + pc=0x56fe0; + run_56800(); return; + case 0x16bec: + pc=0x16c44; + continue; + case 0x16bf4: + r2 = 6 << 16; + r4= page[(r6+0)>>>2]; + r2 = r2 + 15360; + if(r4 != r2) { + pc=0x16b2c; + continue; + } + r17= page[(r6+8)>>>2]; + r2= page[(r17+0)>>>2]; + if(r19 == r2) { + pc=0x16d3c; + continue; + } + r2 = r0 + r0; + case 0x16c24: + r3 = 6 << 16; + r3 = r3 + 15440; + page[(r16+0)>>>2] = r3; + r3 = r0 + 1; + page[(r16+8)>>>2] = r3; + page[(r16+12)>>>2] = r0; + page[(r16+16)>>>2] = r2; + page[(r16+24)>>>2] = r0; + case 0x16c44: + r2= page[(r18+4)>>>2]; + r2 = r2 + -1; + page[(r18+4)>>>2] = r2; + r2= page[(r17+4)>>>2]; + r2 = r2 + -1; + page[(r17+4)>>>2] = r2; + case 0x16c64: + r31= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 40; + pc=r31; + return; + case 0x16c84: + r17= page[(r6+8)>>>2]; + r2= page[(r17+0)>>>2]; + if(r19 == r2) { + pc=0x16d5c; + continue; + } + r2 = r0 + 1; + pc=0x16c24; + continue; + case 0x16ca8: + r2 = r2 + r19; + if(r2 >= 0) { + pc=0x16abc; + continue; + } + case 0x16cb4: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 1188; + case 0x16cc0: + r31= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 40; + pc=0x1fc00; + run_1f800(); return; + case 0x16ce0: + f0= page[(r6+20)>>>2]; + r2 = r0 + 1; + f1= page[(r6+16)>>>2]; + page[(r6+8)>>>2] = r2; + r4 = fcsr; + r4 = fcsr; + r1 = r4 | 3; r1 = r1 ^ 2; fcsr = r1; switch(fcsr & 3) { @@ -8476,27149 +5785,41323 @@ public final class AcmeCrossAssembler extends UnixRuntime { case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity } - fcsr = r6; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = f2; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r3; - case 0x1626c: - r3 = r2 < 2 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x1628c; - continue; - } - r4 = 7 << 16; - r4 = r4 + -8036; - /* Next insn is delay slot */ - r31=0x16288; - pc=0x1b000; - run_1b000(); return; - case 0x16288: - r2 = r0 + r0; - case 0x1628c: - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r0 + 64; - r4 = r4 & 80; - if(r4 == r3) { - /* Next insn is delay slot */ - pc=0x162b4; - continue; - } - case 0x162a0: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x162b4: - r3 = readPages[(r28+-30576)>>>12][((r28+-30576)>>>2)&0x3ff]; - r16 = readPages[(r28+-30824)>>>12][((r28+-30824)>>>2)&0x3ff]; - r3 = r3 + 1; - writePages[(r28+-30576)>>>12][((r28+-30576)>>>2)&0x3ff] = r3; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x162a0; - continue; - } - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - r5 = r5 + -8864; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x162e8; - pc=0x17e00; - run_17e00(); return; - case 0x162e8: - r3 = readPages[(r28+-30788)>>>12][((r28+-30788)>>>2)&0x3ff]; - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x162fc; - pc=0x17e00; - run_17e00(); return; - case 0x162fc: - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = 7 << 16; - r5 = r5 + -6496; - /* Next insn is delay slot */ - r31=0x16310; - pc=0x17e00; - run_17e00(); return; - case 0x16310: - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x16320; - pc=0x17c00; - run_17c00(); return; - case 0x16320: - r3 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r4 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r16; - r31=0x16334; - return; - case 0x16334: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x16400: - pc=0x16400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_16400() throws ExecutionException { /* 0x16400 - 0x16600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x16400: - r29 = r29 + -24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - r16 = r4 + r0; - /* Next insn is delay slot */ - r31=0x16418; - pc=0x12400; - run_12400(); return; - case 0x16418: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x164dc; - continue; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r2 & 64; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x16500; - continue; - } - case 0x16434: - r2 = r2 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x16454; - continue; - } - case 0x16440: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x16454: - r2 = readPages[(r28+-30576)>>>12][((r28+-30576)>>>2)&0x3ff]; - r16 = readPages[(r28+-30824)>>>12][((r28+-30824)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r28+-30576)>>>12][((r28+-30576)>>>2)&0x3ff] = r2; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x16440; - continue; - } - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - r5 = r5 + -8864; - /* Next insn is delay slot */ - r31=0x16484; - pc=0x17e00; - run_17e00(); return; - case 0x16484: - r2 = readPages[(r28+-30788)>>>12][((r28+-30788)>>>2)&0x3ff]; - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x16498; - pc=0x17e00; - run_17e00(); return; - case 0x16498: - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = 7 << 16; - r5 = r5 + -6496; - /* Next insn is delay slot */ - r31=0x164ac; - pc=0x17e00; - run_17e00(); return; - case 0x164ac: - r4 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x164bc; - pc=0x17c00; - run_17c00(); return; - case 0x164bc: - r2 = readPages[(r28+-30780)>>>12][((r28+-30780)>>>2)&0x3ff]; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r25 = r16 + r0; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r25; - return; - case 0x164dc: - r4 = 7 << 16; - r4 = r4 + -8036; - /* Next insn is delay slot */ - r31=0x164ec; - pc=0x1b000; - run_1b000(); return; - case 0x164ec: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r2 & 64; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x16434; - continue; - } - case 0x16500: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r4 = 7 << 16; - r4 = r4 + -8020; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=0x1b000; - run_1b000(); return; - case 0x16600: - pc=0x16600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_16600() throws ExecutionException { /* 0x16600 - 0x16800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x16600: - r2 = readPages[(r28+-30764)>>>12][((r28+-30764)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x16634; - continue; - } - r2 = r2 + -1; - writePages[(r28+-30764)>>>12][((r28+-30764)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-30768)>>>12][((r28+-30768)>>>2)&0x3ff]; - r3 = r2 + 4; - writePages[(r28+-30768)>>>12][((r28+-30768)>>>2)&0x3ff] = r3; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x16634: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x16800: - pc=0x16800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_16800() throws ExecutionException { /* 0x16800 - 0x16a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x16800: - r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r17 = r4 + r0; - r18 = r5 + r0; - r16 = r0 + 45; - case 0x16820: - r3 = readPages[(r28+-30764)>>>12][((r28+-30764)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x168ec; - continue; - } - r6 = readPages[(r28+-30768)>>>12][((r28+-30768)>>>2)&0x3ff]; - r2 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r7 = tmp; - if(r7 != r16) { - /* Next insn is delay slot */ - pc=0x168ec; - continue; - } - r3 = r3 + -1; - writePages[(r28+-30764)>>>12][((r28+-30764)>>>2)&0x3ff] = r3; - addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r6 = r6 + 4; - writePages[(r28+-30768)>>>12][((r28+-30768)>>>2)&0x3ff] = r6; - r4 = r2 + 1; - if(r3 != r16) { - /* Next insn is delay slot */ - pc=0x168ac; - continue; - } - addr=r2+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x168ec; - continue; - } - r4 = r2 + 2; - /* Next insn is delay slot */ - pc=r18; - r31=0x1688c; - return; - case 0x1688c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x16820; - continue; - } - r3 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r5 = r5 + -7984; - /* Next insn is delay slot */ - pc=0x168cc; + fcsr = r4; + page[(r17+16)>>>2] = f2; + r5 = r0 + 1; + pc=0x16a90; + continue; + case 0x16d28: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 1148; + pc=0x16cc0; + continue; + case 0x16d3c: + r4 = r18 + 8; + r5 = r17 + 8; + r6 = r19 + r0; + r31=0x16d50; + pc=0x4ec00; + run_4e800(); return; + case 0x16d50: + r2 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + pc=0x16c24; + continue; + case 0x16d5c: + r4 = r18 + 8; + r5 = r17 + 8; + r6 = r19 + r0; + r31=0x16d70; + pc=0x4ec00; + run_4e800(); return; + case 0x16d70: + r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; + pc=0x16c24; continue; - case 0x168ac: - /* Next insn is delay slot */ - pc=r17; - r31=0x168b4; - return; - case 0x168b4: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x16820; - continue; - } - r3 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r5 = r5 + -7956; - case 0x168cc: - r6 = 7 << 16; - r6 = r6 + -7904; - r7 = r2 + r0; - /* Next insn is delay slot */ - r31=0x168e0; - pc=0x3bc00; - run_3bc00(); return; - case 0x168e0: - r4 = r0 + 1; - /* Next insn is delay slot */ - r31=0x168ec; - pc=0x38e00; - run_38e00(); return; - case 0x168ec: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x16a00: - pc=0x16a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_16a00() throws ExecutionException { /* 0x16a00 - 0x16c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x16a00: - r2 = readPages[(r28+-30764)>>>12][((r28+-30764)>>>2)&0x3ff]; - r29 = r29 + -24; - r7 = r4 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x16a4c; - continue; - } - r2 = r2 + -1; - writePages[(r28+-30764)>>>12][((r28+-30764)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-30768)>>>12][((r28+-30768)>>>2)&0x3ff]; - r3 = r2 + 4; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - writePages[(r28+-30768)>>>12][((r28+-30768)>>>2)&0x3ff] = r3; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x16a4c; - continue; - } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x16a4c: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r6 = 7 << 16; - r5 = r5 + -7928; - r6 = r6 + -7904; - /* Next insn is delay slot */ - r31=0x16a6c; - pc=0x3bc00; - run_3bc00(); return; - case 0x16a6c: - r4 = r0 + 1; - /* Next insn is delay slot */ - r31=0x16a78; - pc=0x38e00; - run_38e00(); return; - case 0x16a78: - case 0x16c00: - pc=0x16c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_16c00() throws ExecutionException { /* 0x16c00 - 0x16e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x16c00: - writePages[(r28+-30764)>>>12][((r28+-30764)>>>2)&0x3ff] = r4; - writePages[(r28+-30768)>>>12][((r28+-30768)>>>2)&0x3ff] = r5; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x16c2c; - continue; - } - r2 = r5 + 4; - r4 = r4 + -1; - writePages[(r28+-30768)>>>12][((r28+-30768)>>>2)&0x3ff] = r2; - writePages[(r28+-30764)>>>12][((r28+-30764)>>>2)&0x3ff] = r4; - r2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x16c2c: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; case 0x16e00: - pc=0x16e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_16e00() throws ExecutionException { /* 0x16e00 - 0x17000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x16e00: - r2 = readPages[(r28+-30764)>>>12][((r28+-30764)>>>2)&0x3ff]; - r3 = readPages[(r28+-30768)>>>12][((r28+-30768)>>>2)&0x3ff]; - r29 = r29 + -24; - r7 = r6 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r2; - writePages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff] = r3; + r29 = r29 + -40; + page[(r29+28)>>>2] = r19; + page[(r29+24)>>>2] = r18; + page[(r29+36)>>>2] = r31; + page[(r29+32)>>>2] = r20; + page[(r29+20)>>>2] = r17; + page[(r29+16)>>>2] = r16; + r19 = r4 + r0; + r18 = r5 + r0; if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x16e2c; - continue; - } - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x16e3c; + pc=0x16e64; continue; } case 0x16e2c: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ + r4 = r19 + r0; + r5 = r18 + r0; + r6 = r0 + 32; + r31=0x16e40; + pc=0x56fe0; + run_56800(); return; + case 0x16e40: + r31= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 40; pc=r31; return; - case 0x16e3c: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r6 = 7 << 16; - r5 = r5 + -7912; - r6 = r6 + -7904; - /* Next insn is delay slot */ - r31=0x16e5c; - pc=0x3bc00; - run_3bc00(); return; - case 0x16e5c: - r4 = r0 + 1; - /* Next insn is delay slot */ - r31=0x16e68; - pc=0x38e00; - run_38e00(); return; - case 0x16e68: + case 0x16e64: + r3= page[(r4+8)>>>2]; + r2= page[(r5+8)>>>2]; + r5= page[(r3+8)>>>2]; + r4= page[(r2+8)>>>2]; + if(r5 == r4) { + pc=0x16eb0; + continue; + } + case 0x16e80: + r31= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5036; + r29 = r29 + 40; + pc=0x1fc00; + run_1f800(); return; + case 0x16eb0: + r17= page[(r3+0)>>>2]; + r16= page[(r2+0)>>>2]; + if(r3 == r17) { + pc=0x16f40; + continue; + } + r20 = 6 << 16; + r20 = r20 + 784; + case 0x16ec8: + if(r2 == r16) { + pc=0x16f20; + continue; + } + case 0x16ed0: + r2= page[(r17+8)>>>2]; + r3= page[(r16+8)>>>2]; + if(r2 != r3) { + pc=0x16e80; + continue; + } + r2= page[(r2+8)>>>2]; + r4 = r17 + 8; + r5 = r16 + 8; + pc=r2; + r31=0x16ef8; + return; + case 0x16ef8: + if(r2 != r0) { + pc=0x16e80; + continue; + } + r17= page[(r17+0)>>>2]; + r2= page[(r19+8)>>>2]; + r16= page[(r16+0)>>>2]; + if(r17 == r2) { + pc=0x16f38; + continue; + } + r2= page[(r18+8)>>>2]; + pc=0x16ec8; + continue; + case 0x16f20: + r4 = r20 + r0; + r5 = r0 + r0; + r31=0x16f30; + pc=0x21400; + run_21000(); return; + case 0x16f30: + pc=0x16ed0; + continue; + case 0x16f38: + r2= page[(r18+8)>>>2]; + case 0x16f40: + if(r2 == r16) { + pc=0x16e2c; + continue; + } + r4 = 6 << 16; + r4 = r4 + 784; + r5 = r0 + 1; + r31=0x16f5c; + pc=0x21400; + run_21000(); return; + case 0x16f5c: + pc=0x16e2c; + continue; case 0x17000: pc=0x17000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_17000() throws ExecutionException { /* 0x17000 - 0x17200 */ + private final void run_17000() throws ExecutionException { /* 0x17000 - 0x17800 */ int addr, tmp; for(;;) { switch(pc) { case 0x17000: - r4 = readPages[(r28+-30760)>>>12][((r28+-30760)>>>2)&0x3ff]; r29 = r29 + -32; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x17054; + page[(r29+20)>>>2] = r17; + r17 = r5 + r0; + r5= page[(r5+8)>>>2]; + page[(r29+16)>>>2] = r16; + r3 = (r5&0xffffffffL) < (22&0xffffffffL) ? 1 : 0; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r18; + r16 = r4 + r0; + if(r3 == r0) { + pc=0x170d0; continue; } - case 0x17014: - r6 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x17024; - pc=0x31000; - run_31000(); return; - case 0x17024: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x17040; + r3 = (r5&0xffffffffL) < (20&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x17094; continue; } - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + r3 = r0 + 19; + if(r5 != r3) { + pc=0x17118; + continue; + } + r2= page[(r4+8)>>>2]; + r31= page[(r29+28)>>>2]; + r4= page[(r2+4)>>>2]; + r3= page[(r2+0)>>>2]; + r4 = r4 + -1; + page[(r2+4)>>>2] = r4; + r2 = 6 << 16; + r2 = r2 + 15440; + page[(r16+0)>>>2] = r2; + r2 = r0 + 1; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + page[(r16+8)>>>2] = r2; + page[(r16+12)>>>2] = r0; + page[(r16+16)>>>2] = r3; + page[(r16+24)>>>2] = r0; + r16= page[(r29+16)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x17040: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + case 0x17094: + r2 = 6 << 16; + r2 = r2 + 15440; + page[(r4+0)>>>2] = r2; + r2 = r0 + 1; + page[(r4+8)>>>2] = r2; + page[(r4+12)>>>2] = r0; + page[(r4+16)>>>2] = r0; + page[(r4+24)>>>2] = r0; + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x170d0: + r3 = r0 + 22; + if(r5 != r3) { + pc=0x17118; + continue; + } + r2 = 6 << 16; + r2 = r2 + 15440; + page[(r4+0)>>>2] = r2; + r2 = r0 + 1; + page[(r4+8)>>>2] = r2; + page[(r4+12)>>>2] = r0; + page[(r4+16)>>>2] = r2; + page[(r4+24)>>>2] = r0; + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x17118: + r4= page[(r17+4)>>>2]; + r3 = r0 + 1; + if(r4 == r3) { + pc=0x17138; + continue; + } + r4 = 6 << 16; + r4 = r4 + 880; + r31=0x17138; + pc=0x21400; + run_21000(); return; + case 0x17138: + r18 = 6 << 16; + r4 = r18 + 16012; + r31=0x17148; + pc=0x1be00; + run_1b800(); return; + case 0x17148: + r5 = 6 << 16; + r4 = r18 + 16012; + r5 = r5 + 904; + r31=0x1715c; + pc=0x1c600; + run_1c000(); return; + case 0x1715c: + r5= page[(r17+12)>>>2]; + r4 = r18 + 16012; + r31=0x1716c; + pc=0x1c600; + run_1c000(); return; + case 0x1716c: + r5 = 6 << 16; + r4 = r18 + 16012; + r5 = r5 + 944; + r31=0x17180; + pc=0x1c600; + run_1c000(); return; + case 0x17180: + r2= page[(r16+0)>>>2]; + r4 = r18 + 16012; + r5= page[(r2+0)>>>2]; + r31=0x17194; + pc=0x1c600; + run_1c000(); return; + case 0x17194: + r5 = 6 << 16; + r4 = r18 + 16012; + r5 = r5 + 12036; + r31=0x171a8; + pc=0x1c600; + run_1c000(); return; + case 0x171a8: + r4 = r18 + 16012; + r5 = r0 + r0; + r31=0x171b8; + pc=0x1c400; + run_1c000(); return; + case 0x171b8: + r31= page[(r29+28)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r5= page[(r18+16012)>>>2]; + r18= page[(r29+24)>>>2]; + r4 = r0 + -2; + r29 = r29 + 32; + pc=0x1fc00; + run_1f800(); return; + case 0x17200: + r29 = r29 + -32; + page[(r29+20)>>>2] = r17; + r17 = r5 + r0; + r5= page[(r5+8)>>>2]; + r3 = r0 + 20; + page[(r29+16)>>>2] = r16; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r18; + r16 = r4 + r0; + if(r5 == r3) { + pc=0x1728c; + continue; + } + r3 = (r5&0xffffffffL) < (21&0xffffffffL) ? 1 : 0; + if(r3 != r0) { + pc=0x1738c; + continue; + } + r3 = r0 + 21; + if(r5 != r3) { + pc=0x17280; + continue; + } + r2 = 6 << 16; + r2 = r2 + 15440; + page[(r4+0)>>>2] = r2; + r2 = r0 + 1; + page[(r4+8)>>>2] = r2; + page[(r4+12)>>>2] = r0; + page[(r4+16)>>>2] = r2; + page[(r4+24)>>>2] = r0; + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x17280: + r3 = r0 + 22; + if(r5 != r3) { + pc=0x172c8; + continue; + } + case 0x1728c: + r2 = 6 << 16; + r2 = r2 + 15440; + r31= page[(r29+28)>>>2]; + page[(r16+0)>>>2] = r2; + r2 = r0 + 1; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + page[(r16+8)>>>2] = r2; + page[(r16+12)>>>2] = r0; + page[(r16+16)>>>2] = r0; + page[(r16+24)>>>2] = r0; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x172c8: + r4= page[(r17+4)>>>2]; + r3 = r0 + 1; + if(r4 == r3) { + pc=0x172e8; + continue; + } + r4 = 6 << 16; + r4 = r4 + 880; + r31=0x172e8; + pc=0x21400; + run_21000(); return; + case 0x172e8: + r18 = 6 << 16; + r4 = r18 + 16012; + r31=0x172f8; + pc=0x1be00; + run_1b800(); return; + case 0x172f8: + r5 = 6 << 16; + r4 = r18 + 16012; + r5 = r5 + 904; + r31=0x1730c; + pc=0x1c600; + run_1c000(); return; + case 0x1730c: + r5= page[(r17+12)>>>2]; + r4 = r18 + 16012; + r31=0x1731c; + pc=0x1c600; + run_1c000(); return; + case 0x1731c: + r5 = 6 << 16; + r4 = r18 + 16012; + r5 = r5 + 944; + r31=0x17330; + pc=0x1c600; + run_1c000(); return; + case 0x17330: + r2= page[(r16+0)>>>2]; + r4 = r18 + 16012; + r5= page[(r2+0)>>>2]; + r31=0x17344; + pc=0x1c600; + run_1c000(); return; + case 0x17344: + r5 = 6 << 16; + r4 = r18 + 16012; + r5 = r5 + 12036; + r31=0x17358; + pc=0x1c600; + run_1c000(); return; + case 0x17358: + r4 = r18 + 16012; + r5 = r0 + r0; + r31=0x17368; + pc=0x1c400; + run_1c000(); return; + case 0x17368: + r31= page[(r29+28)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r5= page[(r18+16012)>>>2]; + r18= page[(r29+24)>>>2]; + r4 = r0 + -2; + r29 = r29 + 32; + pc=0x1fc00; + run_1f800(); return; + case 0x1738c: + r3 = r0 + 19; + if(r5 != r3) { + pc=0x172c8; + continue; + } + r2= page[(r4+8)>>>2]; + r4= page[(r2+12)>>>2]; + r3= page[(r2+8)>>>2]; + r4 = r4 + -1; + page[(r2+12)>>>2] = r4; + r2 = 6 << 16; + r2 = r2 + 15440; + r31= page[(r29+28)>>>2]; + page[(r16+0)>>>2] = r2; + r2 = r0 + 1; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + page[(r16+8)>>>2] = r2; + page[(r16+12)>>>2] = r0; + page[(r16+16)>>>2] = r3; + page[(r16+24)>>>2] = r0; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x17400: + r29 = r29 + -32; + page[(r29+20)>>>2] = r17; + r17 = r5 + r0; + r5= page[(r5+8)>>>2]; + page[(r29+16)>>>2] = r16; + r2 = r5 + -5; + r3 = (r2&0xffffffffL) < (14&0xffffffffL) ? 1 : 0; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r18; + r16 = r4 + r0; + if(r3 == r0) { + pc=0x176b8; + continue; + } + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 2592; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; + return; + case 0x17450: r2 = r0 + r0; + case 0x17454: + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + page[(r16+24)>>>2] = r2; + r16= page[(r29+16)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x17054: - r5 = 7 << 16; - r4 = r28 + -30760; - r5 = r5 + 5848; - /* Next insn is delay slot */ - r31=0x17068; - pc=0x30e00; - run_30e00(); return; - case 0x17068: - r4 = readPages[(r28+-30760)>>>12][((r28+-30760)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x17014; + case 0x17474: + f12= page[(r4+20)>>>2]; + f13= page[(r4+16)>>>2]; + r31=0x17488; + pc=0x43800; + run_43800(); return; + case 0x17488: + page[(r16+20)>>>2] = f0; + page[(r16+16)>>>2] = f1; + case 0x17490: + r3= page[(r16+12)>>>2]; + r2 = r0 + -9; + r2 = r3 & r2; + r31= page[(r29+28)>>>2]; + page[(r16+12)>>>2] = r2; + r2 = r0 + r0; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + page[(r16+24)>>>2] = r2; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x174c4: + f12= page[(r4+20)>>>2]; + f13= page[(r4+16)>>>2]; + r31=0x174d8; + pc=0x43400; + run_43000(); return; + case 0x174d8: + pc=0x17488; continue; - case 0x17200: - pc=0x17200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_17200() throws ExecutionException { /* 0x17200 - 0x17400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x17200: - r2 = 7 << 16; - r2 = readPages[(r2+30664)>>>12][((r2+30664)>>>2)&0x3ff]; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 & 2; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x17228; + case 0x174e0: + f12= page[(r4+20)>>>2]; + f13= page[(r4+16)>>>2]; + r31=0x174f4; + pc=0x43a00; + run_43800(); return; + case 0x174f4: + pc=0x17488; + continue; + case 0x174fc: + f12= page[(r4+20)>>>2]; + f0= page[(r28+-32732)>>>2]; + f13= page[(r4+16)>>>2]; + f1= page[(r28+-32736)>>>2]; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<=(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (0!=0)) { + pc=0x17540; continue; } - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x17234; + f0= page[(r28+-32724)>>>2]; + f1= page[(r28+-32728)>>>2]; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))<=(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (1!=0)) { + pc=0x17774; continue; } - case 0x17228: - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x17234: - r4 = 7 << 16; - r4 = r4 + -7876; - /* Next insn is delay slot */ - pc=0x1b000; - run_1b000(); return; - case 0x17400: - pc=0x17400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_17400() throws ExecutionException { /* 0x17400 - 0x17600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x17400: - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x17418; + case 0x17540: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 1208; + r31=0x17554; + pc=0x1fc00; + run_1f800(); return; + case 0x17554: + page[(r16+20)>>>2] = r0; + page[(r16+16)>>>2] = r0; + pc=0x17490; + continue; + case 0x17564: + f12= page[(r4+20)>>>2]; + f0= page[(r28+-32732)>>>2]; + f13= page[(r4+16)>>>2]; + f1= page[(r28+-32736)>>>2]; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<=(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (0!=0)) { + pc=0x17540; continue; } - r2 = 7 << 16; - writePages[(r2+30664)>>>12][((r2+30664)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x17418: - r4 = 7 << 16; - r4 = r4 + 5996; - r2 = 7 << 16; - writePages[(r2+30664)>>>12][((r2+30664)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x17600: - pc=0x17600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_17600() throws ExecutionException { /* 0x17600 - 0x17800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x17600: - r29 = r29 + -32; - r2 = r4 < 128 ? 1 : 0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r17 = r4 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x17624; + f0= page[(r28+-32724)>>>2]; + f1= page[(r28+-32728)>>>2]; + fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))<=(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); + if(((fcsr&0x800000)!=0) == (0!=0)) { + pc=0x17540; continue; } - r17 = r0 + 128; - case 0x17624: - r4 = r0 + 12; - /* Next insn is delay slot */ - r31=0x17630; - pc=0x3e800; - run_3e800(); return; - case 0x17630: - r16 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x17678; - continue; + r31=0x175b0; + pc=0x43c00; + run_43800(); return; + case 0x175b0: + page[(r16+20)>>>2] = f0; + page[(r16+16)>>>2] = f1; + pc=0x17490; + continue; + case 0x175c0: + f12= page[(r4+20)>>>2]; + f13= page[(r4+16)>>>2]; + r31=0x175d4; + pc=0x43000; + run_43000(); return; + case 0x175d4: + pc=0x17488; + continue; + case 0x175dc: + f0= page[(r4+20)>>>2]; + r2 = r0 + 1; + f1= page[(r4+16)>>>2]; + page[(r4+8)>>>2] = r2; + r4 = fcsr; + r4 = fcsr; + r1 = r4 | 3; + r1 = r1 ^ 2; + fcsr = r1; + switch(fcsr & 3) { + case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest + case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero + case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity + case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity } - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r0; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r17; - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x17650; - pc=0x3e800; - run_3e800(); return; - case 0x17650: - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x17678; - continue; - } - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r16 + r0; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + fcsr = r4; + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + page[(r16+16)>>>2] = f2; + r4 = r16 + r0; + r5 = r17 + r0; + r16= page[(r29+16)>>>2]; + r17= page[(r29+20)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x17678: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r4 = 7 << 16; - r7 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r4 = r4 + -7800; - r5 = r0 + 1; - r6 = r0 + 37; - /* Next insn is delay slot */ - r31=0x17698; - pc=0x3dc00; - run_3dc00(); return; - case 0x17698: - r4 = r0 + 1; - /* Next insn is delay slot */ - r31=0x176a4; - pc=0x38e00; - run_38e00(); return; - case 0x176a4: + pc=0x17800; + run_17800(); return; + case 0x1763c: + r3= page[(r4+16)>>>2]; + r2 = 32768 << 16; + r2 = r3 ^ r2; + r3= page[(r4+12)>>>2]; + page[(r4+16)>>>2] = r2; + r2 = r0 + -9; + r2 = r3 & r2; + page[(r4+12)>>>2] = r2; + r2= page[(r4+24)>>>2]; + r2 = r0 - r2; + pc=0x17454; + continue; + case 0x17670: + f0= page[(r4+20)>>>2]; + r2 = r0 + 1; + f1= page[(r4+16)>>>2]; + page[(r4+8)>>>2] = r2; + r4 = fcsr; + r4 = fcsr; + r1 = r4 | 3; + r1 = r1 ^ 2; + fcsr = r1; + switch(fcsr & 3) { + case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest + case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero + case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity + case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity + } + fcsr = r4; + page[(r16+16)>>>2] = f2; + r2 = r0 + r0; + pc=0x17454; + continue; + case 0x176b8: + r3= page[(r17+4)>>>2]; + r2 = r0 + 1; + if(r3 == r2) { + pc=0x176d8; + continue; + } + r4 = 6 << 16; + r4 = r4 + 880; + r31=0x176d8; + pc=0x21400; + run_21000(); return; + case 0x176d8: + r18 = 6 << 16; + r4 = r18 + 16012; + r31=0x176e8; + pc=0x1be00; + run_1b800(); return; + case 0x176e8: + r5 = 6 << 16; + r4 = r18 + 16012; + r5 = r5 + 904; + r31=0x176fc; + pc=0x1c600; + run_1c000(); return; + case 0x176fc: + r5= page[(r17+12)>>>2]; + r4 = r18 + 16012; + r31=0x1770c; + pc=0x1c600; + run_1c000(); return; + case 0x1770c: + r5 = 6 << 16; + r4 = r18 + 16012; + r5 = r5 + 944; + r31=0x17720; + pc=0x1c600; + run_1c000(); return; + case 0x17720: + r2= page[(r16+0)>>>2]; + r4 = r18 + 16012; + r5= page[(r2+0)>>>2]; + r31=0x17734; + pc=0x1c600; + run_1c000(); return; + case 0x17734: + r5 = 6 << 16; + r4 = r18 + 16012; + r5 = r5 + 12036; + r31=0x17748; + pc=0x1c600; + run_1c000(); return; + case 0x17748: + r4 = r18 + 16012; + r5 = r0 + r0; + r31=0x17758; + pc=0x1c400; + run_1c000(); return; + case 0x17758: + r5= page[(r18+16012)>>>2]; + r4 = r0 + -2; + r31=0x17768; + pc=0x1fc00; + run_1f800(); return; + case 0x17768: + r2 = r0 + r0; + pc=0x17454; + continue; + case 0x17774: + r31=0x1777c; + pc=0x43e00; + run_43800(); return; + case 0x1777c: + page[(r16+20)>>>2] = f0; + page[(r16+16)>>>2] = f1; + pc=0x17490; + continue; case 0x17800: pc=0x17800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_17800() throws ExecutionException { /* 0x17800 - 0x17a00 */ + private final void run_17800() throws ExecutionException { /* 0x17800 - 0x18000 */ int addr, tmp; for(;;) { switch(pc) { case 0x17800: - r29 = r29 + -40; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r17; - r17 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r16; - r17 = r17 << 1; + r29 = r29 + -32; + page[(r29+20)>>>2] = r17; + r17 = r5 + r0; + r5= page[(r5+8)>>>2]; + page[(r29+16)>>>2] = r16; + r2 = r5 + -5; + r3 = (r2&0xffffffffL) < (14&0xffffffffL) ? 1 : 0; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r18; r16 = r4 + r0; - r4 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; + if(r3 == r0) { + pc=0x1799c; + continue; + } + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 2648; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; + return; + case 0x17850: + r31= page[(r29+28)>>>2]; + r2 = r0 + r0; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + page[(r16+24)>>>2] = r2; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x17874: + f2= page[(r4+16)>>>2]; + r2 = r0 + 2; + { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } + page[(r4+8)>>>2] = r2; + page[(r4+20)>>>2] = f0; + page[(r4+16)>>>2] = f1; + r31= page[(r29+28)>>>2]; + r2 = r0 + r0; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + page[(r16+24)>>>2] = r2; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x178b0: + f2= page[(r4+16)>>>2]; + r2 = r0 + 2; + { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } + page[(r4+8)>>>2] = r2; + page[(r4+20)>>>2] = f0; + page[(r4+16)>>>2] = f1; + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r16= page[(r29+16)>>>2]; r5 = r17 + r0; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x1782c; - pc=0x40600; - run_40600(); return; - case 0x1782c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x17854; - continue; - } - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r17; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ + r17= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=0x17400; + run_17000(); return; + case 0x178e8: + r2= page[(r4+16)>>>2]; + r2 = ~(r0 | r2); + case 0x178f4: + r3= page[(r16+12)>>>2]; + page[(r16+16)>>>2] = r2; + r2 = r0 + -9; + r2 = r3 & r2; + page[(r16+12)>>>2] = r2; + r2= page[(r16+24)>>>2]; + r31= page[(r29+28)>>>2]; + r2 = r0 - r2; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + page[(r16+24)>>>2] = r2; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; pc=r31; return; - case 0x17854: - r4 = 7 << 16; - r4 = r4 + -6876; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x17868; - pc=0x1b200; - run_1b200(); return; - case 0x17868: - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r17; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ + case 0x17930: + r2= page[(r4+16)>>>2]; + r2 = r0 - r2; + pc=0x178f4; + continue; + case 0x17944: + addr=r4+19; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x17948: + r3= page[(r16+12)>>>2]; + page[(r16+16)>>>2] = r2; + r2 = r0 + -8; + r2 = r3 & r2; + r2 = r2 | 8; + r31= page[(r29+28)>>>2]; + page[(r16+12)>>>2] = r2; + r2 = r0 + r0; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + page[(r16+24)>>>2] = r2; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; pc=r31; return; - case 0x17a00: - pc=0x17a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_17a00() throws ExecutionException { /* 0x17a00 - 0x17c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x17a00: - r29 = r29 + -24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - r16 = r4 + r0; - r4 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x17a1c; - pc=0x1b400; - run_1b400(); return; - case 0x17a1c: - r5 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r6 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x17a30; - pc=0x48fdc; - run_48e00(); return; - case 0x17a30: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x17c00: - pc=0x17c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_17c00() throws ExecutionException { /* 0x17c00 - 0x17e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x17c00: - r29 = r29 + -40; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - r17 = r5 << 24; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - r16 = r4 + r0; - r17 = r17 >> 24; + case 0x17984: + addr=r4+18; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + pc=0x17948; + continue; + case 0x17990: + addr=r4+17; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + pc=0x17948; + continue; + case 0x1799c: + r3= page[(r17+4)>>>2]; + r2 = r0 + 1; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x17c60; + pc=0x179bc; continue; } - r2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r4 = r3 + 1; - r3 = r2 + r3; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r4; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ + r4 = 6 << 16; + r4 = r4 + 880; + r31=0x179bc; + pc=0x21400; + run_21000(); return; + case 0x179bc: + r18 = 6 << 16; + r4 = r18 + 16012; + r31=0x179cc; + pc=0x1be00; + run_1b800(); return; + case 0x179cc: + r5 = 6 << 16; + r4 = r18 + 16012; + r5 = r5 + 904; + r31=0x179e0; + pc=0x1c600; + run_1c000(); return; + case 0x179e0: + r5= page[(r17+12)>>>2]; + r4 = r18 + 16012; + r31=0x179f0; + pc=0x1c600; + run_1c000(); return; + case 0x179f0: + r5 = 6 << 16; + r4 = r18 + 16012; + r5 = r5 + 944; + r31=0x17a04; + pc=0x1c600; + run_1c000(); return; + case 0x17a04: + r2= page[(r16+0)>>>2]; + r4 = r18 + 16012; + r5= page[(r2+0)>>>2]; + r31=0x17a18; + pc=0x1c600; + run_1c000(); return; + case 0x17a18: + r5 = 6 << 16; + r4 = r18 + 16012; + r5 = r5 + 12036; + r31=0x17a2c; + pc=0x1c600; + run_1c000(); return; + case 0x17a2c: + r4 = r18 + 16012; + r5 = r0 + r0; + r31=0x17a3c; + pc=0x1c400; + run_1c000(); return; + case 0x17a3c: + r5= page[(r18+16012)>>>2]; + r4 = r0 + -2; + r31=0x17a4c; + pc=0x1fc00; + run_1f800(); return; + case 0x17a4c: + r31= page[(r29+28)>>>2]; + r2 = r0 + r0; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + page[(r16+24)>>>2] = r2; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; pc=r31; return; - case 0x17c60: - r18 = r3 << 1; - r4 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r5 = r18 + r0; - /* Next insn is delay slot */ - r31=0x17c74; - pc=0x40600; - run_40600(); return; - case 0x17c74: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x17cb4; - continue; - } - case 0x17c7c: - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r18; - r4 = r3 + 1; - r3 = r2 + r3; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r4; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x17cb4: - r4 = 7 << 16; - r4 = r4 + -6876; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x17cc8; - pc=0x1b200; - run_1b200(); return; - case 0x17cc8: - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x17c7c; - continue; - case 0x17e00: - pc=0x17e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_17e00() throws ExecutionException { /* 0x17e00 - 0x18000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x17e00: - r29 = r29 + -48; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r20; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r19; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r17 = tmp; - r18 = r5 + 1; - if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x17ec8; - continue; - } - r19 = 7 << 16; + case 0x17c00: + r2= page[(r5+8)>>>2]; + r29 = r29 + -32; + r3 = r0 + 20; + page[(r29+20)>>>2] = r17; + page[(r29+16)>>>2] = r16; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r18; r16 = r4 + r0; - r19 = r19 + -6876; - /* Next insn is delay slot */ - pc=0x17e68; - continue; - case 0x17e40: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r5 + 1; - r5 = r2 + r5; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r3; - r18 = r18 + 1; - addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - addr=r18+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r17 = tmp; - if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x17ec8; + r17 = r5 + r0; + if(r2 == r3) { + pc=0x17cb0; continue; } - case 0x17e68: - r5 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - if(r5 != r2) { - /* Next insn is delay slot */ - pc=0x17e40; + r3 = (r2&0xffffffffL) < (21&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x17c68; continue; } - r20 = r5 << 1; - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r5 = r20 + r0; - /* Next insn is delay slot */ - r31=0x17e90; - pc=0x40600; - run_40600(); return; - case 0x17e90: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x17eec; + r3 = r0 + 10; + if(r2 != r3) { + pc=0x17cec; continue; } - case 0x17e98: - r5 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r20; - r3 = r5 + 1; - r5 = r2 + r5; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r3; - r18 = r18 + 1; - addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - addr=r18+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r17 = tmp; - if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x17e68; - continue; - } - case 0x17ec8: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r20 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r19 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 48; - /* Next insn is delay slot */ + r2 = r0 + 1; + page[(r4+24)>>>2] = r2; + case 0x17c4c: + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; pc=r31; return; - case 0x17eec: - r4 = r19 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x17efc; - pc=0x1b200; - run_1b200(); return; - case 0x17efc: - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x17e98; + case 0x17c68: + r3 = (r2&0xffffffffL) < (23&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x17cec; + continue; + } + r2 = 6 << 16; + r2 = r2 + 15440; + page[(r4+0)>>>2] = r2; + r2 = r0 + 1; + page[(r4+8)>>>2] = r2; + page[(r4+12)>>>2] = r0; + page[(r4+16)>>>2] = r0; + page[(r4+24)>>>2] = r0; + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x17cb0: + r2 = 6 << 16; + r2 = r2 + 15440; + page[(r4+0)>>>2] = r2; + r2 = r0 + 1; + page[(r4+8)>>>2] = r2; + page[(r4+12)>>>2] = r0; + page[(r4+16)>>>2] = r2; + page[(r4+24)>>>2] = r0; + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x17cec: + r5= page[(r16+8)>>>2]; + r3 = r0 + 1; + if(r5 == r3) { + pc=0x17d34; + continue; + } + if(r5 == r0) { + pc=0x17d7c; + continue; + } + r2 = r0 + 2; + if(r5 != r2) { + pc=0x17d58; + continue; + } + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r4 = r16 + r0; + r5 = r17 + r0; + r16= page[(r29+16)>>>2]; + r17= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=0x17400; + run_17000(); return; + case 0x17d34: + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r4 = r16 + r0; + r5 = r17 + r0; + r16= page[(r29+16)>>>2]; + r17= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=0x17800; continue; + case 0x17d58: + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r4 = 6 << 16; + r4 = r4 + 1232; + r29 = r29 + 32; + pc=0x21400; + run_21000(); return; + case 0x17d7c: + r3 = r2 + -5; + r4 = (r3&0xffffffffL) < (14&0xffffffffL) ? 1 : 0; + if(r4 == r0) { + pc=0x17e10; + continue; + } + r4 = 6 << 16; + r3 = r3 << 2; + r4 = r4 + 2704; + r3 = r4 + r3; + r3= page[(r3+0)>>>2]; + pc=r3; + return; + case 0x17dac: + r3= page[(r16+12)>>>2]; + r2 = r0 + -9; + r2 = r3 & r2; + page[(r16+12)>>>2] = r2; + case 0x17dbc: + page[(r16+24)>>>2] = r0; + pc=0x17c4c; + continue; + case 0x17dc8: + r3= page[(r16+12)>>>2]; + r2 = r0 + -8; + r2 = r3 & r2; + r2 = r2 | 8; + page[(r16+12)>>>2] = r2; + page[(r16+24)>>>2] = r0; + pc=0x17c4c; + continue; + case 0x17de8: + r3= page[(r16+12)>>>2]; + r2 = r0 + -9; + r2 = r3 & r2; + page[(r16+12)>>>2] = r2; + r2= page[(r16+24)>>>2]; + r2 = r0 - r2; + page[(r16+24)>>>2] = r2; + pc=0x17c4c; + continue; + case 0x17e10: + r4= page[(r17+4)>>>2]; + r3 = r0 + 1; + if(r4 == r3) { + pc=0x17e34; + continue; + } + r4 = 6 << 16; + r4 = r4 + 880; + r5 = r2 + r0; + r31=0x17e34; + pc=0x21400; + run_21000(); return; + case 0x17e34: + r18 = 6 << 16; + r4 = r18 + 16012; + r31=0x17e44; + pc=0x1be00; + run_1b800(); return; + case 0x17e44: + r5 = 6 << 16; + r4 = r18 + 16012; + r5 = r5 + 904; + r31=0x17e58; + pc=0x1c600; + run_1c000(); return; + case 0x17e58: + r5= page[(r17+12)>>>2]; + r4 = r18 + 16012; + r31=0x17e68; + pc=0x1c600; + run_1c000(); return; + case 0x17e68: + r5 = 6 << 16; + r4 = r18 + 16012; + r5 = r5 + 944; + r31=0x17e7c; + pc=0x1c600; + run_1c000(); return; + case 0x17e7c: + r2= page[(r16+0)>>>2]; + r4 = r18 + 16012; + r5= page[(r2+0)>>>2]; + r31=0x17e90; + pc=0x1c600; + run_1c000(); return; + case 0x17e90: + r5 = 6 << 16; + r4 = r18 + 16012; + r5 = r5 + 12036; + r31=0x17ea4; + pc=0x1c600; + run_1c000(); return; + case 0x17ea4: + r4 = r18 + 16012; + r5 = r0 + r0; + r31=0x17eb4; + pc=0x1c400; + run_1c000(); return; + case 0x17eb4: + r31= page[(r29+28)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r5= page[(r18+16012)>>>2]; + r18= page[(r29+24)>>>2]; + r4 = r0 + -2; + r29 = r29 + 32; + pc=0x1fc00; + run_1f800(); return; case 0x18000: pc=0x18000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_18000() throws ExecutionException { /* 0x18000 - 0x18200 */ + private final void run_18000() throws ExecutionException { /* 0x18000 - 0x18800 */ int addr, tmp; for(;;) { switch(pc) { case 0x18000: - r29 = r29 + -40; - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - r18 = readPages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - r2 = r2 < r18 ? 1 : 0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; + r29 = r29 + -48; + r2= page[(r28+-31368)>>>2]; + page[(r29+16)>>>2] = r16; r16 = r4 + r0; - r17 = r5 + r0; + r4= page[(r28+-31364)>>>2]; + r3 = r2 << 2; + r3 = r4 + r3; + page[(r29+44)>>>2] = r31; + page[(r29+40)>>>2] = r22; + page[(r29+36)>>>2] = r21; + page[(r29+32)>>>2] = r20; + page[(r29+28)>>>2] = r19; + page[(r29+24)>>>2] = r18; + page[(r29+20)>>>2] = r17; + page[(r3+0)>>>2] = r5; + r5= page[(r28+-32748)>>>2]; + r2 = r2 + 1; + page[(r28+-31368)>>>2] = r2; + r2 = r2 < r5 ? 1 : 0; + if(r2 == r0) { + pc=0x184a0; + continue; + } + case 0x18054: + r2= page[(r28+-31380)>>>2]; + r3 = (r2&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; + if(r3 != r0) { + pc=0x184dc; + continue; + } + case 0x18068: + r19 = 6 << 16; + r18 = 6 << 16; + r20 = 6 << 16; + r17 = 6 << 16; + r19 = r19 + 1252; + r18 = r18 + 1348; + r20 = r20 + 16648; + case 0x18084: if(r2 != r0) { - /* Next insn is delay slot */ + pc=0x18178; + continue; + } + case 0x1808c: + r4= page[(r28+-31368)>>>2]; + r2 = r4 < 2 ? 1 : 0; + if(r2 != r0) { + pc=0x18178; + continue; + } + r8= page[(r28+-31364)>>>2]; + r3 = r4 << 2; + r3 = r3 + -8; + r3 = r8 + r3; + r5= page[(r3+0)>>>2]; + r7= page[(r3+4)>>>2]; + r2= page[(r5+0)>>>2]; + r6= page[(r7+0)>>>2]; + r9 = r2 < r6 ? 1 : 0; + if(r9 != r0) { + pc=0x18178; + continue; + } + if(r2 == r6) { + pc=0x181a4; + continue; + } + case 0x180d8: + r2= page[(r5+4)>>>2]; + r6 = r0 + 1; + if(r2 == r6) { + pc=0x181d8; + continue; + } + case 0x180e8: + if(r2 == r0) { + pc=0x18264; + continue; + } + r3 = r0 + 2; + if(r2 != r3) { + pc=0x18244; + continue; + } + r3= page[(r28+-31376)>>>2]; + r2 = r3 < 2 ? 1 : 0; + if(r2 != r0) { + pc=0x1846c; + continue; + } + case 0x18110: + r2= page[(r28+-31372)>>>2]; + r3 = r3 << 5; + r3 = r3 + -64; + r4 = r2 + r3; + r7= page[(r4+0)>>>2]; + r6 = r3 + 32; + r7= page[(r7+20)>>>2]; + r6 = r2 + r6; + pc=r7; + r31=0x18138; + return; + case 0x18138: + r2= page[(r28+-31368)>>>2]; + r4= page[(r28+-31364)>>>2]; + r3 = r2 << 2; + r2 = r2 + -1; + page[(r28+-31368)>>>2] = r2; + r2= page[(r28+-31376)>>>2]; + r3 = r3 + -8; + r3 = r4 + r3; + r2 = r2 + -1; + r4= page[(r3+4)>>>2]; + page[(r28+-31376)>>>2] = r2; + r2= page[(r28+-31380)>>>2]; + page[(r16+40)>>>2] = r0; + page[(r3+0)>>>2] = r4; + if(r2 == r0) { pc=0x1808c; continue; } - r2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - case 0x18034: - r4 = readPages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff]; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1806c; - continue; - } - case 0x1804c: - r3 = r3 | 32; - r2 = r2 + 1; - r4 = r4 + 1; - addr=r2+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x1804c; - continue; - } - case 0x1806c: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ + case 0x18178: + r31= page[(r29+44)>>>2]; + r22= page[(r29+40)>>>2]; + r21= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 48; pc=r31; return; - case 0x1808c: - r4 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r5 = r18 + r0; - /* Next insn is delay slot */ - r31=0x1809c; - pc=0x40600; - run_40600(); return; - case 0x1809c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x180b4; - continue; - } - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r18; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x18034; - continue; - case 0x180b4: - r4 = 7 << 16; - r4 = r4 + -6876; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x180c8; - pc=0x1b200; - run_1b200(); return; - case 0x180c8: - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r18; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x18034; - continue; - case 0x18200: - pc=0x18200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_18200() throws ExecutionException { /* 0x18200 - 0x18400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x18200: - r29 = r29 + -24; - r4 = r0 + 12; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x18218; - pc=0x3e800; - run_3e800(); return; - case 0x18218: - r16 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x18260; - continue; - } - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r0; - r4 = r0 + 1024; - r2 = r0 + 1024; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x1823c; - pc=0x3e800; - run_3e800(); return; - case 0x1823c: - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x18260; - continue; - } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff] = r16; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x18260: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r4 = 7 << 16; - r7 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r4 = r4 + -7800; - r5 = r0 + 1; + case 0x181a4: r6 = r0 + 37; - /* Next insn is delay slot */ - r31=0x18280; - pc=0x3dc00; - run_3dc00(); return; - case 0x18280: - r4 = r0 + 1; - /* Next insn is delay slot */ - r31=0x1828c; - pc=0x38e00; - run_38e00(); return; - case 0x1828c: - case 0x18400: - pc=0x18400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_18400() throws ExecutionException { /* 0x18400 - 0x18600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x18400: - r2 = r4 << 24; - r2 = r2 >> 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x18600: - pc=0x18600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_18600() throws ExecutionException { /* 0x18600 - 0x18800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x18600: - r4 = r4 << 24; - r4 = r4 >> 24; - r3 = r4 & 255; - r2 = r3 + -65; - r2 = (r2&0xffffffffL) < (26&0xffffffffL) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1864c; + if(r2 != r6) { + pc=0x180d8; continue; } - r2 = r3 + -97; - r2 = (r2&0xffffffffL) < (26&0xffffffffL) ? 1 : 0; + r2 = r17 + 31340; + r2= page[(r2+52)>>>2]; + r2 = (r2&0xffffffffL) < (3&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x18640; + pc=0x18178; continue; } - r3 = r3 + -32; - r2 = r3 << 24; - r2 = r2 >> 24; - /* Next insn is delay slot */ - pc=r31; + r2= page[(r5+4)>>>2]; + r6 = r0 + 1; + if(r2 != r6) { + pc=0x180e8; + continue; + } + case 0x181d8: + r2= page[(r28+-31376)>>>2]; + if(r2 <= 0) { + pc=0x1843c; + continue; + } + case 0x181e8: + r4= page[(r28+-31372)>>>2]; + r2 = r2 << 5; + r2 = r2 + -32; + r4 = r4 + r2; + r2= page[(r4+0)>>>2]; + r2= page[(r2+16)>>>2]; + pc=r2; + r31=0x18210; return; - case 0x18640: - r2 = r4 + r0; - /* Next insn is delay slot */ - pc=r31; + case 0x18210: + r2= page[(r28+-31368)>>>2]; + r4= page[(r28+-31364)>>>2]; + r3 = r2 << 2; + r3 = r3 + -8; + r3 = r4 + r3; + r4= page[(r3+4)>>>2]; + r2 = r2 + -1; + page[(r16+40)>>>2] = r0; + page[(r28+-31368)>>>2] = r2; + page[(r3+0)>>>2] = r4; + r2= page[(r28+-31380)>>>2]; + pc=0x18084; + continue; + case 0x18244: + r4 = 6 << 16; + r5 = r2 + r0; + r4 = r4 + 1368; + r31=0x18258; + pc=0x21400; + run_21000(); return; + case 0x18258: + r2= page[(r28+-31380)>>>2]; + pc=0x18084; + continue; + case 0x18264: + r2= page[(r7+8)>>>2]; + if(r2 != r0) { + pc=0x18334; + continue; + } + r21= page[(r5+8)>>>2]; + r2 = r0 + 2; + r6 = r4 + r0; + if(r21 == r2) { + pc=0x18374; + continue; + } + case 0x18288: + r2 = (r21&0xffffffffL) < (3&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x18300; + continue; + } + r22 = r0 + 3; + if(r21 == r22) { + pc=0x183d8; + continue; + } + r2 = r0 + 4; + if(r21 != r2) { + pc=0x183bc; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x18414; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 1320; + r31=0x182d0; + pc=0x1fc00; + run_1f800(); return; + case 0x182d0: + page[(r28+-31380)>>>2] = r22; + case 0x182d4: + r2= page[(r28+-31368)>>>2]; + r4= page[(r28+-31364)>>>2]; + r3 = r2 << 2; + r3 = r3 + -8; + r3 = r4 + r3; + r4= page[(r3+4)>>>2]; + r2 = r2 + -1; + page[(r3+0)>>>2] = r4; + page[(r28+-31368)>>>2] = r2; + pc=0x18178; + continue; + case 0x18300: + r2 = r0 + 1; + if(r21 != r2) { + pc=0x183bc; + continue; + } + r4 = r4 << 2; + r2 = r0 + 4; + r8 = r8 + r4; + page[(r28+-31380)>>>2] = r2; + r2= page[(r8+-4)>>>2]; + r6 = r6 + -1; + page[(r3+0)>>>2] = r2; + page[(r28+-31368)>>>2] = r6; + pc=0x18178; + continue; + case 0x18334: + r4 = 6 << 16; + r5 = r2 + r0; + r4 = r4 + 1284; + r31=0x18348; + pc=0x21400; + run_21000(); return; + case 0x18348: + r6= page[(r28+-31368)>>>2]; + r8= page[(r28+-31364)>>>2]; + r3 = r6 << 2; + r3 = r3 + -8; + r3 = r8 + r3; + r5= page[(r3+0)>>>2]; + r2 = r0 + 2; + r21= page[(r5+8)>>>2]; + r4 = r6 + r0; + if(r21 != r2) { + pc=0x18288; + continue; + } + case 0x18374: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + r21 = r0 + 1; + r2 = r0 + 41; + page[(r16+40)>>>2] = r21; + if(r5 == r2) { + pc=0x184ec; + continue; + } + r2= page[(r16+36)>>>2]; + r4 = r4 << 2; + r2 = r2 + 1; + r8 = r8 + r4; + page[(r16+36)>>>2] = r2; + r2= page[(r8+-4)>>>2]; + r6 = r6 + -1; + page[(r3+0)>>>2] = r2; + page[(r28+-31368)>>>2] = r6; + r2= page[(r28+-31380)>>>2]; + pc=0x18084; + continue; + case 0x183bc: + r4 = r18 + r0; + r5 = r21 + r0; + r31=0x183cc; + pc=0x21400; + run_21000(); return; + case 0x183cc: + r2= page[(r28+-31380)>>>2]; + pc=0x18084; + continue; + case 0x183d8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 44; + if(r2 == r3) { + pc=0x1850c; + continue; + } + r3 = r0 + 93; + if(r2 == r3) { + pc=0x18414; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 1300; + r31=0x18408; + pc=0x1fc00; + run_1f800(); return; + case 0x18408: + page[(r28+-31380)>>>2] = r21; + pc=0x182d4; + continue; + case 0x18414: + r31=0x1841c; + pc=0x23000; + run_23000(); return; + case 0x1841c: + r2= page[(r28+-31368)>>>2]; + r2 = r2 + -2; + page[(r28+-31368)>>>2] = r2; + r2 = r0 + 1; + page[(r28+-31380)>>>2] = r2; + pc=0x18178; + continue; + case 0x1843c: + r5 = r2 + r0; + r4 = r19 + r0; + r31=0x1844c; + pc=0x21400; + run_21000(); return; + case 0x1844c: + r3= page[(r28+-31368)>>>2]; + r4= page[(r28+-31364)>>>2]; + r3 = r3 << 2; + r3 = r4 + r3; + r2= page[(r28+-31376)>>>2]; + r5= page[(r3+-8)>>>2]; + pc=0x181e8; + continue; + case 0x1846c: + r4 = 6 << 16; + r5 = r3 + r0; + r4 = r4 + 1268; + r31=0x18480; + pc=0x21400; + run_21000(); return; + case 0x18480: + r2= page[(r28+-31368)>>>2]; + r4= page[(r28+-31364)>>>2]; + r2 = r2 << 2; + r2 = r4 + r2; + r3= page[(r28+-31376)>>>2]; + r5= page[(r2+-8)>>>2]; + pc=0x18110; + continue; + case 0x184a0: + r2 = r5 << 1; + r5 = r5 << 3; + page[(r28+-32748)>>>2] = r2; + r31=0x184b4; + pc=0x4fa00; + run_4f800(); return; + case 0x184b4: + page[(r28+-31364)>>>2] = r2; + if(r2 != r0) { + pc=0x18054; + continue; + } + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5244; + r31=0x184d4; + pc=0x1fc00; + run_1f800(); return; + case 0x184d4: + pc=0x18054; + continue; + case 0x184dc: + page[(r28+-31380)>>>2] = r0; + r2 = r0 + r0; + pc=0x18068; + continue; + case 0x184ec: + r31=0x184f4; + pc=0x23000; + run_23000(); return; + case 0x184f4: + r2= page[(r28+-31368)>>>2]; + page[(r28+-31380)>>>2] = r21; + r2 = r2 + -2; + page[(r28+-31368)>>>2] = r2; + pc=0x18178; + continue; + case 0x1850c: + r31=0x18514; + pc=0x23000; + run_23000(); return; + case 0x18514: + r2= page[(r28+-31368)>>>2]; + r3= page[(r28+-31364)>>>2]; + r2 = r2 << 2; + r2 = r3 + r2; + page[(r2+-4)>>>2] = r20; + r2= page[(r28+-31380)>>>2]; + pc=0x18084; + continue; + case 0x18600: + r2= page[(r28+-31372)>>>2]; + r29 = r29 + -104; + page[(r29+24)>>>2] = r16; + page[(r29+60)>>>2] = r31; + page[(r29+56)>>>2] = r30; + page[(r29+52)>>>2] = r23; + page[(r29+48)>>>2] = r22; + page[(r29+44)>>>2] = r21; + page[(r29+40)>>>2] = r20; + page[(r29+36)>>>2] = r19; + page[(r29+32)>>>2] = r18; + page[(r29+28)>>>2] = r17; + page[(r29+100)>>>2] = f28; + page[(r29+96)>>>2] = f29; + page[(r29+92)>>>2] = f26; + page[(r29+88)>>>2] = f27; + page[(r29+84)>>>2] = f24; + page[(r29+80)>>>2] = f25; + page[(r29+76)>>>2] = f22; + page[(r29+72)>>>2] = f23; + page[(r29+68)>>>2] = f20; + page[(r29+64)>>>2] = f21; + r16 = r4 + r0; + if(r2 == r0) { + pc=0x195a8; + run_19000(); return; + } + case 0x18664: + r4= page[(r28+-31364)>>>2]; + r5= page[(r28+-32748)>>>2]; + if(r4 == r0) { + pc=0x19574; + run_19000(); return; + } + case 0x18674: + r21 = 6 << 16; + r3 = r0 + 1; + r21 = r21 + 16712; + r2 = r5 < 2 ? 1 : 0; + page[(r16+32)>>>2] = r3; + page[(r16+36)>>>2] = r0; + page[(r16+40)>>>2] = r0; + page[(r28+-31376)>>>2] = r0; + page[(r4+0)>>>2] = r21; + page[(r28+-31368)>>>2] = r3; + if(r2 != r0) { + pc=0x191c4; + run_19000(); return; + } + case 0x186a4: + r3 = r0 + r0; + case 0x186a8: + f24= page[(r28+-32724)>>>2]; + r22 = 6 << 16; + f25= page[(r28+-32728)>>>2]; + r23 = 6 << 16; + page[(r28+-31380)>>>2] = r0; + r2 = r0 + r0; + r22 = r22 + 4764; + r23 = r23 + 15440; + f26 = f24; + f27 = f25; + case 0x186cc: + r5= page[(r28+-32752)>>>2]; + r3 = r3 < r5 ? 1 : 0; + if(r3 == r0) { + pc=0x1873c; + continue; + } + if(r2 == r0) { + pc=0x18770; + continue; + } + case 0x186e8: + r3 = r0 + 1; + if(r2 != r3) { + pc=0x187f8; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x18930; + run_18800(); return; + } + r3 = r2 + r0; + r2 = r3 + -33; + r2 = r2 & 255; + r4 = (r2&0xffffffffL) < (92&0xffffffffL) ? 1 : 0; + if(r4 == r0) { + pc=0x18954; + run_18800(); return; + } + case 0x1871c: + r4 = 6 << 16; + r2 = r2 << 2; + r4 = r4 + 2760; + r2 = r4 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; return; - case 0x1864c: - r2 = r0 + -128; - r2 = r4 | r2; - /* Next insn is delay slot */ - pc=r31; + case 0x1873c: + r4= page[(r28+-31372)>>>2]; + r2 = r5 << 1; + r5 = r5 << 6; + page[(r28+-32752)>>>2] = r2; + r31=0x18754; + pc=0x4fa00; + run_4f800(); return; + case 0x18754: + page[(r28+-31372)>>>2] = r2; + if(r2 == r0) { + pc=0x18990; + run_18800(); return; + } + r2= page[(r28+-31380)>>>2]; + case 0x18768: + if(r2 != r0) { + pc=0x186e8; + continue; + } + case 0x18770: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r4 = tmp; + r2 = r0 + 32; + if(r4 == r2) { + pc=0x1897c; + run_18800(); return; + } + r18 = r4 + r0; + case 0x18784: + r2 = r18 + -33; + r2 = r2 & 255; + r3 = (r2&0xffffffffL) < (62&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x18810; + run_18800(); return; + } + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 3128; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; return; + case 0x187b8: + r31=0x187c0; + pc=0x23000; + run_23000(); return; + case 0x187c0: + r17 = r2 + r0; + r2 = r0 + 61; + if(r17 != r2) { + pc=0x1919c; + run_19000(); return; + } + r17 = 6 << 16; + r17 = r17 + 16504; + case 0x187d8: + r31=0x187e0; + pc=0x23000; + run_23000(); return; + case 0x187e0: + r4 = r16 + r0; + r5 = r17 + r0; + r31=0x187f0; + pc=0x18000; + continue; + case 0x187f0: + r2= page[(r28+-31380)>>>2]; + case 0x187f8: + r3 = (r2&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x188a4; + run_18800(); return; + } case 0x18800: pc=0x18800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_18800() throws ExecutionException { /* 0x18800 - 0x18a00 */ + private final void run_18800() throws ExecutionException { /* 0x18800 - 0x19000 */ int addr, tmp; for(;;) { switch(pc) { case 0x18800: - r2 = readPages[(r28+-32344)>>>12][((r28+-32344)>>>2)&0x3ff]; - r4 = r4 & 255; - r4 = r2 + r4; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + r3= page[(r28+-31376)>>>2]; + pc=0x186cc; + run_18000(); return; + case 0x18810: + r18 = r18 & 255; + r2 = r18 + -48; + r2 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x18bd0; + continue; + } + r18 = r18 + r22; + addr=r18+0; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; - /* Next insn is delay slot */ + if(r2 < 0) { + pc=0x19714; + run_19000(); return; + } + r3= page[(r28+-31376)>>>2]; + r4= page[(r28+-31372)>>>2]; + r2 = r3 << 5; + r2 = r4 + r2; + r4 = r0 + 1; + r3 = r3 + 1; + page[(r2+0)>>>2] = r23; + page[(r2+8)>>>2] = r4; + page[(r2+12)>>>2] = r0; + page[(r2+16)>>>2] = r0; + page[(r2+24)>>>2] = r0; + r2= page[(r28+-31368)>>>2]; + page[(r28+-31376)>>>2] = r3; + r3= page[(r28+-31364)>>>2]; + r2 = r2 << 2; + r2 = r3 + r2; + r2= page[(r2+-4)>>>2]; + if(r2 == r21) { + pc=0x196b0; + run_19000(); return; + } + case 0x18888: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x1889c; + pc=0x1fc00; + run_1f800(); return; + case 0x1889c: + r2 = r0 + 3; + page[(r28+-31380)>>>2] = r2; + case 0x188a4: + r3 = r0 + 4; + if(r2 == r3) { + pc=0x19100; + run_19000(); return; + } + r2 = 6 << 16; + r2 = r2 + 15440; + page[(r16+0)>>>2] = r2; + page[(r16+8)>>>2] = r0; + page[(r16+12)>>>2] = r0; + page[(r16+24)>>>2] = r0; + r31=0x188d0; + pc=0x23800; + run_23800(); return; + case 0x188d0: + r2 = r0 + 1; + case 0x188d4: + f28= page[(r29+100)>>>2]; + f26= page[(r29+92)>>>2]; + f24= page[(r29+84)>>>2]; + f22= page[(r29+76)>>>2]; + f20= page[(r29+68)>>>2]; + r31= page[(r29+60)>>>2]; + r30= page[(r29+56)>>>2]; + r23= page[(r29+52)>>>2]; + r22= page[(r29+48)>>>2]; + r21= page[(r29+44)>>>2]; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + f29= page[(r29+96)>>>2]; + f27= page[(r29+88)>>>2]; + f25= page[(r29+80)>>>2]; + f23= page[(r29+72)>>>2]; + f21= page[(r29+64)>>>2]; + r29 = r29 + 104; pc=r31; return; + case 0x18930: + r31=0x18938; + pc=0x23000; + run_23000(); return; + case 0x18938: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r3 + -33; + r2 = r2 & 255; + r4 = (r2&0xffffffffL) < (92&0xffffffffL) ? 1 : 0; + if(r4 != r0) { + pc=0x1871c; + run_18000(); return; + } + case 0x18954: + r3 = r3 & 255; + r3 = r3 + r22; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 < 0) { + pc=0x19634; + run_19000(); return; + } + r17 = 6 << 16; + r17 = r17 + 16728; + pc=0x187e0; + run_18000(); return; + case 0x1897c: + r31=0x18984; + pc=0x23000; + run_23000(); return; + case 0x18984: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r18 = tmp; + pc=0x18784; + run_18000(); return; + case 0x18990: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5244; + r31=0x189a4; + pc=0x1fc00; + run_1f800(); return; + case 0x189a4: + r2= page[(r28+-31380)>>>2]; + pc=0x18768; + run_18000(); return; + case 0x189b0: + r17 = 6 << 16; + r17 = r17 + 16376; + pc=0x187d8; + run_18000(); return; + case 0x189c0: + r17 = 6 << 16; + r17 = r17 + 16344; + pc=0x187d8; + run_18000(); return; + case 0x189d0: + r17 = 6 << 16; + r17 = r17 + 16632; + pc=0x187d8; + run_18000(); return; + case 0x189e0: + r17 = 6 << 16; + r17 = r17 + 16264; + pc=0x187d8; + run_18000(); return; + case 0x189f0: + r17 = 6 << 16; + r17 = r17 + 16328; + pc=0x187d8; + run_18000(); return; case 0x18a00: - pc=0x18a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_18a00() throws ExecutionException { /* 0x18a00 - 0x18c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x18a00: - r4 = r4 << 24; - r4 = r4 >> 24; - r3 = r4 & 255; - r2 = r3 + -97; - r2 = (r2&0xffffffffL) < (26&0xffffffffL) ? 1 : 0; + r17 = 6 << 16; + r17 = r17 + 16360; + pc=0x187d8; + run_18000(); return; + case 0x18a10: + r31=0x18a18; + pc=0x23000; + run_23000(); return; + case 0x18a18: + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + 16232; + r31=0x18a2c; + pc=0x18000; + run_18000(); return; + case 0x18a2c: + r2= page[(r28+-31368)>>>2]; + r4= page[(r28+-31364)>>>2]; + r3 = r2 << 2; + r5 = 6 << 16; + r5 = r5 + 16664; + r3 = r4 + r3; + page[(r3+0)>>>2] = r5; + r5= page[(r28+-32748)>>>2]; + r2 = r2 + 1; + page[(r28+-31368)>>>2] = r2; + r2 = r2 < r5 ? 1 : 0; + if(r2 == r0) { + pc=0x19260; + run_19000(); return; + } + case 0x18a60: + r2= page[(r28+-31380)>>>2]; + pc=0x187f8; + run_18000(); return; + case 0x18a6c: + r31=0x18a74; + pc=0x23000; + run_23000(); return; + case 0x18a74: + r3 = r0 + 61; + if(r2 == r3) { + pc=0x1961c; + run_19000(); return; + } + r17 = 6 << 16; + r17 = r17 + 16568; + pc=0x187e0; + run_18000(); return; + case 0x18a90: + r31=0x18a98; + pc=0x23000; + run_23000(); return; + case 0x18a98: + r3 = r0 + 61; + if(r2 == r3) { + pc=0x192d4; + run_19000(); return; + } + r3 = r0 + 62; + if(r2 == r3) { + pc=0x18b00; + continue; + } + r3 = r0 + 60; + if(r2 == r3) { + pc=0x195ec; + run_19000(); return; + } + r17 = 6 << 16; + r17 = r17 + 16520; + pc=0x187e0; + run_18000(); return; + case 0x18acc: + r17 = 6 << 16; + r17 = r17 + 16584; + pc=0x187d8; + run_18000(); return; + case 0x18adc: + r17 = 6 << 16; + r17 = r17 + 16296; + pc=0x187d8; + run_18000(); return; + case 0x18aec: + r31=0x18af4; + pc=0x23000; + run_23000(); return; + case 0x18af4: + r3 = r0 + 61; + if(r2 != r3) { + pc=0x18888; + continue; + } + case 0x18b00: + r17 = 6 << 16; + r17 = r17 + 16552; + pc=0x187d8; + run_18000(); return; + case 0x18b10: + r17 = 6 << 16; + r17 = r17 + 16472; + case 0x18b18: + r31=0x18b20; + pc=0x23000; + run_23000(); return; + case 0x18b20: + r2= page[(r28+-31368)>>>2]; + r4= page[(r28+-31364)>>>2]; + r3 = r2 << 2; + r3 = r4 + r3; + page[(r3+0)>>>2] = r17; + case 0x18b34: + r5= page[(r28+-32748)>>>2]; + r2 = r2 + 1; + page[(r28+-31368)>>>2] = r2; + r2 = r2 < r5 ? 1 : 0; + if(r2 == r0) { + pc=0x18b5c; + continue; + } + case 0x18b4c: + r2= page[(r28+-31380)>>>2]; + case 0x18b50: + page[(r16+32)>>>2] = r0; + pc=0x187f8; + run_18000(); return; + case 0x18b5c: + r2 = r5 << 1; + r5 = r5 << 3; + page[(r28+-32748)>>>2] = r2; + r31=0x18b70; + pc=0x4fa00; + run_4f800(); return; + case 0x18b70: + page[(r28+-31364)>>>2] = r2; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x18a64; + pc=0x18b4c; continue; } - r2 = r3 + -91; - r2 = (r2&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5244; + r31=0x18b90; + pc=0x1fc00; + run_1f800(); return; + case 0x18b90: + r2= page[(r28+-31380)>>>2]; + page[(r16+32)>>>2] = r0; + pc=0x187f8; + run_18000(); return; + case 0x18ba0: + r31=0x18ba8; + pc=0x14000; + run_14000(); return; + case 0x18ba8: + r2= page[(r28+-31380)>>>2]; + r3 = (r2&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x18b50; + continue; + } + r2 = r0 + 1; + page[(r28+-31380)>>>2] = r2; + page[(r16+32)>>>2] = r0; + pc=0x187f8; + run_18000(); return; + case 0x18bd0: + r17 = r18 & 15; + r31=0x18bdc; + pc=0x23000; + run_23000(); return; + case 0x18bdc: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + if(r17 != r0) { + pc=0x19308; + run_19000(); return; + } + r2 = r0 + 98; + if(r3 == r2) { + pc=0x18ba0; + continue; + } + r2 = r0 + 120; + if(r3 != r2) { + pc=0x19308; + run_19000(); return; + } + case 0x18c00: + r31=0x18c08; + pc=0x14200; + run_14000(); return; + case 0x18c08: + pc=0x18ba8; + continue; + case 0x18c10: + r17 = 6 << 16; + r4 = r17 + 17104; + r31=0x18c20; + pc=0x1be00; + run_1b800(); return; + case 0x18c20: + r4 = r18 + r0; + r31=0x18c2c; + pc=0x24800; + run_24800(); return; + case 0x18c2c: + if(r2 == r0) { + pc=0x19360; + run_19000(); return; + } + case 0x18c34: + r3= page[(r28+-31376)>>>2]; + r4= page[(r28+-31372)>>>2]; + r2 = r3 << 5; + r2 = r4 + r2; + r4 = r0 + 1; + page[(r2+0)>>>2] = r23; + page[(r2+8)>>>2] = r4; + page[(r2+12)>>>2] = r0; + page[(r2+16)>>>2] = r0; + page[(r2+24)>>>2] = r0; + r3 = r3 + 1; + r2 = r0 + 3; + page[(r28+-31376)>>>2] = r3; + page[(r28+-31380)>>>2] = r2; + page[(r16+32)>>>2] = r0; + pc=0x187f8; + run_18000(); return; + case 0x18c78: + r17 = 6 << 16; + r17 = r17 + 16248; + pc=0x18b18; + continue; + case 0x18c88: + r17 = 6 << 16; + r17 = r17 + 16440; + pc=0x18b18; + continue; + case 0x18c98: + r17= page[(r28+-31376)>>>2]; + r4 = r0 + 40; + r2 = r17 + 1; + page[(r28+-31376)>>>2] = r2; + r2= page[(r28+-31372)>>>2]; + r17 = r17 << 5; + r17 = r2 + r17; + r2 = 6 << 16; + r2 = r2 + 15400; + page[(r17+0)>>>2] = r2; + r31=0x18cc8; + pc=0x20200; + run_20000(); return; + case 0x18cc8: + page[(r17+8)>>>2] = r2; + page[(r2+0)>>>2] = r2; + r2= page[(r17+8)>>>2]; + r3 = r0 + 1; + page[(r2+4)>>>2] = r2; + r2= page[(r17+8)>>>2]; + page[(r2+8)>>>2] = r0; + r2= page[(r17+8)>>>2]; + page[(r2+12)>>>2] = r3; + r31=0x18cfc; + pc=0x23000; + run_23000(); return; + case 0x18cfc: + r3 = r0 + 32; + if(r2 == r3) { + pc=0x19680; + run_19000(); return; + } + case 0x18d08: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x19690; + run_19000(); return; + } + r2= page[(r28+-31368)>>>2]; + r4= page[(r28+-31364)>>>2]; + r3 = r2 << 2; + r5 = 6 << 16; + r5 = r5 + 16680; + r3 = r4 + r3; + page[(r3+0)>>>2] = r5; + r5= page[(r28+-32748)>>>2]; + r2 = r2 + 1; + page[(r28+-31368)>>>2] = r2; + r2 = r2 < r5 ? 1 : 0; + if(r2 == r0) { + pc=0x19224; + run_19000(); return; + } + case 0x18d4c: + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + 16648; + r31=0x18d60; + pc=0x18000; + run_18000(); return; + case 0x18d60: + r2= page[(r28+-31380)>>>2]; + page[(r16+32)>>>2] = r0; + pc=0x187f8; + run_18000(); return; + case 0x18d70: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x18d80; + pc=0x26200; + run_26000(); return; + case 0x18d80: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x18a50; + pc=0x190c8; + run_19000(); return; + } + case 0x18d88: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 63; + if(r3 == r2) { + pc=0x194cc; + run_19000(); return; + } + case 0x18d98: + r30 = 6 << 16; + r5= page[(r30+17108)>>>2]; + r4= page[(r29+16)>>>2]; + r5 = r5 + -1; + r6 = r0 + r0; + r31=0x18db4; + pc=0x15e00; + run_15800(); return; + case 0x18db4: + pc=0x18ba8; + continue; + case 0x18dbc: + r17 = 6 << 16; + r17 = r17 + 16456; + pc=0x18b18; + continue; + case 0x18dcc: + r17 = 6 << 16; + r4 = r17 + 17104; + r31=0x18ddc; + pc=0x1be00; + run_1b800(); return; + case 0x18ddc: + r18 = r0 + r0; + r30 = r17 + 17104; + r20 = r0 + 45; + r19 = r0 + 45; + pc=0x18e1c; + continue; + case 0x18df4: + r4= page[(r17+17104)>>>2]; + r5 = r2 + 1; + r2 = r4 + r2; + page[(r30+4)>>>2] = r5; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r20&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r18 = r18 ^ 1; + r31=0x18e14; + pc=0x23000; + run_23000(); return; + case 0x18e14: + if(r2 != r19) { + pc=0x18e74; continue; } - r2 = r0 + 96; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x18a78; + case 0x18e1c: + r2= page[(r30+4)>>>2]; + r4= page[(r30+8)>>>2]; + if(r2 != r4) { + pc=0x18df4; continue; } - r2 = r0 + 64; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x18a84; + r4 = 6 << 16; + r4 = r4 + 17104; + r31=0x18e40; + pc=0x1c000; + run_1c000(); return; + case 0x18e40: + r3 = 6 << 16; + r3 = r3 + 17104; + r2= page[(r3+4)>>>2]; + r4= page[(r17+17104)>>>2]; + r5 = r2 + 1; + r2 = r4 + r2; + page[(r30+4)>>>2] = r5; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r20&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r18 = r18 ^ 1; + r31=0x18e6c; + pc=0x23000; + run_23000(); return; + case 0x18e6c: + if(r2 == r19) { + pc=0x18e1c; + continue; + } + case 0x18e74: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r4 = r0 + 32; + if(r2 == r4) { + pc=0x1966c; + run_19000(); return; + } + case 0x18e84: + r2 = r2 & 255; + r2 = r2 + r22; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + r2 = r2 & 8; + if(r2 != r0) { + pc=0x192a0; + run_19000(); return; + } + if(r18 == r0) { + pc=0x18b4c; + continue; + } + r2= page[(r28+-31368)>>>2]; + r4= page[(r28+-31364)>>>2]; + r3 = r2 << 2; + r5 = 6 << 16; + r3 = r4 + r3; + r5 = r5 + 16280; + page[(r3+0)>>>2] = r5; + pc=0x18b34; + continue; + case 0x18ecc: + r17 = 6 << 16; + r4 = r17 + 17104; + r30 = r17 + 17104; + r31=0x18ee0; + pc=0x1be00; + run_1b800(); return; + case 0x18ee0: + r20 = r30 + r0; + r19 = r0 + 43; + r18 = r0 + 43; + pc=0x18f18; + continue; + case 0x18ef4: + r4= page[(r17+17104)>>>2]; + r5 = r2 + 1; + r2 = r4 + r2; + page[(r30+4)>>>2] = r5; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r19&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r31=0x18f10; + pc=0x23000; + run_23000(); return; + case 0x18f10: + if(r2 != r18) { + pc=0x18f60; + continue; + } + case 0x18f18: + r2= page[(r30+4)>>>2]; + r4= page[(r30+8)>>>2]; + if(r2 != r4) { + pc=0x18ef4; + continue; + } + r4 = r20 + r0; + r31=0x18f38; + pc=0x1c000; + run_1c000(); return; + case 0x18f38: + r2= page[(r20+4)>>>2]; + r4= page[(r17+17104)>>>2]; + r5 = r2 + 1; + r2 = r4 + r2; + page[(r30+4)>>>2] = r5; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r19&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r31=0x18f58; + pc=0x23000; + run_23000(); return; + case 0x18f58: + if(r2 == r18) { + pc=0x18f18; + continue; + } + case 0x18f60: + r4 = r0 + r0; + r17= page[(r20+4)>>>2]; + r31=0x18f70; + pc=0x41800; + run_41800(); return; + case 0x18f70: + r2= page[(r28+-32672)>>>2]; + r5 = r17 + r0; + r4= page[(r2+0)>>>2]; + r6 = r0 + r0; + r31=0x18f88; + pc=0x15e00; + run_15800(); return; + case 0x18f88: + pc=0x18ba8; + continue; + case 0x18f90: + r31=0x18f98; + pc=0x23000; + run_23000(); return; + case 0x18f98: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + r3 = r2 + -48; + r3 = (r3&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x19204; + run_19000(); return; + } + f22= page[(r28+-32724)>>>2]; + f28 = r0; + f20= page[(r28+-32716)>>>2]; + f23= page[(r28+-32728)>>>2]; + f29 = r0; + f21= page[(r28+-32720)>>>2]; + case 0x18fcc: + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f29&0xffffffffL) << 32) | (f28&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f29 = (int)(l >>> 32); f28 = (int)l; } + r2 = r2 & 15; + f2 = r2; + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f23 = (int)(l >>> 32); f22 = (int)l; } + { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f29&0xffffffffL) << 32) | (f28&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f29 = (int)(l >>> 32); f28 = (int)l; } + r31=0x18fec; + pc=0x23000; + run_23000(); return; + case 0x18fec: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + r3 = r2 + -48; + r3 = (r3&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + if(r3 != r0) { + pc=0x18fcc; continue; } - r2 = r4 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x18a50: - r3 = r3 + -64; - r2 = r3 << 24; - r2 = r2 >> 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x18a64: - r3 = r3 + -96; - r2 = r3 << 24; - r2 = r2 >> 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x18a78: - r2 = r0 + 64; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x18a84: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x18c00: - pc=0x18c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_18c00() throws ExecutionException { /* 0x18c00 - 0x18e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x18c00: - r2 = readPages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff]; - r4 = r4 << 24; - r25 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r4 >> 24; - /* Next insn is delay slot */ - pc=r25; - return; - case 0x18e00: - pc=0x18e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_18e00() throws ExecutionException { /* 0x18e00 - 0x19000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x18e00: - r2 = r28 + -32348; - writePages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=r31; - return; case 0x19000: pc=0x19000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_19000() throws ExecutionException { /* 0x19000 - 0x19200 */ + private final void run_19000() throws ExecutionException { /* 0x19000 - 0x19800 */ int addr, tmp; for(;;) { switch(pc) { case 0x19000: - r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - r17 = r4 + r0; - r4 = r5 + r0; - r5 = 7 << 16; - r5 = r5 + 12832; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x19028; - pc=0x3b800; - run_3b800(); return; - case 0x19028: - r16 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x19084; - continue; - } - r4 = r17 + r0; - r5 = r0 + 1; - r6 = r0 + 256; - r7 = r2 + r0; - /* Next insn is delay slot */ - r31=0x1904c; - pc=0x3c600; - run_3c600(); return; - case 0x1904c: - r3 = r0 + 256; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x19068; - continue; - } - r4 = 7 << 16; - r4 = r4 + -7760; - /* Next insn is delay slot */ - r31=0x19068; - pc=0x1b000; - run_1b000(); return; - case 0x19068: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r4 = r16 + r0; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x39200; - run_39200(); return; - case 0x19084: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r4 = 7 << 16; - r4 = r4 + -6824; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x1b000; - run_1b000(); return; - case 0x19200: - pc=0x19200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_19200() throws ExecutionException { /* 0x19200 - 0x19400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x19200: - r4 = readPages[(r28+-30756)>>>12][((r28+-30756)>>>2)&0x3ff]; - r29 = r29 + -32; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x19240; - continue; - } - case 0x19214: - r6 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x19224; - pc=0x31000; - run_31000(); return; - case 0x19224: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x19260; - continue; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - case 0x19230: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x19240: - r5 = 7 << 16; - r4 = r28 + -30756; - r5 = r5 + 6008; - /* Next insn is delay slot */ - r31=0x19254; - pc=0x30e00; - run_30e00(); return; - case 0x19254: - r4 = readPages[(r28+-30756)>>>12][((r28+-30756)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x19214; + case 0x19004: + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f29&0xffffffffL) << 32) | (f28&0xffffffffL)))/(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f23 = (int)(l >>> 32); f22 = (int)l; } + r3= page[(r28+-31376)>>>2]; + r4= page[(r28+-31372)>>>2]; + r2 = r3 << 5; + r2 = r4 + r2; + r3 = r3 + 1; + r4 = r0 + 2; + page[(r2+0)>>>2] = r23; + page[(r2+8)>>>2] = r4; + page[(r2+12)>>>2] = r0; + page[(r2+20)>>>2] = f22; + page[(r2+16)>>>2] = f23; + page[(r28+-31376)>>>2] = r3; + page[(r2+24)>>>2] = r0; + pc=0x18ba8; + run_18800(); return; + case 0x19044: + r17 = r0 + 1; + r18 = r0 + 38; + pc=0x19058; continue; - case 0x19260: - r4 = 7 << 16; - r4 = r4 + -7728; - /* Next insn is delay slot */ - r31=0x19270; - pc=0x1b000; - run_1b000(); return; - case 0x19270: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x19230; - continue; - case 0x19400: - pc=0x19400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_19400() throws ExecutionException { /* 0x19400 - 0x19600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x19400: - r29 = r29 + -88; - writePages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff] = r19; - r19 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = r29 + 40; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = r16; - r5 = r19 + r0; - r16 = r4 + r0; - r6 = r0 + 20; - r4 = r3 + r0; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r31; - writePages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff] = r18; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r17; - /* Next insn is delay slot */ - r31=0x19438; - pc=0x48fdc; - run_48e00(); return; - case 0x19438: - r3 = r2 + r0; + case 0x19054: + r17 = r17 + 1; + case 0x19058: + r31=0x19060; + pc=0x23000; + run_23000(); return; + case 0x19060: + if(r2 == r18) { + pc=0x19054; + continue; + } r2 = r0 + 1; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r2; - r2 = r0 + 80; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; - r5 = r29 + 16; - r6 = r0 + 1; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; - writePages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x19474; - pc=0x2f600; - run_2f600(); return; - case 0x19474: - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x19540; + if(r17 == r2) { + pc=0x19408; continue; } - r2 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + case 0x19078: + r3 = r0 + 42; + if(r2 == r3) { + pc=0x1976c; + continue; + } + r3 = r2 & 255; + r3 = r3 + r22; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + if(r3 < 0) { + pc=0x19528; + continue; + } + r3 = r0 + 46; + if(r2 == r3) { + pc=0x19528; + continue; + } + r3 = r0 + 64; + if(r2 == r3) { + pc=0x19528; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5300; + r31=0x190c8; + pc=0x1fc00; + run_1f800(); return; + case 0x190c8: + r2 = r0 + 3; + page[(r28+-31380)>>>2] = r2; + case 0x190d0: + page[(r16+32)>>>2] = r0; + pc=0x187f8; + run_18000(); return; + case 0x190dc: + r4 = r0 + r0; + r31=0x190e8; + pc=0x15c00; + run_15800(); return; + case 0x190e8: + pc=0x18ba8; + run_18800(); return; + case 0x190f0: + r17 = 6 << 16; + r17 = r17 + 16696; + pc=0x18b18; + run_18800(); return; + case 0x19100: + r5= page[(r28+-31376)>>>2]; + r2 = r0 + 1; + if(r5 == r2) { + pc=0x19120; + continue; + } + r4 = 6 << 16; + r4 = r4 + 1468; + r31=0x19120; + pc=0x21400; + run_21000(); return; + case 0x19120: + r5= page[(r28+-31368)>>>2]; + r2 = r0 + 1; + if(r5 == r2) { + pc=0x19140; + continue; + } + r4 = 6 << 16; + r4 = r4 + 1488; + r31=0x19140; + pc=0x21400; + run_21000(); return; + case 0x19140: + r5= page[(r28+-31372)>>>2]; + r4 = r16 + r0; + r6 = r0 + 32; + r31=0x19154; + pc=0x56fe0; + run_56800(); return; + case 0x19154: + r2= page[(r16+32)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ + pc=0x194e4; + continue; + } + r2 = 6 << 16; + r2 = r2 + 15440; + r3 = r0 + 16; + page[(r16+0)>>>2] = r2; + page[(r16+8)>>>2] = r0; + page[(r16+12)>>>2] = r3; + page[(r16+24)>>>2] = r0; + case 0x19180: + r2= page[(r2+24)>>>2]; + r4 = r16 + r0; + pc=r2; + r31=0x19190; + return; + case 0x19190: + r2 = r0 + r0; + pc=0x188d4; + run_18800(); return; + case 0x1919c: + r2 = r0 + 62; + if(r17 == r2) { + pc=0x195fc; + continue; + } + r2 = r0 + 60; + if(r17 == r2) { + pc=0x18b00; + run_18800(); return; + } + r17 = 6 << 16; + r17 = r17 + 16488; + pc=0x187e0; + run_18000(); return; + case 0x191c4: + r2 = r5 << 1; + r5 = r5 << 3; + page[(r28+-32748)>>>2] = r2; + r31=0x191d8; + pc=0x4fa00; + run_4f800(); return; + case 0x191d8: + page[(r28+-31364)>>>2] = r2; + if(r2 != r0) { + pc=0x186a4; + run_18000(); return; + } + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5244; + r31=0x191f8; + pc=0x1fc00; + run_1f800(); return; + case 0x191f8: + r3= page[(r28+-31376)>>>2]; + pc=0x186a8; + run_18000(); return; + case 0x19204: + r4 = r29 + 16; + r5 = r0 + 1; + r31=0x19214; + pc=0x26200; + run_26000(); return; + case 0x19214: + if(r2 == r0) { + pc=0x18d88; + run_18800(); return; + } + pc=0x190c8; + continue; + case 0x19224: + r2 = r5 << 1; + r5 = r5 << 3; + page[(r28+-32748)>>>2] = r2; + r31=0x19238; + pc=0x4fa00; + run_4f800(); return; + case 0x19238: + page[(r28+-31364)>>>2] = r2; + if(r2 != r0) { + pc=0x18d4c; + run_18800(); return; + } + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5244; + r31=0x19258; + pc=0x1fc00; + run_1f800(); return; + case 0x19258: + pc=0x18d4c; + run_18800(); return; + case 0x19260: + r2 = r5 << 1; + r5 = r5 << 3; + page[(r28+-32748)>>>2] = r2; + r31=0x19274; + pc=0x4fa00; + run_4f800(); return; + case 0x19274: + page[(r28+-31364)>>>2] = r2; + if(r2 != r0) { + pc=0x18a60; + run_18800(); return; + } + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5244; + r31=0x19294; + pc=0x1fc00; + run_1f800(); return; + case 0x19294: + r2= page[(r28+-31380)>>>2]; + pc=0x187f8; + run_18000(); return; + case 0x192a0: + r4 = r17 + 17104; + r5 = r0 + r0; + r31=0x192b0; + pc=0x1c400; + run_1c000(); return; + case 0x192b0: + r2= page[(r28+-32672)>>>2]; + r5= page[(r30+4)>>>2]; + r4= page[(r2+0)>>>2]; + r5 = r5 + -1; + r6 = r0 + r0; + r31=0x192cc; + pc=0x15e00; + run_15800(); return; + case 0x192cc: + pc=0x18ba8; + run_18800(); return; + case 0x192d4: + r17 = 6 << 16; + r17 = r17 + 16536; + pc=0x187d8; + run_18000(); return; + case 0x192e4: + r3 = r17 << 1; + r17 = r17 << 3; + r17 = r3 + r17; + r2 = r2 & 15; + r17 = r17 + r2; + r31=0x19300; + pc=0x23000; + run_23000(); return; + case 0x19300: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + case 0x19308: + r2 = r3 & 255; + r4 = r2 + -48; + r4 = (r4&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + if(r4 != r0) { + pc=0x192e4; + continue; + } + r2 = r0 + 46; + if(r3 == r2) { + pc=0x19868; + run_19800(); return; + } + r3= page[(r28+-31376)>>>2]; + r4= page[(r28+-31372)>>>2]; + r2 = r3 << 5; + r2 = r4 + r2; + r3 = r3 + 1; + r4 = r0 + 1; + page[(r28+-31376)>>>2] = r3; + page[(r2+0)>>>2] = r23; + page[(r2+8)>>>2] = r4; + page[(r2+12)>>>2] = r0; + page[(r2+16)>>>2] = r17; + page[(r2+24)>>>2] = r0; + pc=0x18ba8; + run_18800(); return; + case 0x19360: + r31=0x19368; + pc=0x23000; + run_23000(); return; + case 0x19368: + r4 = r0 + r0; + r31=0x19374; + pc=0x24c00; + run_24800(); return; + case 0x19374: + if(r2 != r0) { + pc=0x18c34; + run_18800(); return; + } + r2 = r0 + 34; + if(r18 == r2) { + pc=0x19780; + continue; + } + case 0x19388: + r30 = r17 + 17104; + r2= page[(r30+4)>>>2]; + if(r2 == r0) { + pc=0x1981c; + run_19800(); return; + } + r3 = r0 + 1; + if(r2 == r3) { + pc=0x193bc; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 1392; + r31=0x193bc; + pc=0x1fc00; + run_1f800(); return; + case 0x193bc: + r2= page[(r17+17104)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r31=0x193d0; + pc=0x1d600; + run_1d000(); return; + case 0x193d0: + r4= page[(r28+-31376)>>>2]; + r5= page[(r28+-31372)>>>2]; + r3 = r4 << 5; + r3 = r5 + r3; + r4 = r4 + 1; + r5 = r0 + 1; + page[(r28+-31376)>>>2] = r4; + page[(r3+0)>>>2] = r23; + page[(r3+8)>>>2] = r5; + page[(r3+12)>>>2] = r0; + page[(r3+16)>>>2] = r2; + page[(r3+24)>>>2] = r0; + pc=0x18ba8; + run_18800(); return; + case 0x19408: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r2 & 255; + r4 = r3 + -48; + r4 = (r4&0xffffffffL) < (8&0xffffffffL) ? 1 : 0; + if(r4 == r0) { + pc=0x19078; + continue; + } + r2 = r3 + r0; + r18 = r0 + r0; + r17 = r0 + r0; + case 0x19430: + r2 = r2 & 7; + r17 = r17 << 3; + r17 = r17 + r2; + r31=0x19444; + pc=0x23000; + run_23000(); return; + case 0x19444: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + r18 = r18 + 1; + r3 = r2 + -48; + r3 = (r3&0xffffffffL) < (8&0xffffffffL) ? 1 : 0; + if(r3 != r0) { + pc=0x19430; + continue; + } + r2 = 6 << 16; + r2= page[(r2+31376)>>>2]; + if(r2 == r0) { + pc=0x19838; + run_19800(); return; + } + r2 = r18 < 4 ? 1 : 0; + if(r2 != r0) { + pc=0x19838; + run_19800(); return; + } + r18 = r18 < 7 ? 1 : 0; + if(r18 != r0) { + pc=0x1997c; + run_19800(); return; + } + r2 = 1 << 16; + r2 = r17 < r2 ? 1 : 0; + r2 = r2 << 2; + case 0x19494: + r4= page[(r28+-31376)>>>2]; + r5= page[(r28+-31372)>>>2]; + r3 = r4 << 5; + r3 = r5 + r3; + r4 = r4 + 1; + r5 = r0 + 1; + page[(r28+-31376)>>>2] = r4; + page[(r3+0)>>>2] = r23; + page[(r3+8)>>>2] = r5; + page[(r3+12)>>>2] = r2; + page[(r3+16)>>>2] = r17; + page[(r3+24)>>>2] = r0; + pc=0x18ba8; + run_18800(); return; + case 0x194cc: + r31=0x194d4; + pc=0x41c00; + run_41800(); return; + case 0x194d4: + if(r2 == r0) { + pc=0x18d98; + run_18800(); return; + } + pc=0x190c8; + continue; + case 0x194e4: + r2= page[(r16+0)>>>2]; + r4 = r16 + r0; + r2= page[(r2+4)>>>2]; + pc=r2; + r31=0x194fc; + return; + case 0x194fc: + if(r2 != r0) { pc=0x1951c; continue; } - r18 = 7 << 16; - r2 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = r0 + 125; - r18 = r18 + -7708; - case 0x194a4: - r3 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = r3 + r2; - r5 = r29 + 16; - r6 = r0 + 1; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x194c4; - pc=0x2f600; - run_2f600(); return; - case 0x194c4: - r3 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - r3 = readPages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff]; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x194e8; - pc=0x1a400; - run_1a400(); return; - case 0x194e8: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - if(r5 == r17) { - /* Next insn is delay slot */ - pc=0x19504; - continue; - } - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x19504; - pc=0x1b800; - run_1b800(); return; - case 0x19504: - r2 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r3 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r3 = r2 < r3 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x194a4; - continue; - } + r2 = 6 << 16; + r2 = r2 + 31320; + r3= page[(r2+4)>>>2]; + r3 = r3 + 1; + page[(r2+4)>>>2] = r3; case 0x1951c: - r31 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r18 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - r17 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r16 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - writePages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff] = r19; - r19 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r29 = r29 + 88; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x19540: - r18 = 7 << 16; - r17 = r0 + 125; - r18 = r18 + -7708; - case 0x1954c: - r3 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - r3 = readPages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff]; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x19570; - pc=0x1a400; - run_1a400(); return; - case 0x19570: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - if(r5 == r17) { - /* Next insn is delay slot */ - pc=0x1958c; - continue; - } - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x1958c; - pc=0x1b800; - run_1b800(); return; - case 0x1958c: - r3 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r2 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = r3 + r2; - r5 = r29 + 16; - r6 = r0 + 1; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x195b0; - pc=0x2f600; - run_2f600(); return; - case 0x195b0: - r3 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r2 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - r2 = r3 + r2; - r3 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x1954c; - continue; - } - r31 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r18 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - r17 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r16 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - writePages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff] = r19; - r19 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r29 = r29 + 88; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x19600: - pc=0x19600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_19600() throws ExecutionException { /* 0x19600 - 0x19800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x19600: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r29 = r29 + -40; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r2; - r17 = r5 << 24; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r17 = r17 >> 24; - r16 = r4 + r0; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = r0; - if(r2 == r17) { - /* Next insn is delay slot */ - pc=0x196b8; - continue; - } - /* Next insn is delay slot */ - r31=0x1964c; - pc=0x1f400; - run_1f400(); return; - case 0x1964c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x196b8; - continue; - } - r18 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = 7 << 16; - r19 = readPages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff]; - r5 = r5 + -7684; - r4 = r19 + r0; - /* Next insn is delay slot */ - r31=0x19670; - pc=0x42c00; - run_42c00(); return; - case 0x19670: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x196d8; - continue; - } - case 0x19678: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 32; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x19704; - continue; - } - case 0x19688: - r4 = r17 + r0; - writePages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - r31=0x19698; - pc=0x1d800; - run_1d800(); return; - case 0x19698: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; + r2= page[(r16+0)>>>2]; + pc=0x19180; + continue; + case 0x19528: + r4 = r29 + 16; r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x196a8; - pc=0x17c00; - run_17c00(); return; - case 0x196a8: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x196b4; - pc=0x17a00; - run_17a00(); return; - case 0x196b4: - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - case 0x196b8: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x196d8: - r5 = 7 << 16; - r4 = r19 + r0; - r5 = r5 + -7676; - /* Next insn is delay slot */ - r31=0x196ec; - pc=0x42c00; - run_42c00(); return; - case 0x196ec: + r31=0x19538; + pc=0x26200; + run_26000(); return; + case 0x19538: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x19718; + pc=0x190c8; continue; } - r2 = r0 + 1; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x19678; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 63; + if(r3 == r2) { + pc=0x196f4; + continue; + } + case 0x19550: + r30 = 6 << 16; + r5= page[(r30+17108)>>>2]; + r4= page[(r29+16)>>>2]; + r5 = r5 + -1; + r6 = r17 + r0; + r31=0x1956c; + pc=0x15e00; + run_15800(); return; + case 0x1956c: + pc=0x18ba8; + run_18800(); return; + case 0x19574: + r17 = r5 << 1; + r4 = r0 + r0; + r5 = r5 << 3; + page[(r28+-32748)>>>2] = r17; + r31=0x1958c; + pc=0x4fa00; + run_4f800(); return; + case 0x1958c: + page[(r28+-31364)>>>2] = r2; + if(r2 == r0) { + pc=0x19844; + run_19800(); return; + } + r5 = r17 + r0; + r4 = r2 + r0; + pc=0x18674; + run_18000(); return; + case 0x195a8: + r5= page[(r28+-32752)>>>2]; + r4 = r0 + r0; + r2 = r5 << 1; + r5 = r5 << 6; + page[(r28+-32752)>>>2] = r2; + r31=0x195c4; + pc=0x4fa00; + run_4f800(); return; + case 0x195c4: + page[(r28+-31372)>>>2] = r2; + if(r2 != r0) { + pc=0x18664; + run_18000(); return; + } + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5244; + r31=0x195e4; + pc=0x1fc00; + run_1f800(); return; + case 0x195e4: + pc=0x18664; + run_18000(); return; + case 0x195ec: + r17 = 6 << 16; + r17 = r17 + 16424; + pc=0x187d8; + run_18000(); return; + case 0x195fc: + r31=0x19604; + pc=0x23000; + run_23000(); return; + case 0x19604: + if(r2 == r17) { + pc=0x196a0; + continue; + } + r17 = 6 << 16; + r17 = r17 + 16408; + pc=0x187e0; + run_18000(); return; + case 0x1961c: + r17 = 6 << 16; + r31=0x19628; + pc=0x23000; + run_23000(); return; + case 0x19628: + r17 = r17 + 16568; + pc=0x187e0; + run_18000(); return; + case 0x19634: + r31=0x1963c; + pc=0x26e00; + run_26800(); return; + case 0x1963c: + r17 = 6 << 16; + r4 = 6 << 16; + r4 = r4 + 15780; + r5 = r29 + 16; + r6 = r17 + 17104; + r31=0x19658; + pc=0x42400; + run_42000(); return; + case 0x19658: + if(r2 == r0) { + pc=0x196d0; + continue; + } + r17= page[(r29+16)>>>2]; + pc=0x187e0; + run_18000(); return; + case 0x1966c: + r31=0x19674; + pc=0x23000; + run_23000(); return; + case 0x19674: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x18e84; + run_18800(); return; + case 0x19680: + r31=0x19688; + pc=0x23000; + run_23000(); return; + case 0x19688: + pc=0x18d08; + run_18800(); return; + case 0x19690: + r31=0x19698; + pc=0x23000; + run_23000(); return; + case 0x19698: + pc=0x18ba8; + run_18800(); return; + case 0x196a0: + r17 = 6 << 16; + r17 = r17 + 16392; + pc=0x187d8; + run_18000(); return; + case 0x196b0: + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + 16728; + r31=0x196c4; + pc=0x18000; + run_18000(); return; + case 0x196c4: + r2= page[(r28+-31380)>>>2]; + pc=0x187f8; + run_18000(); return; + case 0x196d0: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 1448; + r31=0x196e4; + pc=0x1fc00; + run_1f800(); return; + case 0x196e4: + r2 = r0 + 3; + page[(r28+-31380)>>>2] = r2; + pc=0x188a4; + run_18800(); return; + case 0x196f4: + r31=0x196fc; + pc=0x41c00; + run_41800(); return; + case 0x196fc: + if(r2 == r0) { + pc=0x19550; + continue; + } + r2 = r0 + 3; + page[(r28+-31380)>>>2] = r2; + pc=0x190d0; continue; - case 0x19704: - /* Next insn is delay slot */ - r31=0x1970c; - pc=0x1c000; - run_1c000(); return; - case 0x1970c: - r18 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x19688; - continue; - case 0x19718: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r4 = 7 << 16; - r4 = r4 + -6980; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=0x1b000; - run_1b000(); return; + case 0x19714: + r31=0x1971c; + pc=0x26600; + run_26000(); return; + case 0x1971c: + r3 = r0 + 3; + r17 = 6 << 16; + if(r2 == r3) { + pc=0x198dc; + run_19800(); return; + } + case 0x1972c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 40; + if(r2 == r3) { + pc=0x1998c; + run_19800(); return; + } + r3 = r0 + 63; + if(r2 == r3) { + pc=0x1996c; + run_19800(); return; + } + case 0x19748: + r30 = r17 + 17104; + r5= page[(r30+4)>>>2]; + r4 = r0 + r0; + r5 = r5 + -1; + r6 = r0 + r0; + r31=0x19764; + pc=0x15e00; + run_15800(); return; + case 0x19764: + pc=0x18ba8; + run_18800(); return; + case 0x1976c: + r4 = r17 + r0; + r31=0x19778; + pc=0x15c00; + run_15800(); return; + case 0x19778: + pc=0x18ba8; + run_18800(); return; + case 0x19780: + r2 = 6 << 16; + r2= page[(r2+31392)>>>2]; + r2 = (r2&0xffffffffL) < (6&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x19388; + continue; + } + r2= page[(r28+-31376)>>>2]; + r19= page[(r28+-31372)>>>2]; + r2 = r2 << 5; + r30 = r17 + 17104; + r18= page[(r30+4)>>>2]; + r19 = r19 + r2; + r2 = 6 << 16; + r2 = r2 + 15360; + r4 = r18 + 12; + page[(r19+0)>>>2] = r2; + r31=0x197c8; + pc=0x20200; + run_20000(); return; + case 0x197c8: + page[(r19+8)>>>2] = r2; + r2 = r2 + r18; + addr=r2+8; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2= page[(r19+8)>>>2]; + r4 = r0 + 1; + page[(r2+0)>>>2] = r18; + r18= page[(r28+-31376)>>>2]; + page[(r2+4)>>>2] = r4; + r4= page[(r28+-31372)>>>2]; + r2 = r18 << 5; + r2 = r4 + r2; + r4= page[(r2+8)>>>2]; + r5= page[(r17+17104)>>>2]; + r6= page[(r30+4)>>>2]; case 0x19800: pc=0x19800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_19800() throws ExecutionException { /* 0x19800 - 0x19a00 */ + private final void run_19800() throws ExecutionException { /* 0x19800 - 0x1a000 */ int addr, tmp; for(;;) { switch(pc) { case 0x19800: - r29 = r29 + -88; - writePages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff] = r20; - r20 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = r29 + 40; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r16; - r5 = r20 + r0; - r16 = r4 + r0; - r6 = r0 + 20; - r4 = r3 + r0; - writePages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff] = r19; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r18; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = r17; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x1983c; - pc=0x48fdc; - run_48e00(); return; - case 0x1983c: - r3 = r2 + r0; - r19 = 7 << 16; - r2 = r0 + 1; - r18 = 7 << 16; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r2; - writePages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff] = r3; - r2 = r3 + r0; - r19 = r19 + -6980; - r17 = r0 + 125; - r18 = r18 + -7708; - case 0x19864: - r3 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; + r4 = r4 + 8; + r18 = r18 + 1; + r31=0x19810; + pc=0x56fe0; + run_56800(); return; + case 0x19810: + page[(r28+-31376)>>>2] = r18; + pc=0x18ba8; + run_18800(); return; + case 0x1981c: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5300; + r31=0x19830; + pc=0x1fc00; + run_1f800(); return; + case 0x19830: + pc=0x18c34; + run_18800(); return; + case 0x19838: + r2 = r0 + r0; + pc=0x19494; + run_19000(); return; + case 0x19844: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5244; + r31=0x19858; + pc=0x1fc00; + run_1f800(); return; + case 0x19858: + r4= page[(r28+-31364)>>>2]; + r5= page[(r28+-32748)>>>2]; + pc=0x18674; + run_18000(); return; + case 0x19868: + r31=0x19870; + pc=0x23000; + run_23000(); return; + case 0x19870: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + f0 = r17; + r3 = r2 + -48; + r3 = (r3&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + { long l = Double.doubleToLongBits(((double)f0)); f29 = (int)(l >>> 32); f28 = (int)l; } if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x198cc; + pc=0x19a04; continue; } - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r3; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - r31=0x19888; - pc=0x1c000; - run_1c000(); return; - case 0x19888: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x19894; - pc=0x16000; - run_16000(); return; - case 0x19894: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + f20= page[(r28+-32716)>>>2]; + f22 = f26; + f23 = f27; + f21= page[(r28+-32720)>>>2]; + case 0x1989c: + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f29&0xffffffffL) << 32) | (f28&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f29 = (int)(l >>> 32); f28 = (int)l; } + r2 = r2 & 15; + f2 = r2; + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f23 = (int)(l >>> 32); f22 = (int)l; } + { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f29&0xffffffffL) << 32) | (f28&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f29 = (int)(l >>> 32); f28 = (int)l; } + r31=0x198bc; + pc=0x23000; + run_23000(); return; + case 0x198bc: + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x199d8; + r3 = r2 + -48; + r3 = (r3&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + if(r3 != r0) { + pc=0x1989c; continue; } - case 0x198a4: - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x199a8; - continue; - } - r2 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r2 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - case 0x198c0: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1997c; - continue; - } - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - case 0x198cc: - r3 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - r3 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x198ec; - pc=0x1a400; - run_1a400(); return; - case 0x198ec: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + pc=0x19004; + run_19000(); return; + case 0x198dc: + r2= page[(r17+17104)>>>2]; + r3 = r0 + 110; + addr=r2+0; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - if(r5 == r17) { - /* Next insn is delay slot */ - pc=0x19908; - continue; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r4 = tmp; + r4 = r4 | 32; + if(r4 != r3) { + pc=0x1972c; + run_19000(); return; } - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x19908; - pc=0x1b800; - run_1b800(); return; - case 0x19908: - r2 = readPages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x19970; - continue; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r2; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - r31=0x19930; - pc=0x1c000; - run_1c000(); return; - case 0x19930: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x1993c; - pc=0x16000; - run_16000(); return; - case 0x1993c: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + addr=r2+1; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r4 = tmp; + r3 = r0 + 111; + r4 = r4 | 32; + if(r4 != r3) { + pc=0x1972c; + run_19000(); return; + } + addr=r2+2; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 116; + r3 = r3 | 32; + if(r3 != r2) { + pc=0x1972c; + run_19000(); return; + } + r2= page[(r28+-31368)>>>2]; + r4= page[(r28+-31364)>>>2]; + r3 = r2 << 2; + r3 = r4 + r3; + r4 = 6 << 16; + r4 = r4 + 16248; + case 0x19938: + page[(r3+0)>>>2] = r4; + r3= page[(r28+-32748)>>>2]; + r2 = r2 + 1; + page[(r28+-31368)>>>2] = r2; + r2 = r2 < r3 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x199ec; - continue; + pc=0x18b4c; + run_18800(); return; } - case 0x1994c: - r2 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x199bc; - continue; - } - r2 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r2 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1997c; - continue; - } - case 0x19970: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x19864; - continue; + r31=0x1995c; + pc=0x15a00; + run_15800(); return; + case 0x1995c: + r2= page[(r28+-31380)>>>2]; + page[(r16+32)>>>2] = r0; + pc=0x187f8; + run_18000(); return; + case 0x1996c: + r31=0x19974; + pc=0x41c00; + run_41800(); return; + case 0x19974: + pc=0x19748; + run_19000(); return; case 0x1997c: - r31 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r19 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - r18 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r17 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r16 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - writePages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff] = r20; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r20 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r29 = r29 + 88; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x199a8: - r2 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x198c0; - continue; - case 0x199bc: - r2 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x19970; + r2 = r17 < 256 ? 1 : 0; + r2 = r2 << 1; + pc=0x19494; + run_19000(); return; + case 0x1998c: + r18 = 6 << 16; + r4 = r18 + 16000; + r5 = r17 + 17104; + r31=0x199a0; + pc=0x1cc00; + run_1c800(); return; + case 0x199a0: + r4 = 6 << 16; + r4 = r4 + 15480; + r5 = r29 + 16; + r6 = r18 + 16000; + r31=0x199b8; + pc=0x42400; + run_42000(); return; + case 0x199b8: + if(r2 == r0) { + pc=0x199dc; continue; } - /* Next insn is delay slot */ - pc=0x1997c; + r2= page[(r28+-31368)>>>2]; + r4= page[(r28+-31364)>>>2]; + r3 = r2 << 2; + r3 = r4 + r3; + r4= page[(r29+16)>>>2]; + pc=0x19938; continue; - case 0x199d8: - r4 = r19 + r0; - /* Next insn is delay slot */ - r31=0x199e4; - pc=0x1b200; - run_1b200(); return; - case 0x199e4: - /* Next insn is delay slot */ - pc=0x198a4; - continue; - case 0x199ec: - r4 = r19 + r0; - /* Next insn is delay slot */ - r31=0x199f8; - pc=0x1b200; - run_1b200(); return; - case 0x199f8: - /* Next insn is delay slot */ - pc=0x1994c; - continue; - case 0x19a00: - pc=0x19a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_19a00() throws ExecutionException { /* 0x19a00 - 0x19c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x19a00: - r29 = r29 + -24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; + case 0x199dc: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 1428; + r31=0x199f0; + pc=0x1fc00; + run_1f800(); return; + case 0x199f0: + r2 = r0 + 3; + page[(r28+-31380)>>>2] = r2; + page[(r16+32)>>>2] = r0; + pc=0x187f8; + run_18000(); return; + case 0x19a04: + f22 = f24; + f23 = f25; + pc=0x19004; + run_19000(); return; + case 0x19c00: + r29 = r29 + -48; + r2= page[(r5+8)>>>2]; + page[(r29+28)>>>2] = r18; + page[(r29+20)>>>2] = r16; + page[(r29+44)>>>2] = r31; + page[(r29+40)>>>2] = r21; + page[(r29+36)>>>2] = r20; + page[(r29+32)>>>2] = r19; + page[(r29+24)>>>2] = r17; + r17= page[(r4+8)>>>2]; + r2 = r2 + -31; + r3 = (r2&0xffffffffL) < (14&0xffffffffL) ? 1 : 0; r16 = r4 + r0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x19a58; + r18 = r6 + r0; + r19= page[(r17+8)>>>2]; + if(r3 == r0) { + pc=0x19c78; continue; } - /* Next insn is delay slot */ - r31=0x19a20; - pc=0x1d400; - run_1d400(); return; - case 0x19a20: - /* Next insn is delay slot */ - r31=0x19a28; - pc=0x1c000; - run_1c000(); return; - case 0x19a28: - r3 = r0 + 32; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x19a94; - continue; - } - case 0x19a34: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x19aac; - continue; - } - case 0x19a44: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 3376; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; return; - case 0x19a58: - /* Next insn is delay slot */ - r31=0x19a60; - pc=0x1a400; - run_1a400(); return; - case 0x19a60: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 125; + case 0x19c64: + r2 = 6 << 16; + r3= page[(r6+0)>>>2]; + r2 = r2 + 15400; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x19a20; + pc=0x19f98; continue; } - r4 = 7 << 16; - r4 = r4 + -6912; - /* Next insn is delay slot */ - r31=0x19a80; - pc=0x1b200; - run_1b200(); return; - case 0x19a80: - /* Next insn is delay slot */ - r31=0x19a88; - pc=0x1c000; - run_1c000(); return; - case 0x19a88: - r3 = r0 + 32; + case 0x19c78: + r31= page[(r29+44)>>>2]; + r21= page[(r29+40)>>>2]; + r20= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r17= page[(r29+24)>>>2]; + r4 = r16 + r0; + r6 = r18 + r0; + r16= page[(r29+20)>>>2]; + r18= page[(r29+28)>>>2]; + r29 = r29 + 48; + pc=0x14a00; + run_14800(); return; + case 0x19ca8: + r2 = 6 << 16; + r3= page[(r6+0)>>>2]; + r2 = r2 + 15440; + if(r3 != r2) { + pc=0x19c78; + continue; + } + r5= page[(r6+8)>>>2]; + if(r5 == r0) { + pc=0x1a124; + run_1a000(); return; + } + r2 = r0 + 2; + if(r5 == r2) { + pc=0x19fbc; + continue; + } + case 0x19cd8: + r2 = r0 + 1; + if(r5 == r2) { + pc=0x19cf4; + continue; + } + r4 = 6 << 16; + r4 = r4 + 1168; + r31=0x19cf4; + pc=0x21400; + run_21000(); return; + case 0x19cf4: + r2= page[(r18+16)>>>2]; + if(r2 < 0) { + pc=0x1a004; + run_1a000(); return; + } + case 0x19d04: + r19 = r2 < r19 ? 1 : 0; + if(r19 == r0) { + pc=0x1a010; + run_1a000(); return; + } + r3= page[(r16+8)>>>2]; + r5= page[(r3+0)>>>2]; + if(r2 == r0) { + pc=0x19d34; + continue; + } + case 0x19d24: + r2 = r2 + -1; + r5= page[(r5+0)>>>2]; + if(r2 != r0) { + pc=0x19d24; + continue; + } + case 0x19d34: + r2= page[(r3+12)>>>2]; + r4 = r16 + r0; + r2 = r2 + -1; + page[(r3+12)>>>2] = r2; + r5 = r5 + 8; + r6 = r0 + 32; + r31=0x19d54; + pc=0x56fe0; + run_56800(); return; + case 0x19d54: + pc=0x19f70; + continue; + case 0x19d5c: + r3 = 6 << 16; + r2= page[(r6+0)>>>2]; + r3 = r3 + 15400; if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x19a34; + pc=0x19c78; continue; } - case 0x19a94: - /* Next insn is delay slot */ - r31=0x19a9c; - pc=0x1c000; - run_1c000(); return; - case 0x19a9c: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x19a44; + page[(r4+0)>>>2] = r2; + r4 = r0 + 40; + r31=0x19d80; + pc=0x20200; + run_20000(); return; + case 0x19d80: + page[(r16+8)>>>2] = r2; + page[(r2+0)>>>2] = r2; + r2= page[(r16+8)>>>2]; + r3 = r0 + 1; + page[(r2+4)>>>2] = r2; + r2= page[(r16+8)>>>2]; + page[(r2+8)>>>2] = r0; + r2= page[(r16+8)>>>2]; + page[(r2+12)>>>2] = r3; + r20= page[(r16+8)>>>2]; + if(r17 == r20) { + pc=0x1a1e4; + run_1a000(); return; + } + case 0x19dbc: + r21= page[(r17+0)>>>2]; + if(r17 == r21) { + pc=0x19e24; continue; } - case 0x19aac: - /* Next insn is delay slot */ - r31=0x19ab4; - pc=0x1f400; - run_1f400(); return; - case 0x19ab4: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x19b24; + case 0x19dcc: + r4 = r0 + 40; + r31=0x19dd8; + pc=0x20200; + run_20000(); return; + case 0x19dd8: + r4 = r2 + 8; + r5 = r21 + 8; + r6 = r0 + 32; + r19 = r2 + r0; + r31=0x19df0; + pc=0x56fe0; + run_56800(); return; + case 0x19df0: + r2= page[(r20+4)>>>2]; + page[(r19+0)>>>2] = r20; + page[(r19+4)>>>2] = r2; + page[(r20+4)>>>2] = r19; + r2= page[(r19+4)>>>2]; + page[(r2+0)>>>2] = r19; + r2= page[(r20+8)>>>2]; + r21= page[(r21+0)>>>2]; + r2 = r2 + 1; + page[(r20+8)>>>2] = r2; + if(r17 != r21) { + pc=0x19dcc; continue; } - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r5 = r5 + -7668; - /* Next insn is delay slot */ - r31=0x19ad4; - pc=0x42c00; - run_42c00(); return; - case 0x19ad4: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x19b70; + case 0x19e24: + r2= page[(r17+12)>>>2]; + r2 = r2 + -1; + page[(r17+12)>>>2] = r2; + r19= page[(r18+8)>>>2]; + r17= page[(r16+8)>>>2]; + if(r19 == r17) { + pc=0x1a1c8; + run_1a000(); return; + } + case 0x19e48: + r18= page[(r19+0)>>>2]; + if(r19 == r18) { + pc=0x19eb0; continue; } - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = r0 + 32; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x19b88; - continue; - } - case 0x19aec: - r3 = r0 + 123; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x19b08; - continue; - } - r4 = 7 << 16; - r4 = r4 + -6860; - /* Next insn is delay slot */ - r31=0x19b08; - pc=0x1b200; - run_1b200(); return; - case 0x19b08: - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x19b38; - continue; - } - r4 = r0 + r0; - /* Next insn is delay slot */ - r31=0x19b1c; - pc=0x1d400; - run_1d400(); return; - case 0x19b1c: - /* Next insn is delay slot */ - r31=0x19b24; - pc=0x1c000; - run_1c000(); return; - case 0x19b24: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=0x1ce00; - run_1ce00(); return; - case 0x19b38: - /* Next insn is delay slot */ - r31=0x19b40; - pc=0x1a400; - run_1a400(); return; - case 0x19b40: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 125; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x19b1c; - continue; - } - r4 = 7 << 16; - r4 = r4 + -6912; - /* Next insn is delay slot */ - r31=0x19b60; - pc=0x1b200; - run_1b200(); return; - case 0x19b60: - /* Next insn is delay slot */ - r31=0x19b68; - pc=0x1c000; - run_1c000(); return; - case 0x19b68: - /* Next insn is delay slot */ - pc=0x19b24; - continue; - case 0x19b70: - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x19b80; - pc=0x1b000; - run_1b000(); return; - case 0x19b80: - /* Next insn is delay slot */ - pc=0x19b24; - continue; - case 0x19b88: - /* Next insn is delay slot */ - r31=0x19b90; - pc=0x1c000; - run_1c000(); return; - case 0x19b90: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x19aec; - continue; - case 0x19c00: - pc=0x19c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_19c00() throws ExecutionException { /* 0x19c00 - 0x19e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x19c00: - r2 = readPages[(r28+-30736)>>>12][((r28+-30736)>>>2)&0x3ff]; - r29 = r29 + -32; - r2 = r2 < 3 ? 1 : 0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r16 = r4 + r0; - r17 = r5 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x19c80; - continue; - } - case 0x19c28: - r4 = r17 + r0; - r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x19c38; - pc=0x1be00; - run_1be00(); return; - case 0x19c38: - /* Next insn is delay slot */ - r31=0x19c40; - pc=0x1a400; - run_1a400(); return; - case 0x19c40: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 13; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x19c60; - continue; - } - r4 = 7 << 16; - r4 = r4 + -7632; - /* Next insn is delay slot */ - r31=0x19c60; - pc=0x1b000; - run_1b000(); return; - case 0x19c60: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r4 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x39200; - run_39200(); return; - case 0x19c80: - r4 = 7 << 16; - r4 = r4 + -7660; - /* Next insn is delay slot */ - r31=0x19c90; - pc=0x3fc00; - run_3fc00(); return; - case 0x19c90: - /* Next insn is delay slot */ - pc=0x19c28; - continue; - case 0x19e00: - pc=0x19e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_19e00() throws ExecutionException { /* 0x19e00 - 0x1a000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x19e00: - r2 = readPages[(r28+-30748)>>>12][((r28+-30748)>>>2)&0x3ff]; - r29 = r29 + -40; - r6 = r5 + r0; - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x19e64; - continue; - } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r4; - r4 = readPages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r5 = r5 + -7568; - /* Next insn is delay slot */ - r31=0x19e54; - pc=0x3bc00; - run_3bc00(); return; - case 0x19e54: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; + case 0x19e58: + r4 = r0 + 40; + r31=0x19e64; + pc=0x20200; + run_20000(); return; case 0x19e64: - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r8 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r7 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r5; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r4; - r4 = readPages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r5 = r5 + -7596; - r6 = r8 + r0; - /* Next insn is delay slot */ - r31=0x19ea0; - pc=0x3bc00; - run_3bc00(); return; - case 0x19ea0: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ + r4 = r2 + 8; + r5 = r18 + 8; + r6 = r0 + 32; + r16 = r2 + r0; + r31=0x19e7c; + pc=0x56fe0; + run_56800(); return; + case 0x19e7c: + r2= page[(r17+4)>>>2]; + page[(r16+0)>>>2] = r17; + page[(r16+4)>>>2] = r2; + page[(r17+4)>>>2] = r16; + r2= page[(r16+4)>>>2]; + page[(r2+0)>>>2] = r16; + r2= page[(r17+8)>>>2]; + r18= page[(r18+0)>>>2]; + r2 = r2 + 1; + page[(r17+8)>>>2] = r2; + if(r19 != r18) { + pc=0x19e58; + continue; + } + case 0x19eb0: + r2= page[(r19+12)>>>2]; + r2 = r2 + -1; + page[(r19+12)>>>2] = r2; + pc=0x19f70; + continue; + case 0x19ec8: + r2 = 6 << 16; + r3= page[(r6+0)>>>2]; + r2 = r2 + 15400; + if(r3 != r2) { + pc=0x19c78; + continue; + } + r2= page[(r6+8)>>>2]; + r3= page[(r2+8)>>>2]; + if(r19 == r3) { + pc=0x1a0b4; + run_1a000(); return; + } + case 0x19ef4: + r2 = r0 + 1; + case 0x19ef8: + r3 = 6 << 16; + r3 = r3 + 15440; + page[(r16+0)>>>2] = r3; + r3 = r0 + 1; + page[(r16+8)>>>2] = r3; + page[(r16+12)>>>2] = r0; + page[(r16+16)>>>2] = r2; + page[(r16+24)>>>2] = r0; + pc=0x19f70; + continue; + case 0x19f20: + r4 = r0 + 40; + r31=0x19f2c; + pc=0x20200; + run_20000(); return; + case 0x19f2c: + r4 = r2 + 8; + r5 = r18 + r0; + r6 = r0 + 32; + r16 = r2 + r0; + r31=0x19f44; + pc=0x56fe0; + run_56800(); return; + case 0x19f44: + r2= page[(r17+4)>>>2]; + page[(r16+0)>>>2] = r17; + page[(r16+4)>>>2] = r2; + page[(r17+4)>>>2] = r16; + r2= page[(r16+4)>>>2]; + page[(r2+0)>>>2] = r16; + r2= page[(r17+8)>>>2]; + r2 = r2 + 1; + page[(r17+8)>>>2] = r2; + case 0x19f70: + r31= page[(r29+44)>>>2]; + r21= page[(r29+40)>>>2]; + r20= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 48; pc=r31; return; + case 0x19f98: + r2= page[(r6+8)>>>2]; + r3= page[(r2+8)>>>2]; + if(r19 == r3) { + pc=0x1a044; + run_1a000(); return; + } + case 0x19fb0: + r2 = r0 + r0; + pc=0x19ef8; + continue; + case 0x19fbc: + f0= page[(r6+20)>>>2]; + r2 = r0 + 1; + f1= page[(r6+16)>>>2]; + page[(r6+8)>>>2] = r2; + r4 = fcsr; + r4 = fcsr; + r1 = r4 | 3; + r1 = r1 ^ 2; + fcsr = r1; + switch(fcsr & 3) { + case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest + case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero + case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity + case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity + } + fcsr = r4; + page[(r18+16)>>>2] = f2; + r5 = r0 + 1; + pc=0x19cd8; + continue; case 0x1a000: pc=0x1a000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_1a000() throws ExecutionException { /* 0x1a000 - 0x1a200 */ + private final void run_1a000() throws ExecutionException { /* 0x1a000 - 0x1a800 */ int addr, tmp; for(;;) { switch(pc) { case 0x1a000: - r29 = r29 + -24; - r4 = r0 + 1; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x1a014; - pc=0x11800; - run_11800(); return; - case 0x1a014: - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x1a020; - pc=0x38e00; - run_38e00(); return; - case 0x1a020: - case 0x1a200: - pc=0x1a200; + case 0x1a004: + r2 = r2 + r19; + if(r2 >= 0) { + pc=0x19d04; + run_19800(); return; + } + case 0x1a010: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 1188; + case 0x1a01c: + r31= page[(r29+44)>>>2]; + r21= page[(r29+40)>>>2]; + r20= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 48; + pc=0x1fc00; + run_1f800(); return; + case 0x1a044: + r20= page[(r17+0)>>>2]; + r19= page[(r2+0)>>>2]; + if(r17 == r20) { + pc=0x1a1a0; + continue; + } + r17 = 6 << 16; + r17 = r17 + 784; + case 0x1a05c: + if(r19 == r2) { + pc=0x1a150; + continue; + } + case 0x1a064: + r2= page[(r20+8)>>>2]; + r3= page[(r19+8)>>>2]; + if(r2 != r3) { + pc=0x19fb0; + run_19800(); return; + } + r2= page[(r2+8)>>>2]; + r4 = r20 + 8; + r5 = r19 + 8; + pc=r2; + r31=0x1a08c; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1a200() throws ExecutionException { /* 0x1a200 - 0x1a400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1a200: - r2 = readPages[(r28+-30748)>>>12][((r28+-30748)>>>2)&0x3ff]; - r29 = r29 + -40; - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; + case 0x1a08c: + if(r2 != r0) { + pc=0x19fb0; + run_19800(); return; + } + r20= page[(r20+0)>>>2]; + r2= page[(r16+8)>>>2]; + r19= page[(r19+0)>>>2]; + if(r20 == r2) { + pc=0x1a198; + continue; + } + r2= page[(r18+8)>>>2]; + pc=0x1a05c; + continue; + case 0x1a0b4: + r20= page[(r17+0)>>>2]; + r19= page[(r2+0)>>>2]; + if(r17 == r20) { + pc=0x1a170; + continue; + } + r17 = 6 << 16; + r17 = r17 + 784; + case 0x1a0cc: + if(r2 == r19) { + pc=0x1a138; + continue; + } + case 0x1a0d4: + r2= page[(r20+8)>>>2]; + r3= page[(r19+8)>>>2]; + if(r2 != r3) { + pc=0x19ef4; + run_19800(); return; + } + r2= page[(r2+8)>>>2]; + r4 = r20 + 8; + r5 = r19 + 8; + pc=r2; + r31=0x1a0fc; + return; + case 0x1a0fc: + if(r2 != r0) { + pc=0x19ef4; + run_19800(); return; + } + r20= page[(r20+0)>>>2]; + r2= page[(r16+8)>>>2]; + r19= page[(r19+0)>>>2]; + if(r20 == r2) { + pc=0x1a168; + continue; + } + r2= page[(r18+8)>>>2]; + pc=0x1a0cc; + continue; + case 0x1a124: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 1148; + pc=0x1a01c; + continue; + case 0x1a138: + r4 = r17 + r0; + r5 = r0 + r0; + r31=0x1a148; + pc=0x21400; + run_21000(); return; + case 0x1a148: + pc=0x1a0d4; + continue; + case 0x1a150: + r4 = r17 + r0; + r5 = r0 + r0; + r31=0x1a160; + pc=0x21400; + run_21000(); return; + case 0x1a160: + pc=0x1a064; + continue; + case 0x1a168: + r2= page[(r18+8)>>>2]; + case 0x1a170: + if(r19 == r2) { + pc=0x19fb0; + run_19800(); return; + } + r4 = 6 << 16; + r4 = r4 + 784; + r5 = r0 + 1; + r31=0x1a18c; + pc=0x21400; + run_21000(); return; + case 0x1a18c: + r2 = r0 + r0; + pc=0x19ef8; + run_19800(); return; + case 0x1a198: + r2= page[(r18+8)>>>2]; + case 0x1a1a0: + if(r19 == r2) { + pc=0x19ef4; + run_19800(); return; + } + r4 = 6 << 16; + r4 = r4 + 784; + r5 = r0 + 1; + r31=0x1a1bc; + pc=0x21400; + run_21000(); return; + case 0x1a1bc: + r2 = r0 + 1; + pc=0x19ef8; + run_19800(); return; + case 0x1a1c8: + r4 = 6 << 16; + r4 = r4 + 1512; + r5 = r0 + r0; + r31=0x1a1dc; + pc=0x21400; + run_21000(); return; + case 0x1a1dc: + pc=0x19e48; + run_19800(); return; + case 0x1a1e4: + r4 = 6 << 16; + r4 = r4 + 1512; + r5 = r0 + r0; + r31=0x1a1f8; + pc=0x21400; + run_21000(); return; + case 0x1a1f8: + pc=0x19dbc; + run_19800(); return; + case 0x1a200: + r29 = r29 + -72; + page[(r29+64)>>>2] = r16; + r16 = r4 + r0; + r4 = r29 + 16; + page[(r29+68)>>>2] = r31; + r31=0x1a21c; + pc=0x18600; + run_18000(); return; + case 0x1a21c: + r2= page[(r29+52)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ pc=0x1a28c; continue; } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r6 = 7 << 16; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r2 = 7 << 16; - r2 = r2 + -6980; - r4 = readPages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r2; - r5 = r5 + -7568; - r6 = r6 + 1168; - /* Next insn is delay slot */ - r31=0x1a260; - pc=0x3bc00; - run_3bc00(); return; - case 0x1a260: - r2 = readPages[(r28+-30580)>>>12][((r28+-30580)>>>2)&0x3ff]; - r3 = readPages[(r28+-32340)>>>12][((r28+-32340)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r28+-30580)>>>12][((r28+-30580)>>>2)&0x3ff] = r2; - r2 = r2 < r3 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1a2dc; + r2= page[(r29+48)>>>2]; + if(r2 != r0) { + pc=0x1a2b0; continue; } - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ + case 0x1a23c: + r3 = 6 << 16; + r2= page[(r29+16)>>>2]; + r3 = r3 + 15440; + if(r2 == r3) { + pc=0x1a2d8; + continue; + } + case 0x1a250: + r3 = 6 << 16; + r3 = r3 + 15360; + if(r2 == r3) { + pc=0x1a318; + continue; + } + r5 = 6 << 16; + page[(r16+0)>>>2] = r0; + r4 = r0 + -2; + r5 = r5 + 3504; + r31=0x1a278; + pc=0x1fc00; + run_1f800(); return; + case 0x1a278: + r31= page[(r29+68)>>>2]; + r16= page[(r29+64)>>>2]; + r29 = r29 + 72; pc=r31; return; case 0x1a28c: - r6 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r7 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r3 = 7 << 16; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r3 = r3 + 1168; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r4 = readPages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r2 = 7 << 16; - r2 = r2 + -6980; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r2; - r5 = r5 + -7596; - /* Next insn is delay slot */ - r31=0x1a2d4; - pc=0x3bc00; - run_3bc00(); return; - case 0x1a2d4: - /* Next insn is delay slot */ - pc=0x1a260; - continue; - case 0x1a2dc: - /* Next insn is delay slot */ - r31=0x1a2e4; - pc=0x1a000; - run_1a000(); return; - case 0x1a2e4: - case 0x1a400: - pc=0x1a400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1a400() throws ExecutionException { /* 0x1a400 - 0x1a600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1a400: - r29 = r29 + -72; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = r31; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r23; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r22; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r21; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r20; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r19; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r18; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r17; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x1a430; - pc=0x1c000; - run_1c000(); return; - case 0x1a430: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = r0 + 125; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x1a4f8; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 3540; + r31=0x1a2a0; + pc=0x1fc00; + run_1f800(); return; + case 0x1a2a0: + r2= page[(r29+48)>>>2]; + if(r2 == r0) { + pc=0x1a23c; continue; } - r3 = r0 + 13; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x1a4f8; - continue; - } - r21 = 7 << 16; - r20 = 7 << 16; - r23 = 7 << 16; - r21 = r21 + -7236; - r20 = r20 + -6980; - r22 = 7 << 16; - r19 = 7 << 16; - r23 = r23 + -7524; - case 0x1a46c: - r4 = r0 + r0; - /* Next insn is delay slot */ - r31=0x1a478; - pc=0x31e00; - run_31e00(); return; - case 0x1a478: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r16 = r0 + r0; - case 0x1a480: - r2 = r2 & 255; - r3 = (r2&0xffffffffL) < (47&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1a75c; - run_1a600(); return; - } - r4 = 7 << 16; - r3 = r2 << 2; - r4 = r4 + -7424; - r3 = r4 + r3; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r3; - return; - case 0x1a4b0: - r16 = r16 | 1; - case 0x1a4b4: - /* Next insn is delay slot */ - r31=0x1a4bc; - pc=0x1c000; - run_1c000(); return; - case 0x1a4bc: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a480; - continue; - } - case 0x1a4cc: - /* Next insn is delay slot */ - r31=0x1a4d4; - pc=0x28400; - run_28400(); return; - case 0x1a4d4: - /* Next insn is delay slot */ - r31=0x1a4dc; - pc=0x1c000; - run_1c000(); return; - case 0x1a4dc: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = r0 + 125; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x1a4f8; - continue; - } - r3 = r0 + 13; + case 0x1a2b0: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 3556; + r31=0x1a2c4; + pc=0x1fc00; + run_1f800(); return; + case 0x1a2c4: + r3 = 6 << 16; + r2= page[(r29+16)>>>2]; + r3 = r3 + 15440; + if(r2 != r3) { + pc=0x1a250; + continue; + } + case 0x1a2d8: + r5= page[(r29+24)>>>2]; + if(r5 == r0) { + pc=0x1a384; + continue; + } + r2 = r0 + 1; + if(r5 == r2) { + pc=0x1a3d4; + continue; + } + r2 = r0 + 2; + if(r5 == r2) { + pc=0x1a390; + continue; + } + r4 = 6 << 16; + r4 = r4 + 1536; + r31=0x1a310; + pc=0x21400; + run_21000(); return; + case 0x1a310: + pc=0x1a278; + continue; + case 0x1a318: + r2= page[(r29+24)>>>2]; + r3= page[(r2+0)>>>2]; + r2 = r0 + 1; + if(r3 == r2) { + pc=0x1a344; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 3432; + r31=0x1a344; + pc=0x1fc00; + run_1f800(); return; + case 0x1a344: + r2= page[(r29+24)>>>2]; + addr=r2+8; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r31=0x1a358; + pc=0x1d600; + run_1d000(); return; + case 0x1a358: + r3= page[(r29+24)>>>2]; + r31= page[(r29+68)>>>2]; + r4= page[(r3+4)>>>2]; + r4 = r4 + -1; + page[(r3+4)>>>2] = r4; + page[(r16+0)>>>2] = r2; + r16= page[(r29+64)>>>2]; + r29 = r29 + 72; + pc=r31; + return; + case 0x1a384: + page[(r16+0)>>>2] = r0; + pc=0x1a278; + continue; + case 0x1a390: + f0= page[(r29+36)>>>2]; + f1= page[(r29+32)>>>2]; + r4 = fcsr; + r4 = fcsr; + r1 = r4 | 3; + r1 = r1 ^ 2; + fcsr = r1; + switch(fcsr & 3) { + case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest + case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero + case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity + case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity + } + fcsr = r4; + page[(r16+0)>>>2] = f2; + pc=0x1a278; + continue; + case 0x1a3d4: + r2= page[(r29+32)>>>2]; + page[(r16+0)>>>2] = r2; + pc=0x1a278; + continue; + case 0x1a400: + r29 = r29 + -80; + page[(r29+64)>>>2] = r16; + r16 = 6 << 16; + r16 = r16 + 31320; + page[(r29+68)>>>2] = r17; + r2 = r0 + 1; + r17 = r4 + r0; + r4 = r29 + 16; + page[(r29+72)>>>2] = r18; + page[(r29+76)>>>2] = r31; + r18= page[(r16+16)>>>2]; + page[(r16+16)>>>2] = r2; + r31=0x1a438; + pc=0x18600; + run_18000(); return; + case 0x1a438: + r2= page[(r29+52)>>>2]; + page[(r16+16)>>>2] = r18; + if(r2 != r0) { + pc=0x1a4c0; + continue; + } + r2= page[(r29+48)>>>2]; + if(r2 != r0) { + pc=0x1a4e4; + continue; + } + case 0x1a458: + r3 = 6 << 16; + r2= page[(r29+16)>>>2]; + r3 = r3 + 15440; + if(r2 == r3) { + pc=0x1a50c; + continue; + } + case 0x1a46c: + r3 = 6 << 16; + r3 = r3 + 15360; + if(r2 == r3) { + pc=0x1a54c; + continue; + } + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 3504; + r31=0x1a490; + pc=0x1fc00; + run_1f800(); return; + case 0x1a490: + r4 = r17 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x1a4a4; + pc=0x56fe0; + run_56800(); return; + case 0x1a4a4: + r31= page[(r29+76)>>>2]; + r18= page[(r29+72)>>>2]; + r17= page[(r29+68)>>>2]; + r16= page[(r29+64)>>>2]; + r29 = r29 + 80; + pc=r31; + return; + case 0x1a4c0: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 3540; + r31=0x1a4d4; + pc=0x1fc00; + run_1f800(); return; + case 0x1a4d4: + r2= page[(r29+48)>>>2]; + if(r2 == r0) { + pc=0x1a458; + continue; + } + case 0x1a4e4: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 3556; + r31=0x1a4f8; + pc=0x1fc00; + run_1f800(); return; + case 0x1a4f8: + r3 = 6 << 16; + r2= page[(r29+16)>>>2]; + r3 = r3 + 15440; if(r2 != r3) { - /* Next insn is delay slot */ pc=0x1a46c; continue; } - case 0x1a4f8: - r31 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r23 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r22 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r21 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r20 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r19 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r18 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r17 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r16 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r29 = r29 + 72; - /* Next insn is delay slot */ + case 0x1a50c: + r5= page[(r29+24)>>>2]; + if(r5 == r0) { + pc=0x1a624; + continue; + } + r2 = r0 + 1; + if(r5 == r2) { + pc=0x1a490; + continue; + } + r3 = r0 + 2; + if(r5 == r3) { + pc=0x1a5e0; + continue; + } + r4 = 6 << 16; + r4 = r4 + 1576; + r31=0x1a544; + pc=0x21400; + run_21000(); return; + case 0x1a544: + pc=0x1a490; + continue; + case 0x1a54c: + r2= page[(r29+24)>>>2]; + r3= page[(r2+0)>>>2]; + r2 = r0 + 1; + if(r3 == r2) { + pc=0x1a578; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 3432; + r31=0x1a578; + pc=0x1fc00; + run_1f800(); return; + case 0x1a578: + r2= page[(r29+24)>>>2]; + addr=r2+8; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r31=0x1a58c; + pc=0x1d600; + run_1d000(); return; + case 0x1a58c: + r3= page[(r29+24)>>>2]; + r5 = r29 + 24; + r4= page[(r3+4)>>>2]; + r6 = r0 + 24; + r4 = r4 + -1; + page[(r3+4)>>>2] = r4; + r3 = r0 + 1; + r4 = r17 + r0; + page[(r29+24)>>>2] = r3; + page[(r29+28)>>>2] = r0; + page[(r29+32)>>>2] = r2; + page[(r29+40)>>>2] = r0; + r31=0x1a5c4; + pc=0x56fe0; + run_56800(); return; + case 0x1a5c4: + r31= page[(r29+76)>>>2]; + r18= page[(r29+72)>>>2]; + r17= page[(r29+68)>>>2]; + r16= page[(r29+64)>>>2]; + r29 = r29 + 80; pc=r31; return; - case 0x1a528: - r2 = r16 & 2; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a6c4; - run_1a600(); return; + case 0x1a5e0: + f0= page[(r29+36)>>>2]; + page[(r29+24)>>>2] = r2; + f1= page[(r29+32)>>>2]; + r4 = fcsr; + r4 = fcsr; + r1 = r4 | 3; + r1 = r1 ^ 2; + fcsr = r1; + switch(fcsr & 3) { + case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest + case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero + case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity + case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity } - r16 = r16 | 2; - /* Next insn is delay slot */ - r31=0x1a540; - pc=0x1c000; - run_1c000(); return; - case 0x1a540: - /* Next insn is delay slot */ - r31=0x1a548; - pc=0x1ec00; - run_1ec00(); return; - case 0x1a548: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a810; - run_1a800(); return; - } - case 0x1a550: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - case 0x1a558: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a480; - continue; - } - /* Next insn is delay slot */ - pc=0x1a4cc; + fcsr = r4; + page[(r29+32)>>>2] = f2; + pc=0x1a490; continue; - case 0x1a568: - r2 = r16 & 2; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a6c4; - run_1a600(); return; - } - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r16 = r16 | 2; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - r2 = r0 + r0; - r18 = r0 + 45; - r17 = r0 + 45; - /* Next insn is delay slot */ - pc=0x1a5c0; + case 0x1a624: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 1556; + r31=0x1a638; + pc=0x1fc00; + run_1f800(); return; + case 0x1a638: + page[(r29+32)>>>2] = r0; + pc=0x1a490; continue; - case 0x1a594: - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r5 = r2 + 1; - r2 = r3 + r2; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r5; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x1a5b0; - pc=0x1c000; - run_1c000(); return; - case 0x1a5b0: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - if(r2 != r17) { - /* Next insn is delay slot */ - pc=0x1a60c; - run_1a600(); return; - } - case 0x1a5bc: - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - case 0x1a5c0: - r3 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x1a594; - continue; - } - /* Next insn is delay slot */ - r31=0x1a5d8; - pc=0x17800; - run_17800(); return; - case 0x1a5d8: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r5 = r2 + 1; - r2 = r3 + r2; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r5; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x1a600; - pc=0x1c000; - run_1c000(); return; - case 0x1a600: - pc=0x1a600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1a600() throws ExecutionException { /* 0x1a600 - 0x1a800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1a600: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - if(r2 == r17) { - /* Next insn is delay slot */ - pc=0x1a5bc; - run_1a400(); return; - } - case 0x1a60c: - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x1a618; - pc=0x17c00; - run_17c00(); return; - case 0x1a618: - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r5 = r16 + r0; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r6 = r0 + r0; - r7 = r0 + 1; - /* Next insn is delay slot */ - r31=0x1a634; - pc=0x2f800; - run_2f800(); return; - case 0x1a634: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a480; - run_1a400(); return; - } - /* Next insn is delay slot */ - pc=0x1a4cc; - run_1a400(); return; - case 0x1a64c: - /* Next insn is delay slot */ - r31=0x1a654; - pc=0x1c000; - run_1c000(); return; - case 0x1a654: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = r0 + 46; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x1a680; - continue; - } - r2 = r2 & 255; - r2 = r2 + r21; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r2 & 64; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1a880; - run_1a800(); return; - } - case 0x1a680: - /* Next insn is delay slot */ - r31=0x1a688; - pc=0x20a00; - run_20a00(); return; - case 0x1a688: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a480; - run_1a400(); return; - } - /* Next insn is delay slot */ - pc=0x1a4cc; - run_1a400(); return; - case 0x1a6a0: - /* Next insn is delay slot */ - r31=0x1a6a8; - pc=0x1c000; - run_1c000(); return; - case 0x1a6a8: - r3 = r0 + 32; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x1a9cc; - run_1a800(); return; - } - case 0x1a6b4: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 61; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x1a99c; - run_1a800(); return; - } - case 0x1a6c4: - r2 = readPages[(r28+-30748)>>>12][((r28+-30748)>>>2)&0x3ff]; - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a83c; - run_1a800(); return; - } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r4 = readPages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r5 = r22 + -7568; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r20; - r6 = r19 + 1168; - /* Next insn is delay slot */ - r31=0x1a70c; - pc=0x3bc00; - run_3bc00(); return; - case 0x1a70c: - r2 = readPages[(r28+-30580)>>>12][((r28+-30580)>>>2)&0x3ff]; - r3 = readPages[(r28+-32340)>>>12][((r28+-32340)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r28+-30580)>>>12][((r28+-30580)>>>2)&0x3ff] = r2; - r2 = r2 < r3 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1aac0; - run_1aa00(); return; - } - /* Next insn is delay slot */ - r31=0x1a730; - pc=0x1c800; - run_1c800(); return; - case 0x1a730: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x1a558; - run_1a400(); return; - case 0x1a73c: - /* Next insn is delay slot */ - r31=0x1a744; - pc=0x2e200; - run_2e200(); return; - case 0x1a744: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a480; - run_1a400(); return; - } - /* Next insn is delay slot */ - pc=0x1a4cc; - run_1a400(); return; - case 0x1a75c: - r2 = r21 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x1a6c4; - continue; - } - r2 = 7 << 16; - r2 = readPages[(r2+30664)>>>12][((r2+30664)>>>2)&0x3ff]; - r17 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1a788; - pc=0x1ec00; - run_1ec00(); return; - case 0x1a788: - r4 = r2 + r0; - /* Next insn is delay slot */ - pc=r17; - r31=0x1a794; - return; - case 0x1a794: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a550; - run_1a400(); return; - } - r2 = r16 & 2; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a9dc; - run_1a800(); return; - } - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r4 = r0 + -96; - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r16 = r16 | 2; - addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x1aa14; - run_1aa00(); return; - } - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 < 2 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a7e8; - continue; - } - r2 = r0 + -62; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x1aa04; - run_1aa00(); return; - } - case 0x1a7e8: - r4 = r0 + r0; - r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x1a7f8; - pc=0x2fc00; - run_2fc00(); return; - case 0x1a7f8: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; case 0x1a800: pc=0x1a800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_1a800() throws ExecutionException { /* 0x1a800 - 0x1aa00 */ + private final void run_1a800() throws ExecutionException { /* 0x1a800 - 0x1b000 */ int addr, tmp; for(;;) { switch(pc) { case 0x1a800: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a480; - run_1a400(); return; - } - /* Next insn is delay slot */ - pc=0x1a4cc; - run_1a400(); return; - case 0x1a810: - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r5 = r16 + r0; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1a824; - pc=0x2fc00; - run_2fc00(); return; - case 0x1a824: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a480; - run_1a400(); return; - } - /* Next insn is delay slot */ - pc=0x1a4cc; - run_1a400(); return; - case 0x1a83c: - r6 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r7 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r3 = r19 + 1168; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r4 = readPages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r20; - r5 = r5 + -7596; - /* Next insn is delay slot */ - r31=0x1a878; - pc=0x3bc00; - run_3bc00(); return; - case 0x1a878: - /* Next insn is delay slot */ - pc=0x1a70c; - run_1a600(); return; - case 0x1a880: - r2 = r16 & 2; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a9dc; - continue; - } - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + 43; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - r31=0x1a8a0; - pc=0x17c00; - run_17c00(); return; - case 0x1a8a0: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 43; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x1a948; - continue; - } - r18 = r0 + 43; - r17 = r0 + 43; - /* Next insn is delay slot */ - pc=0x1a8ec; - continue; - case 0x1a8c0: - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r5 = r2 + 1; - r2 = r3 + r2; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r5; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x1a8dc; - pc=0x1c000; - run_1c000(); return; - case 0x1a8dc: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r17) { - /* Next insn is delay slot */ - pc=0x1a948; - continue; - } - case 0x1a8ec: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r3 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x1a8c0; - continue; - } - /* Next insn is delay slot */ - r31=0x1a910; - pc=0x17800; - run_17800(); return; - case 0x1a910: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r5 = r2 + 1; - r2 = r3 + r2; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r5; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x1a938; - pc=0x1c000; - run_1c000(); return; - case 0x1a938: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; + r29 = r29 + -32; + page[(r29+16)>>>2] = r16; + r16 = r4 + r0; + page[(r29+24)>>>2] = r18; + page[(r29+20)>>>2] = r17; + page[(r29+28)>>>2] = r31; + r18 = r5 + r0; + r17 = 6 << 16; + r31=0x1a828; + pc=0x18600; + run_18000(); return; + case 0x1a828: + r2= page[(r16+0)>>>2]; + r17 = r17 + 15440; if(r2 == r17) { - /* Next insn is delay slot */ - pc=0x1a8ec; + pc=0x1a95c; continue; } - case 0x1a948: - r4 = r0 + 1; - /* Next insn is delay slot */ - r31=0x1a954; - pc=0x30800; - run_30800(); return; - case 0x1a954: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x1a964; - pc=0x17c00; - run_17c00(); return; - case 0x1a964: - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r16 = r16 | 2; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r5 = r16 + r0; - r6 = r0 + r0; - r7 = r0 + r0; - /* Next insn is delay slot */ - r31=0x1a984; - pc=0x2f800; - run_2f800(); return; - case 0x1a984: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a480; - run_1a400(); return; + r3 = 6 << 16; + r3 = r3 + 15360; + if(r2 == r3) { + pc=0x1a8e4; + continue; } - /* Next insn is delay slot */ - pc=0x1a4cc; - run_1a400(); return; - case 0x1a99c: - /* Next insn is delay slot */ - r31=0x1a9a4; - pc=0x1c000; - run_1c000(); return; - case 0x1a9a4: - /* Next insn is delay slot */ - r31=0x1a9ac; - pc=0x2de00; - run_2de00(); return; - case 0x1a9ac: - /* Next insn is delay slot */ - r31=0x1a9b4; - pc=0x1ce00; - run_1ce00(); return; - case 0x1a9b4: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a480; - run_1a400(); return; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 3504; + r31=0x1a85c; + pc=0x1fc00; + run_1f800(); return; + case 0x1a85c: + r2= page[(r16+36)>>>2]; + r18 = r18 < r2 ? 1 : 0; + if(r18 != r0) { + pc=0x1a8c4; + continue; } - /* Next insn is delay slot */ - pc=0x1a4cc; - run_1a400(); return; - case 0x1a9cc: - /* Next insn is delay slot */ - r31=0x1a9d4; - pc=0x1c000; - run_1c000(); return; - case 0x1a9d4: - /* Next insn is delay slot */ - pc=0x1a6b4; - run_1a600(); return; - case 0x1a9dc: - /* Next insn is delay slot */ - r31=0x1a9e4; - pc=0x1a200; - run_1a200(); return; - case 0x1a9e4: - /* Next insn is delay slot */ - r31=0x1a9ec; - pc=0x1c800; - run_1c800(); return; - case 0x1a9ec: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; + case 0x1a870: + r2= page[(r16+32)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a480; - run_1a400(); return; + pc=0x1a89c; + continue; } - /* Next insn is delay slot */ - pc=0x1a4cc; - run_1a400(); return; - case 0x1aa00: - pc=0x1aa00; + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1aa00() throws ExecutionException { /* 0x1aa00 - 0x1ac00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1aa00: - case 0x1aa04: - addr=r5+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + case 0x1a89c: + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 3556; + r29 = r29 + 32; + pc=0x1fc00; + run_1f800(); return; + case 0x1a8c4: + r5 = 6 << 16; + page[(r16+36)>>>2] = r0; + r4 = r0 + -2; + r5 = r5 + 3540; + r31=0x1a8dc; + pc=0x1fc00; + run_1f800(); return; + case 0x1a8dc: + pc=0x1a870; + continue; + case 0x1a8e4: + r2= page[(r16+8)>>>2]; + r3= page[(r2+0)>>>2]; + r2 = r0 + 1; + if(r3 == r2) { + pc=0x1a910; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 3432; + r31=0x1a910; + pc=0x1fc00; + run_1f800(); return; + case 0x1a910: + r2= page[(r16+8)>>>2]; + addr=r2+8; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r4) { - /* Next insn is delay slot */ - pc=0x1a7e8; - run_1a600(); return; + r4 = tmp; + r31=0x1a924; + pc=0x1d600; + run_1d000(); return; + case 0x1a924: + r3= page[(r16+8)>>>2]; + r4= page[(r3+4)>>>2]; + r4 = r4 + -1; + page[(r3+4)>>>2] = r4; + r3 = r0 + 1; + page[(r16+0)>>>2] = r17; + page[(r16+8)>>>2] = r3; + page[(r16+12)>>>2] = r0; + page[(r16+16)>>>2] = r2; + page[(r16+24)>>>2] = r0; + pc=0x1a85c; + continue; + case 0x1a95c: + r2= page[(r16+8)>>>2]; + r3 = r0 + 2; + if(r2 == r3) { + pc=0x1a980; + continue; } - case 0x1aa14: - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1a7e8; - run_1a600(); return; + pc=0x1a85c; + continue; } - r2 = readPages[(r28+-30748)>>>12][((r28+-30748)>>>2)&0x3ff]; - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; + page[(r16+16)>>>2] = r0; + pc=0x1a85c; + continue; + case 0x1a980: + f0= page[(r16+20)>>>2]; + r2 = r0 + 1; + f1= page[(r16+16)>>>2]; + page[(r16+8)>>>2] = r2; + r4 = fcsr; + r4 = fcsr; + r1 = r4 | 3; + r1 = r1 ^ 2; + fcsr = r1; + switch(fcsr & 3) { + case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest + case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero + case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity + case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity + } + fcsr = r4; + page[(r16+16)>>>2] = f2; + pc=0x1a85c; + continue; + case 0x1aa00: + r29 = r29 + -72; + page[(r29+64)>>>2] = r16; + r16 = r4 + r0; + r4 = r29 + 16; + page[(r29+68)>>>2] = r31; + r31=0x1aa1c; + pc=0x18600; + run_18000(); return; + case 0x1aa1c: + r4 = r16 + r0; + r5 = r29 + 16; + r6 = r0 + 32; + r31=0x1aa30; + pc=0x56fe0; + run_56800(); return; + case 0x1aa30: + r2= page[(r29+52)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ pc=0x1aa78; continue; } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r4 = readPages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r6 = 7 << 16; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r23; - r5 = r22 + -7568; - r6 = r6 + -7532; - /* Next insn is delay slot */ - r31=0x1aa70; - pc=0x3bc00; - run_3bc00(); return; - case 0x1aa70: - /* Next insn is delay slot */ - pc=0x1a7e8; - run_1a600(); return; + case 0x1aa40: + r2= page[(r29+48)>>>2]; + if(r2 == r0) { + pc=0x1aa64; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 3556; + r31=0x1aa64; + pc=0x1fc00; + run_1f800(); return; + case 0x1aa64: + r31= page[(r29+68)>>>2]; + r16= page[(r29+64)>>>2]; + r29 = r29 + 72; + pc=r31; + return; case 0x1aa78: - r6 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r7 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r3 = 7 << 16; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r3 = r3 + -7532; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r4 = readPages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r23; - r5 = r5 + -7596; - /* Next insn is delay slot */ - r31=0x1aab8; - pc=0x3bc00; - run_3bc00(); return; - case 0x1aab8: - /* Next insn is delay slot */ - pc=0x1a7e8; - run_1a600(); return; - case 0x1aac0: - /* Next insn is delay slot */ - r31=0x1aac8; - pc=0x1a000; - run_1a000(); return; - case 0x1aac8: - case 0x1ac00: - pc=0x1ac00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1ac00() throws ExecutionException { /* 0x1ac00 - 0x1ae00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1ac00: - r2 = readPages[(r28+-30748)>>>12][((r28+-30748)>>>2)&0x3ff]; - r29 = r29 + -40; - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1ac68; - continue; - } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r6 = 7 << 16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r4; - r4 = readPages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r5 = r5 + -7568; - r6 = r6 + -7532; - /* Next insn is delay slot */ - r31=0x1ac58; - pc=0x3bc00; - run_3bc00(); return; - case 0x1ac58: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x1ac68: - r6 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r7 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r3 = 7 << 16; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r3 = r3 + -7532; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r4; - r4 = readPages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r5 = r5 + -7596; - /* Next insn is delay slot */ - r31=0x1aca8; - pc=0x3bc00; - run_3bc00(); return; - case 0x1aca8: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x1ae00: - pc=0x1ae00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1ae00() throws ExecutionException { /* 0x1ae00 - 0x1b000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1ae00: - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - r29 = r29 + -40; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1ae24; - continue; - } - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x1ae24: - r2 = readPages[(r28+-30748)>>>12][((r28+-30748)>>>2)&0x3ff]; - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1ae84; - continue; - } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r6 = 7 << 16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r4; - r4 = readPages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r5 = r5 + -7568; - r6 = r6 + -7532; - /* Next insn is delay slot */ - r31=0x1ae74; - pc=0x3bc00; - run_3bc00(); return; - case 0x1ae74: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x1ae84: - r6 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r7 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r3 = 7 << 16; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r3 = r3 + -7532; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r4; - r4 = readPages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r5 = r5 + -7596; - /* Next insn is delay slot */ - r31=0x1aec4; - pc=0x3bc00; - run_3bc00(); return; - case 0x1aec4: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x1b000: - pc=0x1b000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1b000() throws ExecutionException { /* 0x1b000 - 0x1b200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1b000: - r2 = readPages[(r28+-30748)>>>12][((r28+-30748)>>>2)&0x3ff]; - r29 = r29 + -40; - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1b084; - continue; - } - r7 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r6 = 7 << 16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r4; - r4 = readPages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r5 = r5 + -7568; - r6 = r6 + 1168; - /* Next insn is delay slot */ - r31=0x1b058; - pc=0x3bc00; - run_3bc00(); return; - case 0x1b058: - r2 = readPages[(r28+-30580)>>>12][((r28+-30580)>>>2)&0x3ff]; - r3 = readPages[(r28+-32340)>>>12][((r28+-32340)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r28+-30580)>>>12][((r28+-30580)>>>2)&0x3ff] = r2; - r2 = r2 < r3 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1b0cc; - continue; - } - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x1b084: - r6 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r7 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r3 = 7 << 16; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r3 = r3 + 1168; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r5 = 7 << 16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r4; - r4 = readPages[(r28+-30744)>>>12][((r28+-30744)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r5 = r5 + -7596; - /* Next insn is delay slot */ - r31=0x1b0c4; - pc=0x3bc00; - run_3bc00(); return; - case 0x1b0c4: - /* Next insn is delay slot */ - pc=0x1b058; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 3540; + r31=0x1aa8c; + pc=0x1fc00; + run_1f800(); return; + case 0x1aa8c: + pc=0x1aa40; continue; - case 0x1b0cc: - /* Next insn is delay slot */ - r31=0x1b0d4; - pc=0x1a000; - run_1a000(); return; - case 0x1b0d4: - case 0x1b200: - pc=0x1b200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1b200() throws ExecutionException { /* 0x1b200 - 0x1b400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1b200: - r5 = 7 << 16; - r29 = r29 + -24; - r5 = r5 + -7476; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x1b218; - pc=0x19e00; - run_19e00(); return; - case 0x1b218: - r4 = r0 + 1; - /* Next insn is delay slot */ - r31=0x1b224; - pc=0x11800; - run_11800(); return; - case 0x1b224: - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x1b230; - pc=0x38e00; - run_38e00(); return; - case 0x1b230: - case 0x1b400: - pc=0x1b400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1b400() throws ExecutionException { /* 0x1b400 - 0x1b600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1b400: - r29 = r29 + -24; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x1b410; - pc=0x3e800; - run_3e800(); return; - case 0x1b410: + case 0x1ac00: + r2= page[(r28+-31356)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1b428; + pc=0x1ac34; continue; } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ + r2 = r2 + -1; + page[(r28+-31356)>>>2] = r2; + r2= page[(r28+-31360)>>>2]; + r3 = r2 + 4; + page[(r28+-31360)>>>2] = r3; + r2= page[(r2+0)>>>2]; pc=r31; return; - case 0x1b428: - r4 = 7 << 16; - r4 = r4 + -6876; - /* Next insn is delay slot */ - r31=0x1b438; - pc=0x1b200; - run_1b200(); return; - case 0x1b438: - case 0x1b600: - pc=0x1b600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1b600() throws ExecutionException { /* 0x1b600 - 0x1b800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1b600: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r29 = r29 + -24; - r3 = r0 + 32; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x1b66c; - continue; - } - case 0x1b618: - r3 = r0 + 123; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x1b638; - continue; - } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + case 0x1ac34: r2 = r0 + r0; - r29 = r29 + 24; - /* Next insn is delay slot */ pc=r31; return; - case 0x1b638: - /* Next insn is delay slot */ - r31=0x1b640; - pc=0x1a400; - run_1a400(); return; - case 0x1b640: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 125; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x1b680; - continue; - } - /* Next insn is delay slot */ - r31=0x1b658; - pc=0x1c000; - run_1c000(); return; - case 0x1b658: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x1b66c: - /* Next insn is delay slot */ - r31=0x1b674; - pc=0x1c000; - run_1c000(); return; - case 0x1b674: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x1b618; - continue; - case 0x1b680: - r4 = 7 << 16; - r4 = r4 + -6912; - /* Next insn is delay slot */ - r31=0x1b690; - pc=0x1b200; - run_1b200(); return; - case 0x1b690: - case 0x1b800: - pc=0x1b800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1b800() throws ExecutionException { /* 0x1b800 - 0x1ba00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1b800: + case 0x1ae00: r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r17 = r5 + r0; - r16 = r4 + r0; - r5 = 7 << 16; - r4 = 7 << 16; - r4 = r4 + -7460; - r5 = r5 + -7532; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x1b830; - pc=0x19e00; - run_19e00(); return; - case 0x1b830: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r5 = r5 + -7432; - r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x1b84c; - pc=0x3bc00; - run_3bc00(); return; - case 0x1b84c: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x1b858; - pc=0x1b200; - run_1b200(); return; - case 0x1b858: - case 0x1ba00: - pc=0x1ba00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1ba00() throws ExecutionException { /* 0x1ba00 - 0x1bc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1ba00: - r2 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r29 = r29 + -80; - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r17; + page[(r29+24)>>>2] = r18; + page[(r29+20)>>>2] = r17; + page[(r29+16)>>>2] = r16; + page[(r29+28)>>>2] = r31; r17 = r4 + r0; - r4 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - writePages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff] = r31; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r21; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = r20; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r19; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r18; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r16; - if(r4 == r3) { - /* Next insn is delay slot */ - pc=0x1bacc; - continue; - } - r6 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r5 = 7 << 16; - r5 = r5 + -6800; - /* Next insn is delay slot */ - r31=0x1ba50; - pc=0x3bc00; - run_3bc00(); return; - case 0x1ba50: - r2 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - addr=r28+-30732; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x1ba64: - r3 = r0 + 10; - if(r17 == r3) { - /* Next insn is delay slot */ - pc=0x1baa0; - continue; - } - r3 = r0 + 13; - if(r17 == r3) { - /* Next insn is delay slot */ - pc=0x1baa0; - continue; - } - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = (r3&0xffffffffL) < (1024&0xffffffffL) ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1baa0; - continue; - } - r4 = r3 + 1; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r4; - r2 = r2 + r3; - addr=r2+20; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x1baa0: - r31 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - r21 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r20 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r19 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r18 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r16 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - addr=r28+-30732; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r17 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r29 = r29 + 80; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x1bacc: - addr=r28+-30732; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - r3 = r0 + 10; - if(r5 != r3) { - /* Next insn is delay slot */ - pc=0x1ba64; - continue; - } - r6 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r5 = r5 + -6776; - r6 = r6 + -1; - /* Next insn is delay slot */ - r31=0x1baf8; - pc=0x3bc00; - run_3bc00(); return; - case 0x1baf8: - r2 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x1bb8c; - continue; - } - addr=r29+36; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - addr=r29+16; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r21 = r29 + 36; - r20 = r29 + 16; - case 0x1bb20: - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r5 = 7 << 16; - r6 = r21 + r0; - r5 = r5 + -6752; - r7 = r20 + r0; - /* Next insn is delay slot */ - r31=0x1bb3c; - pc=0x3bc00; - run_3bc00(); return; - case 0x1bb3c: - r6 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = r0 + 1024; - r2 = readPages[(r6+8)>>>12][((r6+8)>>>2)&0x3ff]; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x1bc28; - run_1bc00(); return; - } - case 0x1bb54: - r2 = r6 + r2; - r4 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - r5 = 7 << 16; - addr=r2+20; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r5 = r5 + -6780; - r6 = r6 + 20; - /* Next insn is delay slot */ - r31=0x1bb74; - pc=0x3bc00; - run_3bc00(); return; - case 0x1bb74: - r2 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x1ba64; - continue; - case 0x1bb8c: - r21 = r29 + 36; - r6 = 7 << 16; - r7 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r4 = r21 + r0; - r5 = r0 + 5; - r6 = r6 + -6768; - /* Next insn is delay slot */ - r31=0x1bbac; - pc=0x41c00; - run_41c00(); return; - case 0x1bbac: - r2 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r20 = r29 + 16; - r3 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - addr=r29+16; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + r18 = r5 + r0; + r16 = r0 + 45; + case 0x1ae20: + r3= page[(r28+-31356)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1bb20; + pc=0x1aeec; continue; } - r19 = 7 << 16; - r18 = r20 + r0; - r16 = r0 + r0; - r19 = r19 + -6760; - case 0x1bbd4: - r2 = r2 + r16; - addr=r2+1044; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + r6= page[(r28+-31360)>>>2]; + r2= page[(r6+0)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r6 = tmp; - r4 = r18 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x1bbec; - pc=0x42000; - run_42000(); return; - case 0x1bbec: - r2 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r16 = r16 + 1; - r3 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r18 = r18 + 2; - r4 = ((r16 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; - case 0x1bc00: - pc=0x1bc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1bc00() throws ExecutionException { /* 0x1bc00 - 0x1be00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1bc00: - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x1bbd4; - run_1ba00(); return; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r7 = tmp; + if(r7 != r16) { + pc=0x1aeec; + continue; } - r4 = r0 + 9; - if(r3 != r4) { - /* Next insn is delay slot */ - pc=0x1bb20; - run_1ba00(); return; + r3 = r3 + -1; + page[(r28+-31356)>>>2] = r3; + addr=r2+1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r6 = r6 + 4; + page[(r28+-31360)>>>2] = r6; + r4 = r2 + 1; + if(r3 != r16) { + pc=0x1aeac; + continue; } - r3 = 11822 << 16; - r3 = r3 + 11776; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x1bb20; - run_1ba00(); return; - case 0x1bc28: - r2 = r0 + 1023; - writePages[(r6+8)>>>12][((r6+8)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x1bb54; - run_1ba00(); return; - case 0x1be00: - pc=0x1be00; + addr=r2+2; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + if(r3 == r0) { + pc=0x1aeec; + continue; + } + r4 = r2 + 2; + pc=r18; + r31=0x1ae8c; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1be00() throws ExecutionException { /* 0x1be00 - 0x1c000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1be00: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = r0 + 1; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r4; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ + case 0x1ae8c: + if(r2 == r0) { + pc=0x1ae20; + continue; + } + r3= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r3+12)>>>2]; + r5 = r5 + 3592; + pc=0x1aecc; + continue; + case 0x1aeac: + pc=r17; + r31=0x1aeb4; + return; + case 0x1aeb4: + if(r2 == r0) { + pc=0x1ae20; + continue; + } + r3= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r3+12)>>>2]; + r5 = r5 + 3620; + case 0x1aecc: + r6 = 6 << 16; + r6 = r6 + 3672; + r7 = r2 + r0; + r31=0x1aee0; + pc=0x4b800; + run_4b800(); return; + case 0x1aee0: + r4 = r0 + 1; + r31=0x1aeec; + pc=0x49a00; + run_49800(); return; + case 0x1aeec: + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; pc=r31; return; + case 0x1b000: + pc=0x1b000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_1b000() throws ExecutionException { /* 0x1b000 - 0x1b800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x1b000: + r2= page[(r28+-31356)>>>2]; + r29 = r29 + -24; + r7 = r4 + r0; + page[(r29+20)>>>2] = r31; + if(r2 == r0) { + pc=0x1b04c; + continue; + } + r2 = r2 + -1; + page[(r28+-31356)>>>2] = r2; + r2= page[(r28+-31360)>>>2]; + r3 = r2 + 4; + r2= page[(r2+0)>>>2]; + page[(r28+-31360)>>>2] = r3; + if(r2 == r0) { + pc=0x1b04c; + continue; + } + r31= page[(r29+20)>>>2]; + r29 = r29 + 24; + pc=r31; + return; + case 0x1b04c: + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r6 = 6 << 16; + r5 = r5 + 3648; + r6 = r6 + 3672; + r31=0x1b06c; + pc=0x4b800; + run_4b800(); return; + case 0x1b06c: + r4 = r0 + 1; + r31=0x1b078; + pc=0x49a00; + run_49800(); return; + case 0x1b078: + case 0x1b200: + page[(r28+-31356)>>>2] = r4; + page[(r28+-31360)>>>2] = r5; + if(r4 == r0) { + pc=0x1b22c; + continue; + } + r2 = r5 + 4; + r4 = r4 + -1; + page[(r28+-31360)>>>2] = r2; + page[(r28+-31356)>>>2] = r4; + r2= page[(r5+0)>>>2]; + pc=r31; + return; + case 0x1b22c: + r2 = r0 + r0; + pc=r31; + return; + case 0x1b400: + r2= page[(r28+-31356)>>>2]; + r3= page[(r28+-31360)>>>2]; + r29 = r29 + -24; + r7 = r6 + r0; + page[(r29+20)>>>2] = r31; + page[(r4+0)>>>2] = r2; + page[(r5+0)>>>2] = r3; + if(r6 == r0) { + pc=0x1b42c; + continue; + } + if(r2 == r0) { + pc=0x1b43c; + continue; + } + case 0x1b42c: + r31= page[(r29+20)>>>2]; + r29 = r29 + 24; + pc=r31; + return; + case 0x1b43c: + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r6 = 6 << 16; + r5 = r5 + 3664; + r6 = r6 + 3672; + r31=0x1b45c; + pc=0x4b800; + run_4b800(); return; + case 0x1b45c: + r4 = r0 + 1; + r31=0x1b468; + pc=0x49a00; + run_49800(); return; + case 0x1b468: + case 0x1b600: + r29 = r29 + -32; + r4 = 6 << 16; + r6 = 6 << 16; + r4 = r4 + 16744; + r5 = r29 + 16; + r6 = r6 + 17104; + page[(r29+28)>>>2] = r31; + r31=0x1b624; + pc=0x42400; + run_42000(); return; + case 0x1b624: + if(r2 == r0) { + pc=0x1b640; + continue; + } + r31= page[(r29+28)>>>2]; + r2= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x1b640: + r31= page[(r29+28)>>>2]; + r2 = r0 + r0; + r29 = r29 + 32; + pc=r31; + return; + case 0x1b800: + pc=0x1b800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_1b800() throws ExecutionException { /* 0x1b800 - 0x1c000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x1b800: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 2; + if(r2 != r0) { + pc=0x1b828; + continue; + } + if(r5 != r0) { + pc=0x1b834; + continue; + } + case 0x1b828: + page[(r4+0)>>>2] = r5; + pc=r31; + return; + case 0x1b834: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 3700; + pc=0x1fc00; + run_1f800(); return; + case 0x1ba00: + if(r4 == r0) { + pc=0x1ba24; + continue; + } + r2 = 6 << 16; + page[(r2+31424)>>>2] = r4; + r2 = r2 + 31424; + page[(r2+36)>>>2] = r0; + page[(r2+40)>>>2] = r0; + pc=r31; + return; + case 0x1ba24: + r4 = 6 << 16; + r2 = 6 << 16; + r4 = r4 + 17092; + page[(r2+31424)>>>2] = r4; + r2 = r2 + 31424; + page[(r2+36)>>>2] = r0; + page[(r2+40)>>>2] = r0; + pc=r31; + return; + case 0x1bc00: + r2= page[(r28+-31512)>>>2]; + r4 = 6 << 16; + r7= page[(r2+12)>>>2]; + r29 = r29 + -24; + r4 = r4 + 3928; + r5 = r0 + 1; + r6 = r0 + 37; + page[(r29+20)>>>2] = r31; + r31=0x1bc28; + pc=0x4d600; + run_4d000(); return; + case 0x1bc28: + r4 = r0 + 1; + r31=0x1bc34; + pc=0x49a00; + run_49800(); return; + case 0x1bc34: + case 0x1be00: + r2= page[(r4+0)>>>2]; + r29 = r29 + -24; + page[(r29+16)>>>2] = r16; + page[(r29+20)>>>2] = r31; + r16 = r4 + r0; + if(r2 == r0) { + pc=0x1be34; + continue; + } + case 0x1be1c: + r31= page[(r29+20)>>>2]; + page[(r16+4)>>>2] = r0; + r16= page[(r29+16)>>>2]; + r29 = r29 + 24; + pc=r31; + return; + case 0x1be34: + r4= page[(r4+8)>>>2]; + r2 = (r4&0xffffffffL) < (128&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x1be4c; + continue; + } + r4 = r0 + 128; + case 0x1be4c: + page[(r16+4)>>>2] = r0; + page[(r16+8)>>>2] = r4; + r31=0x1be5c; + pc=0x4de00; + run_4d800(); return; + case 0x1be5c: + page[(r16+0)>>>2] = r2; + if(r2 != r0) { + pc=0x1be1c; + continue; + } + r31=0x1be70; + pc=0x1bc00; + continue; + case 0x1be70: case 0x1c000: pc=0x1c000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_1c000() throws ExecutionException { /* 0x1c000 - 0x1c200 */ + private final void run_1c000() throws ExecutionException { /* 0x1c000 - 0x1c800 */ int addr, tmp; for(;;) { switch(pc) { case 0x1c000: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r29 = r29 + -48; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r22; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r21; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1c0a0; + r29 = r29 + -40; + page[(r29+32)>>>2] = r17; + r17= page[(r4+8)>>>2]; + page[(r29+28)>>>2] = r16; + r17 = r17 << 1; + r16 = r4 + r0; + r4= page[(r4+0)>>>2]; + r5 = r17 + r0; + page[(r29+36)>>>2] = r31; + r31=0x1c02c; + pc=0x4fa00; + run_4f800(); return; + case 0x1c02c: + if(r2 == r0) { + pc=0x1c054; continue; } - r3 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r4 = r3 + 1; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r4; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x1c050: - r3 = r0 + 10; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x1c074; - continue; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r4 = r4 + 1; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r4; - case 0x1c074: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 48; - /* Next insn is delay slot */ + r31= page[(r29+36)>>>2]; + page[(r16+8)>>>2] = r17; + page[(r16+0)>>>2] = r2; + r17= page[(r29+32)>>>2]; + r16= page[(r29+28)>>>2]; + r29 = r29 + 40; pc=r31; return; - case 0x1c0a0: - r21 = 7 << 16; - r4 = 7 << 16; - r5 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r16 = r0 + r0; - r21 = r21 + -6444; - r20 = r4 + -6700; - r18 = r0 + -1; - r19 = r0 + 13; - r17 = r0 + 10; - case 0x1c0c4: - r3 = (r5&0xffffffffL) < (9&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1c41c; - run_1c400(); return; - } - case 0x1c0d0: - r5 = r5 << 2; - r5 = r21 + r5; - r3 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r3; + case 0x1c054: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5244; + page[(r29+16)>>>2] = r2; + r31=0x1c06c; + pc=0x1fc00; + run_1f800(); return; + case 0x1c06c: + r2= page[(r29+16)>>>2]; + r31= page[(r29+36)>>>2]; + page[(r16+8)>>>2] = r17; + page[(r16+0)>>>2] = r2; + r17= page[(r29+32)>>>2]; + r16= page[(r29+28)>>>2]; + r29 = r29 + 40; + pc=r31; return; - case 0x1c0e8: - if(r16 == r18) { - /* Next insn is delay slot */ - pc=0x1c2ec; - run_1c200(); return; - } - if(r16 == r19) { - /* Next insn is delay slot */ - pc=0x1c2ec; - run_1c200(); return; - } - if(r16 == r17) { - /* Next insn is delay slot */ - pc=0x1c2ec; - run_1c200(); return; - } - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - case 0x1c108: - r4 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r3 = r3 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r3; - if(r3 < 0) { - /* Next insn is delay slot */ - pc=0x1c304; - run_1c200(); return; - } - r3 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r16 = tmp; - case 0x1c144: - r2 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1c0e8; - continue; - } - r4 = r16 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1c16c; - pc=0x1ba00; - run_1ba00(); return; - case 0x1c16c: - /* Next insn is delay slot */ - pc=0x1c0e8; - continue; - case 0x1c174: - r4 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r3 = r3 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r3; - if(r3 < 0) { - /* Next insn is delay slot */ - pc=0x1c51c; - run_1c400(); return; - } - r3 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r16 = tmp; - case 0x1c1b0: - r2 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1c1d8; - continue; - } - r4 = r16 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1c1d8; - pc=0x1ba00; - run_1ba00(); return; - case 0x1c1d8: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - case 0x1c1dc: - r3 = r0 + -1; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - if(r16 == r3) { - /* Next insn is delay slot */ - pc=0x1c478; - run_1c400(); return; - } - r4 = 7 << 16; - r3 = r16 & 255; - r4 = r4 + -7236; - r3 = r3 + r4; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; case 0x1c200: - pc=0x1c200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1c200() throws ExecutionException { /* 0x1c200 - 0x1c400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1c200: - r3 = r3 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1c25c; - continue; - } - r3 = r0 + 32; - if(r16 == r3) { - /* Next insn is delay slot */ - pc=0x1c460; - run_1c400(); return; - } - r3 = r16 < 33 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x1c43c; - run_1c400(); return; - } - r3 = r0 + 59; - if(r16 == r3) { - /* Next insn is delay slot */ - pc=0x1c4e8; - run_1c400(); return; - } - r3 = r0 + 125; - if(r16 == r3) { - /* Next insn is delay slot */ - pc=0x1c4d0; - run_1c400(); return; - } - r2 = r0 + 58; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x1c490; - run_1c400(); return; - } - case 0x1c24c: - r4 = 7 << 16; - r4 = r4 + -6740; - /* Next insn is delay slot */ - r31=0x1c25c; - pc=0x1b000; - run_1b000(); return; - case 0x1c25c: - r2 = r16 << 24; - r2 = r2 >> 24; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c050; - run_1c000(); return; - case 0x1c270: - r20 = r0 + 9; - r22 = r0 + 32; - case 0x1c278: - r4 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r3 = r3 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r3; - if(r3 < 0) { - /* Next insn is delay slot */ - pc=0x1c400; - run_1c400(); return; - } - r3 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r16 = tmp; - case 0x1c2b4: - r2 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1c2dc; - continue; - } - r4 = r16 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1c2dc; - pc=0x1ba00; - run_1ba00(); return; - case 0x1c2dc: - if(r16 == r20) { - /* Next insn is delay slot */ - pc=0x1c320; - continue; - } - if(r16 == r22) { - /* Next insn is delay slot */ - pc=0x1c320; - continue; - } - case 0x1c2ec: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = r0 + 1; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r5 = r0 + 1; - /* Next insn is delay slot */ - pc=0x1c0d0; - run_1c000(); return; - case 0x1c304: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1c314; - pc=0x41600; - run_41600(); return; - case 0x1c314: - r16 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1c144; - run_1c000(); return; - case 0x1c320: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1c278; - continue; - case 0x1c32c: - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - r2 = r0 + 10; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c050; - run_1c000(); return; - case 0x1c340: - r3 = r0 + 5; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r2 = r0 + 10; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c050; - run_1c000(); return; - case 0x1c358: - r4 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r3 = r3 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r3; - if(r3 < 0) { - /* Next insn is delay slot */ - pc=0x1c500; - run_1c400(); return; - } - r3 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r16 = tmp; - case 0x1c394: - r2 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1c3bc; - continue; - } - r4 = r16 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1c3bc; - pc=0x1ba00; - run_1ba00(); return; - case 0x1c3bc: - if(r16 != r17) { - /* Next insn is delay slot */ - pc=0x1c2ec; - continue; - } - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r5 = r0 + r0; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x1c0d0; - run_1c000(); return; - case 0x1c3d8: - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - r2 = r0 + 125; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c050; - run_1c000(); return; - case 0x1c3ec: - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - r2 = r0 + 13; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c050; - run_1c000(); return; - case 0x1c400: - pc=0x1c400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1c400() throws ExecutionException { /* 0x1c400 - 0x1c600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1c400: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1c410; - pc=0x41600; - run_41600(); return; - case 0x1c410: - r16 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1c2b4; - run_1c200(); return; - case 0x1c41c: - r4 = r20 + r0; - /* Next insn is delay slot */ - r31=0x1c428; - pc=0x1b800; - run_1b800(); return; - case 0x1c428: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r5 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1c0c4; - run_1c000(); return; - case 0x1c43c: - r3 = r0 + 10; - if(r16 == r3) { - /* Next insn is delay slot */ - pc=0x1c4b8; - continue; - } - r3 = r0 + 13; - if(r16 == r3) { - /* Next insn is delay slot */ - pc=0x1c4a0; - continue; - } - r3 = r0 + 9; - if(r16 != r3) { - /* Next insn is delay slot */ - pc=0x1c24c; - run_1c200(); return; - } - case 0x1c460: - r3 = r0 + 2; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r2 = r0 + 32; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c050; - run_1c000(); return; - case 0x1c478: - r3 = r0 + 8; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c050; - run_1c000(); return; - case 0x1c490: - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c050; - run_1c000(); return; - case 0x1c4a0: - r3 = r0 + 4; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c050; - run_1c000(); return; - case 0x1c4b8: - r3 = r0 + 3; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c050; - run_1c000(); return; - case 0x1c4d0: - r3 = r0 + 7; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c050; - run_1c000(); return; - case 0x1c4e8: - r3 = r0 + 6; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c050; - run_1c000(); return; - case 0x1c500: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1c510; - pc=0x41600; - run_41600(); return; - case 0x1c510: - r16 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1c394; - run_1c200(); return; - case 0x1c51c: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1c52c; - pc=0x41600; - run_41600(); return; - case 0x1c52c: - r16 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1c1b0; - run_1c000(); return; - case 0x1c600: - pc=0x1c600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1c600() throws ExecutionException { /* 0x1c600 - 0x1c800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1c600: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; r29 = r29 + -24; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1c654; + page[(r29+16)>>>2] = r16; + r16 = r4 + r0; + r4= page[(r4+4)>>>2]; + page[(r29+20)>>>2] = r31; + r31=0x1c21c; + pc=0x20200; + run_20000(); return; + case 0x1c21c: + r5= page[(r16+0)>>>2]; + r6= page[(r16+4)>>>2]; + r4 = r2 + r0; + r31=0x1c230; + pc=0x56fe0; + run_56800(); return; + case 0x1c230: + r31= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 24; + pc=r31; + return; + case 0x1c400: + r29 = r29 + -40; + r3= page[(r4+4)>>>2]; + r2= page[(r4+8)>>>2]; + page[(r29+28)>>>2] = r17; + r17 = r5 << 24; + page[(r29+24)>>>2] = r16; + page[(r29+36)>>>2] = r31; + page[(r29+32)>>>2] = r18; + r16 = r4 + r0; + r17 = r17 >> 24; + if(r3 == r2) { + pc=0x1c460; continue; } - r3 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; + r2= page[(r4+0)>>>2]; r4 = r3 + 1; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r4; + r3 = r2 + r3; + page[(r16+4)>>>2] = r4; addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x1c638: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1c700; - continue; - } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r31= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r29 = r29 + 40; pc=r31; return; - case 0x1c654: - r4 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r3 = r3 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r3; - if(r3 < 0) { - /* Next insn is delay slot */ - pc=0x1c754; - continue; - } - r3 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r16 = tmp; - case 0x1c690: - r2 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; + case 0x1c460: + r18 = r3 << 1; + r4= page[(r4+0)>>>2]; + r5 = r18 + r0; + r31=0x1c474; + pc=0x4fa00; + run_4f800(); return; + case 0x1c474: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1c6b8; + pc=0x1c4b4; continue; } - r4 = r16 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1c6b8; - pc=0x1ba00; - run_1ba00(); return; - case 0x1c6b8: - r2 = r0 + 10; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x1c6f0; - continue; - } - r2 = r0 + 13; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x1c770; - continue; - } - r2 = r0 + -1; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x1c728; - continue; - } - r2 = r16 << 24; - r2 = r2 >> 24; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c638; - continue; - case 0x1c6f0: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = r0 + 3; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x1c700: - r4 = 7 << 16; - r4 = r4 + -6680; - /* Next insn is delay slot */ - r31=0x1c710; - pc=0x1b000; - run_1b000(); return; - case 0x1c710: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - case 0x1c714: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ + case 0x1c47c: + r3= page[(r16+4)>>>2]; + page[(r16+8)>>>2] = r18; + r4 = r3 + 1; + r3 = r2 + r3; + page[(r16+0)>>>2] = r2; + page[(r16+4)>>>2] = r4; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r31= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r29 = r29 + 40; pc=r31; return; - case 0x1c728: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = r0 + 8; - r4 = 7 << 16; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r4 = r4 + -6680; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x1c748; - pc=0x1b000; - run_1b000(); return; - case 0x1c748: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x1c714; + case 0x1c4b4: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5244; + page[(r29+16)>>>2] = r2; + r31=0x1c4cc; + pc=0x1fc00; + run_1f800(); return; + case 0x1c4cc: + r2= page[(r29+16)>>>2]; + pc=0x1c47c; continue; - case 0x1c754: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1c764; - pc=0x41600; - run_41600(); return; - case 0x1c764: - r16 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1c690; + case 0x1c600: + r29 = r29 + -48; + page[(r29+36)>>>2] = r19; + r19 = 6 << 16; + page[(r29+28)>>>2] = r17; + page[(r29+24)>>>2] = r16; + page[(r29+44)>>>2] = r31; + page[(r29+40)>>>2] = r20; + page[(r29+32)>>>2] = r18; + r16 = r4 + r0; + r17 = r5 + r0; + r19 = r19 + 5244; + pc=0x1c650; continue; - case 0x1c770: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = r0 + 4; - r4 = 7 << 16; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r4 = r4 + -6680; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x1c790; - pc=0x1b000; - run_1b000(); return; - case 0x1c790: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + case 0x1c634: + r2= page[(r16+0)>>>2]; + r4 = r3 + 1; + r3 = r2 + r3; + page[(r16+4)>>>2] = r4; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + if(r18 == r0) { + pc=0x1c6a8; + continue; + } + case 0x1c650: + r3= page[(r16+4)>>>2]; + r2= page[(r16+8)>>>2]; + r17 = r17 + 1; + addr=r17+-1; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x1c714; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r18 = tmp; + if(r3 != r2) { + pc=0x1c634; + continue; + } + r20 = r3 << 1; + r4= page[(r16+0)>>>2]; + r5 = r20 + r0; + r31=0x1c67c; + pc=0x4fa00; + run_4f800(); return; + case 0x1c67c: + if(r2 == r0) { + pc=0x1c6d8; + continue; + } + case 0x1c684: + r3= page[(r16+4)>>>2]; + page[(r16+8)>>>2] = r20; + r4 = r3 + 1; + r3 = r2 + r3; + page[(r16+0)>>>2] = r2; + page[(r16+4)>>>2] = r4; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + if(r18 != r0) { + pc=0x1c650; + continue; + } + case 0x1c6a8: + r2= page[(r16+4)>>>2]; + r31= page[(r29+44)>>>2]; + r2 = r2 + -1; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + page[(r16+4)>>>2] = r2; + r16= page[(r29+24)>>>2]; + r29 = r29 + 48; + pc=r31; + return; + case 0x1c6d8: + r4 = r0 + -3; + r5 = r19 + r0; + page[(r29+16)>>>2] = r2; + r31=0x1c6ec; + pc=0x1fc00; + run_1f800(); return; + case 0x1c6ec: + r2= page[(r29+16)>>>2]; + pc=0x1c684; continue; case 0x1c800: pc=0x1c800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_1c800() throws ExecutionException { /* 0x1c800 - 0x1ca00 */ + private final void run_1c800() throws ExecutionException { /* 0x1c800 - 0x1d000 */ int addr, tmp; for(;;) { switch(pc) { case 0x1c800: - r29 = r29 + -56; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r23; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r22; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r21; - r23 = 7 << 16; - r21 = 7 << 16; - r22 = 7 << 16; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r30; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - r21 = r21 + -6408; - r23 = r23 + -6700; - r22 = r22 + -7236; - case 0x1c848: + r29 = r29 + -48; + r3= page[(r4+4)>>>2]; + page[(r29+24)>>>2] = r16; + r16= page[(r4+8)>>>2]; + page[(r29+36)>>>2] = r19; + r2 = r16 - r3; + r2 = ((r2 & 0xffffffffL) < (r6 & 0xffffffffL)) ? 1 : 0; + page[(r29+32)>>>2] = r18; + page[(r29+28)>>>2] = r17; + page[(r29+44)>>>2] = r31; + r17 = r4 + r0; + page[(r29+40)>>>2] = r20; + r19 = r5 + r0; + r18 = r6 + r0; + r4= page[(r4+0)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1c8b0; + pc=0x1c8c4; continue; } - case 0x1c850: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1c8e4; + r20 = 6 << 16; + r20 = r20 + 5244; + pc=0x1c874; + continue; + case 0x1c854: + r3= page[(r17+4)>>>2]; + page[(r17+8)>>>2] = r16; + r4 = r16 - r3; + r4 = ((r4 & 0xffffffffL) < (r18 & 0xffffffffL)) ? 1 : 0; + page[(r17+0)>>>2] = r2; + if(r4 == r0) { + pc=0x1c8c0; continue; } - r2 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + case 0x1c870: + r4 = r2 + r0; + case 0x1c874: + r16 = r16 << 1; + r5 = r16 + r0; + r31=0x1c884; + pc=0x4fa00; + run_4f800(); return; case 0x1c884: - r3 = r0 + 10; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x1c848; - continue; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r4 = r4 + 1; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r4; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1c850; + pc=0x1c854; continue; } - case 0x1c8b0: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r30 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r23 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x1c8e4: - r5 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r30 = r0 + r0; - r17 = r0 + -1; - r18 = r0 + 13; - r16 = r0 + 10; - case 0x1c8f8: - r4 = (r5&0xffffffffL) < (9&0xffffffffL) ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1cc5c; - run_1cc00(); return; - } - case 0x1c904: - r5 = r5 << 2; - r5 = r21 + r5; - r4 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r4; - return; - case 0x1c91c: - if(r30 == r17) { - /* Next insn is delay slot */ - pc=0x1c9a8; - continue; - } - case 0x1c924: - if(r30 == r18) { - /* Next insn is delay slot */ - pc=0x1c9a8; - continue; - } - if(r30 == r16) { - /* Next insn is delay slot */ - pc=0x1c9a8; - continue; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - case 0x1c93c: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1cab4; - run_1ca00(); return; - } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1c978: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1c91c; - continue; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1c9a0; - pc=0x1ba00; - run_1ba00(); return; - case 0x1c9a0: - if(r30 != r17) { - /* Next insn is delay slot */ - pc=0x1c924; - continue; - } - case 0x1c9a8: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = r0 + 1; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r4; - r5 = r0 + 1; - /* Next insn is delay slot */ - pc=0x1c904; - continue; - case 0x1c9c0: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1cd40; - run_1cc00(); return; - } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1c9fc: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - case 0x1ca00: - pc=0x1ca00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1ca00() throws ExecutionException { /* 0x1ca00 - 0x1cc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1ca00: - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1ca24; - continue; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1ca24; - pc=0x1ba00; - run_1ba00(); return; - case 0x1ca24: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - case 0x1ca28: - r4 = r0 + -1; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1cce8; - run_1cc00(); return; - } - r4 = r30 & 255; - r4 = r4 + r22; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r4 & 16; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1caa0; - continue; - } - r4 = r0 + 32; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1cca0; - run_1cc00(); return; - } - r4 = r30 < 33 ? 1 : 0; + r4 = r0 + -3; + r5 = r20 + r0; + page[(r29+16)>>>2] = r2; + r31=0x1c8a0; + pc=0x1fc00; + run_1f800(); return; + case 0x1c8a0: + r3= page[(r17+4)>>>2]; + r2= page[(r29+16)>>>2]; + r4 = r16 - r3; + r4 = ((r4 & 0xffffffffL) < (r18 & 0xffffffffL)) ? 1 : 0; + page[(r17+8)>>>2] = r16; + page[(r17+0)>>>2] = r2; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x1cc7c; - run_1cc00(); return; - } - r4 = r0 + 59; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1ccb8; - run_1cc00(); return; - } - r4 = r0 + 125; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1cd28; - run_1cc00(); return; - } - r3 = r0 + 58; - if(r30 == r3) { - /* Next insn is delay slot */ - pc=0x1cd18; - run_1cc00(); return; - } - case 0x1ca90: - r4 = 7 << 16; - r4 = r4 + -6740; - /* Next insn is delay slot */ - r31=0x1caa0; - pc=0x1b000; - run_1b000(); return; - case 0x1caa0: - r2 = r30 << 24; - r2 = r2 >> 24; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c884; - run_1c800(); return; - case 0x1cab4: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1cac4; - pc=0x41600; - run_41600(); return; - case 0x1cac4: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1c978; - run_1c800(); return; - case 0x1cad0: - r2 = r0 + 125; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c884; - run_1c800(); return; - case 0x1cae4: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1cd5c; - run_1cc00(); return; - } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1cb20: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1cb48; + pc=0x1c870; continue; } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1cb48; - pc=0x1ba00; - run_1ba00(); return; - case 0x1cb48: - if(r30 != r16) { - /* Next insn is delay slot */ - pc=0x1c9a8; - run_1c800(); return; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r5 = r0 + r0; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x1c904; - run_1c800(); return; - case 0x1cb64: - r2 = r0 + 5; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + 10; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c884; - run_1c800(); return; - case 0x1cb7c: - r2 = r0 + 10; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c884; - run_1c800(); return; - case 0x1cb90: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r19 = r0 + 9; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r20 = r0 + 32; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1cc2c; - run_1cc00(); return; - } - case 0x1cbb0: - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1cbcc: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1cbf4; - continue; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1cbf4; - pc=0x1ba00; - run_1ba00(); return; - case 0x1cbf4: - if(r30 == r19) { - /* Next insn is delay slot */ - pc=0x1cc04; - run_1cc00(); return; - } - if(r30 != r20) { - /* Next insn is delay slot */ - pc=0x1c9a8; - run_1c800(); return; - } - case 0x1cc00: - pc=0x1cc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1cc00() throws ExecutionException { /* 0x1cc00 - 0x1ce00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1cc00: - case 0x1cc04: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x1cbb0; - run_1ca00(); return; - } - case 0x1cc2c: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1cc3c; - pc=0x41600; - run_41600(); return; - case 0x1cc3c: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1cbcc; - run_1ca00(); return; - case 0x1cc48: - r2 = r0 + 13; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c884; - run_1c800(); return; - case 0x1cc5c: - r4 = r23 + r0; - /* Next insn is delay slot */ - r31=0x1cc68; - pc=0x1b800; - run_1b800(); return; - case 0x1cc68: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r5 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1c8f8; - run_1c800(); return; - case 0x1cc7c: - r4 = r0 + 10; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1ccd0; - continue; - } - r4 = r0 + 13; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1cd00; - continue; - } - r4 = r0 + 9; - if(r30 != r4) { - /* Next insn is delay slot */ - pc=0x1ca90; - run_1ca00(); return; - } - case 0x1cca0: - r2 = r0 + 2; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + 32; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c884; - run_1c800(); return; - case 0x1ccb8: - r2 = r0 + 6; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c884; - run_1c800(); return; - case 0x1ccd0: - r2 = r0 + 3; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c884; - run_1c800(); return; - case 0x1cce8: - r2 = r0 + 8; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c884; - run_1c800(); return; - case 0x1cd00: - r2 = r0 + 4; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c884; - run_1c800(); return; - case 0x1cd18: - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c884; - run_1c800(); return; - case 0x1cd28: - r2 = r0 + 7; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1c884; - run_1c800(); return; - case 0x1cd40: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1cd50; - pc=0x41600; - run_41600(); return; - case 0x1cd50: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1c9fc; - run_1c800(); return; - case 0x1cd5c: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1cd6c; - pc=0x41600; - run_41600(); return; - case 0x1cd6c: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1cb20; - run_1ca00(); return; - case 0x1ce00: - pc=0x1ce00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1ce00() throws ExecutionException { /* 0x1ce00 - 0x1d000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1ce00: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r29 = r29 + -56; - r3 = r0 + 32; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r30; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r23; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r22; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r21; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x1d284; - run_1d200(); return; - } - case 0x1ce3c: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1ce78; - continue; - } - case 0x1ce44: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r30 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r23 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ + case 0x1c8c0: + r4 = r2 + r0; + case 0x1c8c4: + r5 = r19 + r0; + r6 = r18 + r0; + r4 = r4 + r3; + r31=0x1c8d8; + pc=0x56fe0; + run_56800(); return; + case 0x1c8d8: + r2= page[(r17+4)>>>2]; + r31= page[(r29+44)>>>2]; + r18 = r2 + r18; + page[(r17+4)>>>2] = r18; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r29 = r29 + 48; pc=r31; return; - case 0x1ce78: - r4 = 7 << 16; - r4 = r4 + -6644; - /* Next insn is delay slot */ - r31=0x1ce88; - pc=0x1b000; - run_1b000(); return; - case 0x1ce88: - r21 = 7 << 16; - r23 = 7 << 16; - r22 = 7 << 16; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r21 = r21 + -6372; - r23 = r23 + -6700; - r22 = r22 + -7236; - case 0x1cea4: + case 0x1ca00: + r29 = r29 + -48; + r3= page[(r4+4)>>>2]; + page[(r29+28)>>>2] = r16; + r16= page[(r4+8)>>>2]; + page[(r29+36)>>>2] = r18; + r2 = r16 - r3; + r2 = (r2&0xffffffffL) < (30&0xffffffffL) ? 1 : 0; + page[(r29+32)>>>2] = r17; + page[(r29+44)>>>2] = r31; + r17 = r4 + r0; + page[(r29+40)>>>2] = r19; + r18 = r5 + r0; + r4= page[(r4+0)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1ce44; + pc=0x1cabc; continue; } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1cf0c; - continue; - } - r2 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x1cee0: - r3 = r0 + 10; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x1cea4; - continue; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r4 = r4 + 1; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=0x1cea4; + r19 = 6 << 16; + r19 = r19 + 5244; + pc=0x1ca6c; continue; - case 0x1cf0c: - r5 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r30 = r0 + r0; - r17 = r0 + -1; - r18 = r0 + 13; - r16 = r0 + 10; - case 0x1cf20: - r4 = (r5&0xffffffffL) < (9&0xffffffffL) ? 1 : 0; + case 0x1ca4c: + r3= page[(r17+4)>>>2]; + page[(r17+8)>>>2] = r16; + r4 = r16 - r3; + r4 = (r4&0xffffffffL) < (30&0xffffffffL) ? 1 : 0; + page[(r17+0)>>>2] = r2; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1d298; - run_1d200(); return; - } - case 0x1cf2c: - r5 = r5 << 2; - r5 = r21 + r5; - r4 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r4; - return; - case 0x1cf44: - if(r30 == r17) { - /* Next insn is delay slot */ - pc=0x1d138; - run_1d000(); return; - } - if(r30 == r18) { - /* Next insn is delay slot */ - pc=0x1d138; - run_1d000(); return; - } - if(r30 == r16) { - /* Next insn is delay slot */ - pc=0x1d138; - run_1d000(); return; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - case 0x1cf64: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1d150; - run_1d000(); return; - } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1cfa0: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1cf44; + pc=0x1cab8; continue; } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1cfc8; - pc=0x1ba00; - run_1ba00(); return; - case 0x1cfc8: - /* Next insn is delay slot */ - pc=0x1cf44; - continue; - case 0x1cfd0: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1d37c; - run_1d200(); return; + case 0x1ca68: + r4 = r2 + r0; + case 0x1ca6c: + r16 = r16 << 1; + r5 = r16 + r0; + r31=0x1ca7c; + pc=0x4fa00; + run_4f800(); return; + case 0x1ca7c: + if(r2 != r0) { + pc=0x1ca4c; + continue; } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + r4 = r0 + -3; + r5 = r19 + r0; + page[(r29+16)>>>2] = r2; + r31=0x1ca98; + pc=0x1fc00; + run_1f800(); return; + case 0x1ca98: + r3= page[(r17+4)>>>2]; + r2= page[(r29+16)>>>2]; + r4 = r16 - r3; + r4 = (r4&0xffffffffL) < (30&0xffffffffL) ? 1 : 0; + page[(r17+8)>>>2] = r16; + page[(r17+0)>>>2] = r2; + if(r4 != r0) { + pc=0x1ca68; + continue; + } + case 0x1cab8: + r4 = r2 + r0; + case 0x1cabc: + r5 = 6 << 16; + r4 = r4 + r3; + r6 = r18 + r0; + r5 = r5 + 3968; + r31=0x1cad4; + pc=0x50c00; + run_50800(); return; + case 0x1cad4: + r3= page[(r17+4)>>>2]; + r31= page[(r29+44)>>>2]; + r2 = r3 + r2; + r19= page[(r29+40)>>>2]; + r18= page[(r29+36)>>>2]; + r16= page[(r29+28)>>>2]; + page[(r17+4)>>>2] = r2; + r17= page[(r29+32)>>>2]; + r29 = r29 + 48; + pc=r31; + return; + case 0x1cc00: + r29 = r29 + -40; + page[(r29+24)>>>2] = r16; + r16 = r4 + r0; + r4= page[(r4+0)>>>2]; + page[(r29+28)>>>2] = r17; + page[(r29+36)>>>2] = r31; + page[(r29+32)>>>2] = r18; + r17 = r5 + r0; + if(r4 == r0) { + pc=0x1ccd4; + continue; + } + r3= page[(r16+8)>>>2]; + case 0x1cc2c: + r18= page[(r17+4)>>>2]; + r3 = ((r3 & 0xffffffffL) < (r18 & 0xffffffffL)) ? 1 : 0; + if(r3 != r0) { + pc=0x1ccb0; + continue; + } + r2 = r4 + r0; + case 0x1cc44: + r3= page[(r17+0)>>>2]; + r4 = r3 + 1; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + if(r3 == r0) { + pc=0x1cc90; + continue; + } + case 0x1cc60: + r5 = r3 < 91 ? 1 : 0; + r6 = r3 | 32; + r2 = r2 + 1; + if(r5 == r0) { + pc=0x1cc78; + continue; + } + r3 = r6 + r0; + case 0x1cc78: + addr=r2+-1; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r4 = r4 + 1; + addr=r4+-1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + if(r3 != r0) { + pc=0x1cc60; + continue; + } + case 0x1cc90: + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r31= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r29 = r29 + 40; + pc=r31; + return; + case 0x1ccb0: + r5 = r18 + r0; + r31=0x1ccbc; + pc=0x4fa00; + run_4f800(); return; + case 0x1ccbc: + if(r2 == r0) { + pc=0x1cd24; + continue; + } + page[(r16+8)>>>2] = r18; + page[(r16+0)>>>2] = r2; + pc=0x1cc44; + continue; + case 0x1ccd4: + r18= page[(r16+8)>>>2]; + r2 = (r18&0xffffffffL) < (128&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x1cd18; + continue; + } + case 0x1cce8: + page[(r16+4)>>>2] = r0; + page[(r16+8)>>>2] = r18; + r4 = r18 + r0; + r31=0x1ccfc; + pc=0x4de00; + run_4d800(); return; + case 0x1ccfc: + page[(r16+0)>>>2] = r2; + if(r2 == r0) { + pc=0x1cd50; + continue; + } + r4 = r2 + r0; + r3 = r18 + r0; + pc=0x1cc2c; + continue; + case 0x1cd18: + r18 = r0 + 128; + pc=0x1cce8; + continue; + case 0x1cd24: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5244; + page[(r29+16)>>>2] = r2; + r31=0x1cd3c; + pc=0x1fc00; + run_1f800(); return; + case 0x1cd3c: + r2= page[(r29+16)>>>2]; + page[(r16+8)>>>2] = r18; + page[(r16+0)>>>2] = r2; + pc=0x1cc44; + continue; + case 0x1cd50: + r31=0x1cd58; + pc=0x1bc00; + run_1b800(); return; + case 0x1cd58: + case 0x1ce00: + r2 = r4 & 255; + pc=r31; + return; case 0x1d000: pc=0x1d000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_1d000() throws ExecutionException { /* 0x1d000 - 0x1d200 */ + private final void run_1d000() throws ExecutionException { /* 0x1d000 - 0x1d800 */ int addr, tmp; for(;;) { switch(pc) { case 0x1d000: - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1d00c: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1d034; - continue; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1d034; - pc=0x1ba00; - run_1ba00(); return; - case 0x1d034: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - case 0x1d038: - r4 = r0 + -1; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1d2e8; - run_1d200(); return; - } - r4 = r30 & 255; - r4 = r4 + r22; + r2= page[(r28+-32696)>>>2]; + r4 = r4 & 255; + r4 = r2 + r4; addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r4 & 16; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1d0b0; - continue; - } - r4 = r0 + 32; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1d324; - run_1d200(); return; - } - r4 = r30 < 33 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x1d2b8; - run_1d200(); return; - } - r4 = r0 + 59; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1d354; - run_1d200(); return; - } - r4 = r0 + 125; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1d300; - run_1d200(); return; - } - r3 = r0 + 58; - if(r30 == r3) { - /* Next insn is delay slot */ - pc=0x1d36c; - run_1d200(); return; - } - case 0x1d0a0: - r4 = 7 << 16; - r4 = r4 + -6740; - /* Next insn is delay slot */ - r31=0x1d0b0; - pc=0x1b000; - run_1b000(); return; - case 0x1d0b0: - r2 = r30 << 24; - r2 = r2 >> 24; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1cee0; - run_1ce00(); return; - case 0x1d0c4: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r19 = r0 + 9; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r20 = r0 + 32; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1d254; - run_1d200(); return; - } - case 0x1d0e4: - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1d100: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1d128; - continue; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1d128; - pc=0x1ba00; - run_1ba00(); return; - case 0x1d128: - if(r30 == r19) { - /* Next insn is delay slot */ - pc=0x1d22c; - run_1d200(); return; - } - if(r30 == r20) { - /* Next insn is delay slot */ - pc=0x1d22c; - run_1d200(); return; - } - case 0x1d138: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = r0 + 1; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r4; - r5 = r0 + 1; - /* Next insn is delay slot */ - pc=0x1cf2c; - run_1ce00(); return; - case 0x1d150: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1d160; - pc=0x41600; - run_41600(); return; - case 0x1d160: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1cfa0; - run_1ce00(); return; - case 0x1d16c: - r2 = r0 + 125; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1cee0; - run_1ce00(); return; - case 0x1d180: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1d398; - run_1d200(); return; - } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1d1bc: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1d1e4; - continue; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1d1e4; - pc=0x1ba00; - run_1ba00(); return; - case 0x1d1e4: - if(r30 != r16) { - /* Next insn is delay slot */ - pc=0x1d138; - continue; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r5 = r0 + r0; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x1cf2c; - run_1ce00(); return; - case 0x1d200: - pc=0x1d200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1d200() throws ExecutionException { /* 0x1d200 - 0x1d400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1d200: - r2 = r0 + 5; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + 10; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1cee0; - run_1ce00(); return; - case 0x1d218: - r2 = r0 + 10; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1cee0; - run_1ce00(); return; - case 0x1d22c: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x1d0e4; - run_1d000(); return; - } - case 0x1d254: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1d264; - pc=0x41600; - run_41600(); return; - case 0x1d264: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1d100; - run_1d000(); return; - case 0x1d270: - r2 = r0 + 13; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1cee0; - run_1ce00(); return; - case 0x1d284: - /* Next insn is delay slot */ - r31=0x1d28c; - pc=0x1c000; - run_1c000(); return; - case 0x1d28c: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ r2 = tmp; - /* Next insn is delay slot */ - pc=0x1ce3c; - run_1ce00(); return; - case 0x1d298: - r4 = r23 + r0; - /* Next insn is delay slot */ - r31=0x1d2a4; - pc=0x1b800; - run_1b800(); return; - case 0x1d2a4: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r5 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1cf20; - run_1ce00(); return; - case 0x1d2b8: - r4 = r0 + 10; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1d33c; - continue; - } - r4 = r0 + 13; - if(r30 != r4) { - /* Next insn is delay slot */ - pc=0x1d318; - continue; - } - r2 = r0 + 4; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1cee0; - run_1ce00(); return; - case 0x1d2e8: - r2 = r0 + 8; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1cee0; - run_1ce00(); return; - case 0x1d300: - r2 = r0 + 7; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1cee0; - run_1ce00(); return; - case 0x1d318: - r4 = r0 + 9; - if(r30 != r4) { - /* Next insn is delay slot */ - pc=0x1d0a0; - run_1d000(); return; - } - case 0x1d324: - r2 = r0 + 2; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + 32; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1cee0; - run_1ce00(); return; - case 0x1d33c: - r2 = r0 + 3; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1cee0; - run_1ce00(); return; - case 0x1d354: - r2 = r0 + 6; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1cee0; - run_1ce00(); return; - case 0x1d36c: - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1cee0; - run_1ce00(); return; - case 0x1d37c: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1d38c; - pc=0x41600; - run_41600(); return; - case 0x1d38c: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1d00c; - run_1d000(); return; - case 0x1d398: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1d3a8; - pc=0x41600; - run_41600(); return; - case 0x1d3a8: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1d1bc; - run_1d000(); return; - case 0x1d400: - pc=0x1d400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1d400() throws ExecutionException { /* 0x1d400 - 0x1d600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1d400: - r29 = r29 + -56; - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - r20 = 7 << 16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r21; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r30; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r23; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r22; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - r16 = r4 + r0; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r0; - r19 = r0 + 1; - r21 = r0 + 39; - r20 = r20 + -6680; - case 0x1d448: - /* Next insn is delay slot */ - r31=0x1d450; - pc=0x1c000; - run_1c000(); return; - case 0x1d450: - r23 = r2 + r0; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x1d48c; - continue; - } - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r3 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x1d758; - run_1d600(); return; - } - case 0x1d478: - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r5 = r2 + 1; - r2 = r3 + r2; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r5; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r23&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x1d48c: - if(r23 == r21) { - /* Next insn is delay slot */ - pc=0x1d534; - continue; - } - r2 = r23 < 40 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1d6e4; - run_1d600(); return; - } - r2 = r0 + 123; - if(r23 == r2) { - /* Next insn is delay slot */ - pc=0x1d744; - run_1d600(); return; - } - r2 = r0 + 125; - if(r23 != r2) { - /* Next insn is delay slot */ - pc=0x1d4bc; - continue; - } - r19 = r19 + -1; - case 0x1d4bc: - if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x1d448; - continue; - } - case 0x1d4c4: - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x1d774; - run_1d600(); return; - } - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x1d4dc; - pc=0x17c00; - run_17c00(); return; - case 0x1d4dc: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + 13; - /* Next insn is delay slot */ - r31=0x1d4ec; - pc=0x17c00; - run_17c00(); return; - case 0x1d4ec: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r30 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r23 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=0x17a00; - run_17a00(); return; - case 0x1d524: - r4 = 7 << 16; - r4 = r4 + -6912; - /* Next insn is delay slot */ - r31=0x1d534; - pc=0x1b200; - run_1b200(); return; - case 0x1d534: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r17 = r0 + 10; - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r22 = r0 + 3; - r18 = r0 + 13; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1d5e0; - continue; - } - case 0x1d550: - r2 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r30 = tmp; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r30&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r30 == r0) { - /* Next insn is delay slot */ - pc=0x1d688; - run_1d600(); return; - } - case 0x1d574: - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x1d5b0; - continue; - } - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x1d70c; - run_1d600(); return; - } - case 0x1d598: - r2 = r3 + 1; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = r5 + r3; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x1d5b0: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1d4bc; - continue; - } - if(r23 == r3) { - /* Next insn is delay slot */ - pc=0x1d4bc; - continue; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1d550; - continue; - } - case 0x1d5e0: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1d728; - run_1d600(); return; - } - case 0x1d600: - pc=0x1d600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1d600() throws ExecutionException { /* 0x1d600 - 0x1d800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1d600: - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1d61c: - r2 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1d644; - continue; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1d644; - pc=0x1ba00; - run_1ba00(); return; - case 0x1d644: - if(r30 == r17) { - /* Next insn is delay slot */ - pc=0x1d67c; - continue; - } - if(r30 == r18) { - /* Next insn is delay slot */ - pc=0x1d6c0; - continue; - } - r2 = r0 + -1; - if(r30 == r2) { - /* Next insn is delay slot */ - pc=0x1d69c; - continue; - } - r30 = r30 << 24; - r30 = r30 >> 24; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r30&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x1d574; - run_1d400(); return; - } - /* Next insn is delay slot */ - pc=0x1d688; - continue; - case 0x1d67c: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r22; - case 0x1d688: - r4 = r20 + r0; - /* Next insn is delay slot */ - r31=0x1d694; - pc=0x1b000; - run_1b000(); return; - case 0x1d694: - /* Next insn is delay slot */ - pc=0x1d574; - run_1d400(); return; - case 0x1d69c: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = r0 + 8; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r4 = r20 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x1d6b8; - pc=0x1b000; - run_1b000(); return; - case 0x1d6b8: - /* Next insn is delay slot */ - pc=0x1d574; - run_1d400(); return; - case 0x1d6c0: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = r0 + 4; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r4 = r20 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x1d6dc; - pc=0x1b000; - run_1b000(); return; - case 0x1d6dc: - /* Next insn is delay slot */ - pc=0x1d574; - run_1d400(); return; - case 0x1d6e4: - r2 = r0 + 13; - if(r23 == r2) { - /* Next insn is delay slot */ - pc=0x1d524; - run_1d400(); return; - } - r2 = r0 + 34; - if(r23 == r2) { - /* Next insn is delay slot */ - pc=0x1d534; - run_1d400(); return; - } - if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x1d448; - run_1d400(); return; - } - /* Next insn is delay slot */ - pc=0x1d4c4; - run_1d400(); return; - case 0x1d70c: - /* Next insn is delay slot */ - r31=0x1d714; - pc=0x17800; - run_17800(); return; - case 0x1d714: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1d598; - run_1d400(); return; - case 0x1d728: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1d738; - pc=0x41600; - run_41600(); return; - case 0x1d738: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1d61c; - continue; - case 0x1d744: - r19 = r19 + 1; - if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x1d448; - run_1d400(); return; - } - /* Next insn is delay slot */ - pc=0x1d4c4; - run_1d400(); return; - case 0x1d758: - /* Next insn is delay slot */ - r31=0x1d760; - pc=0x17800; - run_17800(); return; - case 0x1d760: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1d478; - run_1d400(); return; - case 0x1d774: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r30 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r23 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 56; - /* Next insn is delay slot */ pc=r31; return; + case 0x1d200: + r4 = r4 & 255; + r2 = r4 + -65; + r2 = (r2&0xffffffffL) < (26&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x1d240; + continue; + } + r2 = r4 + -97; + r2 = (r2&0xffffffffL) < (26&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x1d234; + continue; + } + r4 = r4 + -32; + r2 = r4 & 255; + pc=r31; + return; + case 0x1d234: + r2 = r4 + r0; + pc=r31; + return; + case 0x1d240: + r2 = r4 | 128; + pc=r31; + return; + case 0x1d400: + r4 = r4 & 255; + r2 = r4 + -97; + r2 = (r2&0xffffffffL) < (26&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x1d458; + continue; + } + r2 = r4 + -91; + r2 = (r2&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x1d448; + continue; + } + r2 = r0 + 96; + if(r4 == r2) { + pc=0x1d468; + continue; + } + r2 = r0 + 64; + if(r4 == r2) { + pc=0x1d474; + continue; + } + r2 = r4 + r0; + pc=r31; + return; + case 0x1d448: + r4 = r4 + -64; + r2 = r4 & 255; + pc=r31; + return; + case 0x1d458: + r4 = r4 + -96; + r2 = r4 & 255; + pc=r31; + return; + case 0x1d468: + r2 = r0 + 64; + pc=r31; + return; + case 0x1d474: + r2 = r0 + r0; + pc=r31; + return; + case 0x1d600: + r2= page[(r28+-31272)>>>2]; + r4 = r4 & 255; + r25= page[(r2+0)>>>2]; + pc=r25; + return; case 0x1d800: pc=0x1d800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_1d800() throws ExecutionException { /* 0x1d800 - 0x1da00 */ + private final void run_1d800() throws ExecutionException { /* 0x1d800 - 0x1e000 */ int addr, tmp; for(;;) { switch(pc) { case 0x1d800: - r29 = r29 + -56; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r23; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r20; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r23 = tmp; - r20 = r4 << 24; - r20 = r20 >> 24; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r22; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r21; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - if(r23 == r20) { - /* Next insn is delay slot */ - pc=0x1da5c; - run_1da00(); return; - } - if(r23 == r0) { - /* Next insn is delay slot */ - pc=0x1da5c; - run_1da00(); return; - } - r18 = 7 << 16; - r19 = r0 + 34; - r18 = r18 + -6680; - r16 = r0 + 10; - r21 = r0 + 3; - /* Next insn is delay slot */ - pc=0x1d888; - continue; - case 0x1d860: - r2 = r0 + 39; - if(r23 == r2) { - /* Next insn is delay slot */ - pc=0x1d8c0; + r2 = r28 + -32700; + page[(r28+-31272)>>>2] = r2; + pc=r31; + return; + case 0x1da00: + r29 = r29 + -24; + r7 = r5 + r0; + r6 = r0 + 256; + r5 = r0 + 1; + page[(r29+20)>>>2] = r31; + r31=0x1da1c; + pc=0x4c000; + run_4c000(); return; + case 0x1da1c: + r3 = r0 + 256; + if(r2 == r3) { + pc=0x1da44; continue; } - case 0x1d86c: - /* Next insn is delay slot */ - r31=0x1d874; + r31= page[(r29+20)>>>2]; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 3972; + r29 = r29 + 24; + pc=0x1fc00; + run_1f800(); return; + case 0x1da44: + r31= page[(r29+20)>>>2]; + r29 = r29 + 24; + pc=r31; + return; + case 0x1dc00: + r29 = r29 + -32; + r4 = 6 << 16; + r6 = 6 << 16; + r4 = r4 + 17116; + r5 = r29 + 16; + r6 = r6 + 17104; + page[(r29+28)>>>2] = r31; + r31=0x1dc24; + pc=0x42400; + run_42000(); return; + case 0x1dc24: + if(r2 == r0) { + pc=0x1dc40; + continue; + } + r2= page[(r29+16)>>>2]; + case 0x1dc30: + r31= page[(r29+28)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x1dc40: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 4004; + r31=0x1dc54; + pc=0x1fc00; + run_1f800(); return; + case 0x1dc54: + r2 = r0 + r0; + pc=0x1dc30; + continue; + case 0x1de00: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r29 = r29 + -56; + r2 = r0 + 32; + page[(r29+48)>>>2] = r22; + page[(r29+32)>>>2] = r18; + page[(r29+52)>>>2] = r31; + page[(r29+44)>>>2] = r21; + page[(r29+40)>>>2] = r20; + page[(r29+36)>>>2] = r19; + page[(r29+28)>>>2] = r17; + page[(r29+24)>>>2] = r16; + r22 = r4 + r0; + r18 = r5 + r0; + if(r3 == r2) { + pc=0x1dfa0; + continue; + } + case 0x1de3c: + r17 = 6 << 16; + r4 = r17 + 17104; + r31=0x1de4c; + pc=0x1be00; + run_1b800(); return; + case 0x1de4c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 == r18) { + pc=0x1df18; + continue; + } + if(r2 == r0) { + pc=0x1df18; + continue; + } + r16 = r17 + 17104; + r21 = r16 + r0; + r19 = r0 + 34; + r20 = r0 + 39; + pc=0x1de9c; + continue; + case 0x1de7c: + r31=0x1de84; + pc=0x23000; + run_23000(); return; + case 0x1de84: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 == r18) { + pc=0x1df18; + continue; + } + if(r2 == r0) { + pc=0x1df18; + continue; + } + case 0x1de9c: + r3= page[(r16+4)>>>2]; + r4= page[(r16+8)>>>2]; + if(r3 == r4) { + pc=0x1df64; + continue; + } + case 0x1deb0: + r4= page[(r17+17104)>>>2]; + r5 = r3 + 1; + r3 = r4 + r3; + page[(r16+4)>>>2] = r5; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r4 = tmp; + if(r4 == r19) { + pc=0x1dedc; + continue; + } + if(r4 != r20) { + pc=0x1de7c; + continue; + } + case 0x1dedc: + r31=0x1dee4; + pc=0x24800; + run_24800(); return; + case 0x1dee4: + r3= page[(r16+4)>>>2]; + r4= page[(r16+8)>>>2]; + if(r3 == r4) { + pc=0x1df80; + continue; + } + case 0x1def8: + r4 = r3 + 1; + r5= page[(r17+17104)>>>2]; + page[(r16+4)>>>2] = r4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r4 = tmp; + r3 = r5 + r3; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + if(r2 == r0) { + pc=0x1de7c; + continue; + } + case 0x1df18: + r4 = r17 + 17104; + r5 = r0 + r0; + r31=0x1df28; + pc=0x1c400; + run_1c000(); return; + case 0x1df28: + r4 = r17 + 17104; + r31=0x1df34; + pc=0x1c200; + run_1c000(); return; + case 0x1df34: + r31= page[(r29+52)>>>2]; + r21= page[(r29+44)>>>2]; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + page[(r22+0)>>>2] = r2; + r22= page[(r29+48)>>>2]; + r29 = r29 + 56; + pc=r31; + return; + case 0x1df64: + r4 = r21 + r0; + r31=0x1df70; pc=0x1c000; run_1c000(); return; - case 0x1d874: - r23 = r2 + r0; - if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x1da5c; - run_1da00(); return; - } - if(r23 == r0) { - /* Next insn is delay slot */ - pc=0x1da5c; - run_1da00(); return; - } - case 0x1d888: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r3 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x1db10; - run_1da00(); return; - } - case 0x1d8a4: - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r5 = r2 + 1; - r2 = r3 + r2; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r5; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r23&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r23 != r19) { - /* Next insn is delay slot */ - pc=0x1d860; - continue; - } - case 0x1d8c0: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r17 = r0 + 13; - r4 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1d964; - continue; - } - case 0x1d8d8: - r2 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r22 = tmp; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r22&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x1d9f8; - continue; - } - case 0x1d8fc: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x1da20; - run_1da00(); return; - } - case 0x1d918: - r5 = r4 + r0; - r6 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r4 = r3 + 1; - writePages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff] = r4; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r3 = r6 + r3; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1da5c; - run_1da00(); return; - } - case 0x1d944: - if(r23 == r3) { - /* Next insn is delay slot */ - pc=0x1d86c; - continue; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x1d8d8; - continue; - } - case 0x1d964: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1daf4; - run_1da00(); return; - } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r22 = tmp; - case 0x1d9a0: - r2 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1d9c8; - continue; - } - r4 = r22 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1d9c8; - pc=0x1ba00; - run_1ba00(); return; - case 0x1d9c8: - if(r22 == r16) { - /* Next insn is delay slot */ - pc=0x1dad4; - run_1da00(); return; - } - if(r22 == r17) { - /* Next insn is delay slot */ - pc=0x1dab0; - run_1da00(); return; - } - r2 = r0 + -1; - if(r22 == r2) { - /* Next insn is delay slot */ - pc=0x1da8c; - run_1da00(); return; - } - r22 = r22 << 24; - r22 = r22 >> 24; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r22&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x1d8fc; - continue; - } - case 0x1d9f8: - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x1da04; - pc=0x1b000; - run_1b000(); return; - case 0x1da00: - pc=0x1da00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1da00() throws ExecutionException { /* 0x1da00 - 0x1dc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1da00: - case 0x1da04: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x1d918; - run_1d800(); return; - } - case 0x1da20: - /* Next insn is delay slot */ - r31=0x1da28; - pc=0x17800; - run_17800(); return; - case 0x1da28: - r5 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r3 = readPages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff]; - r6 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r4 = r3 + 1; - writePages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff] = r4; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r3 = r6 + r3; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x1d944; - run_1d800(); return; - } - case 0x1da5c: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r23 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r22 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r21 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r20 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x1da8c: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = r0 + 8; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r4 = r18 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x1daa8; - pc=0x1b000; - run_1b000(); return; - case 0x1daa8: - /* Next insn is delay slot */ - pc=0x1da04; - continue; - case 0x1dab0: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = r0 + 4; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r4 = r18 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x1dacc; - pc=0x1b000; - run_1b000(); return; - case 0x1dacc: - /* Next insn is delay slot */ - pc=0x1da04; - continue; - case 0x1dad4: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = r18 + r0; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r21; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x1daec; - pc=0x1b000; - run_1b000(); return; - case 0x1daec: - /* Next insn is delay slot */ - pc=0x1da04; - continue; - case 0x1daf4: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1db04; - pc=0x41600; - run_41600(); return; - case 0x1db04: - r22 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1d9a0; - run_1d800(); return; - case 0x1db10: - /* Next insn is delay slot */ - r31=0x1db18; - pc=0x17800; - run_17800(); return; - case 0x1db18: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1d8a4; - run_1d800(); return; - case 0x1dc00: - pc=0x1dc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1dc00() throws ExecutionException { /* 0x1dc00 - 0x1de00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1dc00: - r29 = r29 + -56; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r23; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - r23 = 7 << 16; - r17 = 7 << 16; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r30; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r22; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r21; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - r16 = r0 + r0; - r17 = r17 + -7236; - r23 = r23 + -6336; - case 0x1dc44: - r3 = r2 & 255; - r3 = r17 + r3; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r3 & 64; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1dd04; - continue; - } - case 0x1dc60: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r5 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r3 == r5) { - /* Next insn is delay slot */ - pc=0x1df24; - run_1de00(); return; - } - case 0x1dc7c: - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r6 = r3 + 1; - r3 = r5 + r3; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r6; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r16 = r16 + 1; - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1dd54; - continue; - } - r2 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x1dcc4: - r3 = r0 + 10; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x1dc44; - continue; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r4 = r4 + 1; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r4; - r3 = r2 & 255; - r3 = r17 + r3; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r3 & 64; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x1dc60; - continue; - } - case 0x1dd04: - if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x1dd1c; - continue; - } - r4 = 7 << 16; - r4 = r4 + -6844; - /* Next insn is delay slot */ - r31=0x1dd1c; - pc=0x1b000; - run_1b000(); return; - case 0x1dd1c: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r2 = r16 + r0; - r30 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r23 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x1dd54: - r5 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r30 = r0 + r0; - r19 = r0 + -1; - r20 = r0 + 13; - r18 = r0 + 10; - case 0x1dd68: - r4 = (r5&0xffffffffL) < (9&0xffffffffL) ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1e0e8; - run_1e000(); return; - } - case 0x1dd74: - r5 = r5 << 2; - r5 = r23 + r5; - r4 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r4; - return; - case 0x1dd8c: - if(r30 == r19) { - /* Next insn is delay slot */ - pc=0x1de18; - run_1de00(); return; - } - case 0x1dd94: - if(r30 == r20) { - /* Next insn is delay slot */ - pc=0x1de18; - run_1de00(); return; - } - if(r30 == r18) { - /* Next insn is delay slot */ - pc=0x1de18; - run_1de00(); return; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - case 0x1ddac: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1df40; - run_1de00(); return; - } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1dde8: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1dd8c; - continue; - } - case 0x1de00: - pc=0x1de00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1de00() throws ExecutionException { /* 0x1de00 - 0x1e000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1de00: - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1de10; - pc=0x1ba00; - run_1ba00(); return; - case 0x1de10: - if(r30 != r19) { - /* Next insn is delay slot */ - pc=0x1dd94; - run_1dc00(); return; - } - case 0x1de18: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = r0 + 1; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r4; - r5 = r0 + 1; - /* Next insn is delay slot */ - pc=0x1dd74; - run_1dc00(); return; - case 0x1de30: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1e1d0; - run_1e000(); return; - } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1de6c: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1de94; - continue; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1de94; - pc=0x1ba00; - run_1ba00(); return; - case 0x1de94: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - case 0x1de98: - r4 = r0 + -1; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1e178; - run_1e000(); return; - } - r4 = r30 & 255; - r4 = r17 + r4; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r4 & 16; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1df10; - continue; - } - r4 = r0 + 32; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1e130; - run_1e000(); return; - } - r4 = r30 < 33 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x1e10c; - run_1e000(); return; - } - r4 = r0 + 59; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1e148; - run_1e000(); return; - } - r4 = r0 + 125; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1e1b8; - run_1e000(); return; - } - r3 = r0 + 58; - if(r30 == r3) { - /* Next insn is delay slot */ - pc=0x1e1a8; - run_1e000(); return; - } - case 0x1df00: - r2 = 7 << 16; - r4 = r2 + -6740; - /* Next insn is delay slot */ - r31=0x1df10; - pc=0x1b000; - run_1b000(); return; - case 0x1df10: - r2 = r30 << 24; - r2 = r2 >> 24; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1dcc4; - run_1dc00(); return; - case 0x1df24: - /* Next insn is delay slot */ - r31=0x1df2c; - pc=0x17800; - run_17800(); return; - case 0x1df2c: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1dc7c; - run_1dc00(); return; - case 0x1df40: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1df50; - pc=0x41600; - run_41600(); return; - case 0x1df50: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1dde8; - run_1dc00(); return; - case 0x1df5c: - r2 = r0 + 125; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1dcc4; - run_1dc00(); return; case 0x1df70: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1e1ec; - run_1e000(); return; - } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + r3= page[(r21+4)>>>2]; + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1dfac: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1dfd4; - continue; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1dfd4; - pc=0x1ba00; - run_1ba00(); return; - case 0x1dfd4: - if(r30 != r18) { - /* Next insn is delay slot */ - pc=0x1de18; - continue; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r5 = r0 + r0; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x1dd74; - run_1dc00(); return; - case 0x1dff0: - r2 = r0 + 5; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + 10; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x1deb0; + continue; + case 0x1df80: + r4 = r21 + r0; + page[(r29+16)>>>2] = r2; + r31=0x1df90; + pc=0x1c000; + run_1c000(); return; + case 0x1df90: + r3= page[(r21+4)>>>2]; + r2= page[(r29+16)>>>2]; + pc=0x1def8; + continue; + case 0x1dfa0: + r31=0x1dfa8; + pc=0x23000; + run_23000(); return; + case 0x1dfa8: + pc=0x1de3c; + continue; case 0x1e000: pc=0x1e000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_1e000() throws ExecutionException { /* 0x1e000 - 0x1e200 */ + private final void run_1e000() throws ExecutionException { /* 0x1e000 - 0x1e800 */ int addr, tmp; for(;;) { switch(pc) { case 0x1e000: - /* Next insn is delay slot */ - pc=0x1dcc4; - run_1dc00(); return; - case 0x1e008: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r21 = r0 + 9; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r22 = r0 + 32; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1e0a4; - continue; - } - case 0x1e028: - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1e044: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1e06c; - continue; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1e06c; - pc=0x1ba00; - run_1ba00(); return; - case 0x1e06c: - if(r30 == r21) { - /* Next insn is delay slot */ - pc=0x1e07c; - continue; - } - if(r30 != r22) { - /* Next insn is delay slot */ - pc=0x1de18; - run_1de00(); return; - } - case 0x1e07c: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x1e028; - continue; - } - case 0x1e0a4: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1e0b4; - pc=0x41600; - run_41600(); return; - case 0x1e0b4: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1e044; - continue; - case 0x1e0c0: - r2 = r0 + 13; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1dcc4; - run_1dc00(); return; - case 0x1e0d4: - r2 = r0 + 10; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1dcc4; - run_1dc00(); return; - case 0x1e0e8: - r4 = 7 << 16; - r4 = r4 + -6700; - /* Next insn is delay slot */ - r31=0x1e0f8; - pc=0x1b800; - run_1b800(); return; - case 0x1e0f8: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r5 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1dd68; - run_1dc00(); return; - case 0x1e10c: - r4 = r0 + 10; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1e160; - continue; - } - r4 = r0 + 13; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1e190; - continue; - } - r4 = r0 + 9; - if(r30 != r4) { - /* Next insn is delay slot */ - pc=0x1df00; - run_1de00(); return; - } - case 0x1e130: - r2 = r0 + 2; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + 32; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1dcc4; - run_1dc00(); return; - case 0x1e148: - r2 = r0 + 6; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1dcc4; - run_1dc00(); return; - case 0x1e160: - r2 = r0 + 3; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1dcc4; - run_1dc00(); return; - case 0x1e178: - r2 = r0 + 8; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1dcc4; - run_1dc00(); return; - case 0x1e190: - r2 = r0 + 4; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1dcc4; - run_1dc00(); return; - case 0x1e1a8: - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1dcc4; - run_1dc00(); return; - case 0x1e1b8: - r2 = r0 + 7; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1dcc4; - run_1dc00(); return; - case 0x1e1d0: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1e1e0; - pc=0x41600; - run_41600(); return; - case 0x1e1e0: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1de6c; - run_1de00(); return; - case 0x1e1ec: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1e1fc; - pc=0x41600; - run_41600(); return; - case 0x1e1fc: - r30 = r2 + r0; - case 0x1e200: - pc=0x1e200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1e200() throws ExecutionException { /* 0x1e200 - 0x1e400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1e200: - /* Next insn is delay slot */ - pc=0x1dfac; - run_1de00(); return; - case 0x1e400: - pc=0x1e400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1e400() throws ExecutionException { /* 0x1e400 - 0x1e600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1e400: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r29 = r29 + -64; - r3 = r0 + 32; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r30; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r23; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r22; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r21; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r20; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r19; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x1e9c4; - run_1e800(); return; - } - case 0x1e43c: - r3 = r0 + 46; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x1e9e0; - run_1e800(); return; - } - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r0; - case 0x1e44c: - r3 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r17 = 7 << 16; - r23 = 7 << 16; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r0; - r16 = r0 + r0; - r17 = r17 + -7236; - r23 = r23 + -6300; - case 0x1e468: - r3 = r2 & 255; - r3 = r17 + r3; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r3 & 64; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1e528; - continue; - } - case 0x1e484: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r5 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r3 == r5) { - /* Next insn is delay slot */ - pc=0x1e758; - run_1e600(); return; - } - case 0x1e4a0: - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r6 = r3 + 1; - r3 = r5 + r3; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r6; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r16 = r16 + 1; - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1e588; - continue; - } - r2 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x1e4e8: - r3 = r0 + 10; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x1e468; - continue; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r4 = r4 + 1; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r4; - r3 = r2 & 255; - r3 = r17 + r3; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r3 & 64; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x1e484; - continue; - } - case 0x1e528: - if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x1e540; - continue; - } - r4 = 7 << 16; - r4 = r4 + -6844; - /* Next insn is delay slot */ - r31=0x1e540; - pc=0x1b000; - run_1b000(); return; - case 0x1e540: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; + r29 = r29 + -32; + r4 = r29 + 20; r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x1e550; - pc=0x17c00; - run_17c00(); return; - case 0x1e550: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r2 = r16 + r0; - r30 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r23 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r22 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r21 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r20 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r19 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 64; - /* Next insn is delay slot */ + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r16; + r31=0x1e01c; + pc=0x26200; + run_26000(); return; + case 0x1e01c: + if(r2 == r0) { + pc=0x1e03c; + continue; + } + case 0x1e024: + r31= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r2 = r0 + r0; + r29 = r29 + 32; pc=r31; return; - case 0x1e588: - r5 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r30 = r0 + r0; - r19 = r0 + -1; - r20 = r0 + 13; - r18 = r0 + 10; - case 0x1e59c: - r4 = (r5&0xffffffffL) < (9&0xffffffffL) ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1e91c; - run_1e800(); return; - } - case 0x1e5a8: - r5 = r5 << 2; - r5 = r23 + r5; - r4 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r4; - return; - case 0x1e5c0: - if(r30 == r19) { - /* Next insn is delay slot */ - pc=0x1e64c; - run_1e600(); return; - } - case 0x1e5c8: - if(r30 == r20) { - /* Next insn is delay slot */ - pc=0x1e64c; - run_1e600(); return; - } - if(r30 == r18) { - /* Next insn is delay slot */ - pc=0x1e64c; - run_1e600(); return; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - case 0x1e5e0: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1e774; - run_1e600(); return; - } - case 0x1e600: - pc=0x1e600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1e600() throws ExecutionException { /* 0x1e600 - 0x1e800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1e600: - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1e61c: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1e5c0; - run_1e400(); return; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1e644; - pc=0x1ba00; - run_1ba00(); return; - case 0x1e644: - if(r30 != r19) { - /* Next insn is delay slot */ - pc=0x1e5c8; - run_1e400(); return; - } - case 0x1e64c: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = r0 + 1; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r4; - r5 = r0 + 1; - /* Next insn is delay slot */ - pc=0x1e5a8; - run_1e400(); return; - case 0x1e664: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1ea4c; - run_1ea00(); return; - } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1e6a0: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1e6c8; + case 0x1e03c: + r5 = 6 << 16; + r6= page[(r29+20)>>>2]; + r4 = r29 + 16; + r5 = r5 + 30256; + r7 = r0 + r0; + r31=0x1e058; + pc=0x42800; + run_42800(); return; + case 0x1e058: + r2= page[(r29+16)>>>2]; + if(r2 == r0) { + pc=0x1e024; continue; } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1e6c8; - pc=0x1ba00; - run_1ba00(); return; - case 0x1e6c8: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - case 0x1e6cc: - r4 = r0 + -1; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1e9ac; - run_1e800(); return; - } - r4 = r30 & 255; - r4 = r17 + r4; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r4 & 16; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1e744; + r16= page[(r2+16)>>>2]; + r2 = r0 + 1; + page[(r16+36)>>>2] = r2; + r2= page[(r16+0)>>>2]; + if(r2 == r0) { + pc=0x1e0a8; continue; } - r4 = r0 + 32; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1e964; - run_1e800(); return; - } - r4 = r30 < 33 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x1e940; - run_1e800(); return; - } - r4 = r0 + 59; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1e97c; - run_1e800(); return; - } - r4 = r0 + 125; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1ea34; - run_1ea00(); return; - } - r3 = r0 + 58; - if(r30 == r3) { - /* Next insn is delay slot */ - pc=0x1ea24; - run_1ea00(); return; - } - case 0x1e734: - r2 = 7 << 16; - r4 = r2 + -6740; - /* Next insn is delay slot */ - r31=0x1e744; - pc=0x1b000; - run_1b000(); return; - case 0x1e744: - r2 = r30 << 24; - r2 = r2 >> 24; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1e4e8; - run_1e400(); return; - case 0x1e758: - /* Next insn is delay slot */ - r31=0x1e760; - pc=0x17800; - run_17800(); return; - case 0x1e760: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1e4a0; - run_1e400(); return; - case 0x1e774: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1e784; - pc=0x41600; - run_41600(); return; - case 0x1e784: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1e61c; + case 0x1e084: + r2= page[(r2+4)>>>2]; + r4 = r16 + r0; + pc=r2; + r31=0x1e094; + return; + case 0x1e094: + r31= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x1e0a8: + r4 = 6 << 16; + r4 = r4 + 4036; + r5 = r0 + r0; + r31=0x1e0bc; + pc=0x21400; + run_21000(); return; + case 0x1e0bc: + r2= page[(r16+0)>>>2]; + pc=0x1e084; continue; - case 0x1e790: - r2 = r0 + 125; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1e4e8; - run_1e400(); return; - case 0x1e7a4: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1ea68; - run_1ea00(); return; + case 0x1e200: + r29 = r29 + -104; + page[(r29+88)>>>2] = r20; + r20= page[(r28+-32692)>>>2]; + r3 = r29 + 48; + page[(r29+72)>>>2] = r16; + r5 = r20 + r0; + r16 = r4 + r0; + r6 = r0 + 20; + r4 = r3 + r0; + page[(r29+100)>>>2] = r31; + page[(r29+96)>>>2] = r22; + page[(r29+92)>>>2] = r21; + page[(r29+84)>>>2] = r19; + page[(r29+80)>>>2] = r18; + page[(r29+76)>>>2] = r17; + r31=0x1e244; + pc=0x56fe0; + run_56800(); return; + case 0x1e244: + r3 = r2 + r0; + page[(r28+-32692)>>>2] = r3; + r5= page[(r16+4)>>>2]; + r3= page[(r16+48)>>>2]; + r2 = r0 + 1; + page[(r29+52)>>>2] = r3; + r3 = (r5&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; + page[(r29+56)>>>2] = r2; + if(r3 != r0) { + pc=0x1e37c; + continue; } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + r2 = r0 + 2; + if(r5 != r2) { + pc=0x1e33c; + continue; + } + r2= page[(r16+8)>>>2]; + if(r2 == r0) { + pc=0x1e34c; + continue; + } + r22 = 6 << 16; + r21 = r16 + 16; + r6 = r0 + r0; + r17 = r29 + 16; + r19 = r0 + 125; + r22 = r22 + 4056; + pc=0x1e2ac; + continue; + case 0x1e2a8: + r6 = r18 + r0; + case 0x1e2ac: + r2= page[(r16+16)>>>2]; + r4 = r21 + r0; + r2= page[(r2+36)>>>2]; + r5 = r17 + r0; + r18 = r6 + 1; + pc=r2; + r31=0x1e2c8; + return; + case 0x1e2c8: + r4= page[(r16+0)>>>2]; + r5 = r17 + r0; + r6 = r0 + 3; + r31=0x1e2dc; + pc=0x40e00; + run_40800(); return; + case 0x1e2dc: + r3= page[(r16+48)>>>2]; + r2= page[(r28+-32692)>>>2]; + page[(r2+4)>>>2] = r3; + r3= page[(r16+52)>>>2]; + page[(r2+16)>>>2] = r3; + r31=0x1e300; + pc=0x20800; + run_20800(); return; + case 0x1e300: + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1e7e0: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1e808; - run_1e800(); return; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + if(r5 == r19) { + pc=0x1e31c; + continue; } - r4 = r30 << 24; - r4 = r4 >> 24; + r4 = r22 + r0; + r31=0x1e31c; + pc=0x21400; + run_21000(); return; + case 0x1e31c: + r2= page[(r16+8)>>>2]; + r2 = r2 + -1; + page[(r16+8)>>>2] = r2; + if(r2 != r0) { + pc=0x1e2a8; + continue; + } + pc=0x1e34c; + continue; + case 0x1e33c: + r4 = 6 << 16; + r4 = r4 + 4080; + r31=0x1e34c; + pc=0x21400; + run_21000(); return; + case 0x1e34c: + r31= page[(r29+100)>>>2]; + r22= page[(r29+96)>>>2]; + r21= page[(r29+92)>>>2]; + r19= page[(r29+84)>>>2]; + r18= page[(r29+80)>>>2]; + r17= page[(r29+76)>>>2]; + r16= page[(r29+72)>>>2]; + page[(r28+-32692)>>>2] = r20; + r20= page[(r29+88)>>>2]; + r29 = r29 + 104; + pc=r31; + return; + case 0x1e37c: + page[(r29+24)>>>2] = r2; + r3 = 6 << 16; + r2= page[(r16+28)>>>2]; + r4= page[(r16+0)>>>2]; + r17 = r29 + 16; + r3 = r3 + 15440; + r5 = r17 + r0; + r6 = r0 + 1; + page[(r29+16)>>>2] = r3; + page[(r29+28)>>>2] = r0; + page[(r29+32)>>>2] = r0; + page[(r29+40)>>>2] = r2; + r31=0x1e3b4; + pc=0x40e00; + run_40800(); return; + case 0x1e3b4: + r5= page[(r16+24)>>>2]; + if(r5 != r0) { + pc=0x1e4c4; + continue; + } + case 0x1e3c4: + r18= page[(r16+0)>>>2]; + r4 = r17 + r0; + r5 = r18 + r0; + r6 = r0 + 32; + r31=0x1e3dc; + pc=0x56fe0; + run_56800(); return; + case 0x1e3dc: + r2 = r0 + 1; + page[(r18+36)>>>2] = r2; + r2= page[(r16+16)>>>2]; + page[(r29+32)>>>2] = r2; + r2= page[(r16+8)>>>2]; + if(r2 == r0) { + pc=0x1e498; + continue; + } + r21 = 6 << 16; + r19 = r0 + 125; + r21 = r21 + 4056; + pc=0x1e418; + continue; + case 0x1e414: + r18= page[(r16+0)>>>2]; + case 0x1e418: + r5 = r17 + r0; + r4 = r18 + r0; + r6 = r0 + 32; + r31=0x1e42c; + pc=0x56fe0; + run_56800(); return; + case 0x1e42c: + r3= page[(r16+48)>>>2]; + r2= page[(r28+-32692)>>>2]; + page[(r2+4)>>>2] = r3; + r3= page[(r16+52)>>>2]; + page[(r2+16)>>>2] = r3; + r31=0x1e450; + pc=0x20800; + run_20800(); return; + case 0x1e450: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + if(r5 == r19) { + pc=0x1e46c; + continue; + } + r4 = r21 + r0; + r31=0x1e46c; + pc=0x21400; + run_21000(); return; + case 0x1e46c: + r3= page[(r29+32)>>>2]; + r2= page[(r16+20)>>>2]; + r2 = r3 + r2; + page[(r29+32)>>>2] = r2; + r2= page[(r16+8)>>>2]; + r2 = r2 + -1; + page[(r16+8)>>>2] = r2; + if(r2 != r0) { + pc=0x1e414; + continue; + } + case 0x1e498: + r3= page[(r16+4)>>>2]; + r2 = r0 + 1; + if(r3 != r2) { + pc=0x1e34c; + continue; + } + r4= page[(r16+0)>>>2]; + r5 = r17 + r0; + r6 = r0 + 32; + r31=0x1e4bc; + pc=0x56fe0; + run_56800(); return; + case 0x1e4bc: + pc=0x1e34c; + continue; + case 0x1e4c4: + r4= page[(r16+0)>>>2]; + r31=0x1e4d0; + pc=0x41000; + run_41000(); return; + case 0x1e4d0: + pc=0x1e3c4; + continue; + case 0x1e600: + r2= page[(r28+-32692)>>>2]; + r29 = r29 + -32; + r2= page[(r2+4)>>>2]; + page[(r29+20)>>>2] = r17; + page[(r29+16)>>>2] = r16; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r18; + page[(r4+0)>>>2] = r2; + r17 = r5 << 24; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r17 = r17 >> 24; + r16 = r4 + r0; + page[(r4+4)>>>2] = r0; + page[(r4+8)>>>2] = r0; + if(r2 == r17) { + pc=0x1e6bc; + continue; + } + r31=0x1e648; + pc=0x26e00; + run_26800(); return; + case 0x1e648: + if(r2 == r0) { + pc=0x1e6bc; + continue; + } + r2 = 6 << 16; + r18= page[(r2+17104)>>>2]; + r5 = 6 << 16; + r4 = r18 + r0; + r5 = r5 + 4096; + r31=0x1e66c; + pc=0x51600; + run_51000(); return; + case 0x1e66c: + if(r2 == r0) { + pc=0x1e698; + continue; + } + r5 = 6 << 16; + r4 = r18 + r0; + r5 = r5 + 4104; + r31=0x1e688; + pc=0x51600; + run_51000(); return; + case 0x1e688: + if(r2 != r0) { + pc=0x1e6d8; + continue; + } + r2 = r0 + 1; + page[(r16+4)>>>2] = r2; + case 0x1e698: + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r4 = r16 + 8; + r5 = r17 + r0; + r16= page[(r29+16)>>>2]; + r17= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=0x1de00; + run_1d800(); return; + case 0x1e6bc: + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x1e6d8: + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r29 = r29 + 32; + pc=0x1fc00; + run_1f800(); return; case 0x1e800: pc=0x1e800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_1e800() throws ExecutionException { /* 0x1e800 - 0x1ea00 */ + private final void run_1e800() throws ExecutionException { /* 0x1e800 - 0x1f000 */ int addr, tmp; for(;;) { switch(pc) { case 0x1e800: - /* Next insn is delay slot */ - r31=0x1e808; - pc=0x1ba00; - run_1ba00(); return; - case 0x1e808: - if(r30 != r18) { - /* Next insn is delay slot */ - pc=0x1e64c; - run_1e600(); return; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r5 = r0 + r0; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x1e5a8; - run_1e400(); return; - case 0x1e824: - r2 = r0 + 5; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + 10; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1e4e8; - run_1e400(); return; - case 0x1e83c: - r2 = r0 + 13; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1e4e8; - run_1e400(); return; - case 0x1e850: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r21 = r0 + 9; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r22 = r0 + 32; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1e8ec; - continue; - } - case 0x1e870: - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1e88c: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1e8b4; - continue; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1e8b4; - pc=0x1ba00; - run_1ba00(); return; - case 0x1e8b4: - if(r30 == r21) { - /* Next insn is delay slot */ - pc=0x1e8c4; - continue; - } - if(r30 != r22) { - /* Next insn is delay slot */ - pc=0x1e64c; - run_1e600(); return; - } - case 0x1e8c4: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x1e870; - continue; - } - case 0x1e8ec: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1e8fc; - pc=0x41600; - run_41600(); return; - case 0x1e8fc: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1e88c; - continue; - case 0x1e908: - r2 = r0 + 10; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1e4e8; - run_1e400(); return; - case 0x1e91c: - r4 = 7 << 16; - r4 = r4 + -6700; - /* Next insn is delay slot */ - r31=0x1e92c; - pc=0x1b800; - run_1b800(); return; - case 0x1e92c: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r5 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1e59c; - run_1e400(); return; - case 0x1e940: - r4 = r0 + 10; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1e994; - continue; - } - r4 = r0 + 13; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1ea0c; - run_1ea00(); return; - } - r4 = r0 + 9; - if(r30 != r4) { - /* Next insn is delay slot */ - pc=0x1e734; - run_1e600(); return; - } - case 0x1e964: - r2 = r0 + 2; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + 32; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1e4e8; - run_1e400(); return; - case 0x1e97c: - r2 = r0 + 6; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1e4e8; - run_1e400(); return; - case 0x1e994: - r2 = r0 + 3; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1e4e8; - run_1e400(); return; - case 0x1e9ac: - r2 = r0 + 8; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1e4e8; - run_1e400(); return; - case 0x1e9c4: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - r31=0x1e9d0; - pc=0x1c000; - run_1c000(); return; - case 0x1e9d0: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r4 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1e43c; - run_1e400(); return; - case 0x1e9e0: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - r31=0x1e9ec; - pc=0x1c000; - run_1c000(); return; - case 0x1e9ec: - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r4 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r2; + r2= page[(r28+-32692)>>>2]; + r4 = r4 + 8; + r2= page[(r2+4)>>>2]; + r5 = r0 + 123; + page[(r4+-8)>>>2] = r2; + page[(r4+-4)>>>2] = r0; + pc=0x1de00; + run_1d800(); return; case 0x1ea00: - pc=0x1ea00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1ea00() throws ExecutionException { /* 0x1ea00 - 0x1ec00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1ea00: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x1e44c; - run_1e400(); return; - case 0x1ea0c: - r2 = r0 + 4; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1e4e8; - run_1e400(); return; - case 0x1ea24: - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1e4e8; - run_1e400(); return; - case 0x1ea34: - r2 = r0 + 7; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1e4e8; - run_1e400(); return; - case 0x1ea4c: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1ea5c; - pc=0x41600; - run_41600(); return; - case 0x1ea5c: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1e6a0; - run_1e600(); return; - case 0x1ea68: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1ea78; - pc=0x41600; - run_41600(); return; - case 0x1ea78: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1e7e0; - run_1e600(); return; - case 0x1ec00: - pc=0x1ec00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1ec00() throws ExecutionException { /* 0x1ec00 - 0x1ee00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1ec00: - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r29 = r29 + -56; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r23; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r30; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r22; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r21; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - r17 = 7 << 16; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r0; - r23 = 7 << 16; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r16 = r0 + r0; - r17 = r17 + -7236; - r23 = r23 + -6264; - case 0x1ec4c: - r3 = r2 & 255; - r3 = r17 + r3; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r3 & 64; + r29 = r29 + -88; + page[(r29+80)>>>2] = r20; + r20= page[(r28+-32692)>>>2]; + r3 = r29 + 40; + page[(r29+64)>>>2] = r16; + r5 = r20 + r0; + r16 = r4 + r0; + r6 = r0 + 20; + r4 = r3 + r0; + page[(r29+76)>>>2] = r19; + page[(r29+72)>>>2] = r18; + page[(r29+68)>>>2] = r17; + page[(r29+84)>>>2] = r31; + r31=0x1ea3c; + pc=0x56fe0; + run_56800(); return; + case 0x1ea3c: + r3 = r2 + r0; + r19 = 6 << 16; + r2 = r0 + 1; + r18 = 6 << 16; + page[(r29+48)>>>2] = r2; + page[(r28+-32692)>>>2] = r3; + r2 = r3 + r0; + r19 = r19 + 5020; + r17 = r0 + 125; + r18 = r18 + 4056; + case 0x1ea64: + r3= page[(r16+8)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1ed0c; + pc=0x1eacc; continue; } - case 0x1ec68: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r5 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r3 == r5) { - /* Next insn is delay slot */ - pc=0x1ef3c; - run_1ee00(); return; + r4= page[(r16+0)>>>2]; + page[(r2+16)>>>2] = r3; + page[(r2+4)>>>2] = r4; + r31=0x1ea88; + pc=0x23000; + run_23000(); return; + case 0x1ea88: + r4 = r29 + 16; + r31=0x1ea94; + pc=0x1a400; + run_1a000(); return; + case 0x1ea94: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r0) { + pc=0x1ebd8; + continue; } - case 0x1ec84: - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r6 = r3 + 1; - r3 = r5 + r3; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r6; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r16 = r16 + 1; - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; + case 0x1eaa4: + r2= page[(r16+4)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1ed6c; + pc=0x1eba8; continue; } - r2 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + r2= page[(r29+24)>>>2]; + r2 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + case 0x1eac0: + if(r2 == r0) { + pc=0x1eb7c; + continue; + } + r2= page[(r28+-32692)>>>2]; + case 0x1eacc: + r3= page[(r16+12)>>>2]; + page[(r2+4)>>>2] = r3; + r3= page[(r16+16)>>>2]; + page[(r2+16)>>>2] = r3; + r31=0x1eaec; + pc=0x20800; + run_20800(); return; + case 0x1eaec: + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + if(r5 == r17) { + pc=0x1eb08; + continue; + } + r4 = r18 + r0; + r31=0x1eb08; + pc=0x21400; + run_21000(); return; + case 0x1eb08: + r2= page[(r16+28)>>>2]; + if(r2 == r0) { + pc=0x1eb70; + continue; + } + r3= page[(r28+-32692)>>>2]; + r4= page[(r16+20)>>>2]; + page[(r3+16)>>>2] = r2; + page[(r3+4)>>>2] = r4; + r31=0x1eb30; + pc=0x23000; + run_23000(); return; + case 0x1eb30: + r4 = r29 + 16; + r31=0x1eb3c; + pc=0x1a400; + run_1a000(); return; + case 0x1eb3c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x1eccc: - r3 = r0 + 10; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x1ec4c; + if(r2 != r0) { + pc=0x1ebf0; continue; } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r4 = r4 + 1; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r4; - r3 = r2 & 255; - r3 = r17 + r3; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r3 & 64; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x1ec68; + case 0x1eb4c: + r2= page[(r16+24)>>>2]; + if(r2 == r0) { + pc=0x1ebbc; continue; } - case 0x1ed0c: - if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x1ed24; + r2= page[(r29+24)>>>2]; + r2 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x1eb7c; continue; } - r4 = 7 << 16; - r4 = r4 + -6844; - /* Next insn is delay slot */ - r31=0x1ed24; - pc=0x1b000; - run_1b000(); return; - case 0x1ed24: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x1ed34; - pc=0x17c00; - run_17c00(); return; - case 0x1ed34: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r2 = r16 + r0; - r30 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r23 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ + case 0x1eb70: + r2= page[(r28+-32692)>>>2]; + pc=0x1ea64; + continue; + case 0x1eb7c: + r31= page[(r29+84)>>>2]; + r19= page[(r29+76)>>>2]; + r18= page[(r29+72)>>>2]; + r17= page[(r29+68)>>>2]; + r16= page[(r29+64)>>>2]; + page[(r28+-32692)>>>2] = r20; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r20= page[(r29+80)>>>2]; + r29 = r29 + 88; pc=r31; return; - case 0x1ed6c: - r5 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r30 = r0 + r0; - r19 = r0 + -1; - r20 = r0 + 13; - r18 = r0 + 10; - case 0x1ed80: - r4 = (r5&0xffffffffL) < (9&0xffffffffL) ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1f100; - run_1f000(); return; - } - case 0x1ed8c: - r5 = r5 << 2; - r5 = r23 + r5; - r4 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r4; - return; - case 0x1eda4: - if(r30 == r19) { - /* Next insn is delay slot */ - pc=0x1ee30; - run_1ee00(); return; - } - case 0x1edac: - if(r30 == r20) { - /* Next insn is delay slot */ - pc=0x1ee30; - run_1ee00(); return; - } - if(r30 == r18) { - /* Next insn is delay slot */ - pc=0x1ee30; - run_1ee00(); return; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - case 0x1edc4: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1ef58; - run_1ee00(); return; - } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1ee00: - pc=0x1ee00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1ee00() throws ExecutionException { /* 0x1ee00 - 0x1f000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1ee00: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1eda4; - run_1ec00(); return; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1ee28; - pc=0x1ba00; - run_1ba00(); return; - case 0x1ee28: - if(r30 != r19) { - /* Next insn is delay slot */ - pc=0x1edac; - run_1ec00(); return; - } - case 0x1ee30: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = r0 + 1; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r4; - r5 = r0 + 1; - /* Next insn is delay slot */ - pc=0x1ed8c; - run_1ec00(); return; - case 0x1ee48: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1f1e8; - run_1f000(); return; - } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1ee84: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1eeac; - continue; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1eeac; - pc=0x1ba00; - run_1ba00(); return; - case 0x1eeac: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - case 0x1eeb0: - r4 = r0 + -1; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1f190; - run_1f000(); return; - } - r4 = r30 & 255; - r4 = r17 + r4; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r4 & 16; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1ef28; - continue; - } - r4 = r0 + 32; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1f148; - run_1f000(); return; - } - r4 = r30 < 33 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x1f124; - run_1f000(); return; - } - r4 = r0 + 59; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1f160; - run_1f000(); return; - } - r4 = r0 + 125; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1f1d0; - run_1f000(); return; - } - r3 = r0 + 58; - if(r30 == r3) { - /* Next insn is delay slot */ - pc=0x1f1c0; - run_1f000(); return; - } - case 0x1ef18: - r2 = 7 << 16; - r4 = r2 + -6740; - /* Next insn is delay slot */ - r31=0x1ef28; - pc=0x1b000; - run_1b000(); return; - case 0x1ef28: - r2 = r30 << 24; - r2 = r2 >> 24; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1eccc; - run_1ec00(); return; - case 0x1ef3c: - /* Next insn is delay slot */ - r31=0x1ef44; - pc=0x17800; - run_17800(); return; - case 0x1ef44: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1ec84; - run_1ec00(); return; - case 0x1ef58: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1ef68; - pc=0x41600; - run_41600(); return; - case 0x1ef68: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1ee00; + case 0x1eba8: + r2= page[(r29+24)>>>2]; + r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; + pc=0x1eac0; continue; - case 0x1ef74: - r2 = r0 + 125; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1eccc; - run_1ec00(); return; - case 0x1ef88: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1f204; - run_1f200(); return; + case 0x1ebbc: + r2= page[(r29+24)>>>2]; + r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; + if(r2 != r0) { + pc=0x1eb70; + continue; } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + pc=0x1eb7c; + continue; + case 0x1ebd8: + r4 = r0 + -3; + r5 = r19 + r0; + r31=0x1ebe8; + pc=0x1fc00; + run_1f800(); return; + case 0x1ebe8: + pc=0x1eaa4; + continue; + case 0x1ebf0: + r4 = r0 + -3; + r5 = r19 + r0; + r31=0x1ec00; + pc=0x1fc00; + run_1f800(); return; + case 0x1ec00: + pc=0x1eb4c; + continue; + case 0x1ee00: + r2 = 6 << 16; + r2= page[(r2+31344)>>>2]; + r29 = r29 + -32; + r2 = r2 < 3 ? 1 : 0; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + page[(r29+28)>>>2] = r31; + r16 = r4 + r0; + r17 = r5 + r0; + if(r2 == r0) { + pc=0x1ee88; + continue; + } + case 0x1ee2c: + r4 = r17 + r0; + r5 = r16 + r0; + r31=0x1ee3c; + pc=0x22e00; + run_22800(); return; + case 0x1ee3c: + r31=0x1ee44; + pc=0x20800; + run_20800(); return; + case 0x1ee44: + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1efc4: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1efec; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 13; + if(r3 == r2) { + pc=0x1ee68; continue; } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1efec; - pc=0x1ba00; - run_1ba00(); return; - case 0x1efec: - if(r30 != r18) { - /* Next insn is delay slot */ - pc=0x1ee30; - continue; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r5 = r0 + r0; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 4140; + r31=0x1ee68; + pc=0x1fc00; + run_1f800(); return; + case 0x1ee68: + r2= page[(r28+-32692)>>>2]; + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r4= page[(r2+16)>>>2]; + r29 = r29 + 32; + pc=0x49e00; + run_49800(); return; + case 0x1ee88: + r4 = 6 << 16; + r4 = r4 + 4112; + r31=0x1ee98; + pc=0x4f200; + run_4f000(); return; + case 0x1ee98: + pc=0x1ee2c; + continue; case 0x1f000: pc=0x1f000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_1f000() throws ExecutionException { /* 0x1f000 - 0x1f200 */ + private final void run_1f000() throws ExecutionException { /* 0x1f000 - 0x1f800 */ int addr, tmp; for(;;) { switch(pc) { case 0x1f000: - /* Next insn is delay slot */ - pc=0x1ed8c; - run_1ec00(); return; - case 0x1f008: - r2 = r0 + 5; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + 10; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + r2 = r0 + 33; + addr=r4+0; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1eccc; - run_1ec00(); return; - case 0x1f020: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r21 = r0 + 9; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r22 = r0 + 32; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1f0bc; - continue; - } - case 0x1f040: - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1f05c: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1f084; - continue; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1f084; - pc=0x1ba00; - run_1ba00(); return; - case 0x1f084: - if(r30 == r21) { - /* Next insn is delay slot */ - pc=0x1f094; - continue; - } - if(r30 != r22) { - /* Next insn is delay slot */ - pc=0x1ee30; - run_1ee00(); return; - } - case 0x1f094: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x1f040; - continue; - } - case 0x1f0bc: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1f0cc; - pc=0x41600; - run_41600(); return; - case 0x1f0cc: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1f05c; - continue; - case 0x1f0d8: - r2 = r0 + 13; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1eccc; - run_1ec00(); return; - case 0x1f0ec: - r2 = r0 + 10; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1eccc; - run_1ec00(); return; - case 0x1f100: - r4 = 7 << 16; - r4 = r4 + -6700; - /* Next insn is delay slot */ - r31=0x1f110; - pc=0x1b800; - run_1b800(); return; - case 0x1f110: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r5 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1ed80; - run_1ec00(); return; - case 0x1f124: - r4 = r0 + 10; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1f178; - continue; - } - r4 = r0 + 13; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1f1a8; - continue; - } - r4 = r0 + 9; - if(r30 != r4) { - /* Next insn is delay slot */ - pc=0x1ef18; - run_1ee00(); return; - } - case 0x1f148: - r2 = r0 + 2; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + 32; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1eccc; - run_1ec00(); return; - case 0x1f160: - r2 = r0 + 6; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1eccc; - run_1ec00(); return; - case 0x1f178: + page[(addr)>>>2] = tmp; r2 = r0 + 3; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1eccc; - run_1ec00(); return; - case 0x1f190: - r2 = r0 + 8; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1eccc; - run_1ec00(); return; - case 0x1f1a8: - r2 = r0 + 4; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1eccc; - run_1ec00(); return; - case 0x1f1c0: - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1eccc; - run_1ec00(); return; - case 0x1f1d0: - r2 = r0 + 7; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1eccc; - run_1ec00(); return; - case 0x1f1e8: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1f1f8; - pc=0x41600; - run_41600(); return; - case 0x1f1f8: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1ee84; - run_1ee00(); return; - case 0x1f200: - pc=0x1f200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1f200() throws ExecutionException { /* 0x1f200 - 0x1f400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1f200: - case 0x1f204: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1f214; - pc=0x41600; - run_41600(); return; - case 0x1f214: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1efc4; - run_1ee00(); return; - case 0x1f400: - pc=0x1f400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1f400() throws ExecutionException { /* 0x1f400 - 0x1f600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1f400: - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r29 = r29 + -56; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r23; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r30; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r22; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r21; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - r17 = 7 << 16; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r0; - r23 = 7 << 16; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r16 = r0 + r0; - r17 = r17 + -7236; - r23 = r23 + -6228; - case 0x1f44c: - r3 = r2 & 255; - r3 = r17 + r3; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r3 & 64; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1f50c; - continue; - } - case 0x1f468: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r5 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r3 == r5) { - /* Next insn is delay slot */ - pc=0x1f750; - run_1f600(); return; - } - case 0x1f484: - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r6 = r3 + 1; - r3 = r5 + r3; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r6; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r16 = r16 + 1; - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1f580; - continue; - } - r2 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x1f4cc: - r3 = r0 + 10; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x1f44c; - continue; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r4 = r4 + 1; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r4; - r3 = r2 & 255; - r3 = r17 + r3; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r3 & 64; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x1f468; - continue; - } - case 0x1f50c: - if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x1f524; - continue; - } - r4 = 7 << 16; - r4 = r4 + -6844; - /* Next insn is delay slot */ - r31=0x1f524; - pc=0x1b000; - run_1b000(); return; - case 0x1f524: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x1f534; - pc=0x17c00; - run_17c00(); return; - case 0x1f534: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r4 + r0; - /* Next insn is delay slot */ - r31=0x1f548; - pc=0x18000; - run_18000(); return; - case 0x1f548: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r2 = r16 + r0; - r30 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r23 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ + page[(r4+16)>>>2] = r2; + r2 = r0 + 10; + page[(r4+20)>>>2] = r2; + r2= page[(r28+-31512)>>>2]; + r3 = r0 + 1; + r2= page[(r2+12)>>>2]; + page[(r4+8)>>>2] = r3; + page[(r4+36)>>>2] = r3; + page[(r4+56)>>>2] = r3; + r3 = 1 << 16; + page[(r4+32)>>>2] = r2; + r5 = r0 + 7; + r2 = r0 + -1; + page[(r4+60)>>>2] = r3; + r3 = r0 + 256; + page[(r4+4)>>>2] = r0; + page[(r4+12)>>>2] = r0; + page[(r4+24)>>>2] = r0; + page[(r4+28)>>>2] = r0; + page[(r4+40)>>>2] = r2; + page[(r4+44)>>>2] = r0; + page[(r4+48)>>>2] = r0; + page[(r4+52)>>>2] = r5; + page[(r4+64)>>>2] = r3; + page[(r4+68)>>>2] = r2; + page[(r4+72)>>>2] = r2; + page[(r4+76)>>>2] = r2; pc=r31; return; - case 0x1f580: - r5 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r30 = r0 + r0; - r19 = r0 + -1; - r20 = r0 + 13; - r18 = r0 + 10; - case 0x1f594: - r4 = (r5&0xffffffffL) < (9&0xffffffffL) ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1f914; - run_1f800(); return; - } - case 0x1f5a0: - r5 = r5 << 2; - r5 = r23 + r5; - r4 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r4; + case 0x1f200: + r2= page[(r28+-31344)>>>2]; + page[(r28+-31344)>>>2] = r4; + pc=r31; return; - case 0x1f5b8: - if(r30 == r19) { - /* Next insn is delay slot */ - pc=0x1f644; - run_1f600(); return; - } - case 0x1f5c0: - if(r30 == r20) { - /* Next insn is delay slot */ - pc=0x1f644; - run_1f600(); return; - } - if(r30 == r18) { - /* Next insn is delay slot */ - pc=0x1f644; - run_1f600(); return; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - case 0x1f5d8: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1f76c; - run_1f600(); return; - } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - case 0x1f600: - pc=0x1f600; + case 0x1f400: + r2= page[(r28+-31348)>>>2]; + page[(r28+-31348)>>>2] = r4; + pc=r31; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1f600() throws ExecutionException { /* 0x1f600 - 0x1f800 */ - int addr, tmp; - for(;;) { - switch(pc) { case 0x1f600: - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1f614: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1f5b8; - run_1f400(); return; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1f63c; - pc=0x1ba00; - run_1ba00(); return; - case 0x1f63c: - if(r30 != r19) { - /* Next insn is delay slot */ - pc=0x1f5c0; - run_1f400(); return; - } - case 0x1f644: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = r0 + 1; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r4; - r5 = r0 + 1; - /* Next insn is delay slot */ - pc=0x1f5a0; - run_1f400(); return; - case 0x1f65c: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1f9fc; - run_1f800(); return; - } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1f698: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1f6c0; - continue; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1f6c0; - pc=0x1ba00; - run_1ba00(); return; - case 0x1f6c0: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - case 0x1f6c4: - r4 = r0 + -1; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1f9a4; - run_1f800(); return; - } - r4 = r30 & 255; - r4 = r17 + r4; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r4 & 16; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1f73c; - continue; - } - r4 = r0 + 32; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1f95c; - run_1f800(); return; - } - r4 = r30 < 33 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x1f938; - run_1f800(); return; - } - r4 = r0 + 59; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1f974; - run_1f800(); return; - } - r4 = r0 + 125; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1f9e4; - run_1f800(); return; - } - r3 = r0 + 58; - if(r30 == r3) { - /* Next insn is delay slot */ - pc=0x1f9d4; - run_1f800(); return; - } - case 0x1f72c: - r2 = 7 << 16; - r4 = r2 + -6740; - /* Next insn is delay slot */ - r31=0x1f73c; - pc=0x1b000; - run_1b000(); return; - case 0x1f73c: - r2 = r30 << 24; - r2 = r2 >> 24; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1f4cc; - run_1f400(); return; - case 0x1f750: - /* Next insn is delay slot */ - r31=0x1f758; - pc=0x17800; - run_17800(); return; - case 0x1f758: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1f484; - run_1f400(); return; - case 0x1f76c: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1f77c; - pc=0x41600; - run_41600(); return; - case 0x1f77c: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1f614; - continue; - case 0x1f788: - r2 = r0 + 125; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1f4cc; - run_1f400(); return; - case 0x1f79c: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1fa18; - run_1fa00(); return; - } - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1f7d8: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1f800; - run_1f800(); return; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1f800; - pc=0x1ba00; - run_1ba00(); return; + r2= page[(r28+-31352)>>>2]; + r2 = r2 | 4; + page[(r28+-31352)>>>2] = r2; + pc=r31; + return; case 0x1f800: pc=0x1f800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_1f800() throws ExecutionException { /* 0x1f800 - 0x1fa00 */ + private final void run_1f800() throws ExecutionException { /* 0x1f800 - 0x20000 */ int addr, tmp; for(;;) { switch(pc) { case 0x1f800: - if(r30 != r18) { - /* Next insn is delay slot */ - pc=0x1f644; - run_1f600(); return; - } - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r5 = r0 + r0; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x1f5a0; - run_1f400(); return; - case 0x1f81c: - r2 = r0 + 5; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + 10; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1f4cc; - run_1f400(); return; - case 0x1f834: - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r21 = r0 + 9; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r22 = r0 + 32; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x1f8d0; - continue; - } - case 0x1f854: - r3 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r30 = tmp; - case 0x1f870: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1f898; - continue; - } - r4 = r30 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1f898; - pc=0x1ba00; - run_1ba00(); return; - case 0x1f898: - if(r30 == r21) { - /* Next insn is delay slot */ - pc=0x1f8a8; - continue; - } - if(r30 != r22) { - /* Next insn is delay slot */ - pc=0x1f644; - run_1f600(); return; - } - case 0x1f8a8: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r2; - if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x1f854; - continue; - } - case 0x1f8d0: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1f8e0; - pc=0x41600; - run_41600(); return; - case 0x1f8e0: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1f870; - continue; - case 0x1f8ec: - r2 = r0 + 13; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1f4cc; - run_1f400(); return; - case 0x1f900: - r2 = r0 + 10; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1f4cc; - run_1f400(); return; - case 0x1f914: - r4 = 7 << 16; - r4 = r4 + -6700; - /* Next insn is delay slot */ - r31=0x1f924; - pc=0x1b800; - run_1b800(); return; - case 0x1f924: - r3 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r5 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1f594; - run_1f400(); return; - case 0x1f938: - r4 = r0 + 10; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1f98c; - continue; - } - r4 = r0 + 13; - if(r30 == r4) { - /* Next insn is delay slot */ - pc=0x1f9bc; - continue; - } - r4 = r0 + 9; - if(r30 != r4) { - /* Next insn is delay slot */ - pc=0x1f72c; - run_1f600(); return; - } - case 0x1f95c: - r2 = r0 + 2; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + 32; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1f4cc; - run_1f400(); return; - case 0x1f974: - r2 = r0 + 6; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1f4cc; - run_1f400(); return; - case 0x1f98c: - r2 = r0 + 3; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1f4cc; - run_1f400(); return; - case 0x1f9a4: - r2 = r0 + 8; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1f4cc; - run_1f400(); return; - case 0x1f9bc: - r2 = r0 + 4; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1f4cc; - run_1f400(); return; - case 0x1f9d4: - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1f4cc; - run_1f400(); return; - case 0x1f9e4: - r2 = r0 + 7; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x1f4cc; - run_1f400(); return; - case 0x1f9fc: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; + r2= page[(r28+-31352)>>>2]; + r2 = r2 | 8; + page[(r28+-31352)>>>2] = r2; + pc=r31; + return; case 0x1fa00: - pc=0x1fa00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1fa00() throws ExecutionException { /* 0x1fa00 - 0x1fc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1fa00: - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1fa0c; - pc=0x41600; - run_41600(); return; - case 0x1fa0c: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1f698; - run_1f600(); return; - case 0x1fa18: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1fa28; - pc=0x41600; - run_41600(); return; - case 0x1fa28: - r30 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1f7d8; - run_1f600(); return; - case 0x1fc00: - pc=0x1fc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1fc00() throws ExecutionException { /* 0x1fc00 - 0x1fe00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1fc00: - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r29 = r29 + -56; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r21; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r20; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r19; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r18; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r17; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r16; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = r0 + 32; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x1fef0; - run_1fe00(); return; - } - case 0x1fc38: - r3 = r0 + 60; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x1fe9c; - run_1fe00(); return; - } - r3 = r0 + 34; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x1fd44; - continue; - } - r16 = r0 + 34; - case 0x1fc54: - /* Next insn is delay slot */ - r31=0x1fc5c; - pc=0x1c600; - run_1c600(); return; - case 0x1fc5c: - if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x1ff28; - run_1fe00(); return; - } - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r18 = 7 << 16; - r17 = r0 + 10; - r19 = r0 + 13; - r20 = r0 + -1; - r18 = r18 + -6680; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1fd18; - continue; - } - case 0x1fc84: - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x1fecc; - run_1fe00(); return; - } - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r5 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r3 == r5) { - /* Next insn is delay slot */ - pc=0x1fdf8; - continue; - } - r5 = r4 + r0; - case 0x1fcac: - r4 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r6 = r3 + 1; - r3 = r4 + r3; - writePages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff] = r6; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x1fd60; - continue; - } - r3 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r4 = r3 + 1; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r4; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1fc84; - continue; - } - case 0x1fcfc: - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x1fd08; - pc=0x1b000; - run_1b000(); return; - case 0x1fd08: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1fc84; - continue; - } - case 0x1fd18: - r2 = r0 + 1; - case 0x1fd1c: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r21 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r20 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x1fd44: - r4 = 7 << 16; - r4 = r4 + -6532; - /* Next insn is delay slot */ - r31=0x1fd54; - pc=0x1b000; - run_1b000(); return; - case 0x1fd54: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x1fd1c; - continue; - case 0x1fd60: - r4 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r3 = r3 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r3; - if(r3 < 0) { - /* Next insn is delay slot */ - pc=0x1fe80; - run_1fe00(); return; - } - r3 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r21 = tmp; - case 0x1fd9c: - r2 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x1fdc4; - continue; - } - r4 = r21 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x1fdc4; - pc=0x1ba00; - run_1ba00(); return; - case 0x1fdc4: - if(r21 == r17) { - /* Next insn is delay slot */ - pc=0x1fe5c; - run_1fe00(); return; - } - if(r21 == r19) { - /* Next insn is delay slot */ - pc=0x1fe38; - run_1fe00(); return; - } - if(r21 == r20) { - /* Next insn is delay slot */ - pc=0x1fe14; - run_1fe00(); return; - } - r2 = r21 << 24; - r2 = r2 >> 24; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x1fc84; - continue; - } - /* Next insn is delay slot */ - pc=0x1fcfc; - continue; - case 0x1fdf8: - /* Next insn is delay slot */ - r31=0x1fe00; - pc=0x17800; - run_17800(); return; - case 0x1fe00: - pc=0x1fe00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_1fe00() throws ExecutionException { /* 0x1fe00 - 0x20000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x1fe00: - r5 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = readPages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1fcac; - run_1fc00(); return; - case 0x1fe14: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = r0 + 8; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r4 = r18 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x1fe30; - pc=0x1b000; - run_1b000(); return; - case 0x1fe30: - /* Next insn is delay slot */ - pc=0x1fd08; - run_1fc00(); return; - case 0x1fe38: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = r0 + 4; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r4 = r18 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x1fe54; - pc=0x1b000; - run_1b000(); return; - case 0x1fe54: - /* Next insn is delay slot */ - pc=0x1fd08; - run_1fc00(); return; - case 0x1fe5c: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = r0 + 3; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r4 = r18 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x1fe78; - pc=0x1b000; - run_1b000(); return; - case 0x1fe78: - /* Next insn is delay slot */ - pc=0x1fd08; - run_1fc00(); return; - case 0x1fe80: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x1fe90; - pc=0x41600; - run_41600(); return; - case 0x1fe90: - r21 = r2 + r0; - /* Next insn is delay slot */ - pc=0x1fd9c; - run_1fc00(); return; - case 0x1fe9c: - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x1ff0c; - continue; - } - r5 = readPages[(r28+-30676)>>>12][((r28+-30676)>>>2)&0x3ff]; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x1ff44; - continue; - } - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r16 = r0 + 62; - /* Next insn is delay slot */ - r31=0x1fec4; - pc=0x17e00; - run_17e00(); return; - case 0x1fec4: - /* Next insn is delay slot */ - pc=0x1fc54; - run_1fc00(); return; - case 0x1fecc: - /* Next insn is delay slot */ - r31=0x1fed4; - pc=0x1c000; - run_1c000(); return; - case 0x1fed4: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x1fee4; - pc=0x17c00; - run_17c00(); return; - case 0x1fee4: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x1fd1c; - run_1fc00(); return; - case 0x1fef0: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - r31=0x1fefc; - pc=0x1c000; - run_1c000(); return; - case 0x1fefc: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r4 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x1fc38; - run_1fc00(); return; - case 0x1ff0c: - r4 = 7 << 16; - r4 = r4 + -6608; - /* Next insn is delay slot */ - r31=0x1ff1c; - pc=0x1b000; - run_1b000(); return; - case 0x1ff1c: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x1fd1c; - run_1fc00(); return; - case 0x1ff28: - r4 = 7 << 16; - r4 = r4 + -6492; - /* Next insn is delay slot */ - r31=0x1ff38; - pc=0x1b000; - run_1b000(); return; - case 0x1ff38: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x1fd1c; - run_1fc00(); return; - case 0x1ff44: - r4 = 7 << 16; - r4 = r4 + -6572; - /* Next insn is delay slot */ - r31=0x1ff54; - pc=0x1b000; - run_1b000(); return; - case 0x1ff54: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x1fd1c; - run_1fc00(); return; - case 0x20000: - pc=0x20000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_20000() throws ExecutionException { /* 0x20000 - 0x20200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x20000: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r29 = r29 + -24; - r3 = r0 + 32; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x20060; - continue; - } - case 0x20018: - r3 = r0 + 44; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x20038; - continue; - } - r2 = r0 + r0; - case 0x20028: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x20038: - /* Next insn is delay slot */ - r31=0x20040; - pc=0x1c000; - run_1c000(); return; - case 0x20040: - r3 = r0 + 32; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x20074; - continue; - } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x20060: - /* Next insn is delay slot */ - r31=0x20068; - pc=0x1c000; - run_1c000(); return; - case 0x20068: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x20018; - continue; - case 0x20074: - /* Next insn is delay slot */ - r31=0x2007c; - pc=0x1c000; - run_1c000(); return; - case 0x2007c: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x20028; - continue; - case 0x20200: - pc=0x20200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_20200() throws ExecutionException { /* 0x20200 - 0x20400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x20200: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r29 = r29 + -24; - r3 = r0 + 43; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x20264; - continue; - } - r16 = r0 + r0; - case 0x20220: - r3 = r0 + 32; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x20244; - continue; - } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r16 + r0; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x20244: - /* Next insn is delay slot */ - r31=0x2024c; - pc=0x1c000; - run_1c000(); return; - case 0x2024c: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r16 + r0; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x20264: - /* Next insn is delay slot */ - r31=0x2026c; - pc=0x1c000; - run_1c000(); return; - case 0x2026c: - r3 = r0 + 49; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x202b0; - continue; - } - r3 = r0 + 50; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x202c8; - continue; - } - r3 = r0 + 51; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x202d4; - continue; - } - r4 = 7 << 16; - r4 = r4 + -6472; - /* Next insn is delay slot */ - r31=0x202a0; - pc=0x1b000; - run_1b000(); return; - case 0x202a0: - r16 = r0 + r0; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x20220; - continue; - case 0x202b0: - r16 = r0 + 1; - case 0x202b4: - /* Next insn is delay slot */ - r31=0x202bc; - pc=0x1c000; - run_1c000(); return; - case 0x202bc: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x20220; - continue; - case 0x202c8: - r16 = r0 + 2; - /* Next insn is delay slot */ - pc=0x202b4; - continue; - case 0x202d4: - r16 = r0 + 4; - /* Next insn is delay slot */ - pc=0x202b4; - continue; - case 0x20400: - pc=0x20400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_20400() throws ExecutionException { /* 0x20400 - 0x20600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x20400: - r29 = r29 + -24; - r4 = r0 + 128; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x20414; - pc=0x17600; - run_17600(); return; - case 0x20414: - r4 = r0 + 128; - writePages[(r28+-30720)>>>12][((r28+-30720)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x20424; - pc=0x17600; - run_17600(); return; - case 0x20424: - writePages[(r28+-30724)>>>12][((r28+-30724)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-32236)>>>12][((r28+-32236)>>>2)&0x3ff]; - r4 = readPages[(r28+-30728)>>>12][((r28+-30728)>>>2)&0x3ff]; - r3 = r2 << 1; - r5 = r2 << 4; - r2 = r2 << 6; - r5 = r2 - r5; - writePages[(r28+-32236)>>>12][((r28+-32236)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x2044c; - pc=0x40600; - run_40600(); return; - case 0x2044c: - writePages[(r28+-30728)>>>12][((r28+-30728)>>>2)&0x3ff] = r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x20468; - continue; - } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x20468: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r4 = 7 << 16; - r4 = r4 + -6876; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=0x1b200; - run_1b200(); return; - case 0x20600: - pc=0x20600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_20600() throws ExecutionException { /* 0x20600 - 0x20800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x20600: - r29 = r29 + -48; + r29 = r29 + -72; + page[(r29+52)>>>2] = r6; + page[(r29+68)>>>2] = r31; + page[(r29+64)>>>2] = r17; + page[(r29+60)>>>2] = r16; + page[(r29+48)>>>2] = r4; + r16 = r5 + r0; + r31=0x1fa24; + pc=0x23000; + run_23000(); return; + case 0x1fa24: + r4= page[(r29+48)>>>2]; + r31=0x1fa30; + pc=0x40c00; + run_40800(); return; + case 0x1fa30: r4 = r29 + 16; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r20; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r19; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x20628; - pc=0x1e400; - run_1e400(); return; - case 0x20628: - r2 = readPages[(r28+-30724)>>>12][((r28+-30724)>>>2)&0x3ff]; - r4 = readPages[(r28+-30720)>>>12][((r28+-30720)>>>2)&0x3ff]; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r0; - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + r17 = r2 + r0; + r31=0x1fa40; + pc=0x1aa00; + run_1a800(); return; + case 0x1fa40: + r2= page[(r28+-31344)>>>2]; + r6= page[(r29+52)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x20998; - run_20800(); return; - } - case 0x2064c: - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x20660; - pc=0x17e00; - run_17e00(); return; - case 0x20660: - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r4 = readPages[(r28+-30724)>>>12][((r28+-30724)>>>2)&0x3ff]; - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x20674; - pc=0x17e00; - run_17e00(); return; - case 0x20674: - r4 = readPages[(r28+-30720)>>>12][((r28+-30720)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x20684; - pc=0x17c00; - run_17c00(); return; - case 0x20684: - r4 = readPages[(r28+-30724)>>>12][((r28+-30724)>>>2)&0x3ff]; - r5 = r0 + 32; - /* Next insn is delay slot */ - r31=0x20694; - pc=0x17c00; - run_17c00(); return; - case 0x20694: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = r0 + 32; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x209b0; - run_20800(); return; - } - case 0x206a4: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r3 = r0 + 123; - r19 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x207d0; + pc=0x1faa4; continue; } - r17 = r0 + 126; - r16 = r0 + 46; - r18 = r0 + 44; - r4 = readPages[(r28+-30724)>>>12][((r28+-30724)>>>2)&0x3ff]; - if(r2 == r17) { - /* Next insn is delay slot */ - pc=0x20748; + r2= page[(r28+-31352)>>>2]; + r2 = r2 & 4; + if(r2 != r0) { + pc=0x1faa4; continue; } - case 0x206d4: - r5 = r0 + 118; - /* Next insn is delay slot */ - r31=0x206e0; - pc=0x17c00; - run_17c00(); return; - case 0x206e0: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x2077c; + case 0x1fa64: + r4 = r17 + r0; + r5 = r29 + 16; + r31=0x1fa74; + pc=0x40e00; + run_40800(); return; + case 0x1fa74: + if(r16 == r0) { + pc=0x1fa8c; continue; } - case 0x206f0: - /* Next insn is delay slot */ - r31=0x206f8; - pc=0x1dc00; - run_1dc00(); return; - case 0x206f8: - /* Next insn is delay slot */ - r31=0x20700; - pc=0x20000; - run_20000(); return; - case 0x20700: + r4 = r17 + r0; + r5 = r16 + r0; + r31=0x1fa8c; + pc=0x41000; + run_41000(); return; + case 0x1fa8c: + r31= page[(r29+68)>>>2]; + r17= page[(r29+64)>>>2]; + r16= page[(r29+60)>>>2]; + r29 = r29 + 72; + pc=r31; + return; + case 0x1faa4: + r2 = 6 << 16; + r3= page[(r29+16)>>>2]; + r2 = r2 + 15440; + if(r3 != r2) { + pc=0x1fa64; + continue; + } + r2 = r0 + 1; + page[(r29+40)>>>2] = r2; + pc=0x1fa64; + continue; + case 0x1fc00: + r29 = r29 + -48; + r2 = r4 < -3 ? 1 : 0; + page[(r29+44)>>>2] = r31; + page[(r29+40)>>>2] = r16; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x207ac; + pc=0x1fcac; continue; } - case 0x20708: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r3 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x2097c; - run_20800(); return; - } - case 0x20724: - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r5 = r2 + 1; - r2 = r3 + r2; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r5; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r4 = readPages[(r28+-30724)>>>12][((r28+-30724)>>>2)&0x3ff]; - if(r2 != r17) { - /* Next insn is delay slot */ - pc=0x206d4; - continue; - } - case 0x20748: - r5 = r0 + 86; - /* Next insn is delay slot */ - r31=0x20754; - pc=0x17c00; - run_17c00(); return; - case 0x20754: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + 126; - /* Next insn is delay slot */ - r31=0x20764; - pc=0x17c00; - run_17c00(); return; - case 0x20764: - /* Next insn is delay slot */ - r31=0x2076c; - pc=0x1c000; - run_1c000(); return; - case 0x2076c: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r16) { - /* Next insn is delay slot */ - pc=0x206f0; - continue; - } - case 0x2077c: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + 46; - /* Next insn is delay slot */ - r31=0x2078c; - pc=0x17c00; - run_17c00(); return; - case 0x2078c: - /* Next insn is delay slot */ - r31=0x20794; - pc=0x1c000; - run_1c000(); return; - case 0x20794: - /* Next insn is delay slot */ - r31=0x2079c; - pc=0x1dc00; - run_1dc00(); return; - case 0x2079c: - /* Next insn is delay slot */ - r31=0x207a4; - pc=0x20000; - run_20000(); return; - case 0x207a4: + case 0x1fc18: + r16 = 6 << 16; + r16 = r16 + 31340; + r2= page[(r16+28)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x20708; + pc=0x1ff24; continue; } - case 0x207ac: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + r2 = 6 << 16; + r2 = r2 + -4072; + r6 = r2 + r0; + case 0x1fc3c: + r3= page[(r16+24)>>>2]; + r7= page[(r28+-32692)>>>2]; + if(r3 != r0) { + pc=0x20078; + run_20000(); return; + } + page[(r29+16)>>>2] = r2; + r2= page[(r7+0)>>>2]; + r3= page[(r28+-32672)>>>2]; + page[(r29+20)>>>2] = r2; + r2= page[(r7+4)>>>2]; + r4= page[(r16+32)>>>2]; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r7 = 6 << 16; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + page[(r29+36)>>>2] = r5; + r5 = 6 << 16; + page[(r29+32)>>>2] = r2; + r5 = r5 + 4268; + r7 = r7 + 4252; + r31=0x1fc94; + pc=0x4b800; + run_4b800(); return; + case 0x1fc94: + r4 = r0 + 1; + r31=0x1fca0; + pc=0x12000; + run_12000(); return; + case 0x1fca0: + r4 = r2 + r0; + r31=0x1fcac; + pc=0x49a00; + run_49800(); return; + case 0x1fcac: + r2 = r0 + -2; + if(r4 == r2) { + pc=0x1fe64; + continue; + } + r2 = r4 < -1 ? 1 : 0; + if(r2 != r0) { + pc=0x1ff50; + continue; + } + r2 = r0 + -1; + if(r4 == r2) { + pc=0x1fd6c; + continue; + } + if(r4 != r0) { + pc=0x1ff5c; + continue; + } + r16 = 6 << 16; + r16 = r16 + 31340; + r2= page[(r16+28)>>>2]; + if(r2 == r0) { + pc=0x1fff0; + continue; + } + r2 = 6 << 16; + r6 = 6 << 16; + r2 = r2 + 4176; + r6 = r6 + 4204; + case 0x1fd00: + r3= page[(r16+24)>>>2]; + r7= page[(r28+-32692)>>>2]; + if(r3 != r0) { + pc=0x200cc; + run_20000(); return; + } + page[(r29+16)>>>2] = r2; + r2= page[(r7+0)>>>2]; + r3= page[(r28+-32672)>>>2]; + page[(r29+20)>>>2] = r2; + r2= page[(r7+4)>>>2]; + r4= page[(r16+32)>>>2]; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r7 = 6 << 16; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + page[(r29+36)>>>2] = r5; + r5 = 6 << 16; + page[(r29+32)>>>2] = r2; + r5 = r5 + 4268; + r7 = r7 + 4324; + r31=0x1fd58; + pc=0x4b800; + run_4b800(); return; + case 0x1fd58: + r31= page[(r29+44)>>>2]; + r16= page[(r29+40)>>>2]; + r29 = r29 + 48; + pc=r31; + return; + case 0x1fd6c: + r2= page[(r28+-31348)>>>2]; + if(r2 != r0) { + pc=0x1fd58; + continue; + } + r2= page[(r28+-31352)>>>2]; + r2 = r2 & 8; + if(r2 != r0) { + pc=0x1fd58; + continue; + } + r16 = 6 << 16; + r16 = r16 + 31340; + r2= page[(r16+28)>>>2]; + if(r2 == r0) { + pc=0x20144; + run_20000(); return; + } + r2 = 6 << 16; + r6 = 6 << 16; + r2 = r2 + 4176; + r6 = r6 + 4196; + case 0x1fdb8: + r3= page[(r16+24)>>>2]; + r7= page[(r28+-32692)>>>2]; + if(r3 != r0) { + pc=0x20158; + run_20000(); return; + } + page[(r29+16)>>>2] = r2; + r2= page[(r7+0)>>>2]; + r3= page[(r28+-32672)>>>2]; + page[(r29+20)>>>2] = r2; + r2= page[(r7+4)>>>2]; + r4= page[(r16+32)>>>2]; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r7 = 6 << 16; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + page[(r29+36)>>>2] = r5; + r5 = 6 << 16; + page[(r29+32)>>>2] = r2; + r5 = r5 + 4268; + r7 = r7 + 4316; + r31=0x1fe10; + pc=0x4b800; + run_4b800(); return; + case 0x1fe10: + r2 = 6 << 16; + r2 = r2 + 31320; + r3= page[(r2+12)>>>2]; + r3 = r3 + 1; + page[(r2+12)>>>2] = r3; + r3= page[(r16+44)>>>2]; + if(r3 == r0) { + pc=0x1fd58; + continue; + } + r3= page[(r2+8)>>>2]; + r3 = r3 + 1; + page[(r2+8)>>>2] = r3; + r2= page[(r16+20)>>>2]; + r3 = r3 < r2 ? 1 : 0; + if(r3 != r0) { + pc=0x1fd58; + continue; + } + pc=0x1fc94; + continue; + case 0x1fe64: + r16 = 6 << 16; + r16 = r16 + 31340; + r2= page[(r16+28)>>>2]; + if(r2 == r0) { + pc=0x1ff3c; + continue; + } + r2 = 6 << 16; + r6 = 6 << 16; + r2 = r2 + 4176; + r6 = r6 + 4188; + case 0x1fe8c: + r3= page[(r16+24)>>>2]; + r7= page[(r28+-32692)>>>2]; + if(r3 != r0) { + pc=0x200f0; + run_20000(); return; + } + page[(r29+16)>>>2] = r2; + r2= page[(r7+0)>>>2]; + r3= page[(r28+-32672)>>>2]; + page[(r29+20)>>>2] = r2; + r2= page[(r7+4)>>>2]; + r4= page[(r16+32)>>>2]; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r7 = 6 << 16; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + page[(r29+36)>>>2] = r5; + r5 = 6 << 16; + page[(r29+32)>>>2] = r2; + r5 = r5 + 4268; + r7 = r7 + 4308; + r31=0x1fee4; + pc=0x4b800; + run_4b800(); return; + case 0x1fee4: + r3 = 6 << 16; + r3 = r3 + 31320; + r2= page[(r3+8)>>>2]; + r2 = r2 + 1; + page[(r3+8)>>>2] = r2; + r3= page[(r16+20)>>>2]; + r2 = r2 < r3 ? 1 : 0; + if(r2 == r0) { + pc=0x1fc94; + continue; + } + r31= page[(r29+44)>>>2]; + r16= page[(r29+40)>>>2]; + r29 = r29 + 48; + pc=r31; + return; + case 0x1ff24: + r2 = 6 << 16; + r6 = 6 << 16; + r2 = r2 + 4176; + r6 = r6 + 4184; + pc=0x1fc3c; + continue; + case 0x1ff3c: + r2 = 6 << 16; + r2 = r2 + -4072; + r6 = r2 + r0; + pc=0x1fe8c; + continue; + case 0x1ff50: + r2 = r0 + -3; + if(r4 == r2) { + pc=0x1fc18; + continue; + } + case 0x1ff5c: + r16 = 6 << 16; + r16 = r16 + 31340; + r2= page[(r16+28)>>>2]; + if(r2 == r0) { + pc=0x20004; + run_20000(); return; + } + r2 = 6 << 16; + r6 = 6 << 16; + r2 = r2 + 4176; + r6 = r6 + 4212; + case 0x1ff84: + r3= page[(r16+24)>>>2]; + r7= page[(r28+-32692)>>>2]; + if(r3 != r0) { + pc=0x20018; + run_20000(); return; + } + page[(r29+16)>>>2] = r2; + r2= page[(r7+0)>>>2]; + r3= page[(r28+-32672)>>>2]; + page[(r29+20)>>>2] = r2; + r2= page[(r7+4)>>>2]; + r4= page[(r16+32)>>>2]; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r7 = 6 << 16; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + page[(r29+36)>>>2] = r5; + r5 = 6 << 16; + page[(r29+32)>>>2] = r2; + r5 = r5 + 4268; + r7 = r7 + 4332; + r31=0x1ffdc; + pc=0x4b800; + run_4b800(); return; + case 0x1ffdc: + r31= page[(r29+44)>>>2]; + r16= page[(r29+40)>>>2]; + r29 = r29 + 48; + pc=r31; + return; + case 0x1fff0: + r2 = 6 << 16; + r2 = r2 + -4072; + r6 = r2 + r0; + pc=0x1fd00; + continue; + case 0x20000: + pc=0x20000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_20000() throws ExecutionException { /* 0x20000 - 0x20800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x20000: + case 0x20004: + r2 = 6 << 16; + r2 = r2 + -4072; + r6 = r2 + r0; + pc=0x1ff84; + run_1f800(); return; + case 0x20018: + r8= page[(r7+0)>>>2]; + r3= page[(r28+-32672)>>>2]; + r7= page[(r7+4)>>>2]; + r4= page[(r16+32)>>>2]; + page[(r29+16)>>>2] = r6; + r6 = 6 << 16; + r6 = r6 + 4332; + case 0x20034: + page[(r29+20)>>>2] = r6; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r6 = r8 + r0; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + page[(r29+36)>>>2] = r5; + r5 = 6 << 16; + page[(r29+32)>>>2] = r2; + r5 = r5 + 4220; + r31=0x20064; + pc=0x4b800; + run_4b800(); return; + case 0x20064: + r31= page[(r29+44)>>>2]; + r16= page[(r29+40)>>>2]; + r29 = r29 + 48; + pc=r31; + return; + case 0x20078: + r8= page[(r7+0)>>>2]; + r7= page[(r7+4)>>>2]; + page[(r29+16)>>>2] = r6; + r6 = 6 << 16; + r3= page[(r28+-32672)>>>2]; + r6 = r6 + 4252; + page[(r29+20)>>>2] = r6; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r4= page[(r16+32)>>>2]; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + page[(r29+36)>>>2] = r5; + r5 = 6 << 16; + page[(r29+32)>>>2] = r2; + r5 = r5 + 4220; + r6 = r8 + r0; + r31=0x200c4; + pc=0x4b800; + run_4b800(); return; + case 0x200c4: + pc=0x1fc94; + run_1f800(); return; + case 0x200cc: + r8= page[(r7+0)>>>2]; + r7= page[(r7+4)>>>2]; + page[(r29+16)>>>2] = r6; + r6 = 6 << 16; + r3= page[(r28+-32672)>>>2]; + r4= page[(r16+32)>>>2]; + r6 = r6 + 4324; + pc=0x20034; + continue; + case 0x200f0: + r8= page[(r7+0)>>>2]; + r7= page[(r7+4)>>>2]; + page[(r29+16)>>>2] = r6; + r6 = 6 << 16; + r3= page[(r28+-32672)>>>2]; + r6 = r6 + 4308; + page[(r29+20)>>>2] = r6; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r4= page[(r16+32)>>>2]; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + page[(r29+36)>>>2] = r5; + r5 = 6 << 16; + page[(r29+32)>>>2] = r2; + r5 = r5 + 4220; + r6 = r8 + r0; + r31=0x2013c; + pc=0x4b800; + run_4b800(); return; + case 0x2013c: + pc=0x1fee4; + run_1f800(); return; + case 0x20144: + r2 = 6 << 16; + r2 = r2 + -4072; + r6 = r2 + r0; + pc=0x1fdb8; + run_1f800(); return; + case 0x20158: + r8= page[(r7+0)>>>2]; + r7= page[(r7+4)>>>2]; + page[(r29+16)>>>2] = r6; + r6 = 6 << 16; + r3= page[(r28+-32672)>>>2]; + r6 = r6 + 4316; + page[(r29+20)>>>2] = r6; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r4= page[(r16+32)>>>2]; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + page[(r29+36)>>>2] = r5; + r5 = 6 << 16; + page[(r29+32)>>>2] = r2; + r5 = r5 + 4220; + r6 = r8 + r0; + r31=0x201a4; + pc=0x4b800; + run_4b800(); return; + case 0x201a4: + pc=0x1fe10; + run_1f800(); return; + case 0x20200: + r29 = r29 + -32; + page[(r29+28)>>>2] = r31; + r31=0x20210; + pc=0x4de00; + run_4d800(); return; + case 0x20210: + if(r2 == r0) { + pc=0x20228; + continue; + } + r31= page[(r29+28)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x20228: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5244; + page[(r29+16)>>>2] = r2; + r31=0x20240; + pc=0x1fc00; + run_1f800(); return; + case 0x20240: + r31= page[(r29+28)>>>2]; + r2= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x20400: + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - r2 = r0 + 123; + r29 = r29 + -88; + r2 = r0 + 63; + page[(r29+72)>>>2] = r16; + page[(r29+84)>>>2] = r31; + page[(r29+80)>>>2] = r18; + page[(r29+76)>>>2] = r17; + r16 = r4 + r0; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x207cc; + pc=0x20628; continue; } - r4 = 7 << 16; - r4 = r4 + -6860; - /* Next insn is delay slot */ - r31=0x207cc; - pc=0x1b200; - run_1b200(); return; - case 0x207cc: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - case 0x207d0: - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x207dc; - pc=0x17c00; - run_17c00(); return; - case 0x207dc: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x207e8; - pc=0x17a00; - run_17a00(); return; - case 0x207e8: - r4 = readPages[(r28+-30724)>>>12][((r28+-30724)>>>2)&0x3ff]; - r5 = r0 + r0; - r20 = r2 + r0; - /* Next insn is delay slot */ - r31=0x207fc; - pc=0x17c00; - run_17c00(); return; - case 0x207fc: - r2 = readPages[(r28+-30724)>>>12][((r28+-30724)>>>2)&0x3ff]; + case 0x20428: + r31=0x20430; + pc=0x27e00; + run_27800(); return; + case 0x20430: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r18 = r2 + r0; + r2 = r0 + 61; + if(r3 == r2) { + pc=0x2056c; + continue; + } + r2= page[(r28+-31352)>>>2]; + r2 = r2 & 1; + if(r2 == r0) { + pc=0x20480; + continue; + } + r2 = 6 << 16; + r2= page[(r2+31348)>>>2]; + if(r2 == r0) { + pc=0x20480; + continue; + } + r2 = 6 << 16; + r2= page[(r2+31320)>>>2]; + if(r2 == r0) { + pc=0x20550; + continue; + } + case 0x20480: + r4 = r16 + r0; + r31=0x2048c; + pc=0x40c00; + run_40800(); return; + case 0x2048c: + r4 = r29 + 48; + r17 = r2 + r0; + r31=0x2049c; + pc=0x36a00; + run_36800(); return; + case 0x2049c: + r2 = 6 << 16; + r2 = r2 + 15440; + page[(r29+16)>>>2] = r2; + r2 = r0 + 1; + page[(r29+24)>>>2] = r2; + r2= page[(r29+56)>>>2]; + r4 = r17 + r0; + page[(r29+32)>>>2] = r2; + r2= page[(r29+64)>>>2]; + r5 = r29 + 16; + r6 = r0 + r0; + page[(r29+28)>>>2] = r0; + page[(r29+40)>>>2] = r2; + r31=0x204d8; + pc=0x40e00; + run_40800(); return; + case 0x204d8: + if(r18 != r0) { + pc=0x20538; + continue; + } + case 0x204e0: + r31=0x204e8; + pc=0x37800; + run_37800(); return; + case 0x204e8: + page[(r17+44)>>>2] = r2; + if(r16 == r0) { + pc=0x20510; + continue; + } + r31= page[(r29+84)>>>2]; + r18= page[(r29+80)>>>2]; + r17= page[(r29+76)>>>2]; + r16= page[(r29+72)>>>2]; + r29 = r29 + 88; + pc=r31; + return; + case 0x20510: + r4= page[(r28+-32672)>>>2]; + r31=0x2051c; + pc=0x3fc00; + run_3f800(); return; + case 0x2051c: + r31= page[(r29+84)>>>2]; + r18= page[(r29+80)>>>2]; + r17= page[(r29+76)>>>2]; + r16= page[(r29+72)>>>2]; + r29 = r29 + 88; + pc=r31; + return; + case 0x20538: + r4 = r17 + r0; + r5 = r18 + r0; + r31=0x20548; + pc=0x41000; + run_41000(); return; + case 0x20548: + pc=0x204e0; + continue; + case 0x20550: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 4340; + r31=0x20564; + pc=0x1fc00; + run_1f800(); return; + case 0x20564: + pc=0x20480; + continue; + case 0x2056c: + r31=0x20574; + pc=0x23000; + run_23000(); return; + case 0x20574: + r4 = r16 + r0; + r31=0x20580; + pc=0x40c00; + run_40800(); return; + case 0x20580: + r4 = r29 + 16; + r16 = r2 + r0; + r31=0x20590; + pc=0x1aa00; + run_1a800(); return; + case 0x20590: + r2= page[(r28+-31344)>>>2]; + if(r2 != r0) { + pc=0x205b4; + continue; + } + r2= page[(r28+-31352)>>>2]; + r2 = r2 & 4; + if(r2 == r0) { + pc=0x205c8; + continue; + } + case 0x205b4: + r2 = 6 << 16; + r3= page[(r29+16)>>>2]; + r2 = r2 + 15440; + if(r3 == r2) { + pc=0x20638; + continue; + } + case 0x205c8: + r4 = r16 + r0; + r5 = r29 + 16; + r6 = r0 + r0; + r31=0x205dc; + pc=0x40e00; + run_40800(); return; + case 0x205dc: + if(r18 != r0) { + pc=0x20608; + continue; + } + r31=0x205ec; + pc=0x24000; + run_24000(); return; + case 0x205ec: + r31= page[(r29+84)>>>2]; + r18= page[(r29+80)>>>2]; + r17= page[(r29+76)>>>2]; + r16= page[(r29+72)>>>2]; + r29 = r29 + 88; + pc=r31; + return; + case 0x20608: + r4 = r16 + r0; + r5 = r18 + r0; + r31=0x20618; + pc=0x41000; + run_41000(); return; + case 0x20618: + r31=0x20620; + pc=0x24000; + run_24000(); return; + case 0x20620: + pc=0x205ec; + continue; + case 0x20628: + r31=0x20630; + pc=0x41c00; + run_41800(); return; + case 0x20630: + pc=0x20428; + continue; + case 0x20638: + r2 = r0 + 1; + page[(r29+40)>>>2] = r2; + pc=0x205c8; + continue; case 0x20800: pc=0x20800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_20800() throws ExecutionException { /* 0x20800 - 0x20a00 */ + private final void run_20800() throws ExecutionException { /* 0x20800 - 0x21000 */ int addr, tmp; for(;;) { switch(pc) { case 0x20800: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - r31=0x20814; - pc=0x17e00; - run_17e00(); return; - case 0x20814: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x20824; - pc=0x17c00; - run_17c00(); return; - case 0x20824: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + 15856; - r6 = r19 + r0; - r7 = r0 + 1; - /* Next insn is delay slot */ - r31=0x20840; - pc=0x31200; - run_31200(); return; - case 0x20840: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x208a0; - continue; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r16 = 7 << 16; - r17 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r4 = r16 + -6052; - /* Next insn is delay slot */ - r31=0x20860; - pc=0x1ac00; - run_1ac00(); return; - case 0x20860: - r3 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = r16 + -6052; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r3 = readPages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff]; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r3 = 7 << 16; - r3 = r3 + -6192; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - r3 = 7 << 16; - r3 = r3 + -6180; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x208a0; - pc=0x1b200; - run_1b200(); return; - case 0x208a0: - r4 = r0 + 20; - /* Next insn is delay slot */ - r31=0x208ac; - pc=0x1b400; - run_1b400(); return; - case 0x208ac: - r16 = r2 + r0; - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r18 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r3; - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x208d0; - pc=0x10268; - run_10200(); return; - case 0x208d0: - r17 = r2 + 1; - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x208e0; - pc=0x1b400; - run_1b400(); return; - case 0x208e0: - r4 = r2 + r0; - r5 = r18 + r0; - r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x208f4; - pc=0x48fdc; - run_48e00(); return; - case 0x208f4: - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-30720)>>>12][((r28+-30720)>>>2)&0x3ff]; - r18 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x20914; - pc=0x10268; - run_10200(); return; - case 0x20914: - r17 = r2 + 1; - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x20924; - pc=0x1b400; - run_1b400(); return; - case 0x20924: - r4 = r2 + r0; - r5 = r18 + r0; - r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x20938; - pc=0x48fdc; - run_48e00(); return; - case 0x20938: - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = r20; - r4 = r0 + 1; - /* Next insn is delay slot */ - r31=0x2094c; - pc=0x1d400; - run_1d400(); return; - case 0x2094c: - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r2; - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r16; - r20 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r19 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2097c: - /* Next insn is delay slot */ - r31=0x20984; - pc=0x17800; - run_17800(); return; - case 0x20984: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x20724; - run_20600(); return; - case 0x20998: - r5 = r0 + 46; - /* Next insn is delay slot */ - r31=0x209a4; - pc=0x17c00; - run_17c00(); return; - case 0x209a4: - r4 = readPages[(r28+-30720)>>>12][((r28+-30720)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x2064c; - run_20600(); return; - case 0x209b0: - /* Next insn is delay slot */ - r31=0x209b8; - pc=0x1c000; - run_1c000(); return; - case 0x209b8: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + r29 = r29 + -112; + page[(r29+108)>>>2] = r31; + page[(r29+104)>>>2] = r30; + page[(r29+100)>>>2] = r23; + page[(r29+96)>>>2] = r22; + page[(r29+92)>>>2] = r21; + page[(r29+88)>>>2] = r20; + page[(r29+84)>>>2] = r19; + page[(r29+80)>>>2] = r18; + page[(r29+76)>>>2] = r17; + page[(r29+72)>>>2] = r16; + r31=0x20834; + pc=0x23000; + run_23000(); return; + case 0x20834: + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; - /* Next insn is delay slot */ - pc=0x206a4; - run_20600(); return; - case 0x20a00: - pc=0x20a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_20a00() throws ExecutionException { /* 0x20a00 - 0x20c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x20a00: - r2 = readPages[(r28+-32760)>>>12][((r28+-32760)>>>2)&0x3ff]; - r29 = r29 + -96; - r2 = r2 + -1; - writePages[(r28+-32760)>>>12][((r28+-32760)>>>2)&0x3ff] = r2; - writePages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff] = r31; - writePages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff] = r22; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r21; - writePages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff] = r20; - writePages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff] = r19; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r18; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = r17; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r16; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x20e64; - run_20e00(); return; - } - case 0x20a38: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x20a44; - pc=0x1e400; - run_1e400(); return; - case 0x20a44: - r2 = readPages[(r28+-30724)>>>12][((r28+-30724)>>>2)&0x3ff]; - r4 = readPages[(r28+-30720)>>>12][((r28+-30720)>>>2)&0x3ff]; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r0; - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x20e24; - run_20e00(); return; - } - case 0x20a68: - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x20a7c; - pc=0x17e00; - run_17e00(); return; - case 0x20a7c: - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r4 = readPages[(r28+-30724)>>>12][((r28+-30724)>>>2)&0x3ff]; - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x20a90; - pc=0x17e00; - run_17e00(); return; - case 0x20a90: - r4 = readPages[(r28+-30720)>>>12][((r28+-30720)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x20aa0; - pc=0x17c00; - run_17c00(); return; - case 0x20aa0: - r4 = readPages[(r28+-30724)>>>12][((r28+-30724)>>>2)&0x3ff]; - r5 = r0 + 32; - /* Next insn is delay slot */ - r31=0x20ab0; - pc=0x17c00; - run_17c00(); return; - case 0x20ab0: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = r0 + 32; + r3 = r0 + 125; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x20e50; - run_20e00(); return; - } - case 0x20ac0: - r19 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x20bdc; + pc=0x208fc; continue; } - r20 = 7 << 16; - r17 = r0 + r0; - r16 = r0 + r0; - r20 = r20 + -6876; - r18 = r0 + 126; - /* Next insn is delay slot */ - pc=0x20b2c; - continue; - case 0x20ae8: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + r3 = r0 + 13; + if(r2 == r3) { + pc=0x208fc; + continue; + } + r19 = 6 << 16; + r17 = 6 << 16; + r16 = 6 << 16; + r19 = r19 + 4764; + r21 = 6 << 16; + r18 = 6 << 16; + r17 = r17 + 4504; + case 0x2086c: + page[(r28+-31352)>>>2] = r0; + case 0x20870: + addr=r16+31340; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r4 = readPages[(r28+-30724)>>>12][((r28+-30724)>>>2)&0x3ff]; - if(r2 == r18) { - /* Next insn is delay slot */ - pc=0x20b88; - continue; - } - case 0x20af8: - r5 = r0 + 118; - /* Next insn is delay slot */ - r31=0x20b04; - pc=0x17c00; - run_17c00(); return; - case 0x20b04: - r4 = readPages[(r28+-30728)>>>12][((r28+-30728)>>>2)&0x3ff]; - r16 = r16 + 1; - r4 = r4 + r17; - /* Next insn is delay slot */ - r31=0x20b18; - pc=0x16400; - run_16400(); return; - case 0x20b18: - /* Next insn is delay slot */ - r31=0x20b20; - pc=0x20000; - run_20000(); return; - case 0x20b20: - r17 = r17 + 24; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x20bdc; - continue; - } - case 0x20b2c: - r2 = readPages[(r28+-32236)>>>12][((r28+-32236)>>>2)&0x3ff]; - r3 = r16 < r2 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x20ae8; - continue; - } - r3 = r2 << 1; - r5 = r2 << 4; - r4 = readPages[(r28+-30728)>>>12][((r28+-30728)>>>2)&0x3ff]; - r2 = r2 << 6; - r5 = r2 - r5; - writePages[(r28+-32236)>>>12][((r28+-32236)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x20b60; - pc=0x40600; - run_40600(); return; - case 0x20b60: - writePages[(r28+-30728)>>>12][((r28+-30728)>>>2)&0x3ff] = r2; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x20ae8; - continue; - } - r4 = r20 + r0; - /* Next insn is delay slot */ - r31=0x20b78; - pc=0x1b200; - run_1b200(); return; - case 0x20b78: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r4 = readPages[(r28+-30724)>>>12][((r28+-30724)>>>2)&0x3ff]; - if(r2 != r18) { - /* Next insn is delay slot */ - pc=0x20af8; - continue; - } - case 0x20b88: - r5 = r0 + 86; - /* Next insn is delay slot */ - r31=0x20b94; - pc=0x17c00; - run_17c00(); return; - case 0x20b94: - /* Next insn is delay slot */ - r31=0x20b9c; - pc=0x1c000; - run_1c000(); return; - case 0x20b9c: - r4 = r29 + 52; - /* Next insn is delay slot */ - r31=0x20ba8; - pc=0x1e400; - run_1e400(); return; - case 0x20ba8: - r21 = readPages[(r28+-30728)>>>12][((r28+-30728)>>>2)&0x3ff]; - r4 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r5 = r0 + r0; - r21 = r21 + r17; - /* Next insn is delay slot */ - r31=0x20bc0; - pc=0x2f400; - run_2f400(); return; - case 0x20bc0: - writePages[(r21+0)>>>12][((r21+0)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x20bcc; - pc=0x20000; - run_20000(); return; - case 0x20bcc: - r16 = r16 + 1; - r17 = r17 + 24; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x20b2c; - continue; - } - case 0x20bdc: - r4 = readPages[(r28+-30724)>>>12][((r28+-30724)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x20bec; - pc=0x17c00; - run_17c00(); return; - case 0x20bec: - r2 = readPages[(r28+-30724)>>>12][((r28+-30724)>>>2)&0x3ff]; - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - r31=0x20c04; - pc=0x17e00; - run_17e00(); return; - case 0x20c00: - pc=0x20c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_20c00() throws ExecutionException { /* 0x20c00 - 0x20e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x20c00: - case 0x20c04: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x20c14; - pc=0x17c00; - run_17c00(); return; - case 0x20c14: - r5 = 7 << 16; - r4 = r29 + 60; - r5 = r5 + 15856; - r6 = r19 + r0; - r7 = r0 + r0; - /* Next insn is delay slot */ - r31=0x20c30; - pc=0x31200; - run_31200(); return; - case 0x20c30: - r2 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x20e7c; - run_20e00(); return; - } - r17 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r5 = 7 << 16; - r2 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; - r4 = r29 + 36; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r2 = readPages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff]; - r5 = r5 + -6084; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - r2 = r0 + 1; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r2 = readPages[(r17+12)>>>12][((r17+12)>>>2)&0x3ff]; - r7 = r0 + r0; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; - r6 = readPages[(r17+8)>>>12][((r17+8)>>>2)&0x3ff]; - r2 = r29 + 16; - r20 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r19 = tmp; - writePages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff] = r2; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r0; - r21 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x20c98; - pc=0x2e400; - run_2e400(); return; - case 0x20c98: - /* Next insn is delay slot */ - r31=0x20ca0; - pc=0x1c000; - run_1c000(); return; - case 0x20ca0: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; + if(r3 == r2) { + pc=0x20be4; + continue; + } + r2 = r2 & 255; + r3 = (r2&0xffffffffL) < (65&0xffffffffL) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x20d94; + pc=0x20b84; continue; } - r18 = 7 << 16; - r22 = 7 << 16; - r16 = r0 + r0; - r18 = r18 + 16944; - r22 = r22 + -6076; - /* Next insn is delay slot */ - pc=0x20d18; - continue; - case 0x20ccc: - r4 = r29 + 52; - /* Next insn is delay slot */ - r31=0x20cd8; - pc=0x1e400; - run_1e400(); return; - case 0x20cd8: - r4 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x20ce8; - pc=0x2f400; - run_2f400(); return; - case 0x20ce8: - r5 = readPages[(r28+-30728)>>>12][((r28+-30728)>>>2)&0x3ff]; - r4 = r2 + r0; - r5 = r5 + r16; - r6 = r0 + 24; - /* Next insn is delay slot */ - r31=0x20d00; - pc=0x48fdc; - run_48e00(); return; - case 0x20d00: - /* Next insn is delay slot */ - r31=0x20d08; - pc=0x20000; - run_20000(); return; - case 0x20d08: - r16 = r16 + 24; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x20d94; - continue; - } - case 0x20d14: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - case 0x20d18: - r2 = r0 + 126; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x20ccc; - continue; - } - /* Next insn is delay slot */ - r31=0x20d2c; - pc=0x1c000; - run_1c000(); return; - case 0x20d2c: - r4 = r29 + 52; - /* Next insn is delay slot */ - r31=0x20d38; - pc=0x1e400; - run_1e400(); return; - case 0x20d38: - r6 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r4 = r29 + 56; - r5 = r18 + r0; - r7 = r0 + 1; - /* Next insn is delay slot */ - r31=0x20d50; - pc=0x31200; - run_31200(); return; - case 0x20d50: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x20d68; - continue; - } - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x20e3c; - run_20e00(); return; - } - case 0x20d68: - r2 = readPages[(r28+-30728)>>>12][((r28+-30728)>>>2)&0x3ff]; - r2 = r2 + r16; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r2 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r16 = r16 + 24; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x20d8c; - pc=0x20000; - run_20000(); return; - case 0x20d8c: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x20d14; - continue; - } - case 0x20d94: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r3 = readPages[(r17+16)>>>12][((r17+16)>>>2)&0x3ff]; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x20dac; - pc=0x1a400; - run_1a400(); return; - case 0x20dac: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - r2 = r0 + 125; - if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x20dcc; - continue; - } - r4 = 7 << 16; - r4 = r4 + -7708; - /* Next insn is delay slot */ - r31=0x20dcc; - pc=0x1b800; - run_1b800(); return; - case 0x20dcc: - r4 = r29 + 36; - /* Next insn is delay slot */ - r31=0x20dd8; - pc=0x2e600; - run_2e600(); return; - case 0x20dd8: - writePages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff] = r21; - writePages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff] = r20; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r19&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x20dec; - pc=0x1ce00; - run_1ce00(); return; - case 0x20dec: - r2 = readPages[(r28+-32760)>>>12][((r28+-32760)>>>2)&0x3ff]; - r31 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - r2 = r2 + 1; - r22 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r21 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - case 0x20e00: - pc=0x20e00; + r3 = r2 << 2; + r3 = r17 + r3; + r3= page[(r3+0)>>>2]; + pc=r3; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_20e00() throws ExecutionException { /* 0x20e00 - 0x21000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x20e00: - r20 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r19 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - r18 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r17 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r16 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - writePages[(r28+-32760)>>>12][((r28+-32760)>>>2)&0x3ff] = r2; - r29 = r29 + 96; - /* Next insn is delay slot */ + case 0x208a8: + r2= page[(r28+-31352)>>>2]; + r2 = r2 | 1; + page[(r28+-31352)>>>2] = r2; + case 0x208b8: + r31=0x208c0; + pc=0x23000; + run_23000(); return; + case 0x208c0: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r0) { + pc=0x20870; + continue; + } + case 0x208d0: + r31=0x208d8; + pc=0x36e00; + run_36800(); return; + case 0x208d8: + r31=0x208e0; + pc=0x23000; + run_23000(); return; + case 0x208e0: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 125; + if(r2 == r3) { + pc=0x208fc; + continue; + } + r3 = r0 + 13; + if(r2 != r3) { + pc=0x2086c; + continue; + } + case 0x208fc: + r31= page[(r29+108)>>>2]; + r30= page[(r29+104)>>>2]; + r23= page[(r29+100)>>>2]; + r22= page[(r29+96)>>>2]; + r21= page[(r29+92)>>>2]; + r20= page[(r29+88)>>>2]; + r19= page[(r29+84)>>>2]; + r18= page[(r29+80)>>>2]; + r17= page[(r29+76)>>>2]; + r16= page[(r29+72)>>>2]; + r29 = r29 + 112; pc=r31; return; - case 0x20e24: - r5 = r0 + 46; - /* Next insn is delay slot */ - r31=0x20e30; - pc=0x17c00; - run_17c00(); return; - case 0x20e30: - r4 = readPages[(r28+-30720)>>>12][((r28+-30720)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x20a68; - run_20a00(); return; - case 0x20e3c: - r4 = r22 + r0; - /* Next insn is delay slot */ - r31=0x20e48; - pc=0x1b000; - run_1b000(); return; - case 0x20e48: - /* Next insn is delay slot */ - pc=0x20d68; - run_20c00(); return; - case 0x20e50: - /* Next insn is delay slot */ - r31=0x20e58; + case 0x20930: + r2= page[(r28+-31352)>>>2]; + r3 = r2 & 2; + if(r3 != r0) { + pc=0x20b98; + continue; + } + r2 = r2 | 2; + r4 = r29 + 16; + r5 = r0 + r0; + page[(r28+-31352)>>>2] = r2; + r31=0x2095c; + pc=0x26200; + run_26000(); return; + case 0x2095c: + if(r2 == r0) { + pc=0x20bcc; + continue; + } + case 0x20964: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + case 0x2096c: + if(r2 != r0) { + pc=0x20870; + continue; + } + pc=0x208d0; + continue; + case 0x2097c: + r2= page[(r28+-31352)>>>2]; + r3 = r2 & 2; + if(r3 != r0) { + pc=0x20b98; + continue; + } + r2 = r2 | 2; + r4 = r18 + 17104; + r20 = r18 + 17104; + page[(r28+-31352)>>>2] = r2; + r30 = r20 + r0; + r31=0x209ac; + pc=0x1be00; + run_1b800(); return; + case 0x209ac: + r23 = r0 + 45; + r22 = r0 + 45; + pc=0x209e0; + continue; + case 0x209bc: + r4= page[(r18+17104)>>>2]; + r5 = r2 + 1; + r2 = r4 + r2; + page[(r20+4)>>>2] = r5; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r23&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r31=0x209d8; + pc=0x23000; + run_23000(); return; + case 0x209d8: + if(r2 != r22) { + pc=0x20a28; + continue; + } + case 0x209e0: + r2= page[(r20+4)>>>2]; + r4= page[(r20+8)>>>2]; + if(r2 != r4) { + pc=0x209bc; + continue; + } + r4 = r30 + r0; + r31=0x20a00; pc=0x1c000; run_1c000(); return; - case 0x20e58: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + case 0x20a00: + r2= page[(r30+4)>>>2]; + r4= page[(r18+17104)>>>2]; + r5 = r2 + 1; + r2 = r4 + r2; + page[(r20+4)>>>2] = r5; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r23&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r31=0x20a20; + pc=0x23000; + run_23000(); return; + case 0x20a20: + if(r2 == r22) { + pc=0x209e0; + continue; + } + case 0x20a28: + r4 = r30 + r0; + r5 = r0 + r0; + r31=0x20a38; + pc=0x1c400; + run_1c000(); return; + case 0x20a38: + r2= page[(r28+-32672)>>>2]; + r23= page[(r2+0)>>>2]; + r2= page[(r28+-31352)>>>2]; + r2 = r2 & 1; + if(r2 == r0) { + pc=0x20a80; + continue; + } + r2 = r16 + 31340; + r2= page[(r2+8)>>>2]; + if(r2 == r0) { + pc=0x20a80; + continue; + } + r2 = 6 << 16; + r2= page[(r2+31320)>>>2]; + if(r2 == r0) { + pc=0x20e50; + continue; + } + case 0x20a80: + r4 = r23 + r0; + r31=0x20a8c; + pc=0x40c00; + run_40800(); return; + case 0x20a8c: + r4 = r29 + 48; + r22 = r2 + r0; + r31=0x20a9c; + pc=0x36a00; + run_36800(); return; + case 0x20a9c: + r2 = 6 << 16; + r2 = r2 + 15440; + page[(r29+16)>>>2] = r2; + r2 = r0 + 1; + page[(r29+24)>>>2] = r2; + r2= page[(r29+56)>>>2]; + r4 = r22 + r0; + page[(r29+32)>>>2] = r2; + r2= page[(r29+64)>>>2]; + r5 = r29 + 16; + r6 = r0 + 1; + page[(r29+40)>>>2] = r2; + page[(r29+28)>>>2] = r0; + r31=0x20ad8; + pc=0x40e00; + run_40800(); return; + case 0x20ad8: + r31=0x20ae0; + pc=0x37800; + run_37800(); return; + case 0x20ae0: + page[(r22+44)>>>2] = r2; + if(r23 != r0) { + pc=0x20964; + continue; + } + case 0x20aec: + r4= page[(r28+-32672)>>>2]; + r31=0x20af8; + pc=0x3fc00; + run_3f800(); return; + case 0x20af8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; - /* Next insn is delay slot */ - pc=0x20ac0; - run_20a00(); return; + pc=0x2096c; + continue; + case 0x20b04: + r31=0x20b0c; + pc=0x3f600; + run_3f000(); return; + case 0x20b0c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r0) { + pc=0x20870; + continue; + } + pc=0x208d0; + continue; + case 0x20b24: + r31=0x20b2c; + pc=0x23000; + run_23000(); return; + case 0x20b2c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 46; + if(r2 == r3) { + pc=0x20b64; + continue; + } + r3 = r0 + 64; + if(r2 == r3) { + pc=0x20b64; + continue; + } + r2 = r2 & 255; + r2 = r2 + r19; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + r2 = r2 & 64; + if(r2 == r0) { + pc=0x20c98; + continue; + } + case 0x20b64: + r31=0x20b6c; + pc=0x28800; + run_28800(); return; + case 0x20b6c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r0) { + pc=0x20870; + continue; + } + pc=0x208d0; + continue; + case 0x20b84: + r2 = r19 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 < 0) { + pc=0x20c04; + continue; + } + case 0x20b98: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x20bac; + pc=0x1fc00; + run_1f800(); return; + case 0x20bac: + r31=0x20bb4; + pc=0x23800; + run_23800(); return; + case 0x20bb4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r0) { + pc=0x20870; + continue; + } + pc=0x208d0; + continue; + case 0x20bcc: + r4= page[(r29+16)>>>2]; + r31=0x20bd8; + pc=0x20400; + run_20000(); return; + case 0x20bd8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2096c; + continue; + case 0x20be4: + r31=0x20bec; + pc=0x3f800; + run_3f800(); return; + case 0x20bec: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r0) { + pc=0x20870; + continue; + } + pc=0x208d0; + continue; + case 0x20c04: + r2= page[(r21+31424)>>>2]; + r22= page[(r2+0)>>>2]; + r31=0x20c18; + pc=0x26600; + run_26000(); return; + case 0x20c18: + r4 = r2 + r0; + pc=r22; + r31=0x20c24; + return; + case 0x20c24: + if(r2 != r0) { + pc=0x20964; + continue; + } + r2= page[(r28+-31352)>>>2]; + r3 = r2 & 2; + if(r3 != r0) { + pc=0x20b98; + continue; + } + r5= page[(r18+17104)>>>2]; + r2 = r2 | 2; + page[(r28+-31352)>>>2] = r2; + addr=r5+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r4 = r0 + -96; + if(r2 == r4) { + pc=0x20e7c; + continue; + } + r20 = r18 + 17104; + r3= page[(r20+4)>>>2]; + r3 = (r3&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; + if(r3 != r0) { + pc=0x20c80; + continue; + } + r3 = r0 + -62; + if(r2 == r3) { + pc=0x20e6c; + continue; + } + case 0x20c80: + r4 = r0 + r0; + r31=0x20c8c; + pc=0x20400; + run_20000(); return; + case 0x20c8c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2096c; + continue; + case 0x20c98: + r2= page[(r28+-31352)>>>2]; + r3 = r2 & 2; + if(r3 != r0) { + pc=0x20b98; + continue; + } + r2 = r2 | 2; + r4 = r18 + 17104; + page[(r28+-31352)>>>2] = r2; + r31=0x20cc0; + pc=0x1be00; + run_1b800(); return; + case 0x20cc0: + r4 = r18 + 17104; + r5 = r0 + 43; + r31=0x20cd0; + pc=0x1c400; + run_1c000(); return; + case 0x20cd0: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 43; + if(r3 != r2) { + pc=0x20d74; + continue; + } + r20 = r18 + 17104; + r30 = r20 + r0; + r23 = r0 + 43; + r22 = r0 + 43; + pc=0x20d24; + continue; + case 0x20cf8: + r4= page[(r18+17104)>>>2]; + r5 = r2 + 1; + r2 = r4 + r2; + page[(r20+4)>>>2] = r5; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r23&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r31=0x20d14; + pc=0x23000; + run_23000(); return; + case 0x20d14: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r22) { + pc=0x20d74; + continue; + } + case 0x20d24: + r2= page[(r20+4)>>>2]; + r4= page[(r20+8)>>>2]; + if(r2 != r4) { + pc=0x20cf8; + continue; + } + r4 = r30 + r0; + r31=0x20d44; + pc=0x1c000; + run_1c000(); return; + case 0x20d44: + r2= page[(r30+4)>>>2]; + r4= page[(r18+17104)>>>2]; + r5 = r2 + 1; + r2 = r4 + r2; + page[(r20+4)>>>2] = r5; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r23&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r31=0x20d64; + pc=0x23000; + run_23000(); return; + case 0x20d64: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 == r22) { + pc=0x20d24; + continue; + } + case 0x20d74: + r4 = r0 + 1; + r31=0x20d80; + pc=0x41800; + run_41800(); return; + case 0x20d80: + r4 = r18 + 17104; + r5 = r0 + r0; + r31=0x20d90; + pc=0x1c400; + run_1c000(); return; + case 0x20d90: + r2= page[(r28+-32672)>>>2]; + r22= page[(r2+0)>>>2]; + r2= page[(r28+-31352)>>>2]; + r2 = r2 & 1; + if(r2 == r0) { + pc=0x20dd8; + continue; + } + r2 = r16 + 31340; + r2= page[(r2+8)>>>2]; + if(r2 == r0) { + pc=0x20dd8; + continue; + } + r2 = 6 << 16; + r2= page[(r2+31320)>>>2]; + if(r2 == r0) { + pc=0x20eac; + continue; + } + case 0x20dd8: + r4 = r22 + r0; + r31=0x20de4; + pc=0x40c00; + run_40800(); return; + case 0x20de4: + r4 = r29 + 48; + r23 = r2 + r0; + r31=0x20df4; + pc=0x36a00; + run_36800(); return; + case 0x20df4: + r2 = 6 << 16; + r2 = r2 + 15440; + page[(r29+16)>>>2] = r2; + r2 = r0 + 1; + page[(r29+24)>>>2] = r2; + r2= page[(r29+56)>>>2]; + r4 = r23 + r0; + page[(r29+32)>>>2] = r2; + r2= page[(r29+64)>>>2]; + r5 = r29 + 16; + r6 = r0 + r0; + page[(r29+40)>>>2] = r2; + page[(r29+28)>>>2] = r0; + r31=0x20e30; + pc=0x40e00; + run_40800(); return; + case 0x20e30: + r31=0x20e38; + pc=0x37800; + run_37800(); return; + case 0x20e38: + page[(r23+44)>>>2] = r2; + if(r22 == r0) { + pc=0x20aec; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2096c; + continue; + case 0x20e50: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 4340; + r31=0x20e64; + pc=0x1fc00; + run_1f800(); return; case 0x20e64: - r4 = 7 << 16; - r4 = r4 + -6168; - /* Next insn is delay slot */ - r31=0x20e74; - pc=0x1b200; - run_1b200(); return; - case 0x20e74: - /* Next insn is delay slot */ - pc=0x20a38; - run_20a00(); return; + pc=0x20a80; + continue; + case 0x20e6c: + addr=r5+1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r4) { + pc=0x20c80; + continue; + } case 0x20e7c: - r4 = 7 << 16; - r4 = r4 + -6124; - /* Next insn is delay slot */ - r31=0x20e8c; - pc=0x1b000; - run_1b000(); return; - case 0x20e8c: - /* Next insn is delay slot */ - r31=0x20e94; - pc=0x1c800; - run_1c800(); return; - case 0x20e94: - /* Next insn is delay slot */ - pc=0x20dec; - run_20c00(); return; + r2 = 6 << 16; + r2= page[(r2+31320)>>>2]; + if(r2 != r0) { + pc=0x20c80; + continue; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 4376; + r31=0x20ea4; + pc=0x1fc00; + run_1f800(); return; + case 0x20ea4: + pc=0x20c80; + continue; + case 0x20eac: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 4340; + r31=0x20ec0; + pc=0x1fc00; + run_1f800(); return; + case 0x20ec0: + pc=0x20dd8; + continue; case 0x21000: pc=0x21000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_21000() throws ExecutionException { /* 0x21000 - 0x21200 */ + private final void run_21000() throws ExecutionException { /* 0x21000 - 0x21800 */ int addr, tmp; for(;;) { switch(pc) { case 0x21000: - r29 = r29 + -32; - r3 = r6 & 255; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - r16 = r5 + r0; - r5 = r6 & 65280; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r2 = ((r0 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x21028; - continue; - } - r2 = r2 | 2; - case 0x21028: - r5 = 255 << 16; - r5 = r6 & r5; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x21094; - continue; - } - r2 = r2 | 4; - case 0x2103c: - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x210b8; - continue; - } - r2 = r2 & r4; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x21290; - run_21200(); return; - } - case 0x21050: - r2 = r0 + 2; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x211b0; - continue; - } - r2 = r0 + 4; - if(r4 != r2) { - /* Next insn is delay slot */ - pc=0x21220; - run_21200(); return; - } - case 0x21068: - r4 = r6 >>> 16; - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r4 & 255; - /* Next insn is delay slot */ - pc=r2; - r31=0x2107c; - return; - case 0x2107c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r4 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x26200; - run_26200(); return; - case 0x21094: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2103c; - continue; - } - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r4 = 7 << 16; - r4 = r4 + -3048; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x1b000; - run_1b000(); return; - case 0x210b8: - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r5 = r4 & 7; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x211dc; - continue; - } - r5 = r2 + -1; - r5 = (r5&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x212d0; - run_21200(); return; - } - r5 = r0 + 4; - if(r2 == r5) { - /* Next insn is delay slot */ - pc=0x21068; - continue; - } - r5 = r4 & 32; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x21240; - run_21200(); return; - } - r5 = r2 & 1; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x2110c; - continue; - } - r5 = r4 & 8; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x21268; - run_21200(); return; - } - case 0x2110c: - r5 = r2 & 2; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x21170; - continue; - } - r2 = r2 & 4; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x21268; - run_21200(); return; - } - r4 = r4 & 16; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x21068; - continue; - } - r3 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r2 = r0 | 32768; - r3 = r3 + r2; - r2 = 1 << 16; - r2 = r2 | 32768; - r2 = ((r3 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x21068; - continue; - } - r4 = 7 << 16; - r4 = r4 + -3084; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - r31=0x21164; - pc=0x1ac00; - run_1ac00(); return; - case 0x21164: - r6 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x21068; - continue; - case 0x21170: - r4 = r4 & 16; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x211b0; - continue; - } - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r2 = r2 + 128; - r2 = (r2&0xffffffffL) < (384&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x211b0; - continue; - } - r4 = 7 << 16; - r4 = r4 + -3084; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - r31=0x211a8; - pc=0x1ac00; - run_1ac00(); return; - case 0x211a8: - r6 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - case 0x211b0: - r4 = r6 >>> 8; - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r4 & 255; - /* Next insn is delay slot */ - pc=r2; - r31=0x211c4; - return; - case 0x211c4: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r4 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x26000; - run_26000(); return; - case 0x211dc: - r4 = r2 & r4; - r5 = r4 & 1; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x21268; - run_21200(); return; - } - r4 = r4 & 2; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x211b0; - continue; - } - case 0x211f8: - r2 = r2 & 4; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x21068; - continue; - } - case 0x21200: - pc=0x21200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_21200() throws ExecutionException { /* 0x21200 - 0x21400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x21200: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r4 = 7 << 16; - r4 = r4 + -6936; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x1b000; - run_1b000(); return; - case 0x21220: - r2 = r0 + 1; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x21268; - continue; - } - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x21240: - r4 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - if(r4 < 0) { - /* Next insn is delay slot */ - pc=0x212dc; - continue; - } - r5 = r2 & 1; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x212ac; - continue; - } - r5 = r4 < 256 ? 1 : 0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x212ac; - continue; - } - case 0x21268: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r3 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x21278; - return; - case 0x21278: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r4 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x25e00; - run_25e00(); return; - case 0x21290: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r4 = 7 << 16; - r4 = r4 + -6028; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x1b000; - run_1b000(); return; - case 0x212ac: - r3 = r2 & 2; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x211f8; - run_21000(); return; - } - r3 = 1 << 16; - r4 = r4 < r3 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x211b0; - run_21000(); return; - } - /* Next insn is delay slot */ - pc=0x211f8; - run_21000(); return; - case 0x212d0: - r4 = r2 + r0; - /* Next insn is delay slot */ - pc=0x21050; - run_21000(); return; - case 0x212dc: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r4 = 7 << 16; - r4 = r4 + -5984; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x1b000; - run_1b000(); return; - case 0x21400: - pc=0x21400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_21400() throws ExecutionException { /* 0x21400 - 0x21600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x21400: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; - r29 = r29 + -40; + r29 = r29 + -24; r3 = r0 + 32; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r17; - r16 = r4 + r0; + page[(r29+20)>>>2] = r31; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x2161c; - run_21600(); return; - } - case 0x21424: - r3 = r0 + 35; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x21544; + pc=0x21080; continue; } - r3 = r0 + 91; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x214a8; + case 0x21018: + r3 = r0 + 123; + if(r2 == r3) { + pc=0x21038; continue; } - /* Next insn is delay slot */ - r31=0x21444; - pc=0x1c000; - run_1c000(); return; - case 0x21444: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x21450; - pc=0x15c00; - run_15c00(); return; - case 0x21450: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x2145c; - pc=0x32200; - run_32200(); return; - case 0x2145c: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 93; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x216dc; - run_21600(); return; - } - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x2147c; - pc=0x1b000; - run_1b000(); return; - case 0x2147c: + r31= page[(r29+20)>>>2]; r2 = r0 + r0; - case 0x21480: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x2148c; - pc=0x1ce00; - run_1ce00(); return; - case 0x2148c: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ + r29 = r29 + 24; pc=r31; return; - case 0x214a8: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x214b4; - pc=0x16200; - run_16200(); return; - case 0x214b4: - r4 = r16 + r0; - r17 = r2 + r0; - /* Next insn is delay slot */ - r31=0x214c4; - pc=0x32200; - run_32200(); return; - case 0x214c4: - r3 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = r3 & 64; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x21590; - continue; - } - r2 = r0 + 16; - r16 = r0 + r0; - case 0x214e0: - r3 = r3 & 128; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x214f0; - continue; - } - r16 = r2 + r0; - case 0x214f0: - if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x21640; - run_21600(); return; - } - case 0x214f8: - /* Next insn is delay slot */ - r31=0x21500; - pc=0x20000; - run_20000(); return; - case 0x21500: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x21630; - run_21600(); return; - } - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + case 0x21038: + r31=0x21040; + pc=0x20800; + run_20800(); return; + case 0x21040: + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r2 + -83; - r2 = r2 & 255; - r3 = (r2&0xffffffffL) < (39&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x215fc; - continue; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + -5280; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x21544: - /* Next insn is delay slot */ - r31=0x2154c; - pc=0x1c000; - run_1c000(); return; - case 0x2154c: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x21558; - pc=0x15c00; - run_15c00(); return; - case 0x21558: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x21564; - pc=0x32000; - run_32000(); return; - case 0x21564: - r2 = r0 + 64; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x21574; - pc=0x1ce00; - run_1ce00(); return; - case 0x21574: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x21590: - r2 = r0 + 144; - r16 = r0 + 128; - /* Next insn is delay slot */ - pc=0x214e0; - continue; - case 0x215a0: - r17 = r0 + 2; - case 0x215a4: - /* Next insn is delay slot */ - r31=0x215ac; - pc=0x1c000; - run_1c000(); return; - case 0x215ac: - r3 = r0 + 32; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x21730; - run_21600(); return; - } - r2 = r17 | r16; - case 0x215bc: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x215c8; - pc=0x1ce00; - run_1ce00(); return; - case 0x215c8: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x215e4: - r17 = r0 + 3; - /* Next insn is delay slot */ - pc=0x215a4; - continue; - case 0x215f0: - r17 = r0 + 1; - /* Next insn is delay slot */ - pc=0x215a4; - continue; - case 0x215fc: - r4 = 7 << 16; - case 0x21600: - pc=0x21600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_21600() throws ExecutionException { /* 0x21600 - 0x21800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x21600: - r4 = r4 + -6980; - r17 = r0 + r0; - /* Next insn is delay slot */ - r31=0x21610; - pc=0x1b000; - run_1b000(); return; - case 0x21610: - r2 = r17 | r16; - /* Next insn is delay slot */ - pc=0x215bc; - run_21400(); return; - case 0x2161c: - /* Next insn is delay slot */ - r31=0x21624; - pc=0x1c000; - run_1c000(); return; - case 0x21624: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x21424; - run_21400(); return; - case 0x21630: - r17 = r0 + r0; - r2 = r17 | r16; - /* Next insn is delay slot */ - pc=0x215bc; - run_21400(); return; - case 0x21640: - /* Next insn is delay slot */ - r31=0x21648; - pc=0x20000; - run_20000(); return; - case 0x21648: - r17 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x216b0; - continue; - } - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r2 + -83; - r2 = r2 & 255; - r3 = (r2&0xffffffffL) < (39&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x21798; - continue; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + -5124; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x21690: - r17 = r0 + 8; - case 0x21694: - /* Next insn is delay slot */ - r31=0x2169c; - pc=0x1c000; - run_1c000(); return; - case 0x2169c: - r3 = r0 + 32; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x216b0; - continue; - } - /* Next insn is delay slot */ - r31=0x216b0; - pc=0x1c000; - run_1c000(); return; - case 0x216b0: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - r2 = r0 + 41; - r16 = r16 | r17; + r2 = r0 + 125; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x217f4; + pc=0x21064; continue; } - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x216d4; - pc=0x1b000; - run_1b000(); return; - case 0x216d4: - /* Next insn is delay slot */ - pc=0x214f8; - run_21400(); return; - case 0x216dc: - /* Next insn is delay slot */ - r31=0x216e4; - pc=0x1c000; - run_1c000(); return; - case 0x216e4: - /* Next insn is delay slot */ - r31=0x216ec; - pc=0x20000; - run_20000(); return; - case 0x216ec: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x217e8; - continue; - } - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r2 + -83; - r2 = r2 & 255; - r3 = (r2&0xffffffffL) < (39&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x217b4; - continue; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + -4968; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5208; + r31=0x21064; + pc=0x1fc00; + run_1f800(); return; + case 0x21064: + r31=0x2106c; + pc=0x23000; + run_23000(); return; + case 0x2106c: + r31= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; return; - case 0x21730: - /* Next insn is delay slot */ - r31=0x21738; - pc=0x1c000; - run_1c000(); return; - case 0x21738: - r2 = r17 | r16; - /* Next insn is delay slot */ - pc=0x215bc; - run_21400(); return; - case 0x21744: - r17 = r0 + 4; - /* Next insn is delay slot */ - pc=0x21694; + case 0x21080: + r31=0x21088; + pc=0x23000; + run_23000(); return; + case 0x21088: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x21018; continue; - case 0x21750: - r17 = r0 + 12; - /* Next insn is delay slot */ - pc=0x21694; - continue; - case 0x2175c: - r16 = r0 + 34; - case 0x21760: - /* Next insn is delay slot */ - r31=0x21768; - pc=0x1c000; - run_1c000(); return; - case 0x21768: - r3 = r0 + 32; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x217d4; + case 0x21200: + r29 = r29 + -56; + page[(r29+44)>>>2] = r16; + r16 = 6 << 16; + r2= page[(r16+31320)>>>2]; + page[(r29+52)>>>2] = r31; + page[(r29+48)>>>2] = r17; + if(r2 == r0) { + pc=0x21238; continue; } - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x21480; - run_21400(); return; - case 0x21780: - r16 = r0 + 33; - /* Next insn is delay slot */ - pc=0x21760; + case 0x21220: + r31= page[(r29+52)>>>2]; + r17= page[(r29+48)>>>2]; + r16= page[(r29+44)>>>2]; + r29 = r29 + 56; + pc=r31; + return; + case 0x21238: + r2= page[(r28+-31348)>>>2]; + if(r2 != r0) { + pc=0x21220; + continue; + } + r2= page[(r28+-31352)>>>2]; + r2 = r2 & 8; + if(r2 != r0) { + pc=0x21220; + continue; + } + r17 = 6 << 16; + r17 = r17 + 31340; + r2= page[(r17+28)>>>2]; + if(r2 == r0) { + pc=0x21338; + continue; + } + r2 = 6 << 16; + r6 = 6 << 16; + r2 = r2 + 4176; + r6 = r6 + 4196; + case 0x21284: + r3= page[(r17+24)>>>2]; + r5= page[(r28+-32692)>>>2]; + if(r3 != r0) { + pc=0x2134c; + continue; + } + page[(r29+16)>>>2] = r2; + r2= page[(r5+0)>>>2]; + r3= page[(r28+-32672)>>>2]; + page[(r29+20)>>>2] = r2; + r2= page[(r5+4)>>>2]; + r7= page[(r17+32)>>>2]; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r5 = 6 << 16; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + page[(r29+36)>>>2] = r4; + r4 = r7 + r0; + r7 = 6 << 16; + page[(r29+32)>>>2] = r2; + r5 = r5 + 4268; + r7 = r7 + 4316; + r31=0x212e0; + pc=0x4b800; + run_4b800(); return; + case 0x212e0: + r16 = r16 + 31320; + r2= page[(r16+12)>>>2]; + r2 = r2 + 1; + page[(r16+12)>>>2] = r2; + r2= page[(r17+44)>>>2]; + if(r2 == r0) { + pc=0x21220; + continue; + } + r2= page[(r16+8)>>>2]; + r3= page[(r17+20)>>>2]; + r2 = r2 + 1; + page[(r16+8)>>>2] = r2; + r2 = r2 < r3 ? 1 : 0; + if(r2 != r0) { + pc=0x21220; + continue; + } + r4 = r0 + 1; + r31=0x2132c; + pc=0x12000; + run_12000(); return; + case 0x2132c: + r4 = r2 + r0; + r31=0x21338; + pc=0x49a00; + run_49800(); return; + case 0x21338: + r2 = 6 << 16; + r2 = r2 + -4072; + r6 = r2 + r0; + pc=0x21284; continue; - case 0x2178c: - r16 = r0 + 35; - /* Next insn is delay slot */ - pc=0x21760; + case 0x2134c: + r8= page[(r5+0)>>>2]; + r7= page[(r5+4)>>>2]; + r5 = 6 << 16; + r3= page[(r28+-32672)>>>2]; + r5 = r5 + 4316; + page[(r29+16)>>>2] = r6; + page[(r29+20)>>>2] = r5; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r9= page[(r17+32)>>>2]; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + r5 = 6 << 16; + page[(r29+36)>>>2] = r4; + page[(r29+32)>>>2] = r2; + r4 = r9 + r0; + r5 = r5 + 4220; + r6 = r8 + r0; + r31=0x2139c; + pc=0x4b800; + run_4b800(); return; + case 0x2139c: + pc=0x212e0; continue; - case 0x21798: - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x217a8; - pc=0x1b000; - run_1b000(); return; - case 0x217a8: - r17 = r0 + r0; - /* Next insn is delay slot */ - pc=0x216b0; + case 0x21400: + r2= page[(r28+-31348)>>>2]; + r29 = r29 + -56; + page[(r29+48)>>>2] = r18; + page[(r29+44)>>>2] = r17; + page[(r29+52)>>>2] = r31; + page[(r29+40)>>>2] = r16; + r17 = r4 + r0; + r18 = r5 + r0; + if(r2 != r0) { + pc=0x215d4; + continue; + } + r2= page[(r28+-31352)>>>2]; + r16 = 6 << 16; + r2 = r2 & 8; + r16 = r16 + 31340; + if(r2 == r0) { + pc=0x21500; + continue; + } + case 0x21440: + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r5 = r5 + 4456; + r6 = r18 + r0; + r31=0x2145c; + pc=0x4b800; + run_4b800(); return; + case 0x2145c: + r2= page[(r16+28)>>>2]; + if(r2 == r0) { + pc=0x214ec; + continue; + } + r2 = 6 << 16; + r6 = 6 << 16; + r2 = r2 + 4176; + r6 = r6 + 4184; + case 0x2147c: + r3= page[(r16+24)>>>2]; + r5= page[(r28+-32692)>>>2]; + if(r3 != r0) { + pc=0x215e4; + continue; + } + page[(r29+16)>>>2] = r2; + r2= page[(r5+0)>>>2]; + r3= page[(r28+-32672)>>>2]; + page[(r29+20)>>>2] = r2; + r2= page[(r5+4)>>>2]; + r7 = 6 << 16; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r5 = 6 << 16; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + r4= page[(r16+32)>>>2]; + page[(r29+32)>>>2] = r2; + page[(r29+36)>>>2] = r17; + r5 = r5 + 4268; + r7 = r7 + 4252; + r31=0x214d4; + pc=0x4b800; + run_4b800(); return; + case 0x214d4: + r4 = r0 + 1; + r31=0x214e0; + pc=0x12000; + run_12000(); return; + case 0x214e0: + r4 = r2 + r0; + r31=0x214ec; + pc=0x49a00; + run_49800(); return; + case 0x214ec: + r2 = 6 << 16; + r2 = r2 + -4072; + r6 = r2 + r0; + pc=0x2147c; + continue; + case 0x21500: + r2= page[(r16+28)>>>2]; + if(r2 == r0) { + pc=0x21638; + continue; + } + r2 = 6 << 16; + r6 = 6 << 16; + r2 = r2 + 4176; + r6 = r6 + 4196; + case 0x21520: + r3= page[(r16+24)>>>2]; + r5= page[(r28+-32692)>>>2]; + if(r3 != r0) { + pc=0x2164c; + continue; + } + page[(r29+16)>>>2] = r2; + r2= page[(r5+0)>>>2]; + r3= page[(r28+-32672)>>>2]; + page[(r29+20)>>>2] = r2; + r2= page[(r5+4)>>>2]; + r7 = 6 << 16; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r5 = 6 << 16; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + r4= page[(r16+32)>>>2]; + page[(r29+32)>>>2] = r2; + r2 = 6 << 16; + r2 = r2 + 4428; + page[(r29+36)>>>2] = r2; + r5 = r5 + 4268; + r7 = r7 + 4316; + r31=0x21580; + pc=0x4b800; + run_4b800(); return; + case 0x21580: + r2 = 6 << 16; + r2 = r2 + 31320; + r3= page[(r2+12)>>>2]; + r3 = r3 + 1; + page[(r2+12)>>>2] = r3; + r3= page[(r16+44)>>>2]; + if(r3 == r0) { + pc=0x21440; + continue; + } + r3= page[(r2+8)>>>2]; + r3 = r3 + 1; + page[(r2+8)>>>2] = r3; + r2= page[(r16+20)>>>2]; + r3 = r3 < r2 ? 1 : 0; + if(r3 != r0) { + pc=0x21440; + continue; + } + pc=0x214d4; + continue; + case 0x215d4: + r16 = 6 << 16; + r16 = r16 + 31340; + pc=0x21440; + continue; + case 0x215e4: + r8= page[(r5+0)>>>2]; + r7= page[(r5+4)>>>2]; + r5 = 6 << 16; + r3= page[(r28+-32672)>>>2]; + r5 = r5 + 4252; + page[(r29+16)>>>2] = r6; + page[(r29+20)>>>2] = r5; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r4= page[(r16+32)>>>2]; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + r5 = 6 << 16; + page[(r29+32)>>>2] = r2; + page[(r29+36)>>>2] = r17; + r5 = r5 + 4220; + r6 = r8 + r0; + r31=0x21630; + pc=0x4b800; + run_4b800(); return; + case 0x21630: + pc=0x214d4; + continue; + case 0x21638: + r2 = 6 << 16; + r2 = r2 + -4072; + r6 = r2 + r0; + pc=0x21520; + continue; + case 0x2164c: + r8= page[(r5+0)>>>2]; + r7= page[(r5+4)>>>2]; + r5 = 6 << 16; + r3= page[(r28+-32672)>>>2]; + r5 = r5 + 4316; + page[(r29+16)>>>2] = r6; + page[(r29+20)>>>2] = r5; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r4= page[(r16+32)>>>2]; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + r5 = 6 << 16; + page[(r29+32)>>>2] = r2; + r2 = 6 << 16; + r2 = r2 + 4428; + page[(r29+36)>>>2] = r2; + r5 = r5 + 4220; + r6 = r8 + r0; + r31=0x216a0; + pc=0x4b800; + run_4b800(); return; + case 0x216a0: + pc=0x21580; continue; - case 0x217b4: - r4 = 7 << 16; - r4 = r4 + -6980; - r16 = r0 + 32; - /* Next insn is delay slot */ - r31=0x217c8; - pc=0x1b000; - run_1b000(); return; - case 0x217c8: - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x21480; - run_21400(); return; - case 0x217d4: - /* Next insn is delay slot */ - r31=0x217dc; - pc=0x1c000; - run_1c000(); return; - case 0x217dc: - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x21480; - run_21400(); return; - case 0x217e8: - r2 = r0 + 32; - /* Next insn is delay slot */ - pc=0x21480; - run_21400(); return; - case 0x217f4: - /* Next insn is delay slot */ - r31=0x217fc; - pc=0x1c000; - run_1c000(); return; - case 0x217fc: - /* Next insn is delay slot */ - pc=0x214f8; - run_21400(); return; case 0x21800: pc=0x21800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_21800() throws ExecutionException { /* 0x21800 - 0x21a00 */ + private final void run_21800() throws ExecutionException { /* 0x21800 - 0x22000 */ int addr, tmp; for(;;) { switch(pc) { case 0x21800: - case 0x21a00: - pc=0x21a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_21a00() throws ExecutionException { /* 0x21a00 - 0x21c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x21a00: - r29 = r29 + -136; - r6 = r5 + r0; - r5 = r29 + 104; - writePages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff] = r31; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r20; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r19; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r18; - writePages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff] = r17; - writePages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x21a2c; - pc=0x31000; - run_31000(); return; - case 0x21a2c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x21b60; - continue; - } - r16 = readPages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff]; - r2 = r16 >> 10; - r3 = (r2&0xffffffffL) < (7&0xffffffffL) ? 1 : 0; - r17 = r16 & 255; - r18 = r16 & 768; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x21dc8; - run_21c00(); return; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + -4812; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x21a74: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x21a80; - pc=0x15c00; - run_15c00(); return; - case 0x21a80: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x21a8c; - pc=0x32200; - run_32200(); return; - case 0x21a8c: - r2 = 7 << 16; - r2 = r2 + 30664; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r3 = r4 & r3; - r3 = r3 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x21e38; - run_21e00(); return; - } - r6 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r3 = r0 | 65535; - r4 = r6 | 65535; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x22058; - run_22000(); return; - } - r2 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r6 = r6 - r2; - r6 = r6 + -2; - r16 = r6 & 65535; - r6 = r6 & 32768; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x21aec; - continue; - } - r2 = 65535 << 16; - r16 = r16 + r2; - case 0x21aec: - r2 = r16 + 128; - r2 = (r2&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x21b34; - continue; - } - r2 = r16 < -128 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x22268; - run_22200(); return; - } - r7 = r0 + -128; - r7 = r7 - r16; - case 0x21b10: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5772; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x21b28; - pc=0x42000; - run_42000(); return; - case 0x21b28: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x21b34; - pc=0x1b000; - run_1b000(); return; - case 0x21b34: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x21b44; - return; - case 0x21b44: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r16 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x21b54; - return; - case 0x21b54: - /* Next insn is delay slot */ - r31=0x21b5c; - pc=0x1ce00; - run_1ce00(); return; - case 0x21b5c: - r2 = r0 + 1; - case 0x21b60: - r31 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; - r20 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r19 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r18 = readPages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff]; - r17 = readPages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff]; - r16 = readPages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff]; - r29 = r29 + 136; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x21b84: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x21b90; - pc=0x15c00; - run_15c00(); return; - case 0x21b90: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x21b9c; - pc=0x32200; - run_32200(); return; - case 0x21b9c: - r2 = 7 << 16; - r2 = r2 + 30664; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r3 = r4 & r3; - r3 = r3 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x21e8c; - run_21e00(); return; - } - r6 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r3 = r0 | 65535; - r4 = r6 | 65535; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x22084; - run_22000(); return; - } - r16 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r16 = r6 - r16; - r16 = r16 + -3; - r16 = r16 & 65535; - case 0x21be8: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x21bf8; - return; - case 0x21bf8: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x21c04; - pc=0x26000; - run_26000(); return; - case 0x21c00: - pc=0x21c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_21c00() throws ExecutionException { /* 0x21c00 - 0x21e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x21c00: - case 0x21c04: - /* Next insn is delay slot */ - r31=0x21c0c; - pc=0x1ce00; - run_1ce00(); return; - case 0x21c0c: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x21b60; - run_21a00(); return; - case 0x21c18: - /* Next insn is delay slot */ - r31=0x21c20; - pc=0x15e00; - run_15e00(); return; - case 0x21c20: - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x21c2c; - pc=0x20000; - run_20000(); return; - case 0x21c2c: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x21e44; - run_21e00(); return; - } - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x21c44; - pc=0x1b000; - run_1b000(); return; - case 0x21c44: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x21b60; - run_21a00(); return; - case 0x21c50: - r19 = r29 + 16; - /* Next insn is delay slot */ - r31=0x21c5c; - pc=0x20200; - run_20200(); return; - case 0x21c5c: - r4 = r19 + r0; - r20 = r2 + r0; - /* Next insn is delay slot */ - r31=0x21c6c; - pc=0x21400; - run_21400(); return; - case 0x21c6c: - r3 = (r2&0xffffffffL) < (65&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2203c; - run_22000(); return; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + -4784; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x21c98: - r19 = r29 + 16; - /* Next insn is delay slot */ - r31=0x21ca4; - pc=0x20200; - run_20200(); return; - case 0x21ca4: - r4 = r19 + r0; - r20 = r2 + r0; - /* Next insn is delay slot */ - r31=0x21cb4; - pc=0x21400; - run_21400(); return; - case 0x21cb4: - r3 = r0 + 3; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x22254; - run_22200(); return; - } - r3 = r2 < 4 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x21de8; - continue; - } - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x22240; - run_22200(); return; - } - r3 = r0 + 2; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x2203c; - run_22000(); return; - } - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2764; - case 0x21cec: - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x21d04; - pc=0x21000; - run_21000(); return; - case 0x21d04: - r2 = r0 + 1; - case 0x21d08: - r31 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; - r20 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r19 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r18 = readPages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff]; - r17 = readPages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff]; - r16 = readPages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff]; - r29 = r29 + 136; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x21d2c: - /* Next insn is delay slot */ - r31=0x21d34; - pc=0x20200; - run_20200(); return; - case 0x21d34: - r4 = r29 + 16; - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x21d44; - pc=0x21400; - run_21400(); return; - case 0x21d44: - r3 = r0 + 16; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x220b0; - run_22000(); return; - } - r3 = r2 < 17 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x21e98; - run_21e00(); return; - } - r3 = r0 + 24; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x22134; - run_22000(); return; - } - r3 = r0 + 32; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x2203c; - run_22000(); return; - } - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2996; - case 0x21d80: - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x21d98; - pc=0x21000; - run_21000(); return; - case 0x21d98: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x21d08; - continue; - case 0x21da4: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x21db4; - return; - case 0x21db4: - /* Next insn is delay slot */ - r31=0x21dbc; - pc=0x1ce00; - run_1ce00(); return; - case 0x21dbc: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x21b60; - run_21a00(); return; - case 0x21dc8: - r4 = 7 << 16; - r4 = r4 + -5732; - r5 = r17 + r0; - /* Next insn is delay slot */ - r31=0x21ddc; - pc=0x1b800; - run_1b800(); return; - case 0x21ddc: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x21d08; - continue; - case 0x21de8: - r3 = r0 + 64; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x22148; - run_22000(); return; - } - r3 = r0 + 128; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x2203c; - run_22000(); return; - } - case 0x21e00: - pc=0x21e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_21e00() throws ExecutionException { /* 0x21e00 - 0x22000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x21e00: - r2 = 7 << 16; - r2 = r2 + -2920; - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x2203c; - run_22000(); return; - } - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - r31=0x21e2c; - return; - case 0x21e2c: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x21d08; - run_21c00(); return; - case 0x21e38: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x21b34; - run_21a00(); return; - case 0x21e44: - /* Next insn is delay slot */ - r31=0x21e4c; - pc=0x15e00; - run_15e00(); return; - case 0x21e4c: - r18 = r2 + r0; - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x21e60; - return; - case 0x21e60: - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x21e6c; - pc=0x25e00; - run_25e00(); return; - case 0x21e6c: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x21e78; - pc=0x25e00; - run_25e00(); return; - case 0x21e78: - /* Next insn is delay slot */ - r31=0x21e80; - pc=0x1ce00; - run_1ce00(); return; - case 0x21e80: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x21b60; - run_21a00(); return; - case 0x21e8c: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x21be8; - run_21a00(); return; - case 0x21e98: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2203c; - run_22000(); return; - } - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2948; - r2 = r17 + r2; - r6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x21ec4; - pc=0x21000; - run_21000(); return; - case 0x21ec4: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x21d08; - run_21c00(); return; - case 0x21ed0: - r2 = 7 << 16; - r2 = r2 + -2504; - case 0x21ed8: - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r6 = tmp; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x21ef0; - pc=0x21000; - run_21000(); return; - case 0x21ef0: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x21d08; - run_21c00(); return; - case 0x21efc: - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2120; - case 0x21f08: - r2 = r17 + r2; - r6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x21f20; - pc=0x21000; - run_21000(); return; - case 0x21f20: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x21d08; - run_21c00(); return; - case 0x21f2c: - r2 = 7 << 16; - r2 = r2 + -2432; - r17 = r17 + r2; - r2 = 7 << 16; - r3 = readPages[(r2+30664)>>>12][((r2+30664)>>>2)&0x3ff]; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r6 = tmp; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r3 = r3 & 2; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x21f98; - continue; - } - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x21f98; - continue; - } - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x21f90; - continue; - } - r16 = r16 & 256; - r2 = r2 + 30664; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x22294; - run_22200(); return; - } - r20 = readPages[(r2+36)>>>12][((r2+36)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - case 0x21f84: - r20 = (r20&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - r2 = r0 + 2; - r20 = r2 - r20; - case 0x21f90: - r2 = r6 << 8; - r6 = r2 | r6; - case 0x21f98: - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x21fa8; - pc=0x21000; - run_21000(); return; - case 0x21fa8: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x21d08; - run_21c00(); return; - case 0x21fb4: - r2 = 7 << 16; - r2 = r2 + -2612; - /* Next insn is delay slot */ - pc=0x21ed8; - continue; - case 0x21fc4: - r2 = 7 << 16; - r2 = r2 + -2360; - /* Next insn is delay slot */ - pc=0x21ed8; - continue; - case 0x21fd4: - r2 = 7 << 16; - r2 = r2 + -2540; - /* Next insn is delay slot */ - pc=0x21ed8; - continue; - case 0x21fe4: - r2 = 7 << 16; - r2 = r2 + -2396; - /* Next insn is delay slot */ - pc=0x21ed8; - continue; - case 0x21ff4: - r2 = 7 << 16; - r2 = r2 + -2468; - /* Next insn is delay slot */ - pc=0x21ed8; - continue; - case 0x22000: - pc=0x22000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_22000() throws ExecutionException { /* 0x22000 - 0x22200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x22000: - case 0x22004: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2324; - /* Next insn is delay slot */ - pc=0x21cec; - run_21c00(); return; - case 0x22018: - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2256; - /* Next insn is delay slot */ - pc=0x21f08; - run_21e00(); return; - case 0x2202c: - r2 = 7 << 16; - r2 = r2 + -2576; - /* Next insn is delay slot */ - pc=0x21ed8; - run_21e00(); return; - case 0x2203c: - r4 = 7 << 16; - r4 = r4 + -3048; - /* Next insn is delay slot */ - r31=0x2204c; - pc=0x1b000; - run_1b000(); return; - case 0x2204c: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x21d08; - run_21c00(); return; - case 0x22058: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5800; - /* Next insn is delay slot */ - r31=0x2206c; - pc=0x42000; - run_42000(); return; - case 0x2206c: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x22078; - pc=0x1b000; - run_1b000(); return; - case 0x22078: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x21b34; - run_21a00(); return; - case 0x22084: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5800; - /* Next insn is delay slot */ - r31=0x22098; - pc=0x42000; - run_42000(); return; - case 0x22098: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x220a4; - pc=0x1b000; - run_1b000(); return; - case 0x220a4: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x21be8; - run_21a00(); return; - case 0x220b0: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2964; - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x220d4; - pc=0x21000; - run_21000(); return; - case 0x220d4: - addr=r29+27; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r2 = r0 + 255; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x21d04; - run_21c00(); return; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r2 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x21d04; - run_21c00(); return; - } - r2 = 7 << 16; - r2 = readPages[(r2+30664)>>>12][((r2+30664)>>>2)&0x3ff]; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 & 1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x21d04; - run_21c00(); return; - } - r4 = 7 << 16; - r4 = r4 + -5840; - /* Next insn is delay slot */ - r31=0x22128; - pc=0x1ac00; - run_1ac00(); return; - case 0x22128: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x21d08; - run_21c00(); return; - case 0x22134: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2980; - /* Next insn is delay slot */ - pc=0x21d80; - run_21c00(); return; - case 0x22148: - r2 = 7 << 16; - r2 = r2 + -2880; - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r17 = 7 << 16; - r3 = readPages[(r17+30664)>>>12][((r17+30664)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r3 = r3 & 2; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x22274; - run_22200(); return; - } - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x22274; - run_22200(); return; - } - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x221b0; - continue; - } - r16 = r16 & 256; - r3 = r17 + 30664; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x22280; - run_22200(); return; - } - r20 = readPages[(r3+36)>>>12][((r3+36)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - case 0x221a4: - r20 = (r20&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - r3 = r0 + 2; - r20 = r3 - r20; - case 0x221b0: - r16 = r2 << 8; - r16 = r16 | r2; - case 0x221b8: - r4 = r20 + r0; - r5 = r19 + r0; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x221cc; - pc=0x21000; - run_21000(); return; - case 0x221cc: - r2 = readPages[(r17+30664)>>>12][((r17+30664)>>>2)&0x3ff]; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 & 4; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x21d04; - run_21c00(); return; - } - addr=r29+27; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x21d04; - run_21c00(); return; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - case 0x22200: - pc=0x22200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_22200() throws ExecutionException { /* 0x22200 - 0x22400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x22200: - r2 = r2 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x21d04; - run_21c00(); return; - } - r2 = r0 + 139; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x222a8; - continue; - } - r2 = r0 + 171; - if(r16 != r2) { - /* Next insn is delay slot */ - pc=0x21d04; - run_21c00(); return; - } - r4 = 7 << 16; - r4 = r4 + -5888; - /* Next insn is delay slot */ - r31=0x22234; - pc=0x1ac00; - run_1ac00(); return; - case 0x22234: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x21d08; - run_21c00(); return; - case 0x22240: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2688; - /* Next insn is delay slot */ - pc=0x21cec; - run_21c00(); return; - case 0x22254: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2840; - /* Next insn is delay slot */ - pc=0x21cec; - run_21c00(); return; - case 0x22268: - r7 = r16 + -127; - /* Next insn is delay slot */ - pc=0x21b10; - run_21a00(); return; - case 0x22274: - r16 = r2 + r0; - /* Next insn is delay slot */ - pc=0x221b8; - run_22000(); return; - case 0x22280: - r20 = readPages[(r3+40)>>>12][((r3+40)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x221a4; - run_22000(); return; - case 0x22294: - r20 = readPages[(r2+40)>>>12][((r2+40)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x21f84; - run_21e00(); return; - case 0x222a8: - r4 = 7 << 16; - r4 = r4 + -5936; - /* Next insn is delay slot */ - r31=0x222b8; - pc=0x1ac00; - run_1ac00(); return; - case 0x222b8: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x21d08; - run_21c00(); return; - case 0x22400: - pc=0x22400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_22400() throws ExecutionException { /* 0x22400 - 0x22600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x22400: - r29 = r29 + -24; - r4 = r0 + 8; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x22414; - pc=0x17600; - run_17600(); return; - case 0x22414: - r5 = 7 << 16; - r4 = r28 + -30692; - r5 = r5 + 7760; - writePages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x2242c; - pc=0x30e00; - run_30e00(); return; - case 0x2242c: - r5 = 7 << 16; - r4 = r28 + -30696; - r5 = r5 + 7340; - /* Next insn is delay slot */ - r31=0x22440; - pc=0x30e00; - run_30e00(); return; - case 0x22440: - r5 = 7 << 16; - r4 = r28 + -30700; - r5 = r5 + 7320; - /* Next insn is delay slot */ - r31=0x22454; - pc=0x30e00; - run_30e00(); return; - case 0x22454: - r5 = 7 << 16; - r4 = r28 + -30704; - r5 = r5 + 7260; - /* Next insn is delay slot */ - r31=0x22468; - pc=0x30e00; - run_30e00(); return; - case 0x22468: - r5 = 7 << 16; - r4 = r28 + -30708; - r5 = r5 + 6860; - /* Next insn is delay slot */ - r31=0x2247c; - pc=0x30e00; - run_30e00(); return; - case 0x2247c: - r5 = 7 << 16; - r4 = r28 + -30712; - r5 = r5 + 6820; - /* Next insn is delay slot */ - r31=0x22490; - pc=0x30e00; - run_30e00(); return; - case 0x22490: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = r28 + -30716; - r5 = r5 + 6100; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=0x30e00; - run_30e00(); return; - case 0x22600: - pc=0x22600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_22600() throws ExecutionException { /* 0x22600 - 0x22800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x22600: - r2 = r0 + 3; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x22618; - continue; - } - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x22618: - r4 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - r5 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r29 = r29 + -136; - writePages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff] = r31; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r20; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r19; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r18; - writePages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff] = r17; - writePages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x22644; - pc=0x18000; - run_18000(); return; - case 0x22644: - r4 = readPages[(r28+-30692)>>>12][((r28+-30692)>>>2)&0x3ff]; - r6 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - r5 = r29 + 104; - /* Next insn is delay slot */ - r31=0x22658; - pc=0x31000; - run_31000(); return; - case 0x22658: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2278c; - continue; - } - r16 = readPages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff]; - r2 = r16 >> 10; - r3 = (r2&0xffffffffL) < (7&0xffffffffL) ? 1 : 0; - r17 = r16 & 255; - r18 = r16 & 768; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x22b5c; - run_22a00(); return; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + -4524; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x226a0: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x226ac; - pc=0x15c00; - run_15c00(); return; - case 0x226ac: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x226b8; - pc=0x32200; - run_32200(); return; - case 0x226b8: - r2 = 7 << 16; - r2 = r2 + 30664; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r3 = r4 & r3; - r3 = r3 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x22c14; - run_22c00(); return; - } - r6 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r3 = r0 | 65535; - r4 = r6 | 65535; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x22c64; - run_22c00(); return; - } - r2 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r2 = r6 - r2; - r2 = r2 + -2; - r16 = r2 & 65535; - r2 = r2 & 32768; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x22718; - continue; - } - r2 = 65535 << 16; - r16 = r16 + r2; - case 0x22718: - r2 = r16 + 128; - r2 = (r2&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x22760; - continue; - } - r2 = r16 < -128 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x22e74; - run_22e00(); return; - } - r7 = r0 + -128; - r7 = r7 - r16; - case 0x2273c: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5772; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x22754; - pc=0x42000; - run_42000(); return; - case 0x22754: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x22760; - pc=0x1b000; - run_1b000(); return; - case 0x22760: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x22770; - return; - case 0x22770: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r16 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x22780; - return; - case 0x22780: - /* Next insn is delay slot */ - r31=0x22788; - pc=0x1ce00; - run_1ce00(); return; - case 0x22788: - r2 = r0 + 1; - case 0x2278c: - r31 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; - r20 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r19 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r18 = readPages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff]; - r17 = readPages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff]; - r16 = readPages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff]; - r29 = r29 + 136; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x227b0: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x227bc; - pc=0x15c00; - run_15c00(); return; - case 0x227bc: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x227c8; - pc=0x32200; - run_32200(); return; - case 0x227c8: - r2 = 7 << 16; - r2 = r2 + 30664; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r3 = r4 & r3; - r3 = r3 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x22c20; - run_22c00(); return; - } - r6 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r3 = r0 | 65535; - r4 = r6 | 65535; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x22c90; - run_22c00(); return; - } - case 0x22800: - pc=0x22800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_22800() throws ExecutionException { /* 0x22800 - 0x22a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x22800: - r2 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r6 = r6 - r2; - r16 = r6 + -3; - r16 = r16 & 65535; - case 0x22814: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x22824; - return; - case 0x22824: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x22830; - pc=0x26000; - run_26000(); return; - case 0x22830: - /* Next insn is delay slot */ - r31=0x22838; - pc=0x1ce00; - run_1ce00(); return; - case 0x22838: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x22844: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x22854; - return; - case 0x22854: - /* Next insn is delay slot */ - r31=0x2285c; - pc=0x1ce00; - run_1ce00(); return; - case 0x2285c: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x22868: - /* Next insn is delay slot */ - r31=0x22870; - pc=0x20200; - run_20200(); return; - case 0x22870: - r4 = r29 + 16; - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x22880; - pc=0x21400; - run_21400(); return; - case 0x22880: - r3 = r0 + 16; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x22cbc; - run_22c00(); return; - } - r3 = r2 < 17 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x22c2c; - run_22c00(); return; - } - r3 = r0 + 24; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x22d40; - run_22c00(); return; - } - r3 = r0 + 32; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x22b40; - run_22a00(); return; - } - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2996; - case 0x228bc: - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x228d4; - pc=0x21000; - run_21000(); return; - case 0x228d4: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x228e0: - r19 = r29 + 16; - /* Next insn is delay slot */ - r31=0x228ec; - pc=0x20200; - run_20200(); return; - case 0x228ec: - r4 = r19 + r0; - r20 = r2 + r0; - /* Next insn is delay slot */ - r31=0x228fc; - pc=0x21400; - run_21400(); return; - case 0x228fc: - r3 = r0 + 3; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x22d54; - run_22c00(); return; - } - r3 = r2 < 4 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x22b7c; - run_22a00(); return; - } - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x22d68; - run_22c00(); return; - } - r3 = r0 + 2; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x22b40; - run_22a00(); return; - } - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2764; - case 0x22934: - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x2294c; - pc=0x21000; - run_21000(); return; - case 0x2294c: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x22958: - /* Next insn is delay slot */ - r31=0x22960; - pc=0x15e00; - run_15e00(); return; - case 0x22960: - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2296c; - pc=0x20000; - run_20000(); return; - case 0x2296c: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x22bcc; - run_22a00(); return; - } - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x22984; - pc=0x1b000; - run_1b000(); return; - case 0x22984: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x22990: - r19 = r29 + 16; - /* Next insn is delay slot */ - r31=0x2299c; - pc=0x20200; - run_20200(); return; - case 0x2299c: - r4 = r19 + r0; - r20 = r2 + r0; - /* Next insn is delay slot */ - r31=0x229ac; - pc=0x21400; - run_21400(); return; - case 0x229ac: - r3 = (r2&0xffffffffL) < (65&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x22b40; - run_22a00(); return; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + -4496; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x229d8: - r3 = 7 << 16; - r4 = readPages[(r3+30664)>>>12][((r3+30664)>>>2)&0x3ff]; - r2 = 7 << 16; - r4 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -2432; - r17 = r17 + r2; - r4 = r4 & 2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x22e8c; - run_22e00(); return; - } - case 0x22a00: - pc=0x22a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_22a00() throws ExecutionException { /* 0x22a00 - 0x22c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x22a00: - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x22e8c; - run_22e00(); return; - } - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x22a38; - continue; - } - r16 = r16 & 256; - r3 = r3 + 30664; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x22eac; - run_22e00(); return; - } - r20 = readPages[(r3+36)>>>12][((r3+36)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - case 0x22a2c: - r20 = (r20&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - r3 = r0 + 2; - r20 = r3 - r20; - case 0x22a38: - r3 = r2 << 8; - r6 = r3 | r2; - case 0x22a40: - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x22a50; - pc=0x21000; - run_21000(); return; - case 0x22a50: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x22a5c: - r2 = 7 << 16; - r2 = r2 + -2612; - case 0x22a64: - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r6 = tmp; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x22a7c; - pc=0x21000; - run_21000(); return; - case 0x22a7c: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x22a88: - r2 = 7 << 16; - r2 = r2 + -2576; - /* Next insn is delay slot */ - pc=0x22a64; - continue; - case 0x22a98: - r2 = 7 << 16; - r2 = r2 + -2360; - /* Next insn is delay slot */ - pc=0x22a64; - continue; - case 0x22aa8: - r2 = 7 << 16; - r2 = r2 + -2540; - /* Next insn is delay slot */ - pc=0x22a64; - continue; - case 0x22ab8: - r2 = 7 << 16; - r2 = r2 + -2396; - /* Next insn is delay slot */ - pc=0x22a64; - continue; - case 0x22ac8: - r2 = 7 << 16; - r2 = r2 + -2468; - /* Next insn is delay slot */ - pc=0x22a64; - continue; - case 0x22ad8: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2324; - /* Next insn is delay slot */ - pc=0x22934; - run_22800(); return; - case 0x22aec: - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2256; - case 0x22af8: - r2 = r17 + r2; - r6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x22b10; - pc=0x21000; - run_21000(); return; - case 0x22b10: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x22b1c: - r2 = 7 << 16; - r2 = r2 + -2504; - /* Next insn is delay slot */ - pc=0x22a64; - continue; - case 0x22b2c: - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2120; - /* Next insn is delay slot */ - pc=0x22af8; - continue; - case 0x22b40: - r4 = 7 << 16; - r4 = r4 + -3048; - /* Next insn is delay slot */ - r31=0x22b50; - pc=0x1b000; - run_1b000(); return; - case 0x22b50: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x22b5c: - r4 = 7 << 16; - r4 = r4 + -5732; - r5 = r17 + r0; - /* Next insn is delay slot */ - r31=0x22b70; - pc=0x1b800; - run_1b800(); return; - case 0x22b70: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x22b7c: - r3 = r0 + 64; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x22d7c; - run_22c00(); return; - } - r3 = r0 + 128; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x22b40; - continue; - } - r2 = 7 << 16; - r2 = r2 + -2920; - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x22b40; - continue; - } - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - r31=0x22bc0; - return; - case 0x22bc0: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x22bcc: - /* Next insn is delay slot */ - r31=0x22bd4; - pc=0x15e00; - run_15e00(); return; - case 0x22bd4: - r18 = r2 + r0; - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x22be8; - return; - case 0x22be8: - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x22bf4; - pc=0x25e00; - run_25e00(); return; - case 0x22bf4: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x22c00; - pc=0x25e00; - run_25e00(); return; - case 0x22c00: - pc=0x22c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_22c00() throws ExecutionException { /* 0x22c00 - 0x22e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x22c00: - /* Next insn is delay slot */ - r31=0x22c08; - pc=0x1ce00; - run_1ce00(); return; - case 0x22c08: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x22c14: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x22760; - run_22600(); return; - case 0x22c20: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x22814; - run_22800(); return; - case 0x22c2c: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x22b40; - run_22a00(); return; - } - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2948; - r2 = r17 + r2; - r6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x22c58; - pc=0x21000; - run_21000(); return; - case 0x22c58: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x22c64: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5800; - /* Next insn is delay slot */ - r31=0x22c78; - pc=0x42000; - run_42000(); return; - case 0x22c78: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x22c84; - pc=0x1b000; - run_1b000(); return; - case 0x22c84: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x22760; - run_22600(); return; - case 0x22c90: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5800; - /* Next insn is delay slot */ - r31=0x22ca4; - pc=0x42000; - run_42000(); return; - case 0x22ca4: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x22cb0; - pc=0x1b000; - run_1b000(); return; - case 0x22cb0: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x22814; - run_22800(); return; - case 0x22cbc: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2964; - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x22ce0; - pc=0x21000; - run_21000(); return; - case 0x22ce0: - addr=r29+27; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r2 = r0 + 255; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x228d4; - run_22800(); return; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r2 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x228d4; - run_22800(); return; - } - r2 = 7 << 16; - r2 = readPages[(r2+30664)>>>12][((r2+30664)>>>2)&0x3ff]; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 & 1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x228d4; - run_22800(); return; - } - r4 = 7 << 16; - r4 = r4 + -5840; - /* Next insn is delay slot */ - r31=0x22d34; - pc=0x1ac00; - run_1ac00(); return; - case 0x22d34: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x22d40: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2980; - /* Next insn is delay slot */ - pc=0x228bc; - run_22800(); return; - case 0x22d54: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2840; - /* Next insn is delay slot */ - pc=0x22934; - run_22800(); return; - case 0x22d68: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2688; - /* Next insn is delay slot */ - pc=0x22934; - run_22800(); return; - case 0x22d7c: - r2 = 7 << 16; - r2 = r2 + -2880; - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r17 = 7 << 16; - r3 = readPages[(r17+30664)>>>12][((r17+30664)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r3 = r3 & 2; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x22e80; - run_22e00(); return; - } - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x22e80; - run_22e00(); return; - } - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x22de4; - continue; - } - r16 = r16 & 256; - r3 = r17 + 30664; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x22e98; - run_22e00(); return; - } - r20 = readPages[(r3+36)>>>12][((r3+36)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - case 0x22dd8: - r20 = (r20&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - r3 = r0 + 2; - r20 = r3 - r20; - case 0x22de4: - r16 = r2 << 8; - r16 = r16 | r2; - case 0x22dec: - r4 = r20 + r0; - r5 = r19 + r0; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x22e00; - pc=0x21000; - run_21000(); return; - case 0x22e00: - pc=0x22e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_22e00() throws ExecutionException { /* 0x22e00 - 0x23000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x22e00: - r2 = readPages[(r17+30664)>>>12][((r17+30664)>>>2)&0x3ff]; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 & 4; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x228d4; - run_22800(); return; - } - addr=r29+27; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x228d4; - run_22800(); return; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r2 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x228d4; - run_22800(); return; - } - r2 = r0 + 139; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x22ec0; - continue; - } - r2 = r0 + 171; - if(r16 != r2) { - /* Next insn is delay slot */ - pc=0x228d4; - run_22800(); return; - } - r4 = 7 << 16; - r4 = r4 + -5888; - /* Next insn is delay slot */ - r31=0x22e68; - pc=0x1ac00; - run_1ac00(); return; - case 0x22e68: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x22e74: - r7 = r16 + -127; - /* Next insn is delay slot */ - pc=0x2273c; - run_22600(); return; - case 0x22e80: - r16 = r2 + r0; - /* Next insn is delay slot */ - pc=0x22dec; - run_22c00(); return; - case 0x22e8c: - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x22a40; - run_22a00(); return; - case 0x22e98: - r20 = readPages[(r3+40)>>>12][((r3+40)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x22dd8; - run_22c00(); return; - case 0x22eac: - r20 = readPages[(r3+40)>>>12][((r3+40)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x22a2c; - run_22a00(); return; - case 0x22ec0: - r4 = 7 << 16; - r4 = r4 + -5936; - /* Next insn is delay slot */ - r31=0x22ed0; - pc=0x1ac00; - run_1ac00(); return; - case 0x22ed0: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2278c; - run_22600(); return; - case 0x23000: - pc=0x23000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_23000() throws ExecutionException { /* 0x23000 - 0x23200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x23000: - r2 = r0 + 3; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x23018; - continue; - } - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x23018: - r4 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - r5 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r29 = r29 + -136; - writePages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff] = r31; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r20; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r19; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r18; - writePages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff] = r17; - writePages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x23044; - pc=0x18000; - run_18000(); return; - case 0x23044: - r4 = readPages[(r28+-30696)>>>12][((r28+-30696)>>>2)&0x3ff]; - r6 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - r5 = r29 + 104; - /* Next insn is delay slot */ - r31=0x23058; - pc=0x31000; - run_31000(); return; - case 0x23058: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x230a0; - continue; - } - r16 = readPages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff]; - r2 = r16 >> 10; - r3 = (r2&0xffffffffL) < (7&0xffffffffL) ? 1 : 0; - r17 = r16 & 255; - r18 = r16 & 768; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x23574; - run_23400(); return; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + -4236; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x230a0: - r4 = readPages[(r28+-30700)>>>12][((r28+-30700)>>>2)&0x3ff]; - r5 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x230b0; - pc=0x21a00; - run_21a00(); return; - case 0x230b0: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x230e0; - continue; - } - case 0x230b8: - r2 = r0 + 1; - case 0x230bc: - r31 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; - r20 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r19 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r18 = readPages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff]; - r17 = readPages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff]; - r16 = readPages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff]; - r29 = r29 + 136; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x230e0: - r4 = readPages[(r28+-30692)>>>12][((r28+-30692)>>>2)&0x3ff]; - r5 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x230f0; - pc=0x21a00; - run_21a00(); return; - case 0x230f0: - r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x230bc; - continue; - case 0x230fc: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x23108; - pc=0x15c00; - run_15c00(); return; - case 0x23108: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x23114; - pc=0x32200; - run_32200(); return; - case 0x23114: - r2 = 7 << 16; - r2 = r2 + 30664; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r3 = r4 & r3; - r3 = r3 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2362c; - run_23600(); return; - } - r6 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r3 = r0 | 65535; - r4 = r6 | 65535; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x23698; - run_23600(); return; - } - r2 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r6 = r6 - r2; - r16 = r6 + -3; - r16 = r16 & 65535; - case 0x23160: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x23170; - return; - case 0x23170: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x2317c; - pc=0x26000; - run_26000(); return; - case 0x2317c: - /* Next insn is delay slot */ - r31=0x23184; - pc=0x1ce00; - run_1ce00(); return; - case 0x23184: - /* Next insn is delay slot */ - pc=0x230b8; - continue; - case 0x2318c: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x23198; - pc=0x15c00; - run_15c00(); return; - case 0x23198: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x231a4; - pc=0x32200; - run_32200(); return; - case 0x231a4: - r2 = 7 << 16; - r2 = r2 + 30664; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r3 = r4 & r3; - r3 = r3 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x23620; - run_23600(); return; - } - r6 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r3 = r0 | 65535; - r4 = r6 | 65535; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x2366c; - run_23600(); return; - } - r2 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r2 = r6 - r2; - r2 = r2 + -2; - r16 = r2 & 65535; - r2 = r2 & 32768; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x23204; - run_23200(); return; - } - r2 = 65535 << 16; - case 0x23200: - pc=0x23200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_23200() throws ExecutionException { /* 0x23200 - 0x23400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x23200: - r16 = r16 + r2; - case 0x23204: - r2 = r16 + 128; - r2 = (r2&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2324c; - continue; - } - r2 = r16 < -128 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x23874; - run_23800(); return; - } - r7 = r0 + -128; - r7 = r7 - r16; - case 0x23228: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5772; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x23240; - pc=0x42000; - run_42000(); return; - case 0x23240: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x2324c; - pc=0x1b000; - run_1b000(); return; - case 0x2324c: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x2325c; - return; - case 0x2325c: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r16 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x2326c; - return; - case 0x2326c: - /* Next insn is delay slot */ - r31=0x23274; - pc=0x1ce00; - run_1ce00(); return; - case 0x23274: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x2327c: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x2328c; - return; - case 0x2328c: - /* Next insn is delay slot */ - r31=0x23294; - pc=0x1ce00; - run_1ce00(); return; - case 0x23294: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x2329c: - /* Next insn is delay slot */ - r31=0x232a4; - pc=0x20200; - run_20200(); return; - case 0x232a4: - r4 = r29 + 16; - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x232b4; - pc=0x21400; - run_21400(); return; - case 0x232b4: - r3 = r0 + 16; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x236c4; - run_23600(); return; - } - r3 = r2 < 17 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x23638; - run_23600(); return; - } - r3 = r0 + 24; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x23744; - run_23600(); return; - } - r3 = r0 + 32; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x2355c; - run_23400(); return; - } - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2996; - case 0x232f0: - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x23308; - pc=0x21000; - run_21000(); return; - case 0x23308: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x23310: - r19 = r29 + 16; - /* Next insn is delay slot */ - r31=0x2331c; - pc=0x20200; - run_20200(); return; - case 0x2331c: - r4 = r19 + r0; - r20 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2332c; - pc=0x21400; - run_21400(); return; - case 0x2332c: - r3 = r0 + 3; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x23758; - run_23600(); return; - } - r3 = r2 < 4 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x23590; - run_23400(); return; - } - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2376c; - run_23600(); return; - } - r3 = r0 + 2; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x2355c; - run_23400(); return; - } - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2764; - case 0x23364: - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x2337c; - pc=0x21000; - run_21000(); return; - case 0x2337c: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x23384: - r19 = r29 + 16; - /* Next insn is delay slot */ - r31=0x23390; - pc=0x20200; - run_20200(); return; - case 0x23390: - r4 = r19 + r0; - r20 = r2 + r0; - /* Next insn is delay slot */ - r31=0x233a0; - pc=0x21400; - run_21400(); return; - case 0x233a0: - r3 = (r2&0xffffffffL) < (65&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2355c; - run_23400(); return; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + -4208; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x233cc: - /* Next insn is delay slot */ - r31=0x233d4; - pc=0x15e00; - run_15e00(); return; - case 0x233d4: - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x233e0; - pc=0x20000; - run_20000(); return; - case 0x233e0: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x235dc; - run_23400(); return; - } - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x233f8; - pc=0x1b000; - run_1b000(); return; - case 0x233f8: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x23400: - pc=0x23400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_23400() throws ExecutionException { /* 0x23400 - 0x23600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x23400: - r3 = 7 << 16; - r4 = readPages[(r3+30664)>>>12][((r3+30664)>>>2)&0x3ff]; - r2 = 7 << 16; - r4 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -2432; - r17 = r17 + r2; - r4 = r4 & 2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x2388c; - run_23800(); return; - } - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x2388c; - run_23800(); return; - } - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x23460; - continue; - } - r16 = r16 & 256; - r3 = r3 + 30664; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x238ac; - run_23800(); return; - } - r20 = readPages[(r3+36)>>>12][((r3+36)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - case 0x23454: - r20 = (r20&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - r3 = r0 + 2; - r20 = r3 - r20; - case 0x23460: - r3 = r2 << 8; - r6 = r3 | r2; - case 0x23468: - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x23478; - pc=0x21000; - run_21000(); return; - case 0x23478: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x23480: - r2 = 7 << 16; - r2 = r2 + -2360; - case 0x23488: - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r6 = tmp; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x234a0; - pc=0x21000; - run_21000(); return; - case 0x234a0: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x234a8: - r2 = 7 << 16; - r2 = r2 + -2396; - /* Next insn is delay slot */ - pc=0x23488; - continue; - case 0x234b8: - r2 = 7 << 16; - r2 = r2 + -2468; - /* Next insn is delay slot */ - pc=0x23488; - continue; - case 0x234c8: - r2 = 7 << 16; - r2 = r2 + -2612; - /* Next insn is delay slot */ - pc=0x23488; - continue; - case 0x234d8: - r2 = 7 << 16; - r2 = r2 + -2576; - /* Next insn is delay slot */ - pc=0x23488; - continue; - case 0x234e8: - r2 = 7 << 16; - r2 = r2 + -2540; - /* Next insn is delay slot */ - pc=0x23488; - continue; - case 0x234f8: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2324; - /* Next insn is delay slot */ - pc=0x23364; - run_23200(); return; - case 0x2350c: - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2256; - case 0x23518: - r2 = r17 + r2; - r6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x23530; - pc=0x21000; - run_21000(); return; - case 0x23530: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x23538: - r2 = 7 << 16; - r2 = r2 + -2504; - /* Next insn is delay slot */ - pc=0x23488; - continue; - case 0x23548: - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2120; - /* Next insn is delay slot */ - pc=0x23518; - continue; - case 0x2355c: - r4 = 7 << 16; - r4 = r4 + -3048; - /* Next insn is delay slot */ - r31=0x2356c; - pc=0x1b000; - run_1b000(); return; - case 0x2356c: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x23574: - r4 = 7 << 16; - r4 = r4 + -5732; - r5 = r17 + r0; - /* Next insn is delay slot */ - r31=0x23588; - pc=0x1b800; - run_1b800(); return; - case 0x23588: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x23590: - r3 = r0 + 64; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x23780; - run_23600(); return; - } - r3 = r0 + 128; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x2355c; - continue; - } - r2 = 7 << 16; - r2 = r2 + -2920; - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x2355c; - continue; - } - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - r31=0x235d4; - return; - case 0x235d4: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x235dc: - /* Next insn is delay slot */ - r31=0x235e4; - pc=0x15e00; - run_15e00(); return; - case 0x235e4: - r18 = r2 + r0; - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x235f8; - return; - case 0x235f8: - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x23604; - pc=0x25e00; - run_25e00(); return; - case 0x23600: - pc=0x23600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_23600() throws ExecutionException { /* 0x23600 - 0x23800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x23600: - case 0x23604: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x23610; - pc=0x25e00; - run_25e00(); return; - case 0x23610: - /* Next insn is delay slot */ - r31=0x23618; - pc=0x1ce00; - run_1ce00(); return; - case 0x23618: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x23620: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x2324c; - run_23200(); return; - case 0x2362c: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x23160; - run_23000(); return; - case 0x23638: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2355c; - run_23400(); return; - } - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2948; - r2 = r17 + r2; - r6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x23664; - pc=0x21000; - run_21000(); return; - case 0x23664: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x2366c: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5800; - /* Next insn is delay slot */ - r31=0x23680; - pc=0x42000; - run_42000(); return; - case 0x23680: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x2368c; - pc=0x1b000; - run_1b000(); return; - case 0x2368c: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x2324c; - run_23200(); return; - case 0x23698: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5800; - /* Next insn is delay slot */ - r31=0x236ac; - pc=0x42000; - run_42000(); return; - case 0x236ac: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x236b8; - pc=0x1b000; - run_1b000(); return; - case 0x236b8: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x23160; - run_23000(); return; - case 0x236c4: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2964; - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x236e8; - pc=0x21000; - run_21000(); return; - case 0x236e8: - addr=r29+27; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r2 = r0 + 255; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r2 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - } - r2 = 7 << 16; - r2 = readPages[(r2+30664)>>>12][((r2+30664)>>>2)&0x3ff]; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 & 1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - } - r4 = 7 << 16; - r4 = r4 + -5840; - /* Next insn is delay slot */ - r31=0x2373c; - pc=0x1ac00; - run_1ac00(); return; - case 0x2373c: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x23744: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2980; - /* Next insn is delay slot */ - pc=0x232f0; - run_23200(); return; - case 0x23758: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2840; - /* Next insn is delay slot */ - pc=0x23364; - run_23200(); return; - case 0x2376c: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2688; - /* Next insn is delay slot */ - pc=0x23364; - run_23200(); return; - case 0x23780: - r2 = 7 << 16; - r2 = r2 + -2880; - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r17 = 7 << 16; - r3 = readPages[(r17+30664)>>>12][((r17+30664)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r3 = r3 & 2; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x23880; - run_23800(); return; - } - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x23880; - run_23800(); return; - } - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x237e8; - continue; - } - r16 = r16 & 256; - r3 = r17 + 30664; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x23898; - run_23800(); return; - } - r20 = readPages[(r3+36)>>>12][((r3+36)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - case 0x237dc: - r20 = (r20&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - r3 = r0 + 2; - r20 = r3 - r20; - case 0x237e8: - r16 = r2 << 8; - r16 = r16 | r2; - case 0x237f0: - r4 = r20 + r0; - r5 = r19 + r0; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x23804; - pc=0x21000; - run_21000(); return; - case 0x23800: - pc=0x23800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_23800() throws ExecutionException { /* 0x23800 - 0x23a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x23800: - case 0x23804: - r2 = readPages[(r17+30664)>>>12][((r17+30664)>>>2)&0x3ff]; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 & 4; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - } - addr=r29+27; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r2 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - } - r2 = r0 + 139; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x238c0; - continue; - } - r2 = r0 + 171; - if(r16 != r2) { - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - } - r4 = 7 << 16; - r4 = r4 + -5888; - /* Next insn is delay slot */ - r31=0x2386c; - pc=0x1ac00; - run_1ac00(); return; - case 0x2386c: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x23874: - r7 = r16 + -127; - /* Next insn is delay slot */ - pc=0x23228; - run_23200(); return; - case 0x23880: - r16 = r2 + r0; - /* Next insn is delay slot */ - pc=0x237f0; - run_23600(); return; - case 0x2388c: - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x23468; - run_23400(); return; - case 0x23898: - r20 = readPages[(r3+40)>>>12][((r3+40)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x237dc; - run_23600(); return; - case 0x238ac: - r20 = readPages[(r3+40)>>>12][((r3+40)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x23454; - run_23400(); return; - case 0x238c0: - r4 = 7 << 16; - r4 = r4 + -5936; - /* Next insn is delay slot */ - r31=0x238d0; - pc=0x1ac00; - run_1ac00(); return; - case 0x238d0: - /* Next insn is delay slot */ - pc=0x230b8; - run_23000(); return; - case 0x23a00: - pc=0x23a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_23a00() throws ExecutionException { /* 0x23a00 - 0x23c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x23a00: - r2 = r0 + 3; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x23a18; - continue; - } - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x23a18: - r4 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - r5 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r29 = r29 + -136; - writePages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff] = r31; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r20; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r19; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r18; - writePages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff] = r17; - writePages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x23a44; - pc=0x18000; - run_18000(); return; - case 0x23a44: - r4 = readPages[(r28+-30704)>>>12][((r28+-30704)>>>2)&0x3ff]; - r6 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - r5 = r29 + 104; - /* Next insn is delay slot */ - r31=0x23a58; - pc=0x31000; - run_31000(); return; - case 0x23a58: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x23aa0; - continue; - } - r16 = readPages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff]; - r2 = r16 >> 10; - r3 = (r2&0xffffffffL) < (7&0xffffffffL) ? 1 : 0; - r17 = r16 & 255; - r18 = r16 & 768; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x23f74; - run_23e00(); return; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + -3948; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x23aa0: - r4 = readPages[(r28+-30696)>>>12][((r28+-30696)>>>2)&0x3ff]; - r5 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x23ab0; - pc=0x21a00; - run_21a00(); return; - case 0x23ab0: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x23ae0; - continue; - } - case 0x23ab8: - r2 = r0 + 1; - case 0x23abc: - r31 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; - r20 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r19 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r18 = readPages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff]; - r17 = readPages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff]; - r16 = readPages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff]; - r29 = r29 + 136; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x23ae0: - r4 = readPages[(r28+-30692)>>>12][((r28+-30692)>>>2)&0x3ff]; - r5 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x23af0; - pc=0x21a00; - run_21a00(); return; - case 0x23af0: - r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x23abc; - continue; - case 0x23afc: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x23b08; - pc=0x15c00; - run_15c00(); return; - case 0x23b08: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x23b14; - pc=0x32200; - run_32200(); return; - case 0x23b14: - r2 = 7 << 16; - r2 = r2 + 30664; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r3 = r4 & r3; - r3 = r3 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2402c; - run_24000(); return; - } - r6 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r3 = r0 | 65535; - r4 = r6 | 65535; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x24098; - run_24000(); return; - } - r2 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r6 = r6 - r2; - r16 = r6 + -3; - r16 = r16 & 65535; - case 0x23b60: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x23b70; - return; - case 0x23b70: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x23b7c; - pc=0x26000; - run_26000(); return; - case 0x23b7c: - /* Next insn is delay slot */ - r31=0x23b84; - pc=0x1ce00; - run_1ce00(); return; - case 0x23b84: - /* Next insn is delay slot */ - pc=0x23ab8; - continue; - case 0x23b8c: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x23b98; - pc=0x15c00; - run_15c00(); return; - case 0x23b98: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x23ba4; - pc=0x32200; - run_32200(); return; - case 0x23ba4: - r2 = 7 << 16; - r2 = r2 + 30664; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r3 = r4 & r3; - r3 = r3 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x24020; - run_24000(); return; - } - r6 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r3 = r0 | 65535; - r4 = r6 | 65535; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x2406c; - run_24000(); return; - } - r2 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r2 = r6 - r2; - r2 = r2 + -2; - r16 = r2 & 65535; - r2 = r2 & 32768; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x23c04; - run_23c00(); return; - } - r2 = 65535 << 16; - case 0x23c00: - pc=0x23c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_23c00() throws ExecutionException { /* 0x23c00 - 0x23e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x23c00: - r16 = r16 + r2; - case 0x23c04: - r2 = r16 + 128; - r2 = (r2&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x23c4c; - continue; - } - r2 = r16 < -128 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24274; - run_24200(); return; - } - r7 = r0 + -128; - r7 = r7 - r16; - case 0x23c28: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5772; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x23c40; - pc=0x42000; - run_42000(); return; - case 0x23c40: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x23c4c; - pc=0x1b000; - run_1b000(); return; - case 0x23c4c: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x23c5c; - return; - case 0x23c5c: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r16 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x23c6c; - return; - case 0x23c6c: - /* Next insn is delay slot */ - r31=0x23c74; - pc=0x1ce00; - run_1ce00(); return; - case 0x23c74: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x23c7c: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x23c8c; - return; - case 0x23c8c: - /* Next insn is delay slot */ - r31=0x23c94; - pc=0x1ce00; - run_1ce00(); return; - case 0x23c94: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x23c9c: - /* Next insn is delay slot */ - r31=0x23ca4; - pc=0x20200; - run_20200(); return; - case 0x23ca4: - r4 = r29 + 16; - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x23cb4; - pc=0x21400; - run_21400(); return; - case 0x23cb4: - r3 = r0 + 16; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x240c4; - run_24000(); return; - } - r3 = r2 < 17 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x24038; - run_24000(); return; - } - r3 = r0 + 24; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x24144; - run_24000(); return; - } - r3 = r0 + 32; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x23f5c; - run_23e00(); return; - } - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2996; - case 0x23cf0: - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x23d08; - pc=0x21000; - run_21000(); return; - case 0x23d08: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x23d10: - r19 = r29 + 16; - /* Next insn is delay slot */ - r31=0x23d1c; - pc=0x20200; - run_20200(); return; - case 0x23d1c: - r4 = r19 + r0; - r20 = r2 + r0; - /* Next insn is delay slot */ - r31=0x23d2c; - pc=0x21400; - run_21400(); return; - case 0x23d2c: - r3 = r0 + 3; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x24158; - run_24000(); return; - } - r3 = r2 < 4 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x23f90; - run_23e00(); return; - } - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2416c; - run_24000(); return; - } - r3 = r0 + 2; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x23f5c; - run_23e00(); return; - } - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2764; - case 0x23d64: - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x23d7c; - pc=0x21000; - run_21000(); return; - case 0x23d7c: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x23d84: - r19 = r29 + 16; - /* Next insn is delay slot */ - r31=0x23d90; - pc=0x20200; - run_20200(); return; - case 0x23d90: - r4 = r19 + r0; - r20 = r2 + r0; - /* Next insn is delay slot */ - r31=0x23da0; - pc=0x21400; - run_21400(); return; - case 0x23da0: - r3 = (r2&0xffffffffL) < (65&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x23f5c; - run_23e00(); return; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + -3920; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x23dcc: - /* Next insn is delay slot */ - r31=0x23dd4; - pc=0x15e00; - run_15e00(); return; - case 0x23dd4: - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x23de0; - pc=0x20000; - run_20000(); return; - case 0x23de0: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x23fdc; - run_23e00(); return; - } - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x23df8; - pc=0x1b000; - run_1b000(); return; - case 0x23df8: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x23e00: - pc=0x23e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_23e00() throws ExecutionException { /* 0x23e00 - 0x24000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x23e00: - r3 = 7 << 16; - r4 = readPages[(r3+30664)>>>12][((r3+30664)>>>2)&0x3ff]; - r2 = 7 << 16; - r4 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -2432; - r17 = r17 + r2; - r4 = r4 & 2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x2428c; - run_24200(); return; - } - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x2428c; - run_24200(); return; - } - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x23e60; - continue; - } - r16 = r16 & 256; - r3 = r3 + 30664; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x242ac; - run_24200(); return; - } - r20 = readPages[(r3+36)>>>12][((r3+36)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - case 0x23e54: - r20 = (r20&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - r3 = r0 + 2; - r20 = r3 - r20; - case 0x23e60: - r3 = r2 << 8; - r6 = r3 | r2; - case 0x23e68: - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x23e78; - pc=0x21000; - run_21000(); return; - case 0x23e78: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x23e80: - r2 = 7 << 16; - r2 = r2 + -2360; - case 0x23e88: - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r6 = tmp; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x23ea0; - pc=0x21000; - run_21000(); return; - case 0x23ea0: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x23ea8: - r2 = 7 << 16; - r2 = r2 + -2396; - /* Next insn is delay slot */ - pc=0x23e88; - continue; - case 0x23eb8: - r2 = 7 << 16; - r2 = r2 + -2468; - /* Next insn is delay slot */ - pc=0x23e88; - continue; - case 0x23ec8: - r2 = 7 << 16; - r2 = r2 + -2612; - /* Next insn is delay slot */ - pc=0x23e88; - continue; - case 0x23ed8: - r2 = 7 << 16; - r2 = r2 + -2576; - /* Next insn is delay slot */ - pc=0x23e88; - continue; - case 0x23ee8: - r2 = 7 << 16; - r2 = r2 + -2540; - /* Next insn is delay slot */ - pc=0x23e88; - continue; - case 0x23ef8: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2324; - /* Next insn is delay slot */ - pc=0x23d64; - run_23c00(); return; - case 0x23f0c: - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2256; - case 0x23f18: - r2 = r17 + r2; - r6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x23f30; - pc=0x21000; - run_21000(); return; - case 0x23f30: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x23f38: - r2 = 7 << 16; - r2 = r2 + -2504; - /* Next insn is delay slot */ - pc=0x23e88; - continue; - case 0x23f48: - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2120; - /* Next insn is delay slot */ - pc=0x23f18; - continue; - case 0x23f5c: - r4 = 7 << 16; - r4 = r4 + -3048; - /* Next insn is delay slot */ - r31=0x23f6c; - pc=0x1b000; - run_1b000(); return; - case 0x23f6c: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x23f74: - r4 = 7 << 16; - r4 = r4 + -5732; - r5 = r17 + r0; - /* Next insn is delay slot */ - r31=0x23f88; - pc=0x1b800; - run_1b800(); return; - case 0x23f88: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x23f90: - r3 = r0 + 64; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x24180; - run_24000(); return; - } - r3 = r0 + 128; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x23f5c; - continue; - } - r2 = 7 << 16; - r2 = r2 + -2920; - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x23f5c; - continue; - } - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - r31=0x23fd4; - return; - case 0x23fd4: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x23fdc: - /* Next insn is delay slot */ - r31=0x23fe4; - pc=0x15e00; - run_15e00(); return; - case 0x23fe4: - r18 = r2 + r0; - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x23ff8; - return; - case 0x23ff8: - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x24004; - pc=0x25e00; - run_25e00(); return; - case 0x24000: - pc=0x24000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_24000() throws ExecutionException { /* 0x24000 - 0x24200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x24000: - case 0x24004: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x24010; - pc=0x25e00; - run_25e00(); return; - case 0x24010: - /* Next insn is delay slot */ - r31=0x24018; - pc=0x1ce00; - run_1ce00(); return; - case 0x24018: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x24020: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x23c4c; - run_23c00(); return; - case 0x2402c: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x23b60; - run_23a00(); return; - case 0x24038: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x23f5c; - run_23e00(); return; - } - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2948; - r2 = r17 + r2; - r6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x24064; - pc=0x21000; - run_21000(); return; - case 0x24064: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x2406c: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5800; - /* Next insn is delay slot */ - r31=0x24080; - pc=0x42000; - run_42000(); return; - case 0x24080: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x2408c; - pc=0x1b000; - run_1b000(); return; - case 0x2408c: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x23c4c; - run_23c00(); return; - case 0x24098: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5800; - /* Next insn is delay slot */ - r31=0x240ac; - pc=0x42000; - run_42000(); return; - case 0x240ac: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x240b8; - pc=0x1b000; - run_1b000(); return; - case 0x240b8: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x23b60; - run_23a00(); return; - case 0x240c4: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2964; - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x240e8; - pc=0x21000; - run_21000(); return; - case 0x240e8: - addr=r29+27; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r2 = r0 + 255; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r2 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - } - r2 = 7 << 16; - r2 = readPages[(r2+30664)>>>12][((r2+30664)>>>2)&0x3ff]; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 & 1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - } - r4 = 7 << 16; - r4 = r4 + -5840; - /* Next insn is delay slot */ - r31=0x2413c; - pc=0x1ac00; - run_1ac00(); return; - case 0x2413c: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x24144: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2980; - /* Next insn is delay slot */ - pc=0x23cf0; - run_23c00(); return; - case 0x24158: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2840; - /* Next insn is delay slot */ - pc=0x23d64; - run_23c00(); return; - case 0x2416c: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2688; - /* Next insn is delay slot */ - pc=0x23d64; - run_23c00(); return; - case 0x24180: - r2 = 7 << 16; - r2 = r2 + -2880; - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r17 = 7 << 16; - r3 = readPages[(r17+30664)>>>12][((r17+30664)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r3 = r3 & 2; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x24280; - run_24200(); return; - } - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x24280; - run_24200(); return; - } - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x241e8; - continue; - } - r16 = r16 & 256; - r3 = r17 + 30664; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x24298; - run_24200(); return; - } - r20 = readPages[(r3+36)>>>12][((r3+36)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - case 0x241dc: - r20 = (r20&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - r3 = r0 + 2; - r20 = r3 - r20; - case 0x241e8: - r16 = r2 << 8; - r16 = r16 | r2; - case 0x241f0: - r4 = r20 + r0; - r5 = r19 + r0; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x24204; - pc=0x21000; - run_21000(); return; - case 0x24200: - pc=0x24200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_24200() throws ExecutionException { /* 0x24200 - 0x24400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x24200: - case 0x24204: - r2 = readPages[(r17+30664)>>>12][((r17+30664)>>>2)&0x3ff]; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 & 4; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - } - addr=r29+27; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r2 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - } - r2 = r0 + 139; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x242c0; - continue; - } - r2 = r0 + 171; - if(r16 != r2) { - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - } - r4 = 7 << 16; - r4 = r4 + -5888; - /* Next insn is delay slot */ - r31=0x2426c; - pc=0x1ac00; - run_1ac00(); return; - case 0x2426c: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x24274: - r7 = r16 + -127; - /* Next insn is delay slot */ - pc=0x23c28; - run_23c00(); return; - case 0x24280: - r16 = r2 + r0; - /* Next insn is delay slot */ - pc=0x241f0; - run_24000(); return; - case 0x2428c: - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x23e68; - run_23e00(); return; - case 0x24298: - r20 = readPages[(r3+40)>>>12][((r3+40)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x241dc; - run_24000(); return; - case 0x242ac: - r20 = readPages[(r3+40)>>>12][((r3+40)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x23e54; - run_23e00(); return; - case 0x242c0: - r4 = 7 << 16; - r4 = r4 + -5936; - /* Next insn is delay slot */ - r31=0x242d0; - pc=0x1ac00; - run_1ac00(); return; - case 0x242d0: - /* Next insn is delay slot */ - pc=0x23ab8; - run_23a00(); return; - case 0x24400: - pc=0x24400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_24400() throws ExecutionException { /* 0x24400 - 0x24600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x24400: - r2 = r0 + 3; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x24418; - continue; - } - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x24418: - r4 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - r5 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r29 = r29 + -136; - writePages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff] = r31; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r20; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r19; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r18; - writePages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff] = r17; - writePages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x24444; - pc=0x18000; - run_18000(); return; - case 0x24444: - r4 = readPages[(r28+-30708)>>>12][((r28+-30708)>>>2)&0x3ff]; - r6 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - r5 = r29 + 104; - /* Next insn is delay slot */ - r31=0x24458; - pc=0x31000; - run_31000(); return; - case 0x24458: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x244a0; - continue; - } - r16 = readPages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff]; - r2 = r16 >> 10; - r3 = (r2&0xffffffffL) < (7&0xffffffffL) ? 1 : 0; - r17 = r16 & 255; - r18 = r16 & 768; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x24994; - run_24800(); return; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + -3660; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x244a0: - r4 = readPages[(r28+-30692)>>>12][((r28+-30692)>>>2)&0x3ff]; - r5 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x244b0; - pc=0x21a00; - run_21a00(); return; - case 0x244b0: - r31 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; - r20 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r19 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r18 = readPages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff]; - r17 = readPages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff]; - r16 = readPages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff]; - r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - r29 = r29 + 136; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x244d8: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x244e4; - pc=0x15c00; - run_15c00(); return; - case 0x244e4: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x244f0; - pc=0x32200; - run_32200(); return; - case 0x244f0: - r2 = 7 << 16; - r2 = r2 + 30664; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r3 = r4 & r3; - r3 = r3 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x24a58; - run_24a00(); return; - } - r6 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r3 = r0 | 65535; - r4 = r6 | 65535; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x24ac8; - run_24a00(); return; - } - r2 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r6 = r6 - r2; - r16 = r6 + -3; - r16 = r16 & 65535; - case 0x2453c: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x2454c; - return; - case 0x2454c: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x24558; - pc=0x26000; - run_26000(); return; - case 0x24558: - /* Next insn is delay slot */ - r31=0x24560; - pc=0x1ce00; - run_1ce00(); return; - case 0x24560: - r2 = r0 + 1; - case 0x24564: - r31 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; - r20 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r19 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r18 = readPages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff]; - r17 = readPages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff]; - r16 = readPages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff]; - r29 = r29 + 136; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x24588: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x24594; - pc=0x15c00; - run_15c00(); return; - case 0x24594: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x245a0; - pc=0x32200; - run_32200(); return; - case 0x245a0: - r2 = 7 << 16; - r2 = r2 + 30664; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r3 = r4 & r3; - r3 = r3 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x24a4c; - run_24a00(); return; - } - r6 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r3 = r0 | 65535; - r4 = r6 | 65535; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x24a9c; - run_24a00(); return; - } - r2 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r2 = r6 - r2; - r2 = r2 + -2; - r16 = r2 & 65535; - r2 = r2 & 32768; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24600; - run_24600(); return; - } - r2 = 65535 << 16; - r16 = r16 + r2; - case 0x24600: - pc=0x24600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_24600() throws ExecutionException { /* 0x24600 - 0x24800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x24600: - r2 = r16 + 128; - r2 = (r2&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x24648; - continue; - } - r2 = r16 < -128 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24cac; - run_24c00(); return; - } - r7 = r0 + -128; - r7 = r7 - r16; - case 0x24624: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5772; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x2463c; - pc=0x42000; - run_42000(); return; - case 0x2463c: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x24648; - pc=0x1b000; - run_1b000(); return; - case 0x24648: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x24658; - return; - case 0x24658: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r16 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x24668; - return; - case 0x24668: - /* Next insn is delay slot */ - r31=0x24670; - pc=0x1ce00; - run_1ce00(); return; - case 0x24670: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x2467c: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x2468c; - return; - case 0x2468c: - /* Next insn is delay slot */ - r31=0x24694; - pc=0x1ce00; - run_1ce00(); return; - case 0x24694: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x246a0: - /* Next insn is delay slot */ - r31=0x246a8; - pc=0x20200; - run_20200(); return; - case 0x246a8: - r4 = r29 + 16; - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x246b8; - pc=0x21400; - run_21400(); return; - case 0x246b8: - r3 = r0 + 16; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x24af4; - run_24a00(); return; - } - r3 = r2 < 17 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x24a64; - run_24a00(); return; - } - r3 = r0 + 24; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x24b78; - run_24a00(); return; - } - r3 = r0 + 32; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x24978; - run_24800(); return; - } - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2996; - case 0x246f4: - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x2470c; - pc=0x21000; - run_21000(); return; - case 0x2470c: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x24718: - r19 = r29 + 16; - /* Next insn is delay slot */ - r31=0x24724; - pc=0x20200; - run_20200(); return; - case 0x24724: - r4 = r19 + r0; - r20 = r2 + r0; - /* Next insn is delay slot */ - r31=0x24734; - pc=0x21400; - run_21400(); return; - case 0x24734: - r3 = r0 + 3; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x24b8c; - run_24a00(); return; - } - r3 = r2 < 4 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x249b4; - run_24800(); return; - } - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24ba0; - run_24a00(); return; - } - r3 = r0 + 2; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x24978; - run_24800(); return; - } - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2764; - case 0x2476c: - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x24784; - pc=0x21000; - run_21000(); return; - case 0x24784: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x24790: - r19 = r29 + 16; - /* Next insn is delay slot */ - r31=0x2479c; - pc=0x20200; - run_20200(); return; - case 0x2479c: - r4 = r19 + r0; - r20 = r2 + r0; - /* Next insn is delay slot */ - r31=0x247ac; - pc=0x21400; - run_21400(); return; - case 0x247ac: - r3 = (r2&0xffffffffL) < (65&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x24978; - run_24800(); return; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + -3632; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x247d8: - /* Next insn is delay slot */ - r31=0x247e0; - pc=0x15e00; - run_15e00(); return; - case 0x247e0: - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x247ec; - pc=0x20000; - run_20000(); return; - case 0x247ec: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x24a04; - run_24a00(); return; - } - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x24804; - pc=0x1b000; - run_1b000(); return; - case 0x24800: - pc=0x24800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_24800() throws ExecutionException { /* 0x24800 - 0x24a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x24800: - case 0x24804: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x24810: - r3 = 7 << 16; - r4 = readPages[(r3+30664)>>>12][((r3+30664)>>>2)&0x3ff]; - r2 = 7 << 16; - r4 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -2432; - r17 = r17 + r2; - r4 = r4 & 2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x24cc4; - run_24c00(); return; - } - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x24cc4; - run_24c00(); return; - } - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x24870; - continue; - } - r16 = r16 & 256; - r3 = r3 + 30664; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x24ce4; - run_24c00(); return; - } - r20 = readPages[(r3+36)>>>12][((r3+36)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - case 0x24864: - r20 = (r20&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - r3 = r0 + 2; - r20 = r3 - r20; - case 0x24870: - r3 = r2 << 8; - r6 = r3 | r2; - case 0x24878: - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x24888; - pc=0x21000; - run_21000(); return; - case 0x24888: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x24894: - r2 = 7 << 16; - r2 = r2 + -2360; - case 0x2489c: - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r6 = tmp; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x248b4; - pc=0x21000; - run_21000(); return; - case 0x248b4: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x248c0: - r2 = 7 << 16; - r2 = r2 + -2396; - /* Next insn is delay slot */ - pc=0x2489c; - continue; - case 0x248d0: - r2 = 7 << 16; - r2 = r2 + -2468; - /* Next insn is delay slot */ - pc=0x2489c; - continue; - case 0x248e0: - r2 = 7 << 16; - r2 = r2 + -2612; - /* Next insn is delay slot */ - pc=0x2489c; - continue; - case 0x248f0: - r2 = 7 << 16; - r2 = r2 + -2576; - /* Next insn is delay slot */ - pc=0x2489c; - continue; - case 0x24900: - r2 = 7 << 16; - r2 = r2 + -2540; - /* Next insn is delay slot */ - pc=0x2489c; - continue; - case 0x24910: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2324; - /* Next insn is delay slot */ - pc=0x2476c; - run_24600(); return; - case 0x24924: - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2256; - case 0x24930: - r2 = r17 + r2; - r6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x24948; - pc=0x21000; - run_21000(); return; - case 0x24948: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x24954: - r2 = 7 << 16; - r2 = r2 + -2504; - /* Next insn is delay slot */ - pc=0x2489c; - continue; - case 0x24964: - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2120; - /* Next insn is delay slot */ - pc=0x24930; - continue; - case 0x24978: - r4 = 7 << 16; - r4 = r4 + -3048; - /* Next insn is delay slot */ - r31=0x24988; - pc=0x1b000; - run_1b000(); return; - case 0x24988: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x24994: - r4 = 7 << 16; - r4 = r4 + -5732; - r5 = r17 + r0; - /* Next insn is delay slot */ - r31=0x249a8; - pc=0x1b800; - run_1b800(); return; - case 0x249a8: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x249b4: - r3 = r0 + 64; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x24bb4; - run_24a00(); return; - } - r3 = r0 + 128; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x24978; - continue; - } - r2 = 7 << 16; - r2 = r2 + -2920; - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x24978; - continue; - } - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - r31=0x249f8; - return; - case 0x249f8: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x24a00: - pc=0x24a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_24a00() throws ExecutionException { /* 0x24a00 - 0x24c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x24a00: - case 0x24a04: - /* Next insn is delay slot */ - r31=0x24a0c; - pc=0x15e00; - run_15e00(); return; - case 0x24a0c: - r18 = r2 + r0; - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x24a20; - return; - case 0x24a20: - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x24a2c; - pc=0x25e00; - run_25e00(); return; - case 0x24a2c: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x24a38; - pc=0x25e00; - run_25e00(); return; - case 0x24a38: - /* Next insn is delay slot */ - r31=0x24a40; - pc=0x1ce00; - run_1ce00(); return; - case 0x24a40: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x24a4c: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x24648; - run_24600(); return; - case 0x24a58: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x2453c; - run_24400(); return; - case 0x24a64: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x24978; - run_24800(); return; - } - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2948; - r2 = r17 + r2; - r6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x24a90; - pc=0x21000; - run_21000(); return; - case 0x24a90: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x24a9c: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5800; - /* Next insn is delay slot */ - r31=0x24ab0; - pc=0x42000; - run_42000(); return; - case 0x24ab0: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x24abc; - pc=0x1b000; - run_1b000(); return; - case 0x24abc: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x24648; - run_24600(); return; - case 0x24ac8: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5800; - /* Next insn is delay slot */ - r31=0x24adc; - pc=0x42000; - run_42000(); return; - case 0x24adc: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x24ae8; - pc=0x1b000; - run_1b000(); return; - case 0x24ae8: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x2453c; - run_24400(); return; - case 0x24af4: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2964; - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x24b18; - pc=0x21000; - run_21000(); return; - case 0x24b18: - addr=r29+27; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r2 = r0 + 255; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x24560; - run_24400(); return; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r2 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24560; - run_24400(); return; - } - r2 = 7 << 16; - r2 = readPages[(r2+30664)>>>12][((r2+30664)>>>2)&0x3ff]; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 & 1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24560; - run_24400(); return; - } - r4 = 7 << 16; - r4 = r4 + -5840; - /* Next insn is delay slot */ - r31=0x24b6c; - pc=0x1ac00; - run_1ac00(); return; - case 0x24b6c: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x24b78: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2980; - /* Next insn is delay slot */ - pc=0x246f4; - run_24600(); return; - case 0x24b8c: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2840; - /* Next insn is delay slot */ - pc=0x2476c; - run_24600(); return; - case 0x24ba0: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2688; - /* Next insn is delay slot */ - pc=0x2476c; - run_24600(); return; - case 0x24bb4: - r2 = 7 << 16; - r2 = r2 + -2880; - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r17 = 7 << 16; - r3 = readPages[(r17+30664)>>>12][((r17+30664)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r3 = r3 & 2; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x24cb8; - run_24c00(); return; - } - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x24cb8; - run_24c00(); return; - } - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x24c1c; - run_24c00(); return; - } - r16 = r16 & 256; - r3 = r17 + 30664; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x24cd0; - run_24c00(); return; - } - case 0x24c00: - pc=0x24c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_24c00() throws ExecutionException { /* 0x24c00 - 0x24e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x24c00: - r20 = readPages[(r3+36)>>>12][((r3+36)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - case 0x24c10: - r20 = (r20&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - r3 = r0 + 2; - r20 = r3 - r20; - case 0x24c1c: - r16 = r2 << 8; - r16 = r16 | r2; - case 0x24c24: - r4 = r20 + r0; - r5 = r19 + r0; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x24c38; - pc=0x21000; - run_21000(); return; - case 0x24c38: - r2 = readPages[(r17+30664)>>>12][((r17+30664)>>>2)&0x3ff]; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 & 4; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24560; - run_24400(); return; - } - addr=r29+27; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24560; - run_24400(); return; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r2 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24560; - run_24400(); return; - } - r2 = r0 + 139; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x24cf8; - continue; - } - r2 = r0 + 171; - if(r16 != r2) { - /* Next insn is delay slot */ - pc=0x24560; - run_24400(); return; - } - r4 = 7 << 16; - r4 = r4 + -5888; - /* Next insn is delay slot */ - r31=0x24ca0; - pc=0x1ac00; - run_1ac00(); return; - case 0x24ca0: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x24cac: - r7 = r16 + -127; - /* Next insn is delay slot */ - pc=0x24624; - run_24600(); return; - case 0x24cb8: - r16 = r2 + r0; - /* Next insn is delay slot */ - pc=0x24c24; - continue; - case 0x24cc4: - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x24878; - run_24800(); return; - case 0x24cd0: - r20 = readPages[(r3+40)>>>12][((r3+40)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x24c10; - continue; - case 0x24ce4: - r20 = readPages[(r3+40)>>>12][((r3+40)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x24864; - run_24800(); return; - case 0x24cf8: - r4 = 7 << 16; - r4 = r4 + -5936; - /* Next insn is delay slot */ - r31=0x24d08; - pc=0x1ac00; - run_1ac00(); return; - case 0x24d08: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x24564; - run_24400(); return; - case 0x24e00: - pc=0x24e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_24e00() throws ExecutionException { /* 0x24e00 - 0x25000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x24e00: - r2 = r0 + 3; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x24e18; - continue; - } - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x24e18: - r4 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - r5 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r29 = r29 + -136; - writePages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff] = r31; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r20; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r19; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r18; - writePages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff] = r17; - writePages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x24e44; - pc=0x18000; - run_18000(); return; - case 0x24e44: - r4 = readPages[(r28+-30716)>>>12][((r28+-30716)>>>2)&0x3ff]; - r6 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - r5 = r29 + 104; - /* Next insn is delay slot */ - r31=0x24e58; - pc=0x31000; - run_31000(); return; - case 0x24e58: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24ea0; - continue; - } - r16 = readPages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff]; - r2 = r16 >> 10; - r3 = (r2&0xffffffffL) < (7&0xffffffffL) ? 1 : 0; - r17 = r16 & 255; - r18 = r16 & 768; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2538c; - run_25200(); return; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + -3372; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x24ea0: - r4 = readPages[(r28+-30708)>>>12][((r28+-30708)>>>2)&0x3ff]; - r5 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x24eb0; - pc=0x21a00; - run_21a00(); return; - case 0x24eb0: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24ee0; - continue; - } - case 0x24eb8: - r2 = r0 + 1; - case 0x24ebc: - r31 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; - r20 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r19 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r18 = readPages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff]; - r17 = readPages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff]; - r16 = readPages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff]; - r29 = r29 + 136; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x24ee0: - r4 = readPages[(r28+-30692)>>>12][((r28+-30692)>>>2)&0x3ff]; - r5 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x24ef0; - pc=0x21a00; - run_21a00(); return; - case 0x24ef0: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x24eb8; - continue; - } - r4 = readPages[(r28+-30712)>>>12][((r28+-30712)>>>2)&0x3ff]; - r5 = readPages[(r28+-30688)>>>12][((r28+-30688)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x24f08; - pc=0x21a00; - run_21a00(); return; - case 0x24f08: - r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x24ebc; - continue; - case 0x24f14: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x24f20; - pc=0x15c00; - run_15c00(); return; - case 0x24f20: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x24f2c; - pc=0x32200; - run_32200(); return; - case 0x24f2c: - r2 = 7 << 16; - r2 = r2 + 30664; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r3 = r4 & r3; - r3 = r3 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x25444; - run_25400(); return; - } - r6 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r3 = r0 | 65535; - r4 = r6 | 65535; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x254b0; - run_25400(); return; - } - r2 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r6 = r6 - r2; - r16 = r6 + -3; - r16 = r16 & 65535; - case 0x24f78: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x24f88; - return; - case 0x24f88: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x24f94; - pc=0x26000; - run_26000(); return; - case 0x24f94: - /* Next insn is delay slot */ - r31=0x24f9c; - pc=0x1ce00; - run_1ce00(); return; - case 0x24f9c: - /* Next insn is delay slot */ - pc=0x24eb8; - continue; - case 0x24fa4: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x24fb0; - pc=0x15c00; - run_15c00(); return; - case 0x24fb0: - r4 = r29 + 80; - /* Next insn is delay slot */ - r31=0x24fbc; - pc=0x32200; - run_32200(); return; - case 0x24fbc: - r2 = 7 << 16; - r2 = r2 + 30664; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r3 = r4 & r3; - r3 = r3 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x25438; - run_25400(); return; - } - r6 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r3 = r0 | 65535; - r4 = r6 | 65535; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x25484; - run_25400(); return; - } - r2 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r2 = r6 - r2; - case 0x25000: - pc=0x25000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_25000() throws ExecutionException { /* 0x25000 - 0x25200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x25000: - r2 = r2 + -2; - r16 = r2 & 65535; - r2 = r2 & 32768; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2501c; - continue; - } - r2 = 65535 << 16; - r16 = r16 + r2; - case 0x2501c: - r2 = r16 + 128; - r2 = (r2&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x25064; - continue; - } - r2 = r16 < -128 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2568c; - run_25600(); return; - } - r7 = r0 + -128; - r7 = r7 - r16; - case 0x25040: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5772; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x25058; - pc=0x42000; - run_42000(); return; - case 0x25058: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x25064; - pc=0x1b000; - run_1b000(); return; - case 0x25064: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x25074; - return; - case 0x25074: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r16 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x25084; - return; - case 0x25084: - /* Next insn is delay slot */ - r31=0x2508c; - pc=0x1ce00; - run_1ce00(); return; - case 0x2508c: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x25094: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x250a4; - return; - case 0x250a4: - /* Next insn is delay slot */ - r31=0x250ac; - pc=0x1ce00; - run_1ce00(); return; - case 0x250ac: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x250b4: - /* Next insn is delay slot */ - r31=0x250bc; - pc=0x20200; - run_20200(); return; - case 0x250bc: - r4 = r29 + 16; - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x250cc; - pc=0x21400; - run_21400(); return; - case 0x250cc: - r3 = r0 + 16; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x254dc; - run_25400(); return; - } - r3 = r2 < 17 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x25450; - run_25400(); return; - } - r3 = r0 + 24; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x2555c; - run_25400(); return; - } - r3 = r0 + 32; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x25374; - run_25200(); return; - } - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2996; - case 0x25108: - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x25120; - pc=0x21000; - run_21000(); return; - case 0x25120: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x25128: - r19 = r29 + 16; - /* Next insn is delay slot */ - r31=0x25134; - pc=0x20200; - run_20200(); return; - case 0x25134: - r4 = r19 + r0; - r20 = r2 + r0; - /* Next insn is delay slot */ - r31=0x25144; - pc=0x21400; - run_21400(); return; - case 0x25144: - r3 = r0 + 3; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x25570; - run_25400(); return; - } - r3 = r2 < 4 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x253a8; - run_25200(); return; - } - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x25584; - run_25400(); return; - } - r3 = r0 + 2; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x25374; - run_25200(); return; - } - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2764; - case 0x2517c: - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x25194; - pc=0x21000; - run_21000(); return; - case 0x25194: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x2519c: - r19 = r29 + 16; - /* Next insn is delay slot */ - r31=0x251a8; - pc=0x20200; - run_20200(); return; - case 0x251a8: - r4 = r19 + r0; - r20 = r2 + r0; - /* Next insn is delay slot */ - r31=0x251b8; - pc=0x21400; - run_21400(); return; - case 0x251b8: - r3 = (r2&0xffffffffL) < (65&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x25374; - run_25200(); return; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + -3344; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x251e4: - /* Next insn is delay slot */ - r31=0x251ec; - pc=0x15e00; - run_15e00(); return; - case 0x251ec: - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x251f8; - pc=0x20000; - run_20000(); return; - case 0x251f8: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x253f4; - run_25200(); return; - } - case 0x25200: - pc=0x25200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_25200() throws ExecutionException { /* 0x25200 - 0x25400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x25200: - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x25210; - pc=0x1b000; - run_1b000(); return; - case 0x25210: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x25218: - r3 = 7 << 16; - r4 = readPages[(r3+30664)>>>12][((r3+30664)>>>2)&0x3ff]; - r2 = 7 << 16; - r4 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r2 = r2 + -2432; - r17 = r17 + r2; - r4 = r4 & 2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x256a4; - run_25600(); return; - } - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x256a4; - run_25600(); return; - } - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x25278; - continue; - } - r16 = r16 & 256; - r3 = r3 + 30664; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x256c4; - run_25600(); return; - } - r20 = readPages[(r3+36)>>>12][((r3+36)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - case 0x2526c: - r20 = (r20&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - r3 = r0 + 2; - r20 = r3 - r20; - case 0x25278: - r3 = r2 << 8; - r6 = r3 | r2; - case 0x25280: - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x25290; - pc=0x21000; - run_21000(); return; - case 0x25290: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x25298: - r2 = 7 << 16; - r2 = r2 + -2360; - case 0x252a0: - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r6 = tmp; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x252b8; - pc=0x21000; - run_21000(); return; - case 0x252b8: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x252c0: - r2 = 7 << 16; - r2 = r2 + -2396; - /* Next insn is delay slot */ - pc=0x252a0; - continue; - case 0x252d0: - r2 = 7 << 16; - r2 = r2 + -2468; - /* Next insn is delay slot */ - pc=0x252a0; - continue; - case 0x252e0: - r2 = 7 << 16; - r2 = r2 + -2612; - /* Next insn is delay slot */ - pc=0x252a0; - continue; - case 0x252f0: - r2 = 7 << 16; - r2 = r2 + -2576; - /* Next insn is delay slot */ - pc=0x252a0; - continue; - case 0x25300: - r2 = 7 << 16; - r2 = r2 + -2540; - /* Next insn is delay slot */ - pc=0x252a0; - continue; - case 0x25310: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2324; - /* Next insn is delay slot */ - pc=0x2517c; - run_25000(); return; - case 0x25324: - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2256; - case 0x25330: - r2 = r17 + r2; - r6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x25348; - pc=0x21000; - run_21000(); return; - case 0x25348: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x25350: - r2 = 7 << 16; - r2 = r2 + -2504; - /* Next insn is delay slot */ - pc=0x252a0; - continue; - case 0x25360: - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2120; - /* Next insn is delay slot */ - pc=0x25330; - continue; - case 0x25374: - r4 = 7 << 16; - r4 = r4 + -3048; - /* Next insn is delay slot */ - r31=0x25384; - pc=0x1b000; - run_1b000(); return; - case 0x25384: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x2538c: - r4 = 7 << 16; - r4 = r4 + -5732; - r5 = r17 + r0; - /* Next insn is delay slot */ - r31=0x253a0; - pc=0x1b800; - run_1b800(); return; - case 0x253a0: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x253a8: - r3 = r0 + 64; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x25598; - run_25400(); return; - } - r3 = r0 + 128; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x25374; - continue; - } - r2 = 7 << 16; - r2 = r2 + -2920; - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x25374; - continue; - } - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - r31=0x253ec; - return; - case 0x253ec: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x253f4: - /* Next insn is delay slot */ - r31=0x253fc; - pc=0x15e00; - run_15e00(); return; - case 0x253fc: - r18 = r2 + r0; - case 0x25400: - pc=0x25400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_25400() throws ExecutionException { /* 0x25400 - 0x25600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x25400: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x25410; - return; - case 0x25410: - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x2541c; - pc=0x25e00; - run_25e00(); return; - case 0x2541c: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x25428; - pc=0x25e00; - run_25e00(); return; - case 0x25428: - /* Next insn is delay slot */ - r31=0x25430; - pc=0x1ce00; - run_1ce00(); return; - case 0x25430: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x25438: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x25064; - run_25000(); return; - case 0x25444: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x24f78; - run_24e00(); return; - case 0x25450: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x25374; - run_25200(); return; - } - r2 = 7 << 16; - r17 = r17 << 2; - r2 = r2 + -2948; - r2 = r17 + r2; - r6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x2547c; - pc=0x21000; - run_21000(); return; - case 0x2547c: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x25484: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5800; - /* Next insn is delay slot */ - r31=0x25498; - pc=0x42000; - run_42000(); return; - case 0x25498: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x254a4; - pc=0x1b000; - run_1b000(); return; - case 0x254a4: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x25064; - run_25000(); return; - case 0x254b0: - r5 = 7 << 16; - r4 = r29 + 16; - r5 = r5 + -5800; - /* Next insn is delay slot */ - r31=0x254c4; - pc=0x42000; - run_42000(); return; - case 0x254c4: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x254d0; - pc=0x1b000; - run_1b000(); return; - case 0x254d0: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x24f78; - run_24e00(); return; - case 0x254dc: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2964; - r2 = r17 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r6 = tmp; - r4 = r16 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x25500; - pc=0x21000; - run_21000(); return; - case 0x25500: - addr=r29+27; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r2 = r0 + 255; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r2 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - } - r2 = 7 << 16; - r2 = readPages[(r2+30664)>>>12][((r2+30664)>>>2)&0x3ff]; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 & 1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - } - r4 = 7 << 16; - r4 = r4 + -5840; - /* Next insn is delay slot */ - r31=0x25554; - pc=0x1ac00; - run_1ac00(); return; - case 0x25554: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x2555c: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2980; - /* Next insn is delay slot */ - pc=0x25108; - run_25000(); return; - case 0x25570: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2840; - /* Next insn is delay slot */ - pc=0x2517c; - run_25000(); return; - case 0x25584: - r2 = 7 << 16; - r17 = r17 << 1; - r2 = r2 + -2688; - /* Next insn is delay slot */ - pc=0x2517c; - run_25000(); return; - case 0x25598: - r2 = 7 << 16; - r2 = r2 + -2880; - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r17 = 7 << 16; - r3 = readPages[(r17+30664)>>>12][((r17+30664)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r3 = r3 & 2; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x25698; - run_25600(); return; - } - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x25698; - run_25600(); return; - } - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x25600; - run_25600(); return; - } - r16 = r16 & 256; - r3 = r17 + 30664; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x256b0; - run_25600(); return; - } - r20 = readPages[(r3+36)>>>12][((r3+36)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - case 0x255f4: - r20 = (r20&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - r3 = r0 + 2; - r20 = r3 - r20; - case 0x25600: - pc=0x25600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_25600() throws ExecutionException { /* 0x25600 - 0x25800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x25600: - r16 = r2 << 8; - r16 = r16 | r2; - case 0x25608: - r4 = r20 + r0; - r5 = r19 + r0; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x2561c; - pc=0x21000; - run_21000(); return; - case 0x2561c: - r2 = readPages[(r17+30664)>>>12][((r17+30664)>>>2)&0x3ff]; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 & 4; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - } - addr=r29+27; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r2 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - } - r2 = r0 + 139; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x256d8; - continue; - } - r2 = r0 + 171; - if(r16 != r2) { - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - } - r4 = 7 << 16; - r4 = r4 + -5888; - /* Next insn is delay slot */ - r31=0x25684; - pc=0x1ac00; - run_1ac00(); return; - case 0x25684: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x2568c: - r7 = r16 + -127; - /* Next insn is delay slot */ - pc=0x25040; - run_25000(); return; - case 0x25698: - r16 = r2 + r0; - /* Next insn is delay slot */ - pc=0x25608; - continue; - case 0x256a4: - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x25280; - run_25200(); return; - case 0x256b0: - r20 = readPages[(r3+40)>>>12][((r3+40)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x255f4; - run_25400(); return; - case 0x256c4: - r20 = readPages[(r3+40)>>>12][((r3+40)>>>2)&0x3ff]; - r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x2526c; - run_25200(); return; - case 0x256d8: - r4 = 7 << 16; - r4 = r4 + -5936; - /* Next insn is delay slot */ - r31=0x256e8; - pc=0x1ac00; - run_1ac00(); return; - case 0x256e8: - /* Next insn is delay slot */ - pc=0x24eb8; - run_24e00(); return; - case 0x25800: - pc=0x25800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_25800() throws ExecutionException { /* 0x25800 - 0x25a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x25800: + r3 = 6 << 16; + r2= page[(r4+0)>>>2]; r29 = r29 + -40; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - r18 = 7 << 16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r16 = r18 + 16880; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - r2 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - r17 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - r2 = r2 < r17 ? 1 : 0; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - r19 = r4 + r0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x25914; - continue; - } - r2 = r17 + r0; - case 0x2583c: - r3 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r3 = r2 < r3 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x25854; - continue; - } - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - case 0x25854: - r3 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r3 = r3 < r2 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2586c; - continue; - } - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = r2; - case 0x2586c: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r5 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x25904; - continue; - } - r5 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x258f8; - continue; - } - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r2; - case 0x25898: - r4 = r19 << 24; - r6 = r5 + 1; - r4 = r4 >> 24; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r6; - r3 = r3 + r5; - addr=r3+1044; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x258b0: - r3 = readPages[(r18+16880)>>>12][((r18+16880)>>>2)&0x3ff]; - r5 = r2 + 1; - r2 = r3 + r2; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r5; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = 7 << 16; - r2 = r2 + 30664; - r3 = readPages[(r2+32)>>>12][((r2+32)>>>2)&0x3ff]; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r3 = r3 + 1; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r2+32)>>>12][((r2+32)>>>2)&0x3ff] = r3; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x258f8: - r4 = (r5&0xffffffffL) < (9&0xffffffffL) ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x25898; - continue; - } - case 0x25904: - r4 = r19 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - pc=0x258b0; - continue; - case 0x25914: - r2 = 1 << 16; - r2 = r17 < r2 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x259b4; - continue; - } - case 0x25924: - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x25940; - continue; - } - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x2583c; - continue; - case 0x25940: - r4 = 7 << 16; - r4 = r4 + -1960; - /* Next insn is delay slot */ - r31=0x25950; - pc=0x1ac00; - run_1ac00(); return; - case 0x25950: - r4 = r17 + 1; - r3 = readPages[(r16+32)>>>12][((r16+32)>>>2)&0x3ff]; - r17 = r17 + 2; - writePages[(r16+40)>>>12][((r16+40)>>>2)&0x3ff] = r17; - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r5 = r4 < r2 ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x25990; - continue; - } - case 0x25974: - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r5 = r4 < r2 ? 1 : 0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x25974; - continue; - } - case 0x25990: - r4 = 7 << 16; - r4 = r4 + 16912; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x259cc; - continue; - } - r2 = r2 + -1; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x2583c; - continue; - case 0x259b4: - r4 = 7 << 16; - r4 = r4 + -1984; - /* Next insn is delay slot */ - r31=0x259c4; - pc=0x1b200; - run_1b200(); return; - case 0x259c4: - /* Next insn is delay slot */ - pc=0x25924; - continue; - case 0x259cc: - r2 = r0 | 65535; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x2583c; - continue; - case 0x25a00: - pc=0x25a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_25a00() throws ExecutionException { /* 0x25a00 - 0x25c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x25a00: - r29 = r29 + -40; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - r19 = r4 + r0; - r4 = 7 << 16; - r4 = r4 + -6964; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - r18 = 7 << 16; - /* Next insn is delay slot */ - r31=0x25a30; - pc=0x1b000; - run_1b000(); return; - case 0x25a30: - r2 = 2 << 16; - r2 = r2 + 22528; - r16 = r18 + 16880; - writePages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff] = r2; - r17 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - r2 = r2 < r17 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x25b34; - continue; - } - r2 = r17 + r0; - case 0x25a5c: - r3 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r3 = r2 < r3 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x25a74; - continue; - } - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - case 0x25a74: - r3 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r3 = r3 < r2 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x25a8c; - continue; - } - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = r2; - case 0x25a8c: - r3 = readPages[(r28+-30752)>>>12][((r28+-30752)>>>2)&0x3ff]; - r4 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x25b24; - continue; - } - r5 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x25b18; - continue; - } - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r2; - case 0x25ab8: - r4 = r19 << 24; - r6 = r5 + 1; - r4 = r4 >> 24; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r6; - r3 = r3 + r5; - addr=r3+1044; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x25ad0: - r3 = readPages[(r18+16880)>>>12][((r18+16880)>>>2)&0x3ff]; - r5 = r2 + 1; - r2 = r3 + r2; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r5; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = 7 << 16; - r2 = r2 + 30664; - r3 = readPages[(r2+32)>>>12][((r2+32)>>>2)&0x3ff]; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r3 = r3 + 1; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r2+32)>>>12][((r2+32)>>>2)&0x3ff] = r3; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x25b18: - r4 = (r5&0xffffffffL) < (9&0xffffffffL) ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x25ab8; - continue; - } - case 0x25b24: - r4 = r19 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - pc=0x25ad0; - continue; - case 0x25b34: - r2 = 1 << 16; - r2 = r17 < r2 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x25bd4; - continue; - } - case 0x25b44: - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x25b60; - continue; - } - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x25a5c; - continue; - case 0x25b60: - r4 = 7 << 16; - r4 = r4 + -1960; - /* Next insn is delay slot */ - r31=0x25b70; - pc=0x1ac00; - run_1ac00(); return; - case 0x25b70: - r5 = r17 + 1; - r3 = readPages[(r16+32)>>>12][((r16+32)>>>2)&0x3ff]; - r17 = r17 + 2; - writePages[(r16+40)>>>12][((r16+40)>>>2)&0x3ff] = r17; - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r4 = r5 < r2 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x25bb0; - continue; - } - case 0x25b94: - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r4 = r5 < r2 ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x25b94; - continue; - } - case 0x25bb0: - r4 = 7 << 16; - r4 = r4 + 16912; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x25bec; - continue; - } - r2 = r2 + -1; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x25a5c; - continue; - case 0x25bd4: - r4 = 7 << 16; - r4 = r4 + -1984; - /* Next insn is delay slot */ - r31=0x25be4; - pc=0x1b200; - run_1b200(); return; - case 0x25be4: - /* Next insn is delay slot */ - pc=0x25b44; - continue; - case 0x25bec: - r2 = r0 | 65535; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x25a5c; - continue; - case 0x25c00: - pc=0x25c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_25c00() throws ExecutionException { /* 0x25c00 - 0x25e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x25c00: - r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; + r3 = r3 + 15440; + page[(r29+24)>>>2] = r18; + page[(r29+16)>>>2] = r16; + page[(r29+36)>>>2] = r31; + page[(r29+32)>>>2] = r20; + page[(r29+28)>>>2] = r19; + page[(r29+20)>>>2] = r17; r18 = r4 + r0; - if(r4 <= 0) { - /* Next insn is delay slot */ - pc=0x25c9c; + r16 = r5 + r0; + if(r2 == r3) { + pc=0x21950; continue; } - r2 = 2 << 16; - r3 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r2 = r2 + 23040; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x25d80; + r3 = 6 << 16; + r3 = r3 + 15400; + if(r2 == r3) { + pc=0x219bc; continue; } - case 0x25c34: - r16 = 7 << 16; - r16 = r16 + 16880; - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r4 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - r17 = r3 + r18; - r2 = r17 + -1; - r4 = r4 < r2 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x25cc4; + r3 = 6 << 16; + r3 = r3 + 15360; + if(r2 == r3) { + pc=0x218b8; continue; } - case 0x25c58: - r4 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r4 = r3 < r4 ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x25c70; + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 4428; + r31=0x2186c; + pc=0x1fc00; + run_1f800(); return; + case 0x2186c: + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r5 = r5 + 4456; + r6 = r0 + r0; + r31=0x21888; + pc=0x4b800; + run_4b800(); return; + case 0x21888: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 4484; + case 0x21894: + r31= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 40; + pc=0x1fc00; + run_1f800(); return; + case 0x218b8: + r18= page[(r4+8)>>>2]; + r2= page[(r5+4)>>>2]; + r17= page[(r18+0)>>>2]; + if(r2 == r0) { + pc=0x21930; continue; } - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r3; - case 0x25c70: - r3 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r3 = r3 < r2 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x25cb8; + case 0x218cc: + r18 = r18 + 8; + if(r17 == r0) { + pc=0x2190c; continue; } - case 0x25c84: - r2 = 7 << 16; - r2 = r2 + 30664; - r3 = readPages[(r2+32)>>>12][((r2+32)>>>2)&0x3ff]; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r17; - r18 = r3 + r18; - writePages[(r2+32)>>>12][((r2+32)>>>2)&0x3ff] = r18; - case 0x25c9c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ + case 0x218d8: + r18 = r18 + 1; + addr=r18+-1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + addr=r16+8; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r20 = tmp; + r19= page[(r16+0)>>>2]; + r31=0x218f0; + pc=0x1d600; + run_1d000(); return; + case 0x218f0: + r2 = r2 ^ r20; + r4 = r2 & 255; + r17 = r17 + -1; + pc=r19; + r31=0x21904; + return; + case 0x21904: + if(r17 != r0) { + pc=0x218d8; + continue; + } + case 0x2190c: + r31= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 40; pc=r31; return; - case 0x25cb8: - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x25c84; - continue; - case 0x25cc4: - r3 = 1 << 16; - r2 = r2 < r3 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x25d68; - continue; - } - case 0x25cd4: - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x25cfc; - continue; - } - case 0x25ce4: - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r17 = r18 + r3; - r2 = r17 + -1; - /* Next insn is delay slot */ - pc=0x25c58; - continue; - case 0x25cfc: - r4 = 7 << 16; - r4 = r4 + -1960; - /* Next insn is delay slot */ - r31=0x25d0c; - pc=0x1ac00; - run_1ac00(); return; - case 0x25d0c: - r3 = r17 + 1; - r2 = readPages[(r16+32)>>>12][((r16+32)>>>2)&0x3ff]; - writePages[(r16+40)>>>12][((r16+40)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = r17 < r3 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x25d48; - continue; - } - case 0x25d2c: - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = r17 < r3 ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x25d2c; - continue; - } - case 0x25d48: - r4 = 7 << 16; - r4 = r4 + 16912; - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x25d98; - continue; - } - r3 = r3 + -1; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x25ce4; - continue; - case 0x25d68: - r4 = 7 << 16; - r4 = r4 + -1984; - /* Next insn is delay slot */ - r31=0x25d78; - pc=0x1b200; - run_1b200(); return; - case 0x25d78: - /* Next insn is delay slot */ - pc=0x25cd4; - continue; - case 0x25d80: - r4 = r0 + r0; - /* Next insn is delay slot */ - r31=0x25d8c; - pc=0x25a00; - run_25a00(); return; - case 0x25d8c: - r18 = r18 + -1; - /* Next insn is delay slot */ - pc=0x25c34; - continue; - case 0x25d98: - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = r0 | 65535; - r17 = r18 + r3; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r2; - r2 = r17 + -1; - /* Next insn is delay slot */ - pc=0x25c58; - continue; - case 0x25e00: - pc=0x25e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_25e00() throws ExecutionException { /* 0x25e00 - 0x26000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x25e00: - r2 = r4 + 128; - r2 = (r2&0xffffffffL) < (384&0xffffffffL) ? 1 : 0; + case 0x21930: + r2 = r17 < 2 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x25e20; + pc=0x218cc; continue; } - r4 = 7 << 16; - r4 = r4 + -6936; - /* Next insn is delay slot */ - pc=0x1b000; - run_1b000(); return; - case 0x25e20: - r25 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - /* Next insn is delay slot */ + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 1392; + pc=0x21894; + continue; + case 0x21950: + r17= page[(r4+8)>>>2]; + if(r17 == r0) { + pc=0x21a1c; + continue; + } + r2 = r0 + 1; + if(r17 == r2) { + pc=0x21a94; + continue; + } + r2 = r0 + 2; + if(r17 == r2) { + pc=0x21a48; + continue; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 4428; + r31=0x2198c; + pc=0x1fc00; + run_1f800(); return; + case 0x2198c: + r2= page[(r28+-31512)>>>2]; + r5 = 6 << 16; + r4= page[(r2+12)>>>2]; + r5 = r5 + 4456; + r6 = r17 + r0; + r31=0x219a8; + pc=0x4b800; + run_4b800(); return; + case 0x219a8: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 4464; + pc=0x21894; + continue; + case 0x219bc: + r2= page[(r4+8)>>>2]; + r17= page[(r2+0)>>>2]; + if(r2 == r17) { + pc=0x2190c; + continue; + } + case 0x219d4: + r4 = r17 + 8; + r5 = r16 + r0; + r31=0x219e4; + pc=0x21800; + continue; + case 0x219e4: + r17= page[(r17+0)>>>2]; + r2= page[(r18+8)>>>2]; + if(r2 != r17) { + pc=0x219d4; + continue; + } + r31= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 40; + pc=r31; + return; + case 0x21a1c: + r25= page[(r5+0)>>>2]; + r4 = r0 + r0; + case 0x21a24: + r31= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 40; pc=r25; return; - case 0x26000: - pc=0x26000; + case 0x21a48: + r5= page[(r4+20)>>>2]; + r4= page[(r4+16)>>>2]; + f0 = r5; + r25= page[(r16+0)>>>2]; + f1 = r4; + r2 = fcsr; + r2 = fcsr; + r1 = r2 | 3; + r1 = r1 ^ 2; + fcsr = r1; + switch(fcsr & 3) { + case 0: f0 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest + case 1: f0 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero + case 2: f0 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity + case 3: f0 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity + } + fcsr = r2; + r4 = f0; + pc=0x21a24; + continue; + case 0x21a94: + r25= page[(r5+0)>>>2]; + r4= page[(r4+16)>>>2]; + pc=0x21a24; + continue; + case 0x21c00: + r2 = r4 + 128; + r29 = r29 + -56; + r2 = (r2&0xffffffffL) < (384&0xffffffffL) ? 1 : 0; + page[(r29+44)>>>2] = r16; + page[(r29+52)>>>2] = r31; + page[(r29+48)>>>2] = r17; + r16 = r4 + r0; + if(r2 == r0) { + pc=0x21c44; + continue; + } + case 0x21c24: + r31= page[(r29+52)>>>2]; + r17= page[(r29+48)>>>2]; + r4 = r16 + r0; + r25= page[(r28+-31264)>>>2]; + r16= page[(r29+44)>>>2]; + r29 = r29 + 56; + pc=r25; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_26000() throws ExecutionException { /* 0x26000 - 0x26200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x26000: + case 0x21c44: + r17 = 6 << 16; + r17 = r17 + 31340; + r2= page[(r17+28)>>>2]; + if(r2 == r0) { + pc=0x21d10; + continue; + } + r2 = 6 << 16; + r6 = 6 << 16; + r2 = r2 + 4176; + r6 = r6 + 4188; + case 0x21c6c: + r3= page[(r17+24)>>>2]; + r5= page[(r28+-32692)>>>2]; + if(r3 != r0) { + pc=0x21d24; + continue; + } + page[(r29+16)>>>2] = r2; + r2= page[(r5+0)>>>2]; + r3= page[(r28+-32672)>>>2]; + page[(r29+20)>>>2] = r2; + r2= page[(r5+4)>>>2]; + r7 = 6 << 16; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r5 = 6 << 16; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + r4= page[(r17+32)>>>2]; + page[(r29+32)>>>2] = r2; + r2 = 6 << 16; + r2 = r2 + 5152; + page[(r29+36)>>>2] = r2; + r5 = r5 + 4268; + r7 = r7 + 4308; + r31=0x21ccc; + pc=0x4b800; + run_4b800(); return; + case 0x21ccc: + r3 = 6 << 16; + r3 = r3 + 31320; + r2= page[(r3+8)>>>2]; + r2 = r2 + 1; + page[(r3+8)>>>2] = r2; + r3= page[(r17+20)>>>2]; + r2 = r2 < r3 ? 1 : 0; + if(r2 != r0) { + pc=0x21c24; + continue; + } + r4 = r0 + 1; + r31=0x21d04; + pc=0x12000; + run_12000(); return; + case 0x21d04: + r4 = r2 + r0; + r31=0x21d10; + pc=0x49a00; + run_49800(); return; + case 0x21d10: + r2 = 6 << 16; + r2 = r2 + -4072; + r6 = r2 + r0; + pc=0x21c6c; + continue; + case 0x21d24: + r8= page[(r5+0)>>>2]; + r7= page[(r5+4)>>>2]; + r5 = 6 << 16; + r3= page[(r28+-32672)>>>2]; + r5 = r5 + 4308; + page[(r29+16)>>>2] = r6; + page[(r29+20)>>>2] = r5; + page[(r29+24)>>>2] = r2; + r2= page[(r3+8)>>>2]; + r4= page[(r17+32)>>>2]; + page[(r29+28)>>>2] = r2; + r2= page[(r3+12)>>>2]; + r5 = 6 << 16; + page[(r29+32)>>>2] = r2; + r2 = 6 << 16; + r2 = r2 + 5152; + page[(r29+36)>>>2] = r2; + r5 = r5 + 4220; + r6 = r8 + r0; + r31=0x21d78; + pc=0x4b800; + run_4b800(); return; + case 0x21d78: + pc=0x21ccc; + continue; + case 0x21e00: r3 = r0 | 32768; r2 = 1 << 16; r3 = r4 + r3; r2 = r2 | 32768; r29 = r29 + -24; r2 = ((r3 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; + page[(r29+16)>>>2] = r16; + page[(r29+20)>>>2] = r31; r16 = r4 + r0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x26048; + pc=0x21e40; continue; } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r4 = 7 << 16; - r4 = r4 + -6936; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=0x1b000; - run_1b000(); return; - case 0x26048: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - r31=0x26058; - return; - case 0x26058: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5120; + r31=0x21e40; + pc=0x1fc00; + run_1f800(); return; + case 0x21e40: + r2= page[(r28+-31264)>>>2]; r4 = r16 >> 8; - r25 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + pc=r2; + r31=0x21e50; + return; + case 0x21e50: + r31= page[(r29+20)>>>2]; + r4 = r16 + r0; + r25= page[(r28+-31264)>>>2]; + r16= page[(r29+16)>>>2]; r29 = r29 + 24; - /* Next insn is delay slot */ pc=r25; return; - case 0x26200: - pc=0x26200; + case 0x22000: + pc=0x22000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_26200() throws ExecutionException { /* 0x26200 - 0x26400 */ + private final void run_22000() throws ExecutionException { /* 0x22000 - 0x22800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x26200: + case 0x22000: + r3 = r0 | 32768; + r2 = 1 << 16; + r3 = r4 + r3; + r2 = r2 | 32768; + r29 = r29 + -24; + r2 = ((r3 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; + page[(r29+16)>>>2] = r16; + page[(r29+20)>>>2] = r31; + r16 = r4 + r0; + if(r2 != r0) { + pc=0x22040; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5120; + r31=0x22040; + pc=0x1fc00; + run_1f800(); return; + case 0x22040: + r2= page[(r28+-31264)>>>2]; + r4 = r16 + r0; + pc=r2; + r31=0x22050; + return; + case 0x22050: + r31= page[(r29+20)>>>2]; + r4 = r16 >> 8; + r25= page[(r28+-31264)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 24; + pc=r25; + return; + case 0x22200: r2 = 128 << 16; r2 = r4 + r2; r3 = 384 << 16; r29 = r29 + -24; r2 = ((r2 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; + page[(r29+16)>>>2] = r16; + page[(r29+20)>>>2] = r31; r16 = r4 + r0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x26244; + pc=0x2223c; continue; } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r4 = 7 << 16; - r4 = r4 + -6936; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=0x1b000; - run_1b000(); return; - case 0x26244: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - r31=0x26254; - return; - case 0x26254: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r16 >> 8; - /* Next insn is delay slot */ - pc=r2; - r31=0x26264; - return; - case 0x26264: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5088; + r31=0x2223c; + pc=0x1fc00; + run_1f800(); return; + case 0x2223c: + r2= page[(r28+-31264)>>>2]; r4 = r16 >> 16; - r25 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + pc=r2; + r31=0x2224c; + return; + case 0x2224c: + r2= page[(r28+-31264)>>>2]; + r4 = r16 >> 8; + pc=r2; + r31=0x2225c; + return; + case 0x2225c: + r31= page[(r29+20)>>>2]; + r4 = r16 + r0; + r25= page[(r28+-31264)>>>2]; + r16= page[(r29+16)>>>2]; r29 = r29 + 24; - /* Next insn is delay slot */ pc=r25; return; - case 0x26400: - pc=0x26400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_26400() throws ExecutionException { /* 0x26400 - 0x26600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x26400: + case 0x22400: + r2 = 128 << 16; + r2 = r4 + r2; + r3 = 384 << 16; r29 = r29 + -24; - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; + r2 = ((r2 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; + page[(r29+16)>>>2] = r16; + page[(r29+20)>>>2] = r31; r16 = r4 + r0; - /* Next insn is delay slot */ + if(r2 != r0) { + pc=0x2243c; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5088; + r31=0x2243c; + pc=0x1fc00; + run_1f800(); return; + case 0x2243c: + r2= page[(r28+-31264)>>>2]; + r4 = r16 + r0; pc=r2; - r31=0x2641c; + r31=0x2244c; return; - case 0x2641c: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; + case 0x2244c: + r2= page[(r28+-31264)>>>2]; r4 = r16 >> 8; - /* Next insn is delay slot */ pc=r2; - r31=0x2642c; + r31=0x2245c; return; - case 0x2642c: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; + case 0x2245c: + r31= page[(r29+20)>>>2]; r4 = r16 >> 16; - /* Next insn is delay slot */ - pc=r2; - r31=0x2643c; - return; - case 0x2643c: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r4 = r16 >> 24; - r25 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + r25= page[(r28+-31264)>>>2]; + r16= page[(r29+16)>>>2]; r29 = r29 + 24; - /* Next insn is delay slot */ pc=r25; return; - case 0x26600: - pc=0x26600; + case 0x22600: + r29 = r29 + -24; + r2= page[(r28+-31264)>>>2]; + page[(r29+20)>>>2] = r31; + page[(r29+16)>>>2] = r16; + r16 = r4 + r0; + r4 = r4 >> 24; + pc=r2; + r31=0x22620; + return; + case 0x22620: + r2= page[(r28+-31264)>>>2]; + r4 = r16 >> 16; + pc=r2; + r31=0x22630; + return; + case 0x22630: + r2= page[(r28+-31264)>>>2]; + r4 = r16 >> 8; + pc=r2; + r31=0x22640; + return; + case 0x22640: + r31= page[(r29+20)>>>2]; + r4 = r16 + r0; + r25= page[(r28+-31264)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 24; + pc=r25; + return; + case 0x22800: + pc=0x22800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_26600() throws ExecutionException { /* 0x26600 - 0x26800 */ + private final void run_22800() throws ExecutionException { /* 0x22800 - 0x23000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x26600: - r2 = 7 << 16; - r29 = r29 + -32; - r3 = r2 + 16880; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r16 = readPages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff]; - r5 = r4 << 24; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - r5 = r5 >> 24; - if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x26674; + case 0x22800: + r29 = r29 + -24; + r2= page[(r28+-31264)>>>2]; + page[(r29+20)>>>2] = r31; + page[(r29+16)>>>2] = r16; + r16 = r4 + r0; + pc=r2; + r31=0x2281c; + return; + case 0x2281c: + r2= page[(r28+-31264)>>>2]; + r4 = r16 >> 8; + pc=r2; + r31=0x2282c; + return; + case 0x2282c: + r2= page[(r28+-31264)>>>2]; + r4 = r16 >> 16; + pc=r2; + r31=0x2283c; + return; + case 0x2283c: + r31= page[(r29+20)>>>2]; + r4 = r16 >> 24; + r25= page[(r28+-31264)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 24; + pc=r25; + return; + case 0x22a00: + r2= page[(r28+-31340)>>>2]; + r29 = r29 + -80; + r3= page[(r28+-32692)>>>2]; + page[(r29+56)>>>2] = r17; + r17 = r4 + r0; + r4= page[(r2+4)>>>2]; + page[(r29+76)>>>2] = r31; + page[(r29+72)>>>2] = r21; + page[(r29+68)>>>2] = r20; + page[(r29+64)>>>2] = r19; + page[(r29+60)>>>2] = r18; + page[(r29+52)>>>2] = r16; + if(r4 == r3) { + pc=0x22acc; continue; } - r4 = readPages[(r2+16880)>>>12][((r2+16880)>>>2)&0x3ff]; - r17 = r0 + 1; - r6 = 1 << 16; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r17; - /* Next insn is delay slot */ - r31=0x26644; - pc=0x48fec; - run_48e00(); return; - case 0x26644: - r2 = readPages[(r28+-30576)>>>12][((r28+-30576)>>>2)&0x3ff]; + r6= page[(r3+0)>>>2]; + r4= page[(r2+0)>>>2]; + r5 = 6 << 16; + r5 = r5 + 5320; + r31=0x22a50; + pc=0x4b800; + run_4b800(); return; + case 0x22a50: + r2= page[(r28+-31340)>>>2]; + r3= page[(r28+-32692)>>>2]; + page[(r2+8)>>>2] = r0; + page[(r2+4)>>>2] = r3; + addr=r28+-31336; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x22a64: + r3 = r0 + 10; + if(r17 == r3) { + pc=0x22aa0; + continue; + } + r3 = r0 + 13; + if(r17 == r3) { + pc=0x22aa0; + continue; + } + r3= page[(r2+8)>>>2]; + r4 = (r3&0xffffffffL) < (1024&0xffffffffL) ? 1 : 0; + if(r4 == r0) { + pc=0x22aa0; + continue; + } + r4 = r3 + 1; + page[(r2+8)>>>2] = r4; + r2 = r2 + r3; + addr=r2+20; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x22aa0: + r31= page[(r29+76)>>>2]; + r21= page[(r29+72)>>>2]; + r20= page[(r29+68)>>>2]; + r19= page[(r29+64)>>>2]; + r18= page[(r29+60)>>>2]; + r16= page[(r29+52)>>>2]; + addr=r28+-31336; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r17= page[(r29+56)>>>2]; + r29 = r29 + 80; + pc=r31; + return; + case 0x22acc: + addr=r28+-31336; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + r3 = r0 + 10; + if(r5 != r3) { + pc=0x22a64; + continue; + } + r6= page[(r4+4)>>>2]; + r5 = 6 << 16; + r4= page[(r2+0)>>>2]; + r5 = r5 + 5344; + r6 = r6 + -1; + r31=0x22af8; + pc=0x4b800; + run_4b800(); return; + case 0x22af8: + r2= page[(r28+-31340)>>>2]; + r3= page[(r2+12)>>>2]; + if(r3 != r0) { + pc=0x22b8c; + continue; + } + addr=r29+36; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + addr=r29+16; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r21 = r29 + 36; + r20 = r29 + 16; + case 0x22b20: + r4= page[(r2+0)>>>2]; + r5 = 6 << 16; + r6 = r21 + r0; + r5 = r5 + 5368; + r7 = r20 + r0; + r31=0x22b3c; + pc=0x4b800; + run_4b800(); return; + case 0x22b3c: + r6= page[(r28+-31340)>>>2]; + r3 = r0 + 1024; + r2= page[(r6+8)>>>2]; + if(r2 == r3) { + pc=0x22c24; + continue; + } + case 0x22b54: + r2 = r6 + r2; + r4= page[(r6+0)>>>2]; + r5 = 6 << 16; + addr=r2+20; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r5 = r5 + 5340; + r6 = r6 + 20; + r31=0x22b74; + pc=0x4b800; + run_4b800(); return; + case 0x22b74: + r2= page[(r28+-31340)>>>2]; + page[(r2+8)>>>2] = r0; + page[(r2+12)>>>2] = r0; + pc=0x22a64; + continue; + case 0x22b8c: + r21 = r29 + 36; + r5 = 6 << 16; + r6= page[(r2+16)>>>2]; + r4 = r21 + r0; + r5 = r5 + 5352; + r31=0x22ba8; + pc=0x50c00; + run_50800(); return; + case 0x22ba8: + r2= page[(r28+-31340)>>>2]; + r20 = r29 + 16; + r3= page[(r2+12)>>>2]; + addr=r29+16; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + if(r3 == r0) { + pc=0x22b20; + continue; + } + r19 = 6 << 16; + r18 = r20 + r0; + r16 = r0 + r0; + r19 = r19 + 5360; + case 0x22bd0: + r2 = r2 + r16; + addr=r2+1044; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r4 = r18 + r0; + r5 = r19 + r0; + r31=0x22be8; + pc=0x50c00; + run_50800(); return; + case 0x22be8: + r2= page[(r28+-31340)>>>2]; + r16 = r16 + 1; + r3= page[(r2+12)>>>2]; + r18 = r18 + 2; + r4 = ((r16 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; + if(r4 != r0) { + pc=0x22bd0; + continue; + } + r4 = r0 + 9; + if(r3 != r4) { + pc=0x22b20; + continue; + } + r3 = 11822 << 16; + r3 = r3 + 11776; + page[(r29+32)>>>2] = r3; + pc=0x22b20; + continue; + case 0x22c24: + r2 = r0 + 1023; + page[(r6+8)>>>2] = r2; + pc=0x22b54; + continue; + case 0x22e00: + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 1; + page[(r2+0)>>>2] = r4; + page[(r2+4)>>>2] = r3; + page[(r2+8)>>>2] = r0; + page[(r2+12)>>>2] = r0; + page[(r2+16)>>>2] = r5; + pc=r31; + return; + case 0x23000: + pc=0x23000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_23000() throws ExecutionException { /* 0x23000 - 0x23800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x23000: + r3= page[(r28+-32692)>>>2]; + r29 = r29 + -48; + r5= page[(r3+8)>>>2]; + page[(r29+44)>>>2] = r31; + page[(r29+40)>>>2] = r21; + page[(r29+36)>>>2] = r20; + page[(r29+32)>>>2] = r19; + page[(r29+28)>>>2] = r18; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + if(r5 == r0) { + pc=0x230c0; + continue; + } + r2 = r0 + 1; + if(r5 == r2) { + pc=0x2309c; + continue; + } + r4 = 6 << 16; + r4 = r4 + 5440; + r31=0x2304c; + pc=0x21400; + run_21000(); return; + case 0x2304c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + case 0x23050: + r3 = r0 + 10; + if(r2 != r3) { + pc=0x23074; + continue; + } + r3= page[(r28+-32692)>>>2]; + r4= page[(r3+4)>>>2]; + r4 = r4 + 1; + page[(r3+4)>>>2] = r4; + case 0x23074: + r31= page[(r29+44)>>>2]; + r21= page[(r29+40)>>>2]; + r20= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 48; + pc=r31; + return; + case 0x2309c: + r2= page[(r3+16)>>>2]; + r4 = r2 + 1; + page[(r3+16)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x230c0: + r20 = 6 << 16; + r4 = 6 << 16; + r5= page[(r3+12)>>>2]; + r20 = r20 + 5832; + r19 = r4 + 5420; + r17 = r0 + -1; + r18 = r0 + 13; + r16 = r0 + 10; + case 0x230e0: + r2 = (r5&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x23500; + continue; + } + case 0x230ec: + r5 = r5 << 2; + r5 = r20 + r5; + r2= page[(r5+0)>>>2]; + pc=r2; + return; + case 0x23104: + if(r2 == r17) { + pc=0x23210; + continue; + } + if(r2 == r18) { + pc=0x23210; + continue; + } + if(r2 == r16) { + pc=0x23210; + continue; + } + r3= page[(r28+-32692)>>>2]; + case 0x23124: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x234e8; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x23160: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x23104; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x23188; + pc=0x22a00; + run_22800(); return; + case 0x23188: + r2= page[(r28+-31332)>>>2]; + pc=0x23104; + continue; + case 0x23194: + r4= page[(r3+16)>>>2]; + r19 = r0 + 9; + r2= page[(r4+4)>>>2]; + r21 = r0 + 32; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x234d0; + continue; + } + case 0x231b4: + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x231d0: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x23200; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x231f8; + pc=0x22a00; + run_22800(); return; + case 0x231f8: + r2= page[(r28+-31332)>>>2]; + case 0x23200: + if(r2 == r19) { + pc=0x234a8; + continue; + } + if(r2 == r21) { + pc=0x234a8; + continue; + } + case 0x23210: + r3= page[(r28+-32692)>>>2]; + r2 = r0 + 2; + page[(r3+12)>>>2] = r2; + r5 = r0 + 2; + pc=0x230ec; + continue; + case 0x23228: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x2356c; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x23264: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x235e0; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x2328c; + pc=0x22a00; + run_22800(); return; + case 0x2328c: + r3= page[(r28+-32692)>>>2]; + case 0x23290: + r2= page[(r28+-31332)>>>2]; + case 0x23294: + r4 = r0 + 1; + page[(r3+12)>>>2] = r4; + r4 = r0 + -1; + if(r2 == r4) { + pc=0x235c8; + continue; + } + r5 = 6 << 16; + r4 = r2 & 255; + r5 = r5 + 4764; + r4 = r4 + r5; + addr=r4+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r4 = r4 & 16; + if(r4 == r0) { + pc=0x235b4; + continue; + } + r4 = r0 + 32; + if(r2 == r4) { + pc=0x236a4; + continue; + } + r4 = r2 < 33 ? 1 : 0; + if(r4 != r0) { + pc=0x23520; + continue; + } + r4 = r0 + 58; + if(r2 == r4) { + pc=0x236ec; + continue; + } + r4 = r2 < 59 ? 1 : 0; + if(r4 != r0) { + pc=0x235ec; + continue; + } + r4 = r0 + 59; + if(r2 == r4) { + pc=0x2368c; + continue; + } + r4 = r0 + 125; + if(r2 != r4) { + pc=0x23544; + continue; + } + r2 = r0 + 8; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x2332c: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x2359c; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x23368: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x23394; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x23390; + pc=0x22a00; + run_22800(); return; + case 0x23390: + r2= page[(r28+-31332)>>>2]; + case 0x23394: + r3 = r0 + 35; + if(r2 != r3) { + pc=0x23210; + continue; + } + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 7; + page[(r2+12)>>>2] = r3; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x233bc: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + 13; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x233d4: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + 125; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x233ec: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x23584; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x23428: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x23458; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x23450; + pc=0x22a00; + run_22800(); return; + case 0x23450: + r2= page[(r28+-31332)>>>2]; + case 0x23458: + if(r2 != r16) { + pc=0x23210; + continue; + } + r3= page[(r28+-32692)>>>2]; + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r5 = r0 + 1; + pc=0x230ec; + continue; + case 0x23478: + r2 = r0 + 6; + page[(r3+12)>>>2] = r2; + r2 = r0 + 10; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x23490: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + 10; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x234a8: + r3= page[(r28+-32692)>>>2]; + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 >= 0) { + pc=0x231b4; + continue; + } + case 0x234d0: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x234e0; + pc=0x50a00; + run_50800(); return; + case 0x234e0: + pc=0x231d0; + continue; + case 0x234e8: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x234f8; + pc=0x50a00; + run_50800(); return; + case 0x234f8: + pc=0x23160; + continue; + case 0x23500: + r4 = r19 + r0; + r31=0x2350c; + pc=0x21400; + run_21000(); return; + case 0x2350c: + r3= page[(r28+-32692)>>>2]; + r5= page[(r3+12)>>>2]; + pc=0x230e0; + continue; + case 0x23520: + r4 = r0 + 10; + if(r2 == r4) { + pc=0x236d4; + continue; + } + r4 = r0 + 13; + if(r2 == r4) { + pc=0x236bc; + continue; + } + r4 = r0 + 9; + if(r2 == r4) { + pc=0x236a4; + continue; + } + case 0x23544: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5380; + r31=0x23558; + pc=0x1fc00; + run_1f800(); return; + case 0x23558: + addr=r28+-31329; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x2356c: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x2357c; + pc=0x50a00; + run_50800(); return; + case 0x2357c: + pc=0x23264; + continue; + case 0x23584: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x23594; + pc=0x50a00; + run_50800(); return; + case 0x23594: + pc=0x23428; + continue; + case 0x2359c: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x235ac; + pc=0x50a00; + run_50800(); return; + case 0x235ac: + pc=0x23368; + continue; + case 0x235b4: + r2 = r2 << 24; + r2 = r2 >> 24; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x235c8: + r2 = r0 + 9; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x235e0: + r3= page[(r28+-32692)>>>2]; + pc=0x23294; + continue; + case 0x235ec: + r4 = r0 + 47; + if(r2 != r4) { + pc=0x23544; + continue; + } + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x236fc; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x23634: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x23660; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x2365c; + pc=0x22a00; + run_22800(); return; + case 0x2365c: + r2= page[(r28+-31332)>>>2]; + case 0x23660: + r3 = r0 + 47; + if(r2 == r3) { + pc=0x23688; + continue; + } + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 2; + page[(r2+12)>>>2] = r3; + r2 = r0 + 47; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x23688: + r3= page[(r28+-32692)>>>2]; + case 0x2368c: + r2 = r0 + 7; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x236a4: + r2 = r0 + 3; + page[(r3+12)>>>2] = r2; + r2 = r0 + 32; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x236bc: + r2 = r0 + 5; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x236d4: + r2 = r0 + 4; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x236ec: + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23050; + continue; + case 0x236fc: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x2370c; + pc=0x50a00; + run_50800(); return; + case 0x2370c: + pc=0x23634; + continue; + case 0x23800: + pc=0x23800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_23800() throws ExecutionException { /* 0x23800 - 0x24000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x23800: + r29 = r29 + -56; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + page[(r29+48)>>>2] = r30; + page[(r29+36)>>>2] = r21; + r30 = 6 << 16; + r21 = 6 << 16; + page[(r29+44)>>>2] = r23; + page[(r29+40)>>>2] = r22; + page[(r29+52)>>>2] = r31; + page[(r29+32)>>>2] = r20; + page[(r29+28)>>>2] = r19; + page[(r29+24)>>>2] = r18; + page[(r29+20)>>>2] = r17; + page[(r29+16)>>>2] = r16; + r21 = r21 + 5872; + r30 = r30 + 5420; + r23 = 6 << 16; + r22 = 6 << 16; + case 0x23848: + if(r2 == r0) { + pc=0x238bc; + continue; + } + case 0x23850: + r3= page[(r28+-32692)>>>2]; + r5= page[(r3+8)>>>2]; + if(r5 == r0) { + pc=0x23908; + continue; + } + r2 = r0 + 1; + if(r5 != r2) { + pc=0x238f0; + continue; + } + r2= page[(r3+16)>>>2]; + r4 = r2 + 1; + page[(r3+16)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x23890: + r3 = r0 + 10; + if(r2 != r3) { + pc=0x23848; + continue; + } + r3= page[(r28+-32692)>>>2]; + r4= page[(r3+4)>>>2]; + r4 = r4 + 1; + page[(r3+4)>>>2] = r4; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x26658; + pc=0x23850; continue; } - writePages[(r28+-30576)>>>12][((r28+-30576)>>>2)&0x3ff] = r17; - case 0x26658: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r16 + r0; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ + case 0x238bc: + r31= page[(r29+52)>>>2]; + r30= page[(r29+48)>>>2]; + r23= page[(r29+44)>>>2]; + r22= page[(r29+40)>>>2]; + r21= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 56; pc=r31; return; - case 0x26674: - r4 = 7 << 16; - r4 = r4 + -1912; - /* Next insn is delay slot */ - r31=0x26684; - pc=0x1ac00; - run_1ac00(); return; - case 0x26684: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + case 0x238f0: + r4 = r22 + 5440; + r31=0x238fc; + pc=0x21400; + run_21000(); return; + case 0x238fc: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x23890; + continue; + case 0x23908: + r5= page[(r3+12)>>>2]; + r17 = r0 + -1; + r18 = r0 + 13; + r16 = r0 + 10; + case 0x23918: + r2 = (r5&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x23d38; + continue; + } + case 0x23924: + r5 = r5 << 2; + r5 = r21 + r5; + r2= page[(r5+0)>>>2]; + pc=r2; + return; + case 0x2393c: + if(r2 == r17) { + pc=0x239d0; + continue; + } + case 0x23944: + if(r2 == r18) { + pc=0x239d0; + continue; + } + if(r2 == r16) { + pc=0x239d0; + continue; + } + r3= page[(r28+-32692)>>>2]; + case 0x2395c: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x23d20; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x23998: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x2393c; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x239c0; + pc=0x22a00; + run_22800(); return; + case 0x239c0: + r2= page[(r28+-31332)>>>2]; + if(r2 != r17) { + pc=0x23944; + continue; + } + case 0x239d0: + r3= page[(r28+-32692)>>>2]; + r2 = r0 + 2; + page[(r3+12)>>>2] = r2; + r5 = r0 + 2; + pc=0x23924; + continue; + case 0x239e8: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x23e84; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x23a24: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x23ecc; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x23a4c; + pc=0x22a00; + run_22800(); return; + case 0x23a4c: + r3= page[(r28+-32692)>>>2]; + case 0x23a50: + r2= page[(r28+-31332)>>>2]; + case 0x23a54: + r4 = r0 + 1; + page[(r3+12)>>>2] = r4; + r4 = r0 + -1; + if(r2 == r4) { + pc=0x23db8; + continue; + } + r4 = r2 & 255; + r5 = r23 + 4764; + r4 = r4 + r5; + addr=r4+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r4 = r4 & 16; + if(r4 == r0) { + pc=0x23da4; + continue; + } + r4 = r0 + 32; + if(r2 == r4) { + pc=0x23f0c; + continue; + } + r4 = r2 < 33 ? 1 : 0; + if(r4 != r0) { + pc=0x23d58; + continue; + } + r4 = r0 + 58; + if(r2 == r4) { + pc=0x23f24; + continue; + } + r4 = r2 < 59 ? 1 : 0; + if(r4 != r0) { + pc=0x23dd0; + continue; + } + r4 = r0 + 59; + if(r2 == r4) { + pc=0x23edc; + continue; + } + r4 = r0 + 125; + if(r2 != r4) { + pc=0x23d7c; + continue; + } + r2 = r0 + 8; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23890; + continue; + case 0x23ae8: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x23e6c; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x23b24: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x23b54; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x23b4c; + pc=0x22a00; + run_22800(); return; + case 0x23b4c: + r2= page[(r28+-31332)>>>2]; + case 0x23b54: + if(r2 != r16) { + pc=0x239d0; + continue; + } + r3= page[(r28+-32692)>>>2]; + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r5 = r0 + 1; + pc=0x23924; + continue; + case 0x23b74: + r2 = r0 + 6; + page[(r3+12)>>>2] = r2; + r2 = r0 + 10; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23890; + continue; + case 0x23b8c: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + 10; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23890; + continue; + case 0x23ba4: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + 13; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23890; + continue; + case 0x23bbc: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + 125; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23890; + continue; + case 0x23bd4: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x23e9c; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x23c10: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x23c3c; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x23c38; + pc=0x22a00; + run_22800(); return; + case 0x23c38: + r2= page[(r28+-31332)>>>2]; + case 0x23c3c: + r3 = r0 + 35; + if(r2 != r3) { + pc=0x239d0; + continue; + } + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 7; + page[(r2+12)>>>2] = r3; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23890; + continue; + case 0x23c64: + r4= page[(r3+16)>>>2]; + r19 = r0 + 9; + r2= page[(r4+4)>>>2]; + r20 = r0 + 32; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x23d08; + continue; + } + case 0x23c84: + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x23ca0: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x23cd0; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x23cc8; + pc=0x22a00; + run_22800(); return; + case 0x23cc8: + r2= page[(r28+-31332)>>>2]; + case 0x23cd0: + if(r2 == r19) { + pc=0x23ce0; + continue; + } + if(r2 != r20) { + pc=0x239d0; + continue; + } + case 0x23ce0: + r3= page[(r28+-32692)>>>2]; + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 >= 0) { + pc=0x23c84; + continue; + } + case 0x23d08: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x23d18; + pc=0x50a00; + run_50800(); return; + case 0x23d18: + pc=0x23ca0; + continue; + case 0x23d20: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x23d30; + pc=0x50a00; + run_50800(); return; + case 0x23d30: + pc=0x23998; + continue; + case 0x23d38: + r4 = r30 + r0; + r31=0x23d44; + pc=0x21400; + run_21000(); return; + case 0x23d44: + r3= page[(r28+-32692)>>>2]; + r5= page[(r3+12)>>>2]; + pc=0x23918; + continue; + case 0x23d58: + r4 = r0 + 10; + if(r2 == r4) { + pc=0x23eb4; + continue; + } + r4 = r0 + 13; + if(r2 == r4) { + pc=0x23ef4; + continue; + } + r4 = r0 + 9; + if(r2 == r4) { + pc=0x23f0c; + continue; + } + case 0x23d7c: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5380; + r31=0x23d90; + pc=0x1fc00; + run_1f800(); return; + case 0x23d90: + addr=r28+-31329; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23890; + continue; + case 0x23da4: + r2 = r2 << 24; + r2 = r2 >> 24; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23890; + continue; + case 0x23db8: + r2 = r0 + 9; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23890; + continue; + case 0x23dd0: + r4 = r0 + 47; + if(r2 != r4) { + pc=0x23d7c; + continue; + } + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x23f34; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x23e18: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x23e44; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x23e40; + pc=0x22a00; + run_22800(); return; + case 0x23e40: + r2= page[(r28+-31332)>>>2]; + case 0x23e44: + r3 = r0 + 47; + if(r2 == r3) { + pc=0x23ed8; + continue; + } + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 2; + page[(r2+12)>>>2] = r3; + r2 = r0 + 47; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23890; + continue; + case 0x23e6c: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x23e7c; + pc=0x50a00; + run_50800(); return; + case 0x23e7c: + pc=0x23b24; + continue; + case 0x23e84: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x23e94; + pc=0x50a00; + run_50800(); return; + case 0x23e94: + pc=0x23a24; + continue; + case 0x23e9c: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x23eac; + pc=0x50a00; + run_50800(); return; + case 0x23eac: + pc=0x23c10; + continue; + case 0x23eb4: + r2 = r0 + 4; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23890; + continue; + case 0x23ecc: + r3= page[(r28+-32692)>>>2]; + pc=0x23a54; + continue; + case 0x23ed8: + r3= page[(r28+-32692)>>>2]; + case 0x23edc: + r2 = r0 + 7; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23890; + continue; + case 0x23ef4: + r2 = r0 + 5; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23890; + continue; + case 0x23f0c: + r2 = r0 + 3; + page[(r3+12)>>>2] = r2; + r2 = r0 + 32; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23890; + continue; + case 0x23f24: + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x23890; + continue; + case 0x23f34: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x23f44; + pc=0x50a00; + run_50800(); return; + case 0x23f44: + pc=0x23e18; + continue; + case 0x24000: + pc=0x24000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_24000() throws ExecutionException { /* 0x24000 - 0x24800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x24000: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r7 = tmp; + r29 = r29 + -144; + r2 = r0 + 32; + page[(r29+140)>>>2] = r31; + page[(r29+136)>>>2] = r30; + page[(r29+132)>>>2] = r23; + page[(r29+128)>>>2] = r22; + page[(r29+124)>>>2] = r21; + page[(r29+120)>>>2] = r20; + page[(r29+116)>>>2] = r19; + page[(r29+112)>>>2] = r18; + page[(r29+108)>>>2] = r17; + page[(r29+104)>>>2] = r16; + if(r7 == r2) { + pc=0x245a8; + continue; + } + case 0x2403c: + if(r7 == r0) { + pc=0x2410c; + continue; + } + r2 = r0 + 39; + if(r7 == r2) { + pc=0x2459c; + continue; + } + r6 = r0 + 39; + case 0x24054: + r5 = 6 << 16; + page[(r29+16)>>>2] = r6; + r4 = r29 + 24; + r5 = r5 + 5456; + r31=0x2406c; + pc=0x50c00; + run_50800(); return; + case 0x2406c: + r4 = r0 + -2; + r5 = r29 + 24; + r31=0x2407c; + pc=0x1fc00; + run_1f800(); return; + case 0x2407c: + r21 = 6 << 16; + r30 = 6 << 16; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r21 = r21 + 5912; + r30 = r30 + 5420; + r23 = 6 << 16; + r22 = 6 << 16; + case 0x24098: + if(r2 == r0) { + pc=0x2410c; + continue; + } + case 0x240a0: + r3= page[(r28+-32692)>>>2]; + r5= page[(r3+8)>>>2]; + if(r5 == r0) { + pc=0x24158; + continue; + } + r2 = r0 + 1; + if(r5 != r2) { + pc=0x24140; + continue; + } + r2= page[(r3+16)>>>2]; + r4 = r2 + 1; + page[(r3+16)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x240e0: + r3 = r0 + 10; + if(r2 != r3) { + pc=0x24098; + continue; + } + r3= page[(r28+-32692)>>>2]; + r4= page[(r3+4)>>>2]; + r4 = r4 + 1; + page[(r3+4)>>>2] = r4; + if(r2 != r0) { + pc=0x240a0; + continue; + } + case 0x2410c: + r31= page[(r29+140)>>>2]; + r30= page[(r29+136)>>>2]; + r23= page[(r29+132)>>>2]; + r22= page[(r29+128)>>>2]; + r21= page[(r29+124)>>>2]; + r20= page[(r29+120)>>>2]; + r19= page[(r29+116)>>>2]; + r18= page[(r29+112)>>>2]; + r17= page[(r29+108)>>>2]; + r16= page[(r29+104)>>>2]; + r29 = r29 + 144; + pc=r31; + return; + case 0x24140: + r4 = r22 + 5440; + r31=0x2414c; + pc=0x21400; + run_21000(); return; + case 0x2414c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x240e0; + continue; + case 0x24158: + r5= page[(r3+12)>>>2]; + r17 = r0 + -1; + r18 = r0 + 13; + r16 = r0 + 10; + case 0x24168: + r2 = (r5&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x24568; + continue; + } + case 0x24174: + r5 = r5 << 2; + r5 = r21 + r5; + r2= page[(r5+0)>>>2]; + pc=r2; + return; + case 0x2418c: + if(r2 == r17) { + pc=0x24434; + continue; + } + if(r2 == r18) { + pc=0x24434; + continue; + } + if(r2 == r16) { + pc=0x24434; + continue; + } + r3= page[(r28+-32692)>>>2]; + case 0x241ac: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x24550; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x241e8: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x2418c; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x24210; + pc=0x22a00; + run_22800(); return; + case 0x24210: + r2= page[(r28+-31332)>>>2]; + pc=0x2418c; + continue; + case 0x2421c: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x246fc; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x24258: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x24620; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x24280; + pc=0x22a00; + run_22800(); return; + case 0x24280: + r3= page[(r28+-32692)>>>2]; + case 0x24284: + r2= page[(r28+-31332)>>>2]; + case 0x24288: + r4 = r0 + 1; + page[(r3+12)>>>2] = r4; + r4 = r0 + -1; + if(r2 == r4) { + pc=0x24608; + continue; + } + r4 = r2 & 255; + r5 = r23 + 4764; + r4 = r4 + r5; + addr=r4+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r4 = r4 & 16; + if(r4 == r0) { + pc=0x24588; + continue; + } + r4 = r0 + 32; + if(r2 == r4) { + pc=0x24744; + continue; + } + r4 = r2 < 33 ? 1 : 0; + if(r4 != r0) { + pc=0x245bc; + continue; + } + r4 = r0 + 58; + if(r2 == r4) { + pc=0x24774; + continue; + } + r4 = r2 < 59 ? 1 : 0; + if(r4 != r0) { + pc=0x2462c; + continue; + } + r4 = r0 + 59; + if(r2 == r4) { + pc=0x246e4; + continue; + } + r4 = r0 + 125; + if(r2 != r4) { + pc=0x245e0; + continue; + } + r2 = r0 + 8; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x240e0; + continue; + case 0x2431c: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x2472c; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x24358: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x24388; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x24380; + pc=0x22a00; + run_22800(); return; + case 0x24380: + r2= page[(r28+-31332)>>>2]; + case 0x24388: + if(r2 != r16) { + pc=0x24434; + continue; + } + r3= page[(r28+-32692)>>>2]; + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r5 = r0 + 1; + pc=0x24174; + continue; + case 0x243a8: + r2 = r0 + 6; + page[(r3+12)>>>2] = r2; + r2 = r0 + 10; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x240e0; + continue; + case 0x243c0: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x24714; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x243fc: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x24428; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x24424; + pc=0x22a00; + run_22800(); return; + case 0x24424: + r2= page[(r28+-31332)>>>2]; + case 0x24428: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x24784; + continue; + } + case 0x24434: + r3= page[(r28+-32692)>>>2]; + r2 = r0 + 2; + page[(r3+12)>>>2] = r2; + r5 = r0 + 2; + pc=0x24174; + continue; + case 0x2444c: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + 13; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x240e0; + continue; + case 0x24464: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + 125; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x240e0; + continue; + case 0x2447c: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + 10; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x240e0; + continue; + case 0x24494: + r4= page[(r3+16)>>>2]; + r19 = r0 + 9; + r2= page[(r4+4)>>>2]; + r20 = r0 + 32; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x24538; + continue; + } + case 0x244b4: + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x244d0: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x24500; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x244f8; + pc=0x22a00; + run_22800(); return; + case 0x244f8: + r2= page[(r28+-31332)>>>2]; + case 0x24500: + if(r2 == r19) { + pc=0x24510; + continue; + } + if(r2 != r20) { + pc=0x24434; + continue; + } + case 0x24510: + r3= page[(r28+-32692)>>>2]; + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 >= 0) { + pc=0x244b4; + continue; + } + case 0x24538: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x24548; + pc=0x50a00; + run_50800(); return; + case 0x24548: + pc=0x244d0; + continue; + case 0x24550: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x24560; + pc=0x50a00; + run_50800(); return; + case 0x24560: + pc=0x241e8; + continue; + case 0x24568: + r4 = r30 + r0; + r31=0x24574; + pc=0x21400; + run_21000(); return; + case 0x24574: + r3= page[(r28+-32692)>>>2]; + r5= page[(r3+12)>>>2]; + pc=0x24168; + continue; + case 0x24588: + r2 = r2 << 24; + r2 = r2 >> 24; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x240e0; + continue; + case 0x2459c: + r6 = r0 + 34; + pc=0x24054; + continue; + case 0x245a8: + r31=0x245b0; + pc=0x23000; + run_23000(); return; + case 0x245b0: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r7 = tmp; + pc=0x2403c; + continue; + case 0x245bc: + r4 = r0 + 10; + if(r2 == r4) { + pc=0x2475c; + continue; + } + r4 = r0 + 13; + if(r2 == r4) { + pc=0x246c8; + continue; + } + r4 = r0 + 9; + if(r2 == r4) { + pc=0x24744; + continue; + } + case 0x245e0: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5380; + r31=0x245f4; + pc=0x1fc00; + run_1f800(); return; + case 0x245f4: + addr=r28+-31329; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x240e0; + continue; + case 0x24608: + r2 = r0 + 9; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x240e0; + continue; + case 0x24620: + r3= page[(r28+-32692)>>>2]; + pc=0x24288; + continue; + case 0x2462c: + r4 = r0 + 47; + if(r2 != r4) { + pc=0x245e0; + continue; + } + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x247a0; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x24674: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x246a0; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x2469c; + pc=0x22a00; + run_22800(); return; + case 0x2469c: + r2= page[(r28+-31332)>>>2]; + case 0x246a0: + r3 = r0 + 47; + if(r2 == r3) { + pc=0x246e0; + continue; + } + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 2; + page[(r2+12)>>>2] = r3; + r2 = r0 + 47; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x240e0; + continue; + case 0x246c8: + r2 = r0 + 5; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x240e0; + continue; + case 0x246e0: + r3= page[(r28+-32692)>>>2]; + case 0x246e4: + r2 = r0 + 7; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x240e0; + continue; + case 0x246fc: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x2470c; + pc=0x50a00; + run_50800(); return; + case 0x2470c: + pc=0x24258; + continue; + case 0x24714: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x24724; + pc=0x50a00; + run_50800(); return; + case 0x24724: + pc=0x243fc; + continue; + case 0x2472c: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x2473c; + pc=0x50a00; + run_50800(); return; + case 0x2473c: + pc=0x24358; + continue; + case 0x24744: + r2 = r0 + 3; + page[(r3+12)>>>2] = r2; + r2 = r0 + 32; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x240e0; + continue; + case 0x2475c: + r2 = r0 + 4; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x240e0; + continue; + case 0x24774: + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x240e0; + continue; + case 0x24784: + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 7; + page[(r2+12)>>>2] = r3; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x240e0; + continue; + case 0x247a0: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x247b0; + pc=0x50a00; + run_50800(); return; + case 0x247b0: + pc=0x24674; + continue; + case 0x24800: + pc=0x24800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_24800() throws ExecutionException { /* 0x24800 - 0x25000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x24800: + r2= page[(r28+-32692)>>>2]; + r29 = r29 + -56; + r5= page[(r2+8)>>>2]; + page[(r29+20)>>>2] = r17; + r17 = 6 << 16; + page[(r29+44)>>>2] = r23; + page[(r29+32)>>>2] = r20; + page[(r29+28)>>>2] = r19; + page[(r29+24)>>>2] = r18; + r19 = 6 << 16; + r18 = r4 << 24; + r20 = 6 << 16; + r23 = r17 + 17104; + page[(r29+40)>>>2] = r22; + page[(r29+36)>>>2] = r21; + page[(r29+16)>>>2] = r16; + page[(r29+52)>>>2] = r31; + page[(r29+48)>>>2] = r30; + r18 = r18 >> 24; + r16 = r0 + r0; + r19 = r19 + 5512; + r20 = r20 + 5440; + r22 = 6 << 16; + r21 = r23 + r0; + if(r5 == r0) { + pc=0x248f4; + continue; + } + case 0x24868: + r3 = r0 + 1; + if(r5 != r3) { + pc=0x24a30; + continue; + } + r3= page[(r2+16)>>>2]; + r4 = r3 + 1; + page[(r2+16)>>>2] = r4; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + if(r2 == r0) { + pc=0x249a8; + continue; + } + case 0x24898: + if(r16 != r0) { + pc=0x24a00; + continue; + } + if(r2 == r18) { + pc=0x24afc; + continue; + } + r3 = r0 + 92; + if(r2 == r3) { + pc=0x24a54; + continue; + } + case 0x248b4: + r3= page[(r23+4)>>>2]; + r4= page[(r23+8)>>>2]; + if(r3 == r4) { + pc=0x24a14; + continue; + } + case 0x248c8: + r4= page[(r17+17104)>>>2]; + r5 = r3 + 1; + r3 = r4 + r3; + page[(r23+4)>>>2] = r5; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2= page[(r28+-32692)>>>2]; + r5= page[(r2+8)>>>2]; + if(r5 != r0) { + pc=0x24868; + continue; + } + case 0x248f4: + r4= page[(r2+16)>>>2]; + r3= page[(r4+4)>>>2]; + r3 = r3 + -1; + page[(r4+4)>>>2] = r3; + if(r3 < 0) { + pc=0x24ae0; + continue; + } + r3= page[(r2+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r30 = tmp; + case 0x24930: + r2= page[(r28+-31340)>>>2]; + r2= page[(r2+0)>>>2]; + if(r2 == r0) { + pc=0x24958; + continue; + } + r4 = r30 << 24; + r4 = r4 >> 24; + r31=0x24958; + pc=0x22a00; + run_22800(); return; + case 0x24958: + r2 = r0 + 10; + if(r30 == r2) { + pc=0x24998; + continue; + } + r2 = r0 + 13; + if(r30 == r2) { + pc=0x24aa8; + continue; + } + r2 = r0 + -1; + if(r30 == r2) { + pc=0x24a70; + continue; + } + r2 = r30 << 24; + r2 = r2 >> 24; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + if(r2 != r0) { + pc=0x24898; + continue; + } + pc=0x249a8; + continue; + case 0x24998: + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 4; + page[(r2+12)>>>2] = r3; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x249a8: + r4 = r0 + -2; + r5 = r19 + r0; + r31=0x249b8; + pc=0x1fc00; + run_1f800(); return; + case 0x249b8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r0) { + pc=0x24898; + continue; + } + case 0x249c8: + r2 = r0 + 1; + case 0x249cc: + r31= page[(r29+52)>>>2]; + r30= page[(r29+48)>>>2]; + r23= page[(r29+44)>>>2]; + r22= page[(r29+40)>>>2]; + r21= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 56; + pc=r31; + return; + case 0x24a00: + r3= page[(r23+4)>>>2]; + r4= page[(r23+8)>>>2]; + r16 = r0 + r0; + if(r3 != r4) { + pc=0x248c8; + continue; + } + case 0x24a14: + r4 = r21 + r0; + r31=0x24a20; + pc=0x1c000; + run_1c000(); return; + case 0x24a20: + r3= page[(r21+4)>>>2]; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x248c8; + continue; + case 0x24a30: + r4 = r20 + r0; + r31=0x24a3c; + pc=0x21400; + run_21000(); return; + case 0x24a3c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r0) { + pc=0x24898; + continue; + } + pc=0x249a8; + continue; + case 0x24a54: + r3 = r22 + 31340; + r16= page[(r3+52)>>>2]; + r16 = (r16&0xffffffffL) < (6&0xffffffffL) ? 1 : 0; + r16 = r16 ^ 1; + pc=0x248b4; + continue; + case 0x24a70: + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 9; + page[(r2+12)>>>2] = r3; + r4 = r0 + -2; + r5 = r19 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r31=0x24a90; + pc=0x1fc00; + run_1f800(); return; + case 0x24a90: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r0) { + pc=0x24898; + continue; + } + pc=0x249c8; + continue; + case 0x24aa8: + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 5; + page[(r2+12)>>>2] = r3; + r4 = r0 + -2; + r5 = r19 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r31=0x24ac8; + pc=0x1fc00; + run_1f800(); return; + case 0x24ac8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r0) { + pc=0x24898; + continue; + } + pc=0x249c8; + continue; + case 0x24ae0: + r4= page[(r28+-31512)>>>2]; + r5= page[(r2+16)>>>2]; + r31=0x24af0; + pc=0x50a00; + run_50800(); return; + case 0x24af0: + r30 = r2 + r0; + pc=0x24930; + continue; + case 0x24afc: + r2 = r0 + r0; + pc=0x249cc; + continue; + case 0x24c00: + r2 = 6 << 16; + r2= page[(r2+31392)>>>2]; + r2 = (r2&0xffffffffL) < (6&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x24dd0; + continue; + } + r29 = r29 + -56; + page[(r29+28)>>>2] = r19; + r19 = 6 << 16; + page[(r29+32)>>>2] = r20; + r20 = r19 + 17104; + page[(r29+20)>>>2] = r17; + r5 = 6 << 16; + r17 = r4 + r0; + r4= page[(r20+4)>>>2]; + page[(r29+48)>>>2] = r30; + page[(r29+44)>>>2] = r23; + page[(r29+40)>>>2] = r22; + page[(r29+36)>>>2] = r21; + page[(r29+24)>>>2] = r18; + page[(r29+52)>>>2] = r31; + page[(r29+16)>>>2] = r16; + r18 = r17 + r0; + r6 = r0 + r0; + r21 = r0 + 92; + r30 = r5 + 5548; + r22 = r0 + 114; + r23 = r0 + 116; + case 0x24c70: + r2 = ((r17 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; + r3 = r17 + r0; + if(r2 == r0) { + pc=0x24d04; + continue; + } + case 0x24c80: + r2= page[(r19+17104)>>>2]; + r17 = r17 + 1; + r3 = r2 + r3; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r16 = tmp; + if(r6 == r0) { + pc=0x24d54; + continue; + } + if(r16 == r21) { + pc=0x24ce0; + continue; + } + r3 = r16 < 93 ? 1 : 0; + if(r3 != r0) { + pc=0x24d74; + continue; + } + if(r16 == r22) { + pc=0x24db0; + continue; + } + if(r16 == r23) { + pc=0x24da4; + continue; + } + r3 = r0 + 110; + if(r16 == r3) { + pc=0x24d48; + continue; + } + case 0x24cc8: + r4 = r0 + -2; + r5 = r30 + r0; + r31=0x24cd8; + pc=0x1fc00; + run_1f800(); return; + case 0x24cd8: + r2= page[(r19+17104)>>>2]; + case 0x24ce0: + r2 = r2 + r18; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r16&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r4= page[(r20+4)>>>2]; + r18 = r18 + 1; + r2 = ((r17 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; + r6 = r0 + r0; + r3 = r17 + r0; + if(r2 != r0) { + pc=0x24c80; + continue; + } + case 0x24d04: + if(r6 != r0) { + pc=0x24ddc; + continue; + } + case 0x24d0c: + r31= page[(r29+52)>>>2]; + page[(r20+4)>>>2] = r18; + r30= page[(r29+48)>>>2]; + r23= page[(r29+44)>>>2]; + r22= page[(r29+40)>>>2]; + r21= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r2 = r0 + r0; + r29 = r29 + 56; + pc=r31; + return; + case 0x24d48: + r16 = r0 + 10; + pc=0x24ce0; + continue; + case 0x24d54: + if(r16 == r21) { + pc=0x24d98; + continue; + } + r2 = r2 + r18; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r16&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r4= page[(r20+4)>>>2]; + r18 = r18 + 1; + pc=0x24c70; + continue; + case 0x24d74: + r3 = r0 + 39; + if(r16 == r3) { + pc=0x24ce0; + continue; + } + r3 = r0 + 48; + if(r16 != r3) { + pc=0x24dbc; + continue; + } + r16 = r0 + r0; + pc=0x24ce0; + continue; + case 0x24d98: + r6 = r0 + 1; + pc=0x24c70; + continue; + case 0x24da4: + r16 = r0 + 9; + pc=0x24ce0; + continue; + case 0x24db0: + r16 = r0 + 13; + pc=0x24ce0; + continue; + case 0x24dbc: + r3 = r0 + 34; + if(r16 != r3) { + pc=0x24cc8; + continue; + } + pc=0x24ce0; + continue; + case 0x24dd0: + r2 = r0 + r0; + pc=r31; + return; + case 0x24ddc: + r4 = 6 << 16; + r4 = r4 + 5580; + r5 = r0 + r0; + r31=0x24df0; + pc=0x21400; + run_21000(); return; + case 0x24df0: + pc=0x24d0c; + continue; + case 0x24e00: + r29 = r29 + -64; + page[(r29+28)>>>2] = r17; + r17 = 6 << 16; + page[(r29+52)>>>2] = r23; + page[(r29+16)>>>2] = r4; + r23 = 6 << 16; + r4 = r17 + 17104; + page[(r29+56)>>>2] = r30; + page[(r29+24)>>>2] = r16; + page[(r29+60)>>>2] = r31; + page[(r29+48)>>>2] = r22; + page[(r29+44)>>>2] = r21; + page[(r29+40)>>>2] = r20; + page[(r29+36)>>>2] = r19; + page[(r29+32)>>>2] = r18; r16 = r0 + 1; - r2 = r16 + r0; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ + r31=0x24e48; + pc=0x1be00; + run_1b800(); return; + case 0x24e48: + r30 = r17 + 17104; + r23 = r23 + 5952; + case 0x24e50: + r3= page[(r28+-32692)>>>2]; + r5= page[(r3+8)>>>2]; + if(r5 == r0) { + pc=0x24ffc; + continue; + } + r2 = r0 + 1; + if(r5 != r2) { + pc=0x24fe0; + continue; + } + r2= page[(r3+16)>>>2]; + r4 = r2 + 1; + page[(r3+16)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r18 = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x24e90: + r2 = r0 + 10; + if(r18 != r2) { + pc=0x24eb4; + continue; + } + r2= page[(r28+-32692)>>>2]; + r3= page[(r2+4)>>>2]; + r3 = r3 + 1; + page[(r2+4)>>>2] = r3; + case 0x24eb4: + r2= page[(r30+4)>>>2]; + r3= page[(r30+8)>>>2]; + if(r2 == r3) { + pc=0x25478; + run_25000(); return; + } + case 0x24ec8: + r3= page[(r17+17104)>>>2]; + r4 = r2 + 1; + r2 = r3 + r2; + page[(r30+4)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2 = r0 + 39; + if(r18 == r2) { + pc=0x24f98; + continue; + } + r2 = r18 < 40 ? 1 : 0; + if(r2 != r0) { + pc=0x24f80; + continue; + } + r2 = r0 + 123; + if(r18 == r2) { + pc=0x25418; + run_25000(); return; + } + r2 = r0 + 125; + if(r18 != r2) { + pc=0x24f10; + continue; + } + r16 = r16 + -1; + case 0x24f10: + if(r16 != r0) { + pc=0x24e50; + continue; + } + case 0x24f18: + r5= page[(r29+16)>>>2]; + if(r5 == r0) { + pc=0x25544; + run_25000(); return; + } + r4 = r17 + 17104; + r5 = r0 + r0; + r31=0x24f38; + pc=0x1c400; + run_1c000(); return; + case 0x24f38: + r4 = r17 + 17104; + r5 = r0 + 13; + r31=0x24f48; + pc=0x1c400; + run_1c000(); return; + case 0x24f48: + r31= page[(r29+60)>>>2]; + r30= page[(r29+56)>>>2]; + r23= page[(r29+52)>>>2]; + r22= page[(r29+48)>>>2]; + r21= page[(r29+44)>>>2]; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r16= page[(r29+24)>>>2]; + r4 = r17 + 17104; + r17= page[(r29+28)>>>2]; + r29 = r29 + 64; + pc=0x1c200; + run_1c000(); return; + case 0x24f80: + r2 = r0 + 13; + if(r18 == r2) { + pc=0x2542c; + run_25000(); return; + } + r2 = r0 + 34; + if(r18 != r2) { + pc=0x24f10; + continue; + } + case 0x24f98: + r4 = r18 + r0; + r31=0x24fa4; + pc=0x24800; + continue; + case 0x24fa4: + r2= page[(r30+4)>>>2]; + r3= page[(r30+8)>>>2]; + if(r2 == r3) { + pc=0x25460; + run_25000(); return; + } + case 0x24fb8: + r3 = r2 + 1; + r4= page[(r17+17104)>>>2]; + page[(r30+4)>>>2] = r3; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r4 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + if(r16 != r0) { + pc=0x24e50; + continue; + } + pc=0x24f18; + continue; + case 0x24fe0: + r2 = 6 << 16; + r4 = r2 + 5440; + r31=0x24ff0; + pc=0x21400; + run_21000(); return; + case 0x24ff0: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r18 = tmp; + pc=0x24e90; + continue; + case 0x24ffc: + r5= page[(r3+12)>>>2]; + case 0x25000: + pc=0x25000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_25000() throws ExecutionException { /* 0x25000 - 0x25800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x25000: + r19 = r0 + -1; + r20 = r0 + 13; + r18 = r0 + 10; + case 0x2500c: + r2 = (r5&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x254a8; + continue; + } + case 0x25018: + r5 = r5 << 2; + r5 = r23 + r5; + r2= page[(r5+0)>>>2]; + pc=r2; + return; + case 0x25030: + if(r2 == r19) { + pc=0x250c4; + continue; + } + case 0x25038: + if(r2 == r20) { + pc=0x250c4; + continue; + } + if(r2 == r18) { + pc=0x250c4; + continue; + } + r3= page[(r28+-32692)>>>2]; + case 0x25050: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x25490; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x2508c: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x25030; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x250b4; + pc=0x22a00; + run_22800(); return; + case 0x250b4: + r2= page[(r28+-31332)>>>2]; + if(r2 != r19) { + pc=0x25038; + continue; + } + case 0x250c4: + r3= page[(r28+-32692)>>>2]; + r2 = r0 + 2; + page[(r3+12)>>>2] = r2; + r5 = r0 + 2; + pc=0x25018; + continue; + case 0x250dc: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x25674; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + case 0x25118: + r2= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r4; + r2= page[(r2+0)>>>2]; + if(r2 == r0) { + pc=0x2557c; + continue; + } + r4 = r4 << 24; + r4 = r4 >> 24; + r31=0x25140; + pc=0x22a00; + run_22800(); return; + case 0x25140: + r3= page[(r28+-32692)>>>2]; + case 0x25144: + r18= page[(r28+-31332)>>>2]; + case 0x25148: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + -1; + if(r18 == r2) { + pc=0x2552c; + continue; + } + r5 = 6 << 16; + r2 = r18 & 255; + r4 = r5 + 4764; + r2 = r2 + r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + r2 = r2 & 16; + if(r2 == r0) { + pc=0x25518; + continue; + } + r2 = r0 + 32; + if(r18 == r2) { + pc=0x256a8; + continue; + } + r2 = r18 < 33 ? 1 : 0; + if(r2 != r0) { + pc=0x254cc; + continue; + } + r2 = r0 + 58; + if(r18 == r2) { + pc=0x256d8; + continue; + } + r2 = r18 < 59 ? 1 : 0; + if(r2 != r0) { + pc=0x2558c; + continue; + } + r2 = r0 + 59; + if(r18 == r2) { + pc=0x25644; + continue; + } + r2 = r0 + 125; + if(r18 != r2) { + pc=0x254f0; + continue; + } + r2 = r0 + 8; + r18 = r0 + r0; + page[(r3+12)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x24e90; + run_24800(); return; + case 0x251e0: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x2565c; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x2521c: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x2524c; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x25244; + pc=0x22a00; + run_22800(); return; + case 0x25244: + r2= page[(r28+-31332)>>>2]; + case 0x2524c: + if(r2 != r18) { + pc=0x250c4; + continue; + } + r3= page[(r28+-32692)>>>2]; + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r5 = r0 + 1; + pc=0x25018; + continue; + case 0x2526c: + r2 = r0 + 6; + r18 = r0 + 10; + page[(r3+12)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x24e90; + run_24800(); return; + case 0x25284: + r2 = r0 + 1; + r18 = r0 + 10; + page[(r3+12)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x24e90; + run_24800(); return; + case 0x2529c: + r4= page[(r3+16)>>>2]; + r21 = r0 + 9; + r2= page[(r4+4)>>>2]; + r22 = r0 + 32; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x25340; + continue; + } + case 0x252bc: + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x252d8: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x25308; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x25300; + pc=0x22a00; + run_22800(); return; + case 0x25300: + r2= page[(r28+-31332)>>>2]; + case 0x25308: + if(r2 == r21) { + pc=0x25318; + continue; + } + if(r2 != r22) { + pc=0x250c4; + continue; + } + case 0x25318: + r3= page[(r28+-32692)>>>2]; + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 >= 0) { + pc=0x252bc; + continue; + } + case 0x25340: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x25350; + pc=0x50a00; + run_50800(); return; + case 0x25350: + pc=0x252d8; + continue; + case 0x25358: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x25690; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x25394: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x253c0; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x253bc; + pc=0x22a00; + run_22800(); return; + case 0x253bc: + r2= page[(r28+-31332)>>>2]; + case 0x253c0: + r3 = r0 + 35; + if(r2 != r3) { + pc=0x250c4; + continue; + } + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 7; + r18 = r0 + r0; + page[(r2+12)>>>2] = r3; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x24e90; + run_24800(); return; + case 0x253e8: + r2 = r0 + 1; + r18 = r0 + 13; + page[(r3+12)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x24e90; + run_24800(); return; + case 0x25400: + r2 = r0 + 1; + r18 = r0 + 125; + page[(r3+12)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x24e90; + run_24800(); return; + case 0x25418: + r16 = r16 + 1; + if(r16 != r0) { + pc=0x24e50; + run_24800(); return; + } + pc=0x24f18; + run_24800(); return; + case 0x2542c: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5208; + r31=0x25440; + pc=0x1fc00; + run_1f800(); return; + case 0x25440: + r4 = r18 + r0; + r31=0x2544c; + pc=0x24800; + run_24800(); return; + case 0x2544c: + r2= page[(r30+4)>>>2]; + r3= page[(r30+8)>>>2]; + if(r2 != r3) { + pc=0x24fb8; + run_24800(); return; + } + case 0x25460: + r4 = r30 + r0; + r31=0x2546c; + pc=0x1c000; + run_1c000(); return; + case 0x2546c: + r2= page[(r30+4)>>>2]; + pc=0x24fb8; + run_24800(); return; + case 0x25478: + r4 = r30 + r0; + r31=0x25484; + pc=0x1c000; + run_1c000(); return; + case 0x25484: + r2= page[(r30+4)>>>2]; + pc=0x24ec8; + run_24800(); return; + case 0x25490: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x254a0; + pc=0x50a00; + run_50800(); return; + case 0x254a0: + pc=0x2508c; + continue; + case 0x254a8: + r4 = 6 << 16; + r4 = r4 + 5420; + r31=0x254b8; + pc=0x21400; + run_21000(); return; + case 0x254b8: + r3= page[(r28+-32692)>>>2]; + r5= page[(r3+12)>>>2]; + pc=0x2500c; + continue; + case 0x254cc: + r2 = r0 + 10; + if(r18 == r2) { + pc=0x25628; + continue; + } + r2 = r0 + 13; + if(r18 == r2) { + pc=0x256c0; + continue; + } + r2 = r0 + 9; + if(r18 == r2) { + pc=0x256a8; + continue; + } + case 0x254f0: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5380; + r31=0x25504; + pc=0x1fc00; + run_1f800(); return; + case 0x25504: + addr=r28+-31329; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r18 = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x24e90; + run_24800(); return; + case 0x25518: + r18 = r18 << 24; + r18 = r18 >> 24; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x24e90; + run_24800(); return; + case 0x2552c: + r2 = r0 + 9; + r18 = r0 + r0; + page[(r3+12)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x24e90; + run_24800(); return; + case 0x25544: + r31= page[(r29+60)>>>2]; + r30= page[(r29+56)>>>2]; + r23= page[(r29+52)>>>2]; + r22= page[(r29+48)>>>2]; + r21= page[(r29+44)>>>2]; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r2 = r0 + r0; + r29 = r29 + 64; pc=r31; return; + case 0x2557c: + r3= page[(r28+-32692)>>>2]; + r18 = r4 + r0; + pc=0x25148; + continue; + case 0x2558c: + r2 = r0 + 47; + if(r18 != r2) { + pc=0x254f0; + continue; + } + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x256e8; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x255d4: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x25600; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x255fc; + pc=0x22a00; + run_22800(); return; + case 0x255fc: + r2= page[(r28+-31332)>>>2]; + case 0x25600: + r3 = r0 + 47; + if(r2 == r3) { + pc=0x25640; + continue; + } + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 2; + r18 = r0 + 47; + page[(r2+12)>>>2] = r3; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x24e90; + run_24800(); return; + case 0x25628: + r2 = r0 + 4; + r18 = r0 + r0; + page[(r3+12)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x24e90; + run_24800(); return; + case 0x25640: + r3= page[(r28+-32692)>>>2]; + case 0x25644: + r2 = r0 + 7; + r18 = r0 + r0; + page[(r3+12)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x24e90; + run_24800(); return; + case 0x2565c: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x2566c; + pc=0x50a00; + run_50800(); return; + case 0x2566c: + pc=0x2521c; + continue; + case 0x25674: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x25684; + pc=0x50a00; + run_50800(); return; + case 0x25684: + r4 = r2 + r0; + pc=0x25118; + continue; + case 0x25690: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x256a0; + pc=0x50a00; + run_50800(); return; + case 0x256a0: + pc=0x25394; + continue; + case 0x256a8: + r2 = r0 + 3; + r18 = r0 + 32; + page[(r3+12)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x24e90; + run_24800(); return; + case 0x256c0: + r2 = r0 + 5; + r18 = r0 + r0; + page[(r3+12)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x24e90; + run_24800(); return; + case 0x256d8: + r18 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x24e90; + run_24800(); return; + case 0x256e8: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x256f8; + pc=0x50a00; + run_50800(); return; + case 0x256f8: + pc=0x255d4; + continue; + case 0x25800: + pc=0x25800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_25800() throws ExecutionException { /* 0x25800 - 0x26000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x25800: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + r29 = r29 + -56; + r2 = r0 + 46; + page[(r29+52)>>>2] = r31; + page[(r29+48)>>>2] = r30; + page[(r29+44)>>>2] = r23; + page[(r29+40)>>>2] = r22; + page[(r29+36)>>>2] = r21; + page[(r29+32)>>>2] = r20; + page[(r29+28)>>>2] = r19; + page[(r29+24)>>>2] = r18; + page[(r29+20)>>>2] = r17; + page[(r29+16)>>>2] = r16; + if(r5 == r2) { + pc=0x25e74; + continue; + } + r2 = r0 + 64; + if(r5 == r2) { + pc=0x25e74; + continue; + } + r17 = 6 << 16; + r2 = r5 & 255; + r17 = r17 + 4764; + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 >= 0) { + pc=0x25e30; + continue; + } + case 0x25868: + r18 = 6 << 16; + r16 = r0 + r0; + r23 = r18 + 17104; + pc=0x258cc; + continue; + case 0x2587c: + r2= page[(r3+16)>>>2]; + r4 = r2 + 1; + page[(r3+16)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r19 = r5 & 255; + case 0x2589c: + r2 = r0 + 10; + if(r5 != r2) { + pc=0x258c0; + continue; + } + r2= page[(r28+-32692)>>>2]; + r3= page[(r2+4)>>>2]; + r3 = r3 + 1; + page[(r2+4)>>>2] = r3; + case 0x258c0: + r19 = r17 + r19; + addr=r19+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + case 0x258cc: + r2 = r2 & 64; + if(r2 == r0) { + pc=0x25b58; + continue; + } + r2= page[(r23+4)>>>2]; + r3= page[(r23+8)>>>2]; + if(r2 == r3) { + pc=0x25b30; + continue; + } + case 0x258ec: + r3= page[(r18+17104)>>>2]; + r4 = r2 + 1; + r2 = r3 + r2; + page[(r23+4)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r3= page[(r28+-32692)>>>2]; + r16 = r16 + 1; + r5= page[(r3+8)>>>2]; + if(r5 == r0) { + pc=0x25948; + continue; + } + r2 = r0 + 1; + if(r5 == r2) { + pc=0x2587c; + continue; + } + r4 = 6 << 16; + r4 = r4 + 5440; + r31=0x25934; + pc=0x21400; + run_21000(); return; + case 0x25934: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + r19 = r5 & 255; + pc=0x2589c; + continue; + case 0x25948: + r5= page[(r3+12)>>>2]; + r20 = r0 + -1; + r21 = r0 + 13; + r19 = r0 + 10; + case 0x25958: + r2 = (r5&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x25e50; + continue; + } + case 0x25964: + r2 = 6 << 16; + r2 = r2 + 5992; + r5 = r5 << 2; + r5 = r2 + r5; + r2= page[(r5+0)>>>2]; + pc=r2; + return; + case 0x25984: + if(r2 == r20) { + pc=0x25a18; + continue; + } + case 0x2598c: + if(r2 == r21) { + pc=0x25a18; + continue; + } + if(r2 == r19) { + pc=0x25a18; + continue; + } + r3= page[(r28+-32692)>>>2]; + case 0x259a4: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x25b98; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x259e0: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x25984; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x25a08; + pc=0x22a00; + run_22800(); return; + case 0x25a08: + r2= page[(r28+-31332)>>>2]; + if(r2 != r20) { + pc=0x2598c; + continue; + } + case 0x25a18: + r3= page[(r28+-32692)>>>2]; + r2 = r0 + 2; + page[(r3+12)>>>2] = r2; + r5 = r0 + 2; + pc=0x25964; + continue; + case 0x25a30: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x26034; + run_26000(); return; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + case 0x25a6c: + r2= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r4; + r2= page[(r2+0)>>>2]; + if(r2 == r0) { + pc=0x25f50; + continue; + } + r4 = r4 << 24; + r4 = r4 >> 24; + r31=0x25a94; + pc=0x22a00; + run_22800(); return; + case 0x25a94: + r3= page[(r28+-32692)>>>2]; + case 0x25a98: + r19= page[(r28+-31332)>>>2]; + case 0x25a9c: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + -1; + if(r19 == r2) { + pc=0x25ec0; + continue; + } + r2 = r19 & 255; + r4 = r17 + r2; + addr=r4+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r4 = r4 & 16; + if(r4 == r0) { + pc=0x25e18; + continue; + } + r2 = r0 + 32; + if(r19 == r2) { + pc=0x25f34; + continue; + } + r2 = r19 < 33 ? 1 : 0; + if(r2 != r0) { + pc=0x25edc; + continue; + } + r2 = r0 + 58; + if(r19 == r2) { + pc=0x25eac; + continue; + } + r2 = r19 < 59 ? 1 : 0; + if(r2 != r0) { + pc=0x25f60; + continue; + } + r2 = r0 + 59; + if(r19 == r2) { + pc=0x26000; + run_26000(); return; + } + r2 = r0 + 125; + if(r19 != r2) { + pc=0x25f00; + continue; + } + r2 = r0 + 8; + r5 = r0 + r0; + page[(r3+12)>>>2] = r2; + r19 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x2589c; + continue; + case 0x25b30: + r4 = 6 << 16; + r4 = r4 + 17104; + r31=0x25b40; + pc=0x1c000; + run_1c000(); return; + case 0x25b40: + r3 = 6 << 16; + r3 = r3 + 17104; + r2= page[(r3+4)>>>2]; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + pc=0x258ec; + continue; + case 0x25b58: + if(r16 == r0) { + pc=0x25dfc; + continue; + } + case 0x25b60: + r2 = (r16&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + case 0x25b64: + r31= page[(r29+52)>>>2]; + r30= page[(r29+48)>>>2]; + r23= page[(r29+44)>>>2]; + r22= page[(r29+40)>>>2]; + r21= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 56; + pc=r31; + return; + case 0x25b98: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x25ba8; + pc=0x50a00; + run_50800(); return; + case 0x25ba8: + pc=0x259e0; + continue; + case 0x25bb0: + r2 = r0 + 1; + r5 = r0 + 125; + page[(r3+12)>>>2] = r2; + r19 = r0 + 125; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x2589c; + continue; + case 0x25bcc: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x26050; + run_26000(); return; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x25c08: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x25c38; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x25c30; + pc=0x22a00; + run_22800(); return; + case 0x25c30: + r2= page[(r28+-31332)>>>2]; + case 0x25c38: + if(r2 != r19) { + pc=0x25a18; + continue; + } + r3= page[(r28+-32692)>>>2]; + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r5 = r0 + 1; + pc=0x25964; + continue; + case 0x25c58: + r2 = r0 + 6; + r5 = r0 + 10; + page[(r3+12)>>>2] = r2; + r19 = r0 + 10; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x2589c; + continue; + case 0x25c74: + r2 = r0 + 1; + r5 = r0 + 10; + page[(r3+12)>>>2] = r2; + r19 = r0 + 10; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x2589c; + continue; + case 0x25c90: + r4= page[(r3+16)>>>2]; + r22 = r0 + 9; + r2= page[(r4+4)>>>2]; + r30 = r0 + 32; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x25d34; + continue; + } + case 0x25cb0: + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x25ccc: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x25cfc; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x25cf4; + pc=0x22a00; + run_22800(); return; + case 0x25cf4: + r2= page[(r28+-31332)>>>2]; + case 0x25cfc: + if(r2 == r22) { + pc=0x25d0c; + continue; + } + if(r2 != r30) { + pc=0x25a18; + continue; + } + case 0x25d0c: + r3= page[(r28+-32692)>>>2]; + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 >= 0) { + pc=0x25cb0; + continue; + } + case 0x25d34: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x25d44; + pc=0x50a00; + run_50800(); return; + case 0x25d44: + pc=0x25ccc; + continue; + case 0x25d4c: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x2601c; + run_26000(); return; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x25d88: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x25db4; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x25db0; + pc=0x22a00; + run_22800(); return; + case 0x25db0: + r2= page[(r28+-31332)>>>2]; + case 0x25db4: + r3 = r0 + 35; + if(r2 != r3) { + pc=0x25a18; + continue; + } + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 7; + r5 = r0 + r0; + page[(r2+12)>>>2] = r3; + r19 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x2589c; + continue; + case 0x25de0: + r2 = r0 + 1; + r5 = r0 + 13; + page[(r3+12)>>>2] = r2; + r19 = r0 + 13; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x2589c; + continue; + case 0x25dfc: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5300; + r31=0x25e10; + pc=0x1fc00; + run_1f800(); return; + case 0x25e10: + pc=0x25b60; + continue; + case 0x25e18: + r5 = r19 << 24; + r5 = r5 >> 24; + r19 = r2 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x2589c; + continue; + case 0x25e30: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5300; + r31=0x25e44; + pc=0x1fc00; + run_1f800(); return; + case 0x25e44: + r2 = r0 + 1; + pc=0x25b64; + continue; + case 0x25e50: + r4 = 6 << 16; + r4 = r4 + 5420; + r31=0x25e60; + pc=0x21400; + run_21000(); return; + case 0x25e60: + r3= page[(r28+-32692)>>>2]; + r5= page[(r3+12)>>>2]; + pc=0x25958; + continue; + case 0x25e74: + r4 = 6 << 16; + r4 = r4 + 17104; + r31=0x25e84; + pc=0x1c400; + run_1c000(); return; + case 0x25e84: + r31=0x25e8c; + pc=0x23000; + run_23000(); return; + case 0x25e8c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + r17 = 6 << 16; + r2 = r5 & 255; + r17 = r17 + 4764; + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x25868; + continue; + case 0x25eac: + r5 = r0 + r0; + r19 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x2589c; + continue; + case 0x25ec0: + r2 = r0 + 9; + r5 = r0 + r0; + page[(r3+12)>>>2] = r2; + r19 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x2589c; + continue; + case 0x25edc: + r2 = r0 + 10; + if(r19 == r2) { + pc=0x26084; + run_26000(); return; + } + r2 = r0 + 13; + if(r19 == r2) { + pc=0x26068; + run_26000(); return; + } + r2 = r0 + 9; + if(r19 == r2) { + pc=0x25f34; + continue; + } + case 0x25f00: + r3 = 6 << 16; + r5 = r3 + 5380; + r4 = r0 + -2; + r31=0x25f14; + pc=0x1fc00; + run_1f800(); return; + case 0x25f14: + r19= page[(r28+-31332)>>>2]; + r5 = r19 << 24; + r5 = r5 >> 24; + r19 = r19 & 255; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x2589c; + continue; + case 0x25f34: + r2 = r0 + 3; + r5 = r0 + 32; + page[(r3+12)>>>2] = r2; + r19 = r0 + 32; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x2589c; + continue; + case 0x25f50: + r3= page[(r28+-32692)>>>2]; + r19 = r4 + r0; + pc=0x25a9c; + continue; + case 0x25f60: + r2 = r0 + 47; + if(r19 != r2) { + pc=0x25f00; + continue; + } + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x260a0; + run_26000(); return; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x25fa8: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x25fd4; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x25fd0; + pc=0x22a00; + run_22800(); return; + case 0x25fd0: + r2= page[(r28+-31332)>>>2]; + case 0x25fd4: + r3 = r0 + 47; + if(r2 == r3) { + pc=0x25ffc; + continue; + } + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 2; + r5 = r0 + 47; + page[(r2+12)>>>2] = r3; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x2589c; + continue; + case 0x25ffc: + r3= page[(r28+-32692)>>>2]; + case 0x26000: + pc=0x26000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_26000() throws ExecutionException { /* 0x26000 - 0x26800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x26000: + r2 = r0 + 7; + r5 = r0 + r0; + page[(r3+12)>>>2] = r2; + r19 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x2589c; + run_25800(); return; + case 0x2601c: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x2602c; + pc=0x50a00; + run_50800(); return; + case 0x2602c: + pc=0x25d88; + run_25800(); return; + case 0x26034: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x26044; + pc=0x50a00; + run_50800(); return; + case 0x26044: + r4 = r2 + r0; + pc=0x25a6c; + run_25800(); return; + case 0x26050: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x26060; + pc=0x50a00; + run_50800(); return; + case 0x26060: + pc=0x25c08; + run_25800(); return; + case 0x26068: + r2 = r0 + 5; + r5 = r0 + r0; + page[(r3+12)>>>2] = r2; + r19 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x2589c; + run_25800(); return; + case 0x26084: + r2 = r0 + 4; + r5 = r0 + r0; + page[(r3+12)>>>2] = r2; + r19 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x2589c; + run_25800(); return; + case 0x260a0: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x260b0; + pc=0x50a00; + run_50800(); return; + case 0x260b0: + pc=0x25fa8; + run_25800(); return; + case 0x26200: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r29 = r29 + -40; + r2 = r0 + 32; + page[(r29+28)>>>2] = r19; + page[(r29+16)>>>2] = r16; + page[(r29+36)>>>2] = r31; + page[(r29+32)>>>2] = r20; + page[(r29+24)>>>2] = r18; + page[(r29+20)>>>2] = r17; + r19 = r4 + r0; + r16 = r5 + r0; + if(r3 == r2) { + pc=0x264e0; + continue; + } + case 0x26234: + r17 = 6 << 16; + r4 = r17 + 17104; + r31=0x26244; + pc=0x1be00; + run_1b800(); return; + case 0x26244: + if(r16 == r0) { + pc=0x2630c; + continue; + } + r5 = r0 + 46; + r4 = r17 + 17104; + r31=0x2625c; + pc=0x1c400; + run_1c000(); return; + case 0x2625c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + r18 = 6 << 16; + r2 = r5 & 255; + r18 = r18 + 4764; + r2 = r18 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + r2 = r2 & 64; + if(r2 == r0) { + pc=0x263e0; + continue; + } + r16 = r17 + 17104; + r20 = r16 + r0; + pc=0x262dc; + continue; + case 0x26294: + r2 = r3 + r0; + case 0x26298: + r3= page[(r17+17104)>>>2]; + r4 = r2 + 1; + r2 = r3 + r2; + page[(r16+4)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r31=0x262b4; + pc=0x23000; + run_23000(); return; + case 0x262b4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r2 & 255; + r3 = r18 + r3; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r3 = tmp; + r3 = r3 & 64; + if(r3 == r0) { + pc=0x26464; + continue; + } + r5 = r2 + r0; + case 0x262dc: + r3= page[(r16+4)>>>2]; + r2= page[(r16+8)>>>2]; + if(r3 != r2) { + pc=0x26294; + continue; + } + r4 = r20 + r0; + r31=0x262fc; + pc=0x1c000; + run_1c000(); return; + case 0x262fc: + r2= page[(r20+4)>>>2]; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + pc=0x26298; + continue; + case 0x2630c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + r2 = r0 + 46; + if(r5 == r2) { + pc=0x264ac; + continue; + } + r2 = r0 + 64; + if(r5 == r2) { + pc=0x264ac; + continue; + } + r18 = 6 << 16; + r2 = r5 & 255; + r18 = r18 + 4764; + r2 = r18 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 >= 0) { + pc=0x263e0; + continue; + } + case 0x26348: + r2 = r2 & 64; + if(r2 == r0) { + pc=0x263e0; + continue; + } + r16 = 6 << 16; + r16 = r16 + 17104; + r20 = r16 + r0; + pc=0x263b0; + continue; + case 0x26368: + r2 = r3 + r0; + case 0x2636c: + r3= page[(r17+17104)>>>2]; + r4 = r2 + 1; + r2 = r3 + r2; + page[(r16+4)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r31=0x26388; + pc=0x23000; + run_23000(); return; + case 0x26388: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r2 & 255; + r3 = r18 + r3; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r3 = tmp; + r3 = r3 & 64; + if(r3 == r0) { + pc=0x26464; + continue; + } + r5 = r2 + r0; + case 0x263b0: + r3= page[(r16+4)>>>2]; + r2= page[(r16+8)>>>2]; + if(r3 != r2) { + pc=0x26368; + continue; + } + r4 = r20 + r0; + r31=0x263d0; + pc=0x1c000; + run_1c000(); return; + case 0x263d0: + r2= page[(r20+4)>>>2]; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + pc=0x2636c; + continue; + case 0x263e0: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5300; + r31=0x263f4; + pc=0x1fc00; + run_1f800(); return; + case 0x263f4: + r16 = r0 + 1; + r4 = r17 + 17104; + r5 = r0 + r0; + r31=0x26408; + pc=0x1c400; + run_1c000(); return; + case 0x26408: + if(r16 != r0) { + pc=0x26480; + continue; + } + case 0x26410: + r2 = 6 << 16; + r2= page[(r2+17104)>>>2]; + r3 = r0 + 46; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 == r3) { + pc=0x264f0; + continue; + } + r3 = r0 + 64; + if(r2 == r3) { + pc=0x26524; + continue; + } + page[(r19+0)>>>2] = r0; + r2 = r0 + r0; + case 0x26440: + r31= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 40; + pc=r31; + return; + case 0x26464: + r16 = r0 + r0; + r4 = r17 + 17104; + r5 = r0 + r0; + r31=0x26478; + pc=0x1c400; + run_1c000(); return; + case 0x26478: + if(r16 == r0) { + pc=0x26410; + continue; + } + case 0x26480: + r31= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + page[(r19+0)>>>2] = r0; + r2 = r0 + 1; + r19= page[(r29+28)>>>2]; + r29 = r29 + 40; + pc=r31; + return; + case 0x264ac: + r4 = r17 + 17104; + r31=0x264b8; + pc=0x1c400; + run_1c000(); return; + case 0x264b8: + r31=0x264c0; + pc=0x23000; + run_23000(); return; + case 0x264c0: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + r18 = 6 << 16; + r2 = r5 & 255; + r18 = r18 + 4764; + r2 = r18 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x26348; + continue; + case 0x264e0: + r31=0x264e8; + pc=0x23000; + run_23000(); return; + case 0x264e8: + pc=0x26234; + continue; + case 0x264f0: + r2= page[(r28+-32672)>>>2]; + r31= page[(r29+36)>>>2]; + r2= page[(r2+0)>>>2]; + r20= page[(r29+32)>>>2]; + page[(r19+0)>>>2] = r2; + r18= page[(r29+24)>>>2]; + r19= page[(r29+28)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r2 = r0 + r0; + r29 = r29 + 40; + pc=r31; + return; + case 0x26524: + r2= page[(r28+-32672)>>>2]; + r2= page[(r2+4)>>>2]; + page[(r19+0)>>>2] = r2; + r2 = r0 + r0; + pc=0x26440; + continue; + case 0x26600: + r29 = r29 + -56; + page[(r29+20)>>>2] = r17; + r17 = 6 << 16; + r4 = r17 + 17104; + page[(r29+44)>>>2] = r23; + page[(r29+24)>>>2] = r18; + page[(r29+16)>>>2] = r16; + page[(r29+52)>>>2] = r31; + page[(r29+48)>>>2] = r30; + page[(r29+40)>>>2] = r22; + page[(r29+36)>>>2] = r21; + page[(r29+32)>>>2] = r20; + page[(r29+28)>>>2] = r19; + r18 = 6 << 16; + r31=0x26640; + pc=0x1be00; + run_1b800(); return; + case 0x26640: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r16 = r0 + r0; + r18 = r18 + 4764; + r23 = r17 + 17104; + case 0x26650: + r3 = r2 & 255; + r3 = r18 + r3; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r3 = tmp; + r3 = r3 & 64; + if(r3 == r0) { + pc=0x26714; + continue; + } + case 0x2666c: + r3= page[(r23+4)>>>2]; + r4= page[(r23+8)>>>2]; + if(r3 == r4) { + pc=0x26bb0; + run_26800(); return; + } + case 0x26680: + r4= page[(r17+17104)>>>2]; + r5 = r3 + 1; + r3 = r4 + r3; + page[(r23+4)>>>2] = r5; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r3= page[(r28+-32692)>>>2]; + r16 = r16 + 1; + r5= page[(r3+8)>>>2]; + if(r5 == r0) { + pc=0x26794; + continue; + } + r2 = r0 + 1; + if(r5 != r2) { + pc=0x26778; + continue; + } + r2= page[(r3+16)>>>2]; + r4 = r2 + 1; + page[(r3+16)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x266d4: + r3 = r0 + 10; + if(r2 != r3) { + pc=0x26650; + continue; + } + r3= page[(r28+-32692)>>>2]; + r4= page[(r3+4)>>>2]; + r4 = r4 + 1; + page[(r3+4)>>>2] = r4; + r3 = r2 & 255; + r3 = r18 + r3; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r3 = tmp; + r3 = r3 & 64; + if(r3 != r0) { + pc=0x2666c; + continue; + } + case 0x26714: + if(r16 != r0) { + pc=0x26730; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5300; + r31=0x26730; + pc=0x1fc00; + run_1f800(); return; + case 0x26730: + r4 = r17 + 17104; + r5 = r0 + r0; + r31=0x26740; + pc=0x1c400; + run_1c000(); return; + case 0x26740: + r31= page[(r29+52)>>>2]; + r2 = r16 + r0; + r30= page[(r29+48)>>>2]; + r23= page[(r29+44)>>>2]; + r22= page[(r29+40)>>>2]; + r21= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 56; + pc=r31; + return; + case 0x26778: + r4 = 6 << 16; + r4 = r4 + 5440; + r31=0x26788; + pc=0x21400; + run_21000(); return; + case 0x26788: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x266d4; + continue; + case 0x26794: + r5= page[(r3+12)>>>2]; + r20 = r0 + -1; + r21 = r0 + 13; + r19 = r0 + 10; + case 0x267a4: + r2 = (r5&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x26be4; + run_26800(); return; + } + case 0x267b0: + r2 = 6 << 16; + r2 = r2 + 6032; + r5 = r5 << 2; + r5 = r2 + r5; + r2= page[(r5+0)>>>2]; + pc=r2; + return; + case 0x267d0: + if(r2 == r20) { + pc=0x26864; + run_26800(); return; + } + case 0x267d8: + if(r2 == r21) { + pc=0x26864; + run_26800(); return; + } + if(r2 == r19) { + pc=0x26864; + run_26800(); return; + } + r3= page[(r28+-32692)>>>2]; + case 0x267f0: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; case 0x26800: pc=0x26800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_26800() throws ExecutionException { /* 0x26800 - 0x26a00 */ + private final void run_26800() throws ExecutionException { /* 0x26800 - 0x27000 */ int addr, tmp; for(;;) { switch(pc) { case 0x26800: - r4 = readPages[(r28+-30680)>>>12][((r28+-30680)>>>2)&0x3ff]; - r29 = r29 + -32; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x2685c; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x26bcc; continue; } - case 0x26814: - r6 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x26824; - pc=0x31000; - run_31000(); return; - case 0x26824: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x26848; - continue; + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x2682c: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x267d0; + run_26000(); return; } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - writePages[(r28+-30684)>>>12][((r28+-30684)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x26848: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2685c: - r5 = 7 << 16; - r4 = r28 + -30680; - r5 = r5 + 8880; - /* Next insn is delay slot */ - r31=0x26870; - pc=0x30e00; - run_30e00(); return; - case 0x26870: - r4 = readPages[(r28+-30680)>>>12][((r28+-30680)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x26814; - continue; - case 0x26a00: - pc=0x26a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_26a00() throws ExecutionException { /* 0x26a00 - 0x26c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x26a00: - r2 = readPages[(r28+-30684)>>>12][((r28+-30684)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x26a24; - continue; + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x26854; + pc=0x22a00; + run_22800(); return; + case 0x26854: + r2= page[(r28+-31332)>>>2]; + if(r2 != r20) { + pc=0x267d8; + run_26000(); return; } + case 0x26864: + r3= page[(r28+-32692)>>>2]; r2 = r0 + 2; - writePages[(r28+-30684)>>>12][((r28+-30684)>>>2)&0x3ff] = r2; - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x26a24: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x26c00: - pc=0x26c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_26c00() throws ExecutionException { /* 0x26c00 - 0x26e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x26c00: - r2 = readPages[(r28+-30848)>>>12][((r28+-30848)>>>2)&0x3ff]; - r29 = r29 + -24; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x26c38; + page[(r3+12)>>>2] = r2; + r5 = r0 + 2; + pc=0x267b0; + run_26000(); return; + case 0x2687c: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x26d4c; continue; } - r4 = 7 << 16; - r4 = r4 + -1884; - /* Next insn is delay slot */ - r31=0x26c24; - pc=0x1ac00; - run_1ac00(); return; - case 0x26c24: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x26c38: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x26c44; - pc=0x17a00; - run_17a00(); return; - case 0x26c44: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r28+-30848)>>>12][((r28+-30848)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x26e00: - pc=0x26e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_26e00() throws ExecutionException { /* 0x26e00 - 0x27000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x26e00: - r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - r17 = r4 + r0; - r4 = 1 << 16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r16 = 7 << 16; - /* Next insn is delay slot */ - r31=0x26e24; - pc=0x1b400; - run_1b400(); return; - case 0x26e24: - r3 = r0 + 256; - writePages[(r16+16880)>>>12][((r16+16880)>>>2)&0x3ff] = r2; - if(r17 == r3) { - /* Next insn is delay slot */ - pc=0x26e80; + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x268b8: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x26d7c; continue; } - r5 = r17 << 24; - r5 = r5 >> 24; - r3 = r0 + 1; - case 0x26e40: - r16 = r16 + 16880; - r4 = r2 + r0; - r6 = 1 << 16; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x26e58; - pc=0x48fec; - run_48e00(); return; - case 0x26e58: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = 7 << 16; - r2 = r2 + 16912; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - writePages[(r16+32)>>>12][((r16+32)>>>2)&0x3ff] = r2; - writePages[(r16+36)>>>12][((r16+36)>>>2)&0x3ff] = r2; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x26e80: - r5 = r0 + r0; - r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x26e40; + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x268e0; + pc=0x22a00; + run_22800(); return; + case 0x268e0: + r3= page[(r28+-32692)>>>2]; + case 0x268e4: + r2= page[(r28+-31332)>>>2]; + case 0x268e8: + r4 = r0 + 1; + page[(r3+12)>>>2] = r4; + r4 = r0 + -1; + if(r2 == r4) { + pc=0x26c68; + continue; + } + r4 = r2 & 255; + r4 = r18 + r4; + addr=r4+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r4 = r4 & 16; + if(r4 == r0) { + pc=0x26c54; + continue; + } + r4 = r0 + 32; + if(r2 == r4) { + pc=0x26dcc; + continue; + } + r4 = r2 < 33 ? 1 : 0; + if(r4 != r0) { + pc=0x26c08; + continue; + } + r4 = r0 + 58; + if(r2 == r4) { + pc=0x26dbc; + continue; + } + r4 = r2 < 59 ? 1 : 0; + if(r4 != r0) { + pc=0x26c80; + continue; + } + r4 = r0 + 59; + if(r2 == r4) { + pc=0x26d8c; + continue; + } + r4 = r0 + 125; + if(r2 != r4) { + pc=0x26c2c; + continue; + } + r2 = r0 + 8; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x266d4; + run_26000(); return; + case 0x26978: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x26d1c; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x269b4: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x269e4; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x269dc; + pc=0x22a00; + run_22800(); return; + case 0x269dc: + r2= page[(r28+-31332)>>>2]; + case 0x269e4: + if(r2 != r19) { + pc=0x26864; + continue; + } + r3= page[(r28+-32692)>>>2]; + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r5 = r0 + 1; + pc=0x267b0; + run_26000(); return; + case 0x26a04: + r2 = r0 + 6; + page[(r3+12)>>>2] = r2; + r2 = r0 + 10; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x266d4; + run_26000(); return; + case 0x26a1c: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + 10; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x266d4; + run_26000(); return; + case 0x26a34: + r4= page[(r3+16)>>>2]; + r22 = r0 + 9; + r2= page[(r4+4)>>>2]; + r30 = r0 + 32; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x26ad8; + continue; + } + case 0x26a54: + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x26a70: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x26aa0; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x26a98; + pc=0x22a00; + run_22800(); return; + case 0x26a98: + r2= page[(r28+-31332)>>>2]; + case 0x26aa0: + if(r2 == r22) { + pc=0x26ab0; + continue; + } + if(r2 != r30) { + pc=0x26864; + continue; + } + case 0x26ab0: + r3= page[(r28+-32692)>>>2]; + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 >= 0) { + pc=0x26a54; + continue; + } + case 0x26ad8: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x26ae8; + pc=0x50a00; + run_50800(); return; + case 0x26ae8: + pc=0x26a70; continue; + case 0x26af0: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + 125; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x266d4; + run_26000(); return; + case 0x26b08: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x26d34; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x26b44: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x26b70; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x26b6c; + pc=0x22a00; + run_22800(); return; + case 0x26b6c: + r2= page[(r28+-31332)>>>2]; + case 0x26b70: + r3 = r0 + 35; + if(r2 != r3) { + pc=0x26864; + continue; + } + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 7; + page[(r2+12)>>>2] = r3; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x266d4; + run_26000(); return; + case 0x26b98: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + 13; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x266d4; + run_26000(); return; + case 0x26bb0: + r4 = r23 + r0; + r31=0x26bbc; + pc=0x1c000; + run_1c000(); return; + case 0x26bbc: + r3= page[(r23+4)>>>2]; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x26680; + run_26000(); return; + case 0x26bcc: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x26bdc; + pc=0x50a00; + run_50800(); return; + case 0x26bdc: + pc=0x2682c; + continue; + case 0x26be4: + r4 = 6 << 16; + r4 = r4 + 5420; + r31=0x26bf4; + pc=0x21400; + run_21000(); return; + case 0x26bf4: + r3= page[(r28+-32692)>>>2]; + r5= page[(r3+12)>>>2]; + pc=0x267a4; + run_26000(); return; + case 0x26c08: + r4 = r0 + 10; + if(r2 == r4) { + pc=0x26d64; + continue; + } + r4 = r0 + 13; + if(r2 == r4) { + pc=0x26da4; + continue; + } + r4 = r0 + 9; + if(r2 == r4) { + pc=0x26dcc; + continue; + } + case 0x26c2c: + r2 = 6 << 16; + r5 = r2 + 5380; + r4 = r0 + -2; + r31=0x26c40; + pc=0x1fc00; + run_1f800(); return; + case 0x26c40: + addr=r28+-31329; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x266d4; + run_26000(); return; + case 0x26c54: + r2 = r2 << 24; + r2 = r2 >> 24; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x266d4; + run_26000(); return; + case 0x26c68: + r2 = r0 + 9; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x266d4; + run_26000(); return; + case 0x26c80: + r4 = r0 + 47; + if(r2 != r4) { + pc=0x26c2c; + continue; + } + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x26de4; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x26cc8: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x26cf4; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x26cf0; + pc=0x22a00; + run_22800(); return; + case 0x26cf0: + r2= page[(r28+-31332)>>>2]; + case 0x26cf4: + r3 = r0 + 47; + if(r2 == r3) { + pc=0x26d88; + continue; + } + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 2; + page[(r2+12)>>>2] = r3; + r2 = r0 + 47; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x266d4; + run_26000(); return; + case 0x26d1c: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x26d2c; + pc=0x50a00; + run_50800(); return; + case 0x26d2c: + pc=0x269b4; + continue; + case 0x26d34: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x26d44; + pc=0x50a00; + run_50800(); return; + case 0x26d44: + pc=0x26b44; + continue; + case 0x26d4c: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x26d5c; + pc=0x50a00; + run_50800(); return; + case 0x26d5c: + pc=0x268b8; + continue; + case 0x26d64: + r2 = r0 + 4; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x266d4; + run_26000(); return; + case 0x26d7c: + r3= page[(r28+-32692)>>>2]; + pc=0x268e8; + continue; + case 0x26d88: + r3= page[(r28+-32692)>>>2]; + case 0x26d8c: + r2 = r0 + 7; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x266d4; + run_26000(); return; + case 0x26da4: + r2 = r0 + 5; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x266d4; + run_26000(); return; + case 0x26dbc: + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x266d4; + run_26000(); return; + case 0x26dcc: + r2 = r0 + 3; + page[(r3+12)>>>2] = r2; + r2 = r0 + 32; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x266d4; + run_26000(); return; + case 0x26de4: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x26df4; + pc=0x50a00; + run_50800(); return; + case 0x26df4: + pc=0x26cc8; + continue; + case 0x26e00: + r29 = r29 + -56; + page[(r29+20)>>>2] = r17; + r17 = 6 << 16; + r4 = r17 + 17104; + page[(r29+44)>>>2] = r23; + page[(r29+24)>>>2] = r18; + page[(r29+16)>>>2] = r16; + page[(r29+52)>>>2] = r31; + page[(r29+48)>>>2] = r30; + page[(r29+40)>>>2] = r22; + page[(r29+36)>>>2] = r21; + page[(r29+32)>>>2] = r20; + page[(r29+28)>>>2] = r19; + r18 = 6 << 16; + r31=0x26e40; + pc=0x1be00; + run_1b800(); return; + case 0x26e40: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r16 = r0 + r0; + r18 = r18 + 4764; + r23 = r17 + 17104; + case 0x26e50: + r3 = r2 & 255; + r3 = r18 + r3; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r3 = tmp; + r3 = r3 & 64; + if(r3 == r0) { + pc=0x26f14; + continue; + } + case 0x26e6c: + r3= page[(r23+4)>>>2]; + r4= page[(r23+8)>>>2]; + if(r3 == r4) { + pc=0x273c0; + run_27000(); return; + } + case 0x26e80: + r4= page[(r17+17104)>>>2]; + r5 = r3 + 1; + r3 = r4 + r3; + page[(r23+4)>>>2] = r5; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r3= page[(r28+-32692)>>>2]; + r16 = r16 + 1; + r5= page[(r3+8)>>>2]; + if(r5 == r0) { + pc=0x26fa4; + continue; + } + r2 = r0 + 1; + if(r5 != r2) { + pc=0x26f88; + continue; + } + r2= page[(r3+16)>>>2]; + r4 = r2 + 1; + page[(r3+16)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x26ed4: + r3 = r0 + 10; + if(r2 != r3) { + pc=0x26e50; + continue; + } + r3= page[(r28+-32692)>>>2]; + r4= page[(r3+4)>>>2]; + r4 = r4 + 1; + page[(r3+4)>>>2] = r4; + r3 = r2 & 255; + r3 = r18 + r3; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r3 = tmp; + r3 = r3 & 64; + if(r3 != r0) { + pc=0x26e6c; + continue; + } + case 0x26f14: + if(r16 != r0) { + pc=0x26f30; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5300; + r31=0x26f30; + pc=0x1fc00; + run_1f800(); return; + case 0x26f30: + r4 = r17 + 17104; + r5 = r0 + r0; + r31=0x26f40; + pc=0x1c400; + run_1c000(); return; + case 0x26f40: + r4 = r17 + 17104; + r5 = r4 + r0; + r31=0x26f50; + pc=0x1cc00; + run_1c800(); return; + case 0x26f50: + r31= page[(r29+52)>>>2]; + r2 = r16 + r0; + r30= page[(r29+48)>>>2]; + r23= page[(r29+44)>>>2]; + r22= page[(r29+40)>>>2]; + r21= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 56; + pc=r31; + return; + case 0x26f88: + r4 = 6 << 16; + r4 = r4 + 5440; + r31=0x26f98; + pc=0x21400; + run_21000(); return; + case 0x26f98: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x26ed4; + continue; + case 0x26fa4: + r5= page[(r3+12)>>>2]; + r20 = r0 + -1; + r21 = r0 + 13; + r19 = r0 + 10; + case 0x26fb4: + r2 = (r5&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x273f4; + run_27000(); return; + } + case 0x26fc0: + r2 = 6 << 16; + r2 = r2 + 6072; + r5 = r5 << 2; + r5 = r2 + r5; + r2= page[(r5+0)>>>2]; + pc=r2; + return; + case 0x26fe0: + if(r2 == r20) { + pc=0x27074; + run_27000(); return; + } + case 0x26fe8: + if(r2 == r21) { + pc=0x27074; + run_27000(); return; + } + if(r2 == r19) { + pc=0x27074; + run_27000(); return; + } + r3= page[(r28+-32692)>>>2]; case 0x27000: pc=0x27000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_27000() throws ExecutionException { /* 0x27000 - 0x27200 */ + private final void run_27000() throws ExecutionException { /* 0x27000 - 0x27800 */ int addr, tmp; for(;;) { switch(pc) { case 0x27000: - r29 = r29 + -56; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r19; - r19 = 7 << 16; - r2 = r19 + 16880; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r18; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r17; - r18 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r17 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r16; - r2 = r18 < r17 ? 1 : 0; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r21; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r20; - r16 = r4 + r0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2711c; - continue; - } - r18 = r18 - r17; - r2 = readPages[(r28+-30736)>>>12][((r28+-30736)>>>2)&0x3ff]; - r18 = r18 + 1; - r21 = r17 + r0; - r20 = r18 + r0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x27138; - continue; - } - case 0x2705c: - r2 = readPages[(r28+-30684)>>>12][((r28+-30684)>>>2)&0x3ff]; - r3 = r0 + 1; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x2716c; - continue; - } - case 0x2706c: - r3 = r0 + 2; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x270e0; - continue; - } - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; r2 = r2 + -1; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; + page[(r4+4)>>>2] = r2; if(r2 < 0) { - /* Next insn is delay slot */ pc=0x273dc; - run_27200(); return; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - case 0x270a4: - r2 = r2 + 1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - case 0x270ac: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x27394; - run_27200(); return; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r17 = r17 >> 8; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - case 0x270d8: - r2 = r2 + 1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - case 0x270e0: - r4 = readPages[(r19+16880)>>>12][((r19+16880)>>>2)&0x3ff]; - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r4 = r4 + r21; - r5 = r20 + r0; - r21 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r20 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r7 = r16 + r0; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r6 = r0 + 1; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=0x3dc00; - run_3dc00(); return; - case 0x2711c: - r2 = readPages[(r28+-30736)>>>12][((r28+-30736)>>>2)&0x3ff]; - r20 = r0 + r0; - r21 = r0 + r0; - r18 = r0 + r0; - r17 = r0 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2705c; continue; } - case 0x27138: - r2 = r17 + r18; - r4 = 7 << 16; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r4 = r4 + -1856; - r5 = r18 + r0; - r6 = r18 + r0; - r7 = r17 + r0; - /* Next insn is delay slot */ - r31=0x2715c; - pc=0x3fc00; - run_3fc00(); return; - case 0x2715c: - r2 = readPages[(r28+-30684)>>>12][((r28+-30684)>>>2)&0x3ff]; - r3 = r0 + 1; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x2706c; + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x2703c: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x26fe0; + run_26800(); return; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x27064; + pc=0x22a00; + run_22800(); return; + case 0x27064: + r2= page[(r28+-31332)>>>2]; + if(r2 != r20) { + pc=0x26fe8; + run_26800(); return; + } + case 0x27074: + r3= page[(r28+-32692)>>>2]; + r2 = r0 + 2; + page[(r3+12)>>>2] = r2; + r5 = r0 + 2; + pc=0x26fc0; + run_26800(); return; + case 0x2708c: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x2755c; continue; } - case 0x2716c: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x27340; - run_27200(); return; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - case 0x27198: - r2 = r2 + 1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - case 0x271a0: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x272ec; - run_27200(); return; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r17 = r17 >> 8; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - case 0x271cc: - r2 = r2 + 1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - case 0x271d4: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x27298; - run_27200(); return; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - case 0x27200: - pc=0x27200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_27200() throws ExecutionException { /* 0x27200 - 0x27400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x27200: - r2 = r2 + 1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - case 0x27208: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x27244; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x270c8: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x2758c; continue; } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r18 = r18 >> 8; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x270e0; - run_27000(); return; - case 0x27244: - r3 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - r2 = r2 < r3 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x274a0; - run_27400(); return; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r18 = r18 >> 8; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r0 + 10; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x270d8; - run_27000(); return; - } - case 0x2727c: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r0 + 10; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x27290; - pc=0x48200; - run_48200(); return; - case 0x27290: - /* Next insn is delay slot */ - pc=0x270e0; - run_27000(); return; - case 0x27298: - r3 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - r2 = r2 < r3 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2744c; - run_27400(); return; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r0 + 10; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x27200; - continue; - } - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r0 + 10; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x272e4; - pc=0x48200; - run_48200(); return; - case 0x272e4: - /* Next insn is delay slot */ - pc=0x27208; - continue; - case 0x272ec: - r3 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - r2 = r2 < r3 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x27430; - run_27400(); return; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r17 = r17 >> 8; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r0 + 10; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x271cc; - run_27000(); return; - } - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r0 + 10; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x27338; - pc=0x48200; - run_48200(); return; - case 0x27338: - /* Next insn is delay slot */ - pc=0x271d4; - run_27000(); return; - case 0x27340: - r3 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - r2 = r2 < r3 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x27468; - run_27400(); return; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r0 + 10; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x27198; - run_27000(); return; - } - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r0 + 10; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x2738c; - pc=0x48200; - run_48200(); return; - case 0x2738c: - /* Next insn is delay slot */ - pc=0x271a0; - run_27000(); return; - case 0x27394: - r3 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - r2 = r2 < r3 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x274bc; - run_27400(); return; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r17 = r17 >> 8; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r0 + 10; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - if(r4 == r3) { - /* Next insn is delay slot */ - pc=0x2727c; - continue; - } - r2 = r2 + 1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x270e0; - run_27000(); return; - case 0x273dc: - r3 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - r2 = r2 < r3 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x27484; - run_27400(); return; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r0 + 10; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - case 0x27400: - pc=0x27400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_27400() throws ExecutionException { /* 0x27400 - 0x27600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x27400: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x270a4; - run_27000(); return; - } - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r0 + 10; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x27428; - pc=0x48200; - run_48200(); return; - case 0x27428: - /* Next insn is delay slot */ - pc=0x270ac; - run_27000(); return; - case 0x27430: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r17 >> 8; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x27444; - pc=0x48200; - run_48200(); return; - case 0x27444: - /* Next insn is delay slot */ - pc=0x271d4; - run_27000(); return; - case 0x2744c: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r18 & 255; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x27460; - pc=0x48200; - run_48200(); return; - case 0x27460: - /* Next insn is delay slot */ - pc=0x27208; - run_27200(); return; - case 0x27468: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r17 & 255; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x2747c; - pc=0x48200; - run_48200(); return; - case 0x2747c: - /* Next insn is delay slot */ - pc=0x271a0; - run_27000(); return; - case 0x27484: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r17 & 255; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x27498; - pc=0x48200; - run_48200(); return; - case 0x27498: - /* Next insn is delay slot */ - pc=0x270ac; - run_27000(); return; - case 0x274a0: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r18 >> 8; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x274b4; - pc=0x48200; - run_48200(); return; - case 0x274b4: - /* Next insn is delay slot */ - pc=0x270e0; - run_27000(); return; - case 0x274bc: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r17 >> 8; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x274d0; - pc=0x48200; - run_48200(); return; - case 0x274d0: - /* Next insn is delay slot */ - pc=0x270e0; - run_27000(); return; - case 0x27600: - pc=0x27600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_27600() throws ExecutionException { /* 0x27600 - 0x27800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x27600: - r4 = 2 << 16; - r4 = r4 + 23040; - r2 = 7 << 16; - r2 = r2 + 16880; - r3 = r0 | 65535; - writePages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff] = r4; + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x270f0; + pc=0x22a00; + run_22800(); return; + case 0x270f0: + r3= page[(r28+-32692)>>>2]; + case 0x270f4: + r2= page[(r28+-31332)>>>2]; + case 0x270f8: + r4 = r0 + 1; + page[(r3+12)>>>2] = r4; r4 = r0 + -1; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r3; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r0; - writePages[(r2+20)>>>12][((r2+20)>>>2)&0x3ff] = r4; - writePages[(r2+24)>>>12][((r2+24)>>>2)&0x3ff] = r3; - writePages[(r2+28)>>>12][((r2+28)>>>2)&0x3ff] = r0; - r2 = 7 << 16; - r2 = r2 + 30664; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - writePages[(r2+32)>>>12][((r2+32)>>>2)&0x3ff] = r0; - writePages[(r2+36)>>>12][((r2+36)>>>2)&0x3ff] = r0; - writePages[(r2+40)>>>12][((r2+40)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=r31; - return; + if(r2 == r4) { + pc=0x27478; + continue; + } + r4 = r2 & 255; + r4 = r18 + r4; + addr=r4+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r4 = r4 & 16; + if(r4 == r0) { + pc=0x27464; + continue; + } + r4 = r0 + 32; + if(r2 == r4) { + pc=0x275dc; + continue; + } + r4 = r2 < 33 ? 1 : 0; + if(r4 != r0) { + pc=0x27418; + continue; + } + r4 = r0 + 58; + if(r2 == r4) { + pc=0x275cc; + continue; + } + r4 = r2 < 59 ? 1 : 0; + if(r4 != r0) { + pc=0x27490; + continue; + } + r4 = r0 + 59; + if(r2 == r4) { + pc=0x2759c; + continue; + } + r4 = r0 + 125; + if(r2 != r4) { + pc=0x2743c; + continue; + } + r2 = r0 + 8; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x26ed4; + run_26800(); return; + case 0x27188: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x2752c; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x271c4: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x271f4; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x271ec; + pc=0x22a00; + run_22800(); return; + case 0x271ec: + r2= page[(r28+-31332)>>>2]; + case 0x271f4: + if(r2 != r19) { + pc=0x27074; + continue; + } + r3= page[(r28+-32692)>>>2]; + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r5 = r0 + 1; + pc=0x26fc0; + run_26800(); return; + case 0x27214: + r2 = r0 + 6; + page[(r3+12)>>>2] = r2; + r2 = r0 + 10; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x26ed4; + run_26800(); return; + case 0x2722c: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + 10; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x26ed4; + run_26800(); return; + case 0x27244: + r4= page[(r3+16)>>>2]; + r22 = r0 + 9; + r2= page[(r4+4)>>>2]; + r30 = r0 + 32; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x272e8; + continue; + } + case 0x27264: + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x27280: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x272b0; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x272a8; + pc=0x22a00; + run_22800(); return; + case 0x272a8: + r2= page[(r28+-31332)>>>2]; + case 0x272b0: + if(r2 == r22) { + pc=0x272c0; + continue; + } + if(r2 != r30) { + pc=0x27074; + continue; + } + case 0x272c0: + r3= page[(r28+-32692)>>>2]; + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 >= 0) { + pc=0x27264; + continue; + } + case 0x272e8: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x272f8; + pc=0x50a00; + run_50800(); return; + case 0x272f8: + pc=0x27280; + continue; + case 0x27300: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + 125; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x26ed4; + run_26800(); return; + case 0x27318: + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x27544; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x27354: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x27380; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x2737c; + pc=0x22a00; + run_22800(); return; + case 0x2737c: + r2= page[(r28+-31332)>>>2]; + case 0x27380: + r3 = r0 + 35; + if(r2 != r3) { + pc=0x27074; + continue; + } + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 7; + page[(r2+12)>>>2] = r3; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x26ed4; + run_26800(); return; + case 0x273a8: + r2 = r0 + 1; + page[(r3+12)>>>2] = r2; + r2 = r0 + 13; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x26ed4; + run_26800(); return; + case 0x273c0: + r4 = r23 + r0; + r31=0x273cc; + pc=0x1c000; + run_1c000(); return; + case 0x273cc: + r3= page[(r23+4)>>>2]; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x26e80; + run_26800(); return; + case 0x273dc: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x273ec; + pc=0x50a00; + run_50800(); return; + case 0x273ec: + pc=0x2703c; + continue; + case 0x273f4: + r4 = 6 << 16; + r4 = r4 + 5420; + r31=0x27404; + pc=0x21400; + run_21000(); return; + case 0x27404: + r3= page[(r28+-32692)>>>2]; + r5= page[(r3+12)>>>2]; + pc=0x26fb4; + run_26800(); return; + case 0x27418: + r4 = r0 + 10; + if(r2 == r4) { + pc=0x27574; + continue; + } + r4 = r0 + 13; + if(r2 == r4) { + pc=0x275b4; + continue; + } + r4 = r0 + 9; + if(r2 == r4) { + pc=0x275dc; + continue; + } + case 0x2743c: + r2 = 6 << 16; + r5 = r2 + 5380; + r4 = r0 + -2; + r31=0x27450; + pc=0x1fc00; + run_1f800(); return; + case 0x27450: + addr=r28+-31329; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x26ed4; + run_26800(); return; + case 0x27464: + r2 = r2 << 24; + r2 = r2 >> 24; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x26ed4; + run_26800(); return; + case 0x27478: + r2 = r0 + 9; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x26ed4; + run_26800(); return; + case 0x27490: + r4 = r0 + 47; + if(r2 != r4) { + pc=0x2743c; + continue; + } + r4= page[(r3+16)>>>2]; + r2= page[(r4+4)>>>2]; + r2 = r2 + -1; + page[(r4+4)>>>2] = r2; + if(r2 < 0) { + pc=0x275f4; + continue; + } + r3= page[(r3+16)>>>2]; + r2= page[(r3+0)>>>2]; + r4 = r2 + 1; + page[(r3+0)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + case 0x274d8: + r3= page[(r28+-31340)>>>2]; + page[(r28+-31332)>>>2] = r2; + r3= page[(r3+0)>>>2]; + if(r3 == r0) { + pc=0x27504; + continue; + } + r4 = r2 << 24; + r4 = r4 >> 24; + r31=0x27500; + pc=0x22a00; + run_22800(); return; + case 0x27500: + r2= page[(r28+-31332)>>>2]; + case 0x27504: + r3 = r0 + 47; + if(r2 == r3) { + pc=0x27598; + continue; + } + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 2; + page[(r2+12)>>>2] = r3; + r2 = r0 + 47; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x26ed4; + run_26800(); return; + case 0x2752c: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x2753c; + pc=0x50a00; + run_50800(); return; + case 0x2753c: + pc=0x271c4; + continue; + case 0x27544: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x27554; + pc=0x50a00; + run_50800(); return; + case 0x27554: + pc=0x27354; + continue; + case 0x2755c: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x2756c; + pc=0x50a00; + run_50800(); return; + case 0x2756c: + pc=0x270c8; + continue; + case 0x27574: + r2 = r0 + 4; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x26ed4; + run_26800(); return; + case 0x2758c: + r3= page[(r28+-32692)>>>2]; + pc=0x270f8; + continue; + case 0x27598: + r3= page[(r28+-32692)>>>2]; + case 0x2759c: + r2 = r0 + 7; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x26ed4; + run_26800(); return; + case 0x275b4: + r2 = r0 + 5; + page[(r3+12)>>>2] = r2; + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x26ed4; + run_26800(); return; + case 0x275cc: + r2 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x26ed4; + run_26800(); return; + case 0x275dc: + r2 = r0 + 3; + page[(r3+12)>>>2] = r2; + r2 = r0 + 32; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=0x26ed4; + run_26800(); return; + case 0x275f4: + r4= page[(r28+-31512)>>>2]; + r5= page[(r3+16)>>>2]; + r31=0x27604; + pc=0x50a00; + run_50800(); return; + case 0x27604: + pc=0x274d8; + continue; case 0x27800: pc=0x27800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_27800() throws ExecutionException { /* 0x27800 - 0x27a00 */ + private final void run_27800() throws ExecutionException { /* 0x27800 - 0x28000 */ int addr, tmp; for(;;) { switch(pc) { case 0x27800: - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - r29 = r29 + -48; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r19; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r18; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r17; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r16; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x27864; - continue; - } - r17 = 7 << 16; - r17 = r17 + 16880; - r18 = readPages[(r17+20)>>>12][((r17+20)>>>2)&0x3ff]; - r2 = r0 + -1; - if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x27864; - continue; - } - r2 = readPages[(r17+28)>>>12][((r17+28)>>>2)&0x3ff]; - r2 = r2 & 2; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x27864; - continue; - } - r19 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; - r19 = r19 - r18; - if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x27884; - continue; - } - case 0x27864: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x27884: - r4 = r0 + 16; - r16 = readPages[(r17+32)>>>12][((r17+32)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x27894; - pc=0x1b400; - run_1b400(); return; - case 0x27894: - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r18; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r19; - writePages[(r17+40)>>>12][((r17+40)>>>2)&0x3ff] = r18; - r3 = r19 + 1; - r6 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - writePages[(r17+44)>>>12][((r17+44)>>>2)&0x3ff] = r3; - case 0x278ac: - r3 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r4 = r3 < r6 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x278e0; - continue; - } - if(r6 != r3) { - /* Next insn is delay slot */ - pc=0x278ec; - continue; - } - r4 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r3 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r3 = r4 < r3 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x278ec; - continue; - } - case 0x278e0: - r16 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x278ac; - continue; - case 0x278ec: - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r16; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-30736)>>>12][((r28+-30736)>>>2)&0x3ff]; - r2 = r2 < 2 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x27864; - continue; - } - r2 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; - r7 = readPages[(r17+20)>>>12][((r17+20)>>>2)&0x3ff]; - r4 = 7 << 16; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r4 = r4 + -1800; - r5 = r19 + r0; - r6 = r19 + r0; - /* Next insn is delay slot */ - r31=0x27940; - pc=0x3fc00; - run_3fc00(); return; - case 0x27940: - /* Next insn is delay slot */ - pc=0x27864; - continue; - case 0x27a00: - pc=0x27a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_27a00() throws ExecutionException { /* 0x27a00 - 0x27c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x27a00: - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - r29 = r29 + -56; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r19; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r18; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r21; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r17; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r16; - r19 = r4 + r0; - r18 = r5 + r0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x27b18; - continue; - } - r17 = 7 << 16; - r17 = r17 + 16880; - r20 = readPages[(r17+20)>>>12][((r17+20)>>>2)&0x3ff]; - r2 = r0 + -1; - if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x27b4c; - continue; - } - r2 = readPages[(r17+28)>>>12][((r17+28)>>>2)&0x3ff]; - r4 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; - r2 = r2 & 2; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x27a6c; - continue; - } - r21 = r4 - r20; - if(r21 != r0) { - /* Next insn is delay slot */ - pc=0x27b58; - continue; - } - case 0x27a6c: - r4 = r19 + r4; - r2 = 2 << 16; - r4 = r4 & 65535; - writePages[(r17+28)>>>12][((r17+28)>>>2)&0x3ff] = r18; - r2 = r2 + 22528; - r18 = r18 & 1; - writePages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff] = r4; - writePages[(r17+20)>>>12][((r17+20)>>>2)&0x3ff] = r4; - writePages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff] = r2; - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x27c50; - run_27c00(); return; - } - case 0x27a98: - r2 = readPages[(r17+32)>>>12][((r17+32)>>>2)&0x3ff]; - r7 = r4 + 1; - r5 = r4 + r0; - case 0x27aa4: - writePages[(r17+40)>>>12][((r17+40)>>>2)&0x3ff] = r7; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = r5 < r3 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x27ad8; - continue; - } - case 0x27abc: - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = r5 < r3 ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x27abc; - continue; - } - case 0x27ad8: - r4 = 7 << 16; - r4 = r4 + 16912; - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x27d00; - run_27c00(); return; - } - r3 = r3 + -1; - writePages[(r17+24)>>>12][((r17+24)>>>2)&0x3ff] = r3; - case 0x27af0: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r21 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r20 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x27b18: - r2 = 7 << 16; - r2 = r2 + 16880; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - writePages[(r2+28)>>>12][((r2+28)>>>2)&0x3ff] = r5; - r19 = r4 + r3; - r19 = r19 & 65535; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r19; - writePages[(r2+20)>>>12][((r2+20)>>>2)&0x3ff] = r19; - r2 = 2 << 16; - r2 = r2 + 22528; - writePages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x27af0; - continue; - case 0x27b4c: - r4 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x27a6c; - continue; - case 0x27b58: - r4 = r0 + 16; - r16 = readPages[(r17+32)>>>12][((r17+32)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x27b68; - pc=0x1b400; - run_1b400(); return; - case 0x27b68: - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r20; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r21; - writePages[(r17+40)>>>12][((r17+40)>>>2)&0x3ff] = r20; - r3 = r21 + 1; - r7 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - writePages[(r17+44)>>>12][((r17+44)>>>2)&0x3ff] = r3; - case 0x27b80: - r3 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r6 = r3 < r7 ? 1 : 0; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x27bb4; - continue; - } - if(r3 != r7) { - /* Next insn is delay slot */ - pc=0x27bc0; - continue; - } - r6 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r3 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r3 = r6 < r3 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x27bc0; - continue; - } - case 0x27bb4: - r16 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x27b80; - continue; - case 0x27bc0: - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r16; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-30736)>>>12][((r28+-30736)>>>2)&0x3ff]; - r2 = r2 < 2 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x27c14; - run_27c00(); return; - } - r2 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; - r4 = 7 << 16; - r7 = readPages[(r17+20)>>>12][((r17+20)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - case 0x27c00: - pc=0x27c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_27c00() throws ExecutionException { /* 0x27c00 - 0x27e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x27c00: - r4 = r4 + -1800; - r5 = r21 + r0; - r6 = r21 + r0; - /* Next insn is delay slot */ - r31=0x27c14; - pc=0x3fc00; - run_3fc00(); return; - case 0x27c14: - r4 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; - r2 = 2 << 16; - r4 = r19 + r4; - r3 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - r4 = r4 & 65535; - r2 = r2 + 22528; - writePages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff] = r4; - writePages[(r17+20)>>>12][((r17+20)>>>2)&0x3ff] = r4; - writePages[(r17+28)>>>12][((r17+28)>>>2)&0x3ff] = r18; - writePages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff] = r2; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x27af0; - run_27a00(); return; - } - r18 = r18 & 1; - if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x27a98; - run_27a00(); return; - } - case 0x27c50: - r2 = readPages[(r17+32)>>>12][((r17+32)>>>2)&0x3ff]; - r7 = r4 + 1; - r3 = r0 + 1; - writePages[(r17+40)>>>12][((r17+40)>>>2)&0x3ff] = r7; - writePages[(r17+44)>>>12][((r17+44)>>>2)&0x3ff] = r3; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r5 = r4 < r3 ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x27cd0; - continue; - } - r5 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r3 = r3 + r5; - r3 = r4 < r3 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x27cdc; - continue; - } - r3 = r2 + r0; - /* Next insn is delay slot */ - pc=0x27cb4; - continue; - case 0x27c9c: - r6 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r5 = r5 + r6; - r5 = r4 < r5 ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x27cdc; - continue; - } - case 0x27cb4: - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r5 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r6 = r4 < r5 ? 1 : 0; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x27c9c; - continue; - } - case 0x27cd0: - r5 = r4 + r0; - /* Next insn is delay slot */ - pc=0x27aa4; - run_27a00(); return; - case 0x27cdc: - r4 = 7 << 16; - r4 = r4 + -1736; - /* Next insn is delay slot */ - r31=0x27cec; - pc=0x1ac00; - run_1ac00(); return; - case 0x27cec: - r5 = readPages[(r17+20)>>>12][((r17+20)>>>2)&0x3ff]; - r2 = readPages[(r17+32)>>>12][((r17+32)>>>2)&0x3ff]; - r7 = r5 + 1; - /* Next insn is delay slot */ - pc=0x27aa4; - run_27a00(); return; - case 0x27d00: - r2 = r0 | 65535; - writePages[(r17+24)>>>12][((r17+24)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x27af0; - run_27a00(); return; - case 0x27e00: - pc=0x27e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_27e00() throws ExecutionException { /* 0x27e00 - 0x28000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x27e00: - r2 = 7 << 16; r29 = r29 + -40; - r2 = r2 + 30664; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - r19 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r16 = 7 << 16; - r16 = r16 + 16880; - r3 = r3 | 16; - r18 = r0 + 1; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r3; - r17 = r5 + r0; - r19 = r4 - r19; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r4; - writePages[(r2+24)>>>12][((r2+24)>>>2)&0x3ff] = r18; - /* Next insn is delay slot */ - r31=0x27e54; - pc=0x27800; - run_27800(); return; - case 0x27e54: - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r19 = r19 & 65535; - r3 = r19 + r2; - r2 = 2 << 16; - r2 = r2 + 22528; - writePages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - r3 = r3 & 65535; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r3; - writePages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff] = r3; - writePages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff] = r17; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x27eec; + page[(r29+24)>>>2] = r16; + r16 = 6 << 16; + page[(r29+28)>>>2] = r17; + r17 = r4 + r0; + r4 = r16 + 17104; + page[(r29+36)>>>2] = r31; + page[(r29+32)>>>2] = r18; + r31=0x27828; + pc=0x1be00; + run_1b800(); return; + case 0x27828: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x27968; continue; } - r17 = r17 & 1; - if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x27f0c; + case 0x27838: + r3 = r0 + 60; + if(r2 == r3) { + pc=0x278bc; continue; } - r2 = readPages[(r16+32)>>>12][((r16+32)>>>2)&0x3ff]; - r7 = r3 + 1; - r5 = r3 + r0; - case 0x27ea0: - writePages[(r16+40)>>>12][((r16+40)>>>2)&0x3ff] = r7; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = r5 < r3 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x27ed4; + r3 = r0 + 34; + page[(r17+0)>>>2] = r0; + if(r2 == r3) { + pc=0x27888; continue; } - case 0x27eb8: - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = r5 < r3 ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x27eb8; - continue; - } - case 0x27ed4: - r4 = 7 << 16; - r4 = r4 + 16912; - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x27fb4; - continue; - } - r3 = r3 + -1; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r3; - case 0x27eec: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5644; + r31=0x27868; + pc=0x1fc00; + run_1f800(); return; + case 0x27868: + r2 = r0 + 1; + case 0x2786c: + r31= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; r29 = r29 + 40; - /* Next insn is delay slot */ pc=r31; return; - case 0x27f0c: - r2 = readPages[(r16+32)>>>12][((r16+32)>>>2)&0x3ff]; - r7 = r3 + 1; - writePages[(r16+40)>>>12][((r16+40)>>>2)&0x3ff] = r7; - r4 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - writePages[(r16+44)>>>12][((r16+44)>>>2)&0x3ff] = r18; - r5 = r3 < r4 ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x27f84; + case 0x27888: + r4 = r0 + 34; + r31=0x27894; + pc=0x24800; + run_24800(); return; + case 0x27894: + if(r2 == r0) { + pc=0x2790c; continue; } - r5 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r4 = r4 + r5; - r4 = r3 < r4 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x27f90; + case 0x2789c: + r31= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r2 = r0 + 1; + r29 = r29 + 40; + pc=r31; + return; + case 0x278bc: + r5= page[(r28+-31300)>>>2]; + r2 = r0 + 1; + page[(r17+0)>>>2] = r2; + if(r5 == r0) { + pc=0x2799c; continue; } - r4 = r2 + r0; - /* Next insn is delay slot */ - pc=0x27f68; + r4 = r16 + 17104; + r31=0x278dc; + pc=0x1c600; + run_1c000(); return; + case 0x278dc: + r16 = r16 + 17104; + r4 = r0 + 62; + r17= page[(r16+4)>>>2]; + r31=0x278f0; + pc=0x24800; + run_24800(); return; + case 0x278f0: + if(r2 != r0) { + pc=0x2789c; + continue; + } + r18 = r17 + r0; + r31=0x27904; + pc=0x23000; + run_23000(); return; + case 0x27904: + pc=0x27924; continue; - case 0x27f50: - r6 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - r5 = r5 + r6; - r5 = r3 < r5 ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x27f90; + case 0x2790c: + r16 = 6 << 16; + r31=0x27918; + pc=0x23000; + run_23000(); return; + case 0x27918: + r17 = r0 + r0; + r18 = r0 + r0; + r16 = r16 + 17104; + case 0x27924: + r2= page[(r16+4)>>>2]; + if(r2 == r17) { + pc=0x2797c; continue; } - case 0x27f68: - r4 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r5 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r6 = r3 < r5 ? 1 : 0; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x27f50; + r4 = r18 + r0; + r31=0x27940; + pc=0x24c00; + run_24800(); return; + case 0x27940: + if(r2 != r0) { + pc=0x2789c; continue; } - case 0x27f84: - r5 = r3 + r0; - /* Next insn is delay slot */ - pc=0x27ea0; + r4 = r16 + r0; + r5 = r0 + r0; + page[(r29+16)>>>2] = r2; + r31=0x2795c; + pc=0x1c400; + run_1c000(); return; + case 0x2795c: + r2= page[(r29+16)>>>2]; + pc=0x2786c; continue; - case 0x27f90: - r4 = 7 << 16; - r4 = r4 + -1736; - /* Next insn is delay slot */ - r31=0x27fa0; - pc=0x1ac00; - run_1ac00(); return; - case 0x27fa0: - r5 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; - r2 = readPages[(r16+32)>>>12][((r16+32)>>>2)&0x3ff]; - r7 = r5 + 1; - /* Next insn is delay slot */ - pc=0x27ea0; + case 0x27968: + r31=0x27970; + pc=0x23000; + run_23000(); return; + case 0x27970: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x27838; continue; - case 0x27fb4: - r2 = r0 | 65535; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x27eec; + case 0x2797c: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5684; + r31=0x27990; + pc=0x1fc00; + run_1f800(); return; + case 0x27990: + r2 = r0 + 1; + pc=0x2786c; + continue; + case 0x2799c: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5604; + r31=0x279b0; + pc=0x1fc00; + run_1f800(); return; + case 0x279b0: + r2 = r0 + 1; + pc=0x2786c; + continue; + case 0x27a00: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r29 = r29 + -32; + r3 = r0 + 32; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r16; + if(r2 == r3) { + pc=0x27aec; + continue; + } + case 0x27a1c: + r3 = r0 + 60; + if(r2 == r3) { + pc=0x27b00; + continue; + } + r3 = r0 + 34; + if(r2 == r3) { + pc=0x27a60; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5740; + r31=0x27a48; + pc=0x1fc00; + run_1f800(); return; + case 0x27a48: + r2 = r0 + 1; + case 0x27a4c: + r31= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x27a60: + r16 = 6 << 16; + r4 = r16 + 17104; + r31=0x27a70; + pc=0x1be00; + run_1b800(); return; + case 0x27a70: + r4 = r0 + 34; + r31=0x27a7c; + pc=0x24800; + run_24800(); return; + case 0x27a7c: + if(r2 == r0) { + pc=0x27a9c; + continue; + } + case 0x27a84: + r31= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r2 = r0 + 1; + r29 = r29 + 32; + pc=r31; + return; + case 0x27a9c: + r16 = r16 + 17104; + r31=0x27aa8; + pc=0x23000; + run_23000(); return; + case 0x27aa8: + r2= page[(r16+4)>>>2]; + if(r2 == r0) { + pc=0x27b20; + continue; + } + r4 = r0 + r0; + r31=0x27ac4; + pc=0x24c00; + run_24800(); return; + case 0x27ac4: + if(r2 != r0) { + pc=0x27a84; + continue; + } + r4 = r16 + r0; + r5 = r0 + r0; + page[(r29+16)>>>2] = r2; + r31=0x27ae0; + pc=0x1c400; + run_1c000(); return; + case 0x27ae0: + r2= page[(r29+16)>>>2]; + pc=0x27a4c; + continue; + case 0x27aec: + r31=0x27af4; + pc=0x23000; + run_23000(); return; + case 0x27af4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x27a1c; + continue; + case 0x27b00: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5704; + r31=0x27b14; + pc=0x1fc00; + run_1f800(); return; + case 0x27b14: + r2 = r0 + 1; + pc=0x27a4c; + continue; + case 0x27b20: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5684; + r31=0x27b34; + pc=0x1fc00; + run_1f800(); return; + case 0x27b34: + r2 = r0 + 1; + pc=0x27a4c; + continue; + case 0x27c00: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r29 = r29 + -24; + r3 = r0 + 32; + page[(r29+20)>>>2] = r31; + if(r2 == r3) { + pc=0x27c60; + continue; + } + case 0x27c18: + r3 = r0 + 44; + if(r2 == r3) { + pc=0x27c38; + continue; + } + r2 = r0 + r0; + case 0x27c28: + r31= page[(r29+20)>>>2]; + r29 = r29 + 24; + pc=r31; + return; + case 0x27c38: + r31=0x27c40; + pc=0x23000; + run_23000(); return; + case 0x27c40: + r3 = r0 + 32; + if(r2 == r3) { + pc=0x27c74; + continue; + } + r31= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x27c60: + r31=0x27c68; + pc=0x23000; + run_23000(); return; + case 0x27c68: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x27c18; + continue; + case 0x27c74: + r31=0x27c7c; + pc=0x23000; + run_23000(); return; + case 0x27c7c: + r2 = r0 + 1; + pc=0x27c28; + continue; + case 0x27e00: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r29 = r29 + -24; + r3 = r0 + 43; + page[(r29+20)>>>2] = r31; + page[(r29+16)>>>2] = r16; + if(r2 == r3) { + pc=0x27e64; + continue; + } + r16 = r0 + r0; + case 0x27e20: + r3 = r0 + 32; + if(r2 == r3) { + pc=0x27e44; + continue; + } + r31= page[(r29+20)>>>2]; + r2 = r16 + r0; + r16= page[(r29+16)>>>2]; + r29 = r29 + 24; + pc=r31; + return; + case 0x27e44: + r31=0x27e4c; + pc=0x23000; + run_23000(); return; + case 0x27e4c: + r31= page[(r29+20)>>>2]; + r2 = r16 + r0; + r16= page[(r29+16)>>>2]; + r29 = r29 + 24; + pc=r31; + return; + case 0x27e64: + r31=0x27e6c; + pc=0x23000; + run_23000(); return; + case 0x27e6c: + r3 = r0 + 49; + if(r2 == r3) { + pc=0x27eb4; + continue; + } + r3 = r0 + 50; + if(r2 == r3) { + pc=0x27ecc; + continue; + } + r3 = r0 + 51; + if(r2 == r3) { + pc=0x27ed8; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5776; + r31=0x27ea4; + pc=0x1fc00; + run_1f800(); return; + case 0x27ea4: + r16 = r0 + r0; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x27e20; + continue; + case 0x27eb4: + r16 = r0 + 1; + case 0x27eb8: + r31=0x27ec0; + pc=0x23000; + run_23000(); return; + case 0x27ec0: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x27e20; + continue; + case 0x27ecc: + r16 = r0 + 2; + pc=0x27eb8; + continue; + case 0x27ed8: + r16 = r0 + 4; + pc=0x27eb8; continue; case 0x28000: pc=0x28000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_28000() throws ExecutionException { /* 0x28000 - 0x28200 */ + private final void run_28000() throws ExecutionException { /* 0x28000 - 0x28800 */ int addr, tmp; for(;;) { switch(pc) { case 0x28000: - r5 = 7 << 16; r29 = r29 + -24; - r5 = r5 + 30672; - r6 = r0 + 24; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ + page[(r29+16)>>>2] = r16; + r16 = r4 + r0; + r4 = r0 + 12; + page[(r29+20)>>>2] = r31; r31=0x2801c; - pc=0x48fdc; - run_48e00(); return; + pc=0x20200; + run_20000(); return; case 0x2801c: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r3 = 6 << 16; + r3 = r3 + 17220; + r4= page[(r3+4)>>>2]; + page[(r2+0)>>>2] = r3; + page[(r2+4)>>>2] = r4; + page[(r3+4)>>>2] = r2; + r3= page[(r2+4)>>>2]; + r31= page[(r29+20)>>>2]; + page[(r2+8)>>>2] = r16; + r16= page[(r29+16)>>>2]; + page[(r3+0)>>>2] = r2; r29 = r29 + 24; - /* Next insn is delay slot */ pc=r31; return; case 0x28200: - pc=0x28200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_28200() throws ExecutionException { /* 0x28200 - 0x28400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x28200: - r2 = 7 << 16; - r2 = readPages[(r2+30696)>>>12][((r2+30696)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x28400: - pc=0x28400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_28400() throws ExecutionException { /* 0x28400 - 0x28600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x28400: - r2 = 7 << 16; - r2 = r2 + 30664; - r4 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r3 = readPages[(r2+32)>>>12][((r2+32)>>>2)&0x3ff]; - writePages[(r2+32)>>>12][((r2+32)>>>2)&0x3ff] = r0; - r3 = r4 + r3; - r3 = r3 & 65535; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x28600: - pc=0x28600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_28600() throws ExecutionException { /* 0x28600 - 0x28800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x28600: - r4 = 7 << 16; - r29 = r29 + -24; - r4 = r4 + -1668; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x28618; - pc=0x3e000; - run_3e000(); return; - case 0x28618: + r29 = r29 + -56; + page[(r29+24)>>>2] = r18; + r18 = 6 << 16; + page[(r29+16)>>>2] = r16; + r16 = r4 + r0; + r4= page[(r18+17104)>>>2]; + r5 = r28 + -32688; + page[(r29+48)>>>2] = r30; + page[(r29+52)>>>2] = r31; + page[(r29+44)>>>2] = r23; + page[(r29+40)>>>2] = r22; + page[(r29+36)>>>2] = r21; + page[(r29+32)>>>2] = r20; + page[(r29+28)>>>2] = r19; + page[(r29+20)>>>2] = r17; + r31=0x28244; + pc=0x4b600; + run_4b000(); return; + case 0x28244: + r30 = r2 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x28664; + pc=0x28288; continue; } - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r2 + r0; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - r31=0x28634; - pc=0x17e00; - run_17e00(); return; - case 0x28634: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + 47; - /* Next insn is delay slot */ - r31=0x28644; - pc=0x17c00; - run_17c00(); return; - case 0x28644: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x28654; - pc=0x17c00; - run_17c00(); return; - case 0x28654: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x28660; - pc=0x17a00; - run_17a00(); return; - case 0x28660: - writePages[(r28+-30676)>>>12][((r28+-30676)>>>2)&0x3ff] = r2; - case 0x28664: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ + case 0x28250: + r31= page[(r29+52)>>>2]; + r2 = r30 + r0; + r23= page[(r29+44)>>>2]; + r30= page[(r29+48)>>>2]; + r22= page[(r29+40)>>>2]; + r21= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 56; pc=r31; return; + case 0x28288: + if(r16 == r0) { + pc=0x28300; + continue; + } + r19 = 6 << 16; + case 0x28294: + r4 = r19 + 17208; + r31=0x282a0; + pc=0x1be00; + run_1b800(); return; + case 0x282a0: + r5 = 6 << 16; + r4 = r19 + 17208; + r5 = r5 + 5796; + r31=0x282b4; + pc=0x1c600; + run_1c000(); return; + case 0x282b4: + r5= page[(r18+17104)>>>2]; + r4 = r19 + 17208; + r31=0x282c4; + pc=0x1c600; + run_1c000(); return; + case 0x282c4: + r5 = 6 << 16; + r4 = r19 + 17208; + r5 = r5 + 12036; + r31=0x282d8; + pc=0x1c600; + run_1c000(); return; + case 0x282d8: + r4 = r19 + 17208; + r5 = r0 + r0; + r31=0x282e8; + pc=0x1c400; + run_1c000(); return; + case 0x282e8: + r5= page[(r19+17208)>>>2]; + r4 = r0 + -2; + r31=0x282f8; + pc=0x1fc00; + run_1f800(); return; + case 0x282f8: + pc=0x28250; + continue; + case 0x28300: + r21 = 6 << 16; + r17= page[(r21+17220)>>>2]; + r21 = r21 + 17220; + r19 = 6 << 16; + if(r17 == r21) { + pc=0x28294; + continue; + } + r20 = r19 + 17208; + r23 = r19 + r0; + r16 = r20 + r0; + r22 = r0 + 47; + pc=0x28340; + continue; + case 0x28330: + r17= page[(r17+0)>>>2]; + if(r17 == r21) { + pc=0x28294; + continue; + } + case 0x28340: + r4 = r16 + r0; + r31=0x2834c; + pc=0x1be00; + run_1b800(); return; + case 0x2834c: + r5= page[(r17+8)>>>2]; + r4 = r16 + r0; + r31=0x2835c; + pc=0x1c600; + run_1c000(); return; + case 0x2835c: + r2= page[(r20+4)>>>2]; + if(r2 == r0) { + pc=0x2839c; + continue; + } + r4= page[(r23+17208)>>>2]; + r2 = r4 + r2; + addr=r2+-1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 == r22) { + pc=0x2839c; + continue; + } + r4 = 6 << 16; + r4 = r4 + 17208; + r5 = r0 + 47; + r31=0x2839c; + pc=0x1c400; + run_1c000(); return; + case 0x2839c: + r5= page[(r18+17104)>>>2]; + r4 = r16 + r0; + r31=0x283ac; + pc=0x1c600; + run_1c000(); return; + case 0x283ac: + r4 = r16 + r0; + r5 = r0 + r0; + r31=0x283bc; + pc=0x1c400; + run_1c000(); return; + case 0x283bc: + r4= page[(r19+17208)>>>2]; + r5 = r28 + -32688; + r31=0x283cc; + pc=0x4b600; + run_4b000(); return; + case 0x283cc: + if(r2 == r0) { + pc=0x28330; + continue; + } + r30 = r2 + r0; + pc=0x28250; + continue; + case 0x28400: + r29 = r29 + -64; + r5 = r0 + r0; + r4 = r29 + 16; + page[(r29+52)>>>2] = r22; + r22 = 6 << 16; + page[(r29+60)>>>2] = r31; + page[(r29+44)>>>2] = r20; + page[(r29+32)>>>2] = r17; + page[(r29+56)>>>2] = r23; + r17 = 6 << 16; + page[(r29+48)>>>2] = r21; + page[(r29+40)>>>2] = r19; + page[(r29+36)>>>2] = r18; + page[(r29+28)>>>2] = r16; + r31=0x28440; + pc=0x26200; + run_26000(); return; + case 0x28440: + r4 = r22 + 17264; + r31=0x2844c; + pc=0x1be00; + run_1b800(); return; + case 0x2844c: + r5= page[(r17+17104)>>>2]; + r4 = r22 + 17264; + r31=0x2845c; + pc=0x1c600; + run_1c000(); return; + case 0x2845c: + r20 = 6 << 16; + r5 = r0 + r0; + r4 = r22 + 17264; + r31=0x28470; + pc=0x1c400; + run_1c000(); return; + case 0x28470: + r4 = r20 + 17252; + r31=0x2847c; + pc=0x1be00; + run_1b800(); return; + case 0x2847c: + r5= page[(r17+17104)>>>2]; + r4 = r20 + 17252; + r31=0x2848c; + pc=0x1c600; + run_1c000(); return; + case 0x2848c: + r4 = r20 + 17252; + r5 = r0 + 32; + r31=0x2849c; + pc=0x1c400; + run_1c000(); return; + case 0x2849c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 32; + if(r3 == r2) { + pc=0x28774; + continue; + } + case 0x284ac: + r4 = r17 + 17104; + r23= page[(r29+16)>>>2]; + r31=0x284bc; + pc=0x1be00; + run_1b800(); return; + case 0x284bc: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 123; + if(r2 == r3) { + pc=0x285a4; + continue; + } + r19 = r20 + 17252; + r18 = r0 + 126; + r16 = r17 + 17104; + r21 = r0 + 44; + r4 = r19 + r0; + if(r2 == r18) { + pc=0x28544; + continue; + } + case 0x284e8: + r5 = r0 + 118; + r31=0x284f4; + pc=0x1c400; + run_1c000(); return; + case 0x284f4: + r31=0x284fc; + pc=0x25800; + run_25800(); return; + case 0x284fc: + r31=0x28504; + pc=0x27c00; + run_27800(); return; + case 0x28504: + if(r2 == r0) { + pc=0x28580; + continue; + } + case 0x2850c: + r2= page[(r16+4)>>>2]; + r3= page[(r16+8)>>>2]; + if(r2 == r3) { + pc=0x2875c; + continue; + } + case 0x28520: + r3= page[(r17+17104)>>>2]; + r4 = r2 + 1; + r2 = r3 + r2; + page[(r16+4)>>>2] = r4; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r21&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r4 = r19 + r0; + if(r2 != r18) { + pc=0x284e8; + continue; + } + case 0x28544: + r5 = r0 + 114; + r31=0x28550; + pc=0x1c400; + run_1c000(); return; + case 0x28550: + r4 = r16 + r0; + r5 = r0 + 126; + r31=0x28560; + pc=0x1c400; + run_1c000(); return; + case 0x28560: + r31=0x28568; + pc=0x23000; + run_23000(); return; + case 0x28568: + r31=0x28570; + pc=0x25800; + run_25800(); return; + case 0x28570: + r31=0x28578; + pc=0x27c00; + run_27800(); return; + case 0x28578: + if(r2 != r0) { + pc=0x2850c; + continue; + } + case 0x28580: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 123; + if(r3 == r2) { + pc=0x285a4; + continue; + } + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5260; + r31=0x285a4; + pc=0x1fc00; + run_1f800(); return; + case 0x285a4: + r5 = r0 + r0; + r4 = r17 + 17104; + r31=0x285b4; + pc=0x1c400; + run_1c000(); return; + case 0x285b4: + r4 = r17 + 17104; + r31=0x285c0; + pc=0x1c200; + run_1c000(); return; + case 0x285c0: + r5 = r0 + r0; + r4 = r20 + 17252; + r18 = r2 + r0; + r31=0x285d4; + pc=0x1c400; + run_1c000(); return; + case 0x285d4: + r4 = r17 + 17104; + r31=0x285e0; + pc=0x1be00; + run_1b800(); return; + case 0x285e0: + r5= page[(r20+17252)>>>2]; + r4 = r17 + 17104; + r31=0x285f0; + pc=0x1c600; + run_1c000(); return; + case 0x285f0: + r4 = r17 + 17104; + r5 = r0 + r0; + r31=0x28600; + pc=0x1c400; + run_1c000(); return; + case 0x28600: + r5 = 6 << 16; + r4 = r29 + 16; + r5 = r5 + 29160; + r6 = r23 + r0; + r7 = r0 + 1; + r31=0x2861c; + pc=0x42800; + run_42800(); return; + case 0x2861c: + if(r2 != r0) { + pc=0x28680; + continue; + } + r2= page[(r29+16)>>>2]; + r16 = 6 << 16; + r17= page[(r2+16)>>>2]; + r4 = r0 + -1; + r5 = r16 + 6276; + r31=0x28640; + pc=0x1fc00; + run_1f800(); return; + case 0x28640: + r3= page[(r17+4)>>>2]; + r2= page[(r28+-32692)>>>2]; + r4 = r0 + -3; + page[(r2+0)>>>2] = r3; + r3= page[(r17+0)>>>2]; + r5 = r16 + 6276; + page[(r2+4)>>>2] = r3; + r2= page[(r28+-32672)>>>2]; + r3 = 6 << 16; + r3 = r3 + 6112; + page[(r2+8)>>>2] = r3; + r3 = 6 << 16; + r3 = r3 + 6124; + page[(r2+12)>>>2] = r3; + r31=0x28680; + pc=0x1fc00; + run_1f800(); return; + case 0x28680: + r4 = r0 + 20; + r31=0x2868c; + pc=0x20200; + run_20000(); return; + case 0x2868c: + r16 = r2 + r0; + r2= page[(r28+-32692)>>>2]; + r3= page[(r2+4)>>>2]; + r19= page[(r2+0)>>>2]; + page[(r16+0)>>>2] = r3; + r4 = r19 + r0; + r31=0x286b0; + pc=0x10268; + run_10000(); return; + case 0x286b0: + r17 = r2 + 1; + r4 = r17 + r0; + r31=0x286c0; + pc=0x20200; + run_20000(); return; + case 0x286c0: + r4 = r2 + r0; + r5 = r19 + r0; + r6 = r17 + r0; + r31=0x286d4; + pc=0x56fe0; + run_56800(); return; + case 0x286d4: + r19= page[(r22+17264)>>>2]; + page[(r16+4)>>>2] = r2; + r4 = r19 + r0; + r31=0x286e8; + pc=0x10268; + run_10000(); return; + case 0x286e8: + r17 = r2 + 1; + r4 = r17 + r0; + r31=0x286f8; + pc=0x20200; + run_20000(); return; + case 0x286f8: + r4 = r2 + r0; + r5 = r19 + r0; + r6 = r17 + r0; + r31=0x2870c; + pc=0x56fe0; + run_56800(); return; + case 0x2870c: + page[(r16+8)>>>2] = r2; + page[(r16+12)>>>2] = r18; + r4 = r0 + 1; + r31=0x28720; + pc=0x24e00; + run_24800(); return; + case 0x28720: + page[(r16+16)>>>2] = r2; + r2= page[(r29+16)>>>2]; + r31= page[(r29+60)>>>2]; + page[(r2+16)>>>2] = r16; + r23= page[(r29+56)>>>2]; + r22= page[(r29+52)>>>2]; + r21= page[(r29+48)>>>2]; + r20= page[(r29+44)>>>2]; + r19= page[(r29+40)>>>2]; + r18= page[(r29+36)>>>2]; + r17= page[(r29+32)>>>2]; + r16= page[(r29+28)>>>2]; + r29 = r29 + 64; + pc=r31; + return; + case 0x2875c: + r4 = r16 + r0; + r31=0x28768; + pc=0x1c000; + run_1c000(); return; + case 0x28768: + r2= page[(r16+4)>>>2]; + pc=0x28520; + continue; + case 0x28774: + r31=0x2877c; + pc=0x23000; + run_23000(); return; + case 0x2877c: + pc=0x284ac; + continue; case 0x28800: pc=0x28800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_28800() throws ExecutionException { /* 0x28800 - 0x28a00 */ + private final void run_28800() throws ExecutionException { /* 0x28800 - 0x29000 */ int addr, tmp; for(;;) { switch(pc) { case 0x28800: - r4 = 7 << 16; - r29 = r29 + -24; - r4 = r4 + -732; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x28818; - pc=0x1b000; - run_1b000(); return; - case 0x28818: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x28a00: - pc=0x28a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_28a00() throws ExecutionException { /* 0x28a00 - 0x28c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x28a00: - r4 = 7 << 16; - r29 = r29 + -24; - r4 = r4 + -1660; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x28a18; - pc=0x1b000; - run_1b000(); return; - case 0x28a18: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x28c00: - pc=0x28c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_28c00() throws ExecutionException { /* 0x28c00 - 0x28e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x28c00: - r29 = r29 + -24; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x28c10; - pc=0x1ce00; - run_1ce00(); return; - case 0x28c10: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r3 = r0 + 8; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - r2 = r0 + 3; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x28e00: - pc=0x28e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_28e00() throws ExecutionException { /* 0x28e00 - 0x29000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x28e00: - r3 = r4 + r0; - r4 = readPages[(r28+-30672)>>>12][((r28+-30672)>>>2)&0x3ff]; + r2= page[(r28+-31328)>>>2]; r29 = r29 + -112; - writePages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff] = r21; - writePages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff] = r20; - writePages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff] = r19; - writePages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff] = r18; - writePages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff] = r17; - writePages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff] = r31; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r16; - r21 = r5 + r0; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r0; - r5 = r3 + r0; - r20 = 7 << 16; - r19 = 7 << 16; - r17 = 7 << 16; - /* Next insn is delay slot */ - r31=0x28e48; - pc=0x17e00; - run_17e00(); return; - case 0x28e48: - r20 = r20 + -1576; - r19 = r19 + -1588; - r18 = 7 << 16; - r17 = r17 + -1616; - /* Next insn is delay slot */ - pc=0x28ea0; - continue; - case 0x28e60: + page[(r29+108)>>>2] = r31; + page[(r29+104)>>>2] = r30; + page[(r29+100)>>>2] = r23; + page[(r29+96)>>>2] = r22; + page[(r29+92)>>>2] = r21; + page[(r29+88)>>>2] = r20; + page[(r29+84)>>>2] = r19; + page[(r29+80)>>>2] = r18; + page[(r29+76)>>>2] = r17; + page[(r29+72)>>>2] = r16; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x29048; - run_29000(); return; - } - r7 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r6 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r4 = r29 + 16; - r5 = r17 + r0; - /* Next insn is delay slot */ - r31=0x28e80; - pc=0x42000; - run_42000(); return; - case 0x28e80: - r4 = readPages[(r28+-30672)>>>12][((r28+-30672)>>>2)&0x3ff]; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x28e90; - pc=0x17e00; - run_17e00(); return; - case 0x28e90: - /* Next insn is delay slot */ - r31=0x28e98; - pc=0x20000; - run_20000(); return; - case 0x28e98: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x28f14; + pc=0x28d00; continue; } - case 0x28ea0: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + case 0x28838: + r2= page[(r28+-32764)>>>2]; + r2 = r2 + -1; + page[(r28+-32764)>>>2] = r2; + if(r2 < 0) { + pc=0x28cc0; + continue; + } + case 0x28850: + r5 = r0 + r0; + r16 = 6 << 16; + r4 = r29 + 16; + r31=0x28864; + pc=0x26200; + run_26000(); return; + case 0x28864: + r21 = 6 << 16; + r4 = r16 + 17264; + r31=0x28874; + pc=0x1be00; + run_1b800(); return; + case 0x28874: + r5= page[(r21+17104)>>>2]; + r4 = r16 + 17264; + r31=0x28884; + pc=0x1c600; + run_1c000(); return; + case 0x28884: + r18 = 6 << 16; + r5 = r0 + r0; + r4 = r16 + 17264; + r31=0x28898; + pc=0x1c400; + run_1c000(); return; + case 0x28898: + r4 = r18 + 17252; + r31=0x288a4; + pc=0x1be00; + run_1b800(); return; + case 0x288a4: + r5= page[(r21+17104)>>>2]; + r4 = r18 + 17252; + r31=0x288b4; + pc=0x1c600; + run_1c000(); return; + case 0x288b4: + r4 = r18 + 17252; + r5 = r0 + 32; + r31=0x288c4; + pc=0x1c400; + run_1c000(); return; + case 0x288c4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r16 = tmp; - r2 = r0 + 34; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x28f44; - continue; - } - r4 = r29 + 56; - /* Next insn is delay slot */ - r31=0x28ebc; - pc=0x16400; - run_16400(); return; - case 0x28ebc: - r2 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r3 = r2 & 256; - r2 = r2 & 16; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x28e60; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x28cac; continue; } + case 0x288d4: + r22= page[(r29+16)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x29030; - run_29000(); return; + pc=0x289f0; + continue; } - r6 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r4 = r29 + 16; - r5 = r19 + r0; - r7 = r6 + r0; - /* Next insn is delay slot */ - r31=0x28ef4; - pc=0x42000; - run_42000(); return; - case 0x28ef4: - r4 = readPages[(r28+-30672)>>>12][((r28+-30672)>>>2)&0x3ff]; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x28f04; - pc=0x17e00; - run_17e00(); return; - case 0x28f04: - /* Next insn is delay slot */ - r31=0x28f0c; - pc=0x20000; - run_20000(); return; - case 0x28f0c: + r23 = 6 << 16; + r17 = r0 + r0; + r16 = r0 + r0; + r23 = r23 + 5244; + r20 = r0 + 126; + r19 = r18 + 17252; + pc=0x28944; + continue; + case 0x28900: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r4 = r19 + r0; + if(r2 == r20) { + pc=0x2899c; + continue; + } + case 0x28910: + r5 = r0 + 118; + r31=0x2891c; + pc=0x1c400; + run_1c000(); return; + case 0x2891c: + r4= page[(r28+-31328)>>>2]; + r16 = r16 + 1; + r4 = r4 + r17; + r31=0x28930; + pc=0x1aa00; + run_1a800(); return; + case 0x28930: + r31=0x28938; + pc=0x27c00; + run_27800(); return; + case 0x28938: + r17 = r17 + 32; + if(r2 == r0) { + pc=0x289f0; + continue; + } + case 0x28944: + r5= page[(r28+-32684)>>>2]; + r2 = r16 < r5 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ + pc=0x28900; + continue; + } + r4= page[(r28+-31328)>>>2]; + r2 = r5 << 1; + r5 = r5 << 6; + page[(r28+-32684)>>>2] = r2; + r31=0x28970; + pc=0x4fa00; + run_4f800(); return; + case 0x28970: + page[(r28+-31328)>>>2] = r2; + if(r2 != r0) { + pc=0x28900; + continue; + } + r4 = r0 + -3; + r5 = r23 + r0; + r31=0x2898c; + pc=0x1fc00; + run_1f800(); return; + case 0x2898c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r4 = r19 + r0; + if(r2 != r20) { + pc=0x28910; + continue; + } + case 0x2899c: + r5 = r0 + 114; + r31=0x289a8; + pc=0x1c400; + run_1c000(); return; + case 0x289a8: + r31=0x289b0; + pc=0x23000; + run_23000(); return; + case 0x289b0: + r5 = r0 + r0; + r4 = r29 + 56; + r31=0x289c0; + pc=0x26200; + run_26000(); return; + case 0x289c0: + r30= page[(r28+-31328)>>>2]; + r4= page[(r29+56)>>>2]; + r30 = r30 + r17; + r31=0x289d4; + pc=0x40c00; + run_40800(); return; + case 0x289d4: + page[(r30+0)>>>2] = r2; + r31=0x289e0; + pc=0x27c00; + run_27800(); return; + case 0x289e0: + r16 = r16 + 1; + r17 = r17 + 32; + if(r2 != r0) { + pc=0x28944; + continue; + } + case 0x289f0: + r5 = r0 + r0; + r4 = r18 + 17252; + r31=0x28a00; + pc=0x1c400; + run_1c000(); return; + case 0x28a00: + r4 = r21 + 17104; + r31=0x28a0c; + pc=0x1be00; + run_1b800(); return; + case 0x28a0c: + r5= page[(r18+17252)>>>2]; + r4 = r21 + 17104; + r31=0x28a1c; + pc=0x1c600; + run_1c000(); return; + case 0x28a1c: + r4 = r21 + 17104; + r5 = r0 + r0; + r31=0x28a2c; + pc=0x1c400; + run_1c000(); return; + case 0x28a2c: + r5 = 6 << 16; + r4 = r29 + 64; + r5 = r5 + 29160; + r6 = r22 + r0; + r7 = r0 + r0; + r31=0x28a48; + pc=0x42800; + run_42800(); return; + case 0x28a48: + r2= page[(r29+64)>>>2]; + if(r2 == r0) { + pc=0x28cdc; + continue; + } + r17= page[(r2+16)>>>2]; + r19 = 6 << 16; + r2= page[(r17+4)>>>2]; + r18 = r19 + 31320; + page[(r29+16)>>>2] = r2; + r2= page[(r17+0)>>>2]; + r23= page[(r28+-32692)>>>2]; + page[(r29+20)>>>2] = r2; + r2 = r0 + 1; + page[(r29+24)>>>2] = r2; + page[(r29+28)>>>2] = r2; + r2= page[(r17+12)>>>2]; + r21= page[(r18+12)>>>2]; + page[(r29+32)>>>2] = r2; + r2 = r29 + 16; + r6= page[(r17+8)>>>2]; + page[(r28+-32692)>>>2] = r2; + r5 = 6 << 16; + r2= page[(r18+8)>>>2]; + r5 = r5 + 6220; + r7 = r0 + r0; + r4 = r29 + 36; + r21 = r21 + r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r22 = tmp; + r30= page[(r28+-32672)>>>2]; + r31=0x28ac4; + pc=0x3fa00; + run_3f800(); return; + case 0x28ac4: + r4 = r29 + 36; + r31=0x28ad0; + pc=0x3fc00; + run_3f800(); return; + case 0x28ad0: + r31=0x28ad8; + pc=0x23000; + run_23000(); return; + case 0x28ad8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + if(r3 == r0) { + pc=0x28bc8; + continue; + } + r20 = 6 << 16; + r16 = r0 + r0; + r20 = r20 + 30256; + pc=0x28b48; + continue; + case 0x28afc: + r5 = r0 + r0; + r4 = r29 + 56; + r31=0x28b0c; + pc=0x26200; + run_26000(); return; + case 0x28b0c: + r4= page[(r29+56)>>>2]; + r31=0x28b18; + pc=0x40c00; + run_40800(); return; + case 0x28b18: + r5= page[(r28+-31328)>>>2]; + r4 = r2 + r0; + r5 = r5 + r16; + r6 = r0 + 32; + r31=0x28b30; + pc=0x56fe0; + run_56800(); return; + case 0x28b30: + r31=0x28b38; + pc=0x27c00; + run_27800(); return; + case 0x28b38: + r16 = r16 + 32; + if(r2 == r0) { + pc=0x28bc8; + continue; + } + case 0x28b44: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + case 0x28b48: + r2 = r0 + 126; + if(r3 != r2) { + pc=0x28afc; + continue; + } + r31=0x28b5c; + pc=0x23000; + run_23000(); return; + case 0x28b5c: + r4 = r29 + 56; + r5 = r0 + r0; + r31=0x28b6c; + pc=0x26200; + run_26000(); return; + case 0x28b6c: + r6= page[(r29+56)>>>2]; + r4 = r29 + 60; + r5 = r20 + r0; + r7 = r0 + 1; + r31=0x28b84; + pc=0x42800; + run_42800(); return; + case 0x28b84: + if(r2 != r0) { + pc=0x28b9c; + continue; + } + r2= page[(r19+31320)>>>2]; + if(r2 == r0) { + pc=0x28c90; + continue; + } + case 0x28b9c: + r2= page[(r28+-31328)>>>2]; + r2 = r2 + r16; + r3= page[(r2+0)>>>2]; + r2= page[(r29+60)>>>2]; + r16 = r16 + 32; + page[(r2+16)>>>2] = r3; + r31=0x28bc0; + pc=0x27c00; + run_27800(); return; + case 0x28bc0: + if(r2 != r0) { + pc=0x28b44; + continue; + } + case 0x28bc8: + r2= page[(r28+-32692)>>>2]; + r3 = r0 + 1; + page[(r2+12)>>>2] = r3; + r3= page[(r17+16)>>>2]; + page[(r2+16)>>>2] = r3; + r31=0x28be8; + pc=0x20800; + run_20800(); return; + case 0x28be8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + r2 = r0 + 125; + if(r5 == r2) { + pc=0x28c08; + continue; + } + r4 = 6 << 16; + r4 = r4 + 4056; + r31=0x28c08; + pc=0x21400; + run_21000(); return; + case 0x28c08: + r4 = r29 + 36; + r31=0x28c14; + pc=0x3fe00; + run_3f800(); return; + case 0x28c14: + r3= page[(r18+12)>>>2]; + r2= page[(r18+8)>>>2]; + page[(r28+-32672)>>>2] = r30; + r2 = r3 + r2; + page[(r28+-32692)>>>2] = r23; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r22&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + if(r2 == r21) { + pc=0x28c48; + continue; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6252; + r31=0x28c48; + pc=0x1fc00; + run_1f800(); return; + case 0x28c48: + r31=0x28c50; + pc=0x24000; + run_24000(); return; + case 0x28c50: + r2= page[(r28+-32764)>>>2]; + r31= page[(r29+108)>>>2]; + r2 = r2 + 1; + r30= page[(r29+104)>>>2]; + r23= page[(r29+100)>>>2]; + r22= page[(r29+96)>>>2]; + r21= page[(r29+92)>>>2]; + r20= page[(r29+88)>>>2]; + r19= page[(r29+84)>>>2]; + r18= page[(r29+80)>>>2]; + r17= page[(r29+76)>>>2]; + r16= page[(r29+72)>>>2]; + page[(r28+-32764)>>>2] = r2; + r29 = r29 + 112; + pc=r31; + return; + case 0x28c90: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 6228; + r31=0x28ca4; + pc=0x1fc00; + run_1f800(); return; + case 0x28ca4: + pc=0x28b9c; + continue; + case 0x28cac: + r31=0x28cb4; + pc=0x23000; + run_23000(); return; + case 0x28cb4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x288d4; + continue; + case 0x28cc0: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 6136; + r31=0x28cd4; + pc=0x1fc00; + run_1f800(); return; + case 0x28cd4: + pc=0x28850; + continue; + case 0x28cdc: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 6180; + r31=0x28cf0; + pc=0x1fc00; + run_1f800(); return; + case 0x28cf0: + r31=0x28cf8; + pc=0x23800; + run_23800(); return; + case 0x28cf8: + pc=0x28c50; + continue; + case 0x28d00: + r5= page[(r28+-32684)>>>2]; + r4 = r0 + r0; + r2 = r5 << 1; + r5 = r5 << 6; + page[(r28+-32684)>>>2] = r2; + r31=0x28d1c; + pc=0x4fa00; + run_4f800(); return; + case 0x28d1c: + page[(r28+-31328)>>>2] = r2; + if(r2 != r0) { + pc=0x28838; + continue; + } + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5244; + r31=0x28d3c; + pc=0x1fc00; + run_1f800(); return; + case 0x28d3c: + pc=0x28838; + continue; + case 0x28e00: + r29 = r29 + -32; + r2 = r0 + 256; + page[(r29+20)>>>2] = r16; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r17; + r16 = r5 + r0; + if(r6 == r2) { + pc=0x28f0c; + continue; + } + r2 = (r6&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + r17 = r4 + r0; + if(r2 != r0) { + pc=0x28ee0; + continue; + } + r2 = r0 + 512; + if(r6 == r2) { pc=0x28ea0; continue; } - case 0x28f14: - r4 = readPages[(r28+-30672)>>>12][((r28+-30672)>>>2)&0x3ff]; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x28f24; - pc=0x17c00; - run_17c00(); return; - case 0x28f24: - r2 = readPages[(r28+-30672)>>>12][((r28+-30672)>>>2)&0x3ff]; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r21; - r31=0x28f38; - return; - case 0x28f38: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x29008; - run_29000(); return; - case 0x28f44: - /* Next insn is delay slot */ - r31=0x28f4c; - pc=0x1c600; - run_1c600(); return; - case 0x28f4c: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x29004; - run_29000(); return; + r2 = r0 + 768; + if(r6 != r2) { + pc=0x28ee8; + continue; } - if(r3 == r16) { - /* Next insn is delay slot */ - pc=0x29060; - run_29000(); return; - } - r16 = r0 + 34; - /* Next insn is delay slot */ - pc=0x28fa8; - continue; - case 0x28f70: - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r6 = r2 + 1; - r2 = r5 + r2; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r6; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x28f8c; - pc=0x1c600; - run_1c600(); return; - case 0x28f8c: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; + r2 = 6 << 16; + r3 = r2 + 31424; + r3= page[(r3+40)>>>2]; + case 0x28e54: + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 2; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x29004; - run_29000(); return; - } - case 0x28f9c: - if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x29060; - run_29000(); return; - } - r3 = r2 + r0; - case 0x28fa8: - r4 = readPages[(r28+-30672)>>>12][((r28+-30672)>>>2)&0x3ff]; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r5 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r2 != r5) { - /* Next insn is delay slot */ - pc=0x28f70; + pc=0x28ec4; continue; } - /* Next insn is delay slot */ - r31=0x28fcc; - pc=0x17800; - run_17800(); return; - case 0x28fcc: - r4 = readPages[(r28+-30672)>>>12][((r28+-30672)>>>2)&0x3ff]; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r6 = r2 + 1; - r2 = r5 + r2; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r6; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x28ff4; - pc=0x1c600; - run_1c600(); return; - case 0x28ff4: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; + case 0x28e70: + r2= page[(r17+0)>>>2]; + if(r2 == r0) { + pc=0x28f28; + continue; + } + case 0x28e80: + r31= page[(r29+28)>>>2]; + r2 = r16 << 8; + r2 = r2 | r16; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x28ea0: + r2 = 6 << 16; + r3 = r2 + 31424; + r2= page[(r2+31424)>>>2]; + r3= page[(r3+36)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 2; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x28f9c; + pc=0x28e70; continue; } + case 0x28ec4: + r31= page[(r29+28)>>>2]; + r2 = r16 + r0; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x28ee0: + if(r6 == r0) { + pc=0x28ec4; + continue; + } + case 0x28ee8: + r4 = 6 << 16; + r4 = r4 + 6300; + r5 = r6 + r0; + r31=0x28efc; + pc=0x21400; + run_21000(); return; + case 0x28efc: + r3 = r0 + r0; + r2 = 6 << 16; + pc=0x28e54; + continue; + case 0x28f0c: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r2 = r5 << 8; + r29 = r29 + 32; + pc=r31; + return; + case 0x28f28: + r3 = (r3&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + r2 = r0 + 2; + r3 = r2 - r3; + page[(r17+0)>>>2] = r3; + pc=0x28e80; + continue; case 0x29000: pc=0x29000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_29000() throws ExecutionException { /* 0x29000 - 0x29200 */ + private final void run_29000() throws ExecutionException { /* 0x29000 - 0x29800 */ int addr, tmp; for(;;) { switch(pc) { case 0x29000: - case 0x29004: - r2 = r0 + 3; - case 0x29008: - r31 = readPages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff]; - r21 = readPages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff]; - r20 = readPages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff]; - r19 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r18 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - r17 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r16 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r29 = r29 + 112; - /* Next insn is delay slot */ + r2 = r0 + 1; + if(r4 == r2) { + pc=0x29014; + continue; + } + case 0x2900c: pc=r31; return; - case 0x29030: - r4 = readPages[(r28+-30672)>>>12][((r28+-30672)>>>2)&0x3ff]; - r5 = r20 + r0; - /* Next insn is delay slot */ - r31=0x29040; - pc=0x17e00; - run_17e00(); return; - case 0x29040: - /* Next insn is delay slot */ - pc=0x28e90; - run_28e00(); return; - case 0x29048: - r4 = readPages[(r28+-30672)>>>12][((r28+-30672)>>>2)&0x3ff]; - r5 = r18 + -1608; - /* Next insn is delay slot */ - r31=0x29058; - pc=0x17e00; - run_17e00(); return; - case 0x29058: - /* Next insn is delay slot */ - pc=0x28e90; - run_28e00(); return; - case 0x29060: - /* Next insn is delay slot */ - r31=0x29068; - pc=0x1c000; - run_1c000(); return; - case 0x29068: - /* Next insn is delay slot */ - pc=0x28e90; - run_28e00(); return; + case 0x29014: + r3= page[(r5+0)>>>2]; + r2 = r0 + 255; + if(r3 != r2) { + pc=0x2900c; + continue; + } + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 32; + if(r2 == r0) { + pc=0x2900c; + continue; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6324; + pc=0x1fc00; + run_1f800(); return; case 0x29200: - pc=0x29200; + r29 = r29 + -24; + page[(r29+20)>>>2] = r31; + r31=0x29210; + pc=0x27c00; + run_27800(); return; + case 0x29210: + if(r2 == r0) { + pc=0x2926c; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + r2 = r2 + -83; + r2 = r2 & 255; + r3 = (r2&0xffffffffL) < (40&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x29318; + continue; + } + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 7912; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_29200() throws ExecutionException { /* 0x29200 - 0x29400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x29200: - r4 = 7 << 16; - r5 = 2 << 16; - r4 = r4 + -1560; - r5 = r5 + -19968; - /* Next insn is delay slot */ - pc=0x28e00; - run_28e00(); return; + case 0x29254: + r31=0x2925c; + pc=0x23000; + run_23000(); return; + case 0x2925c: + r3 = r0 + 32; + if(r2 == r3) { + pc=0x29340; + continue; + } + r2 = r0 + 4; + case 0x2926c: + r31= page[(r29+20)>>>2]; + r29 = r29 + 24; + pc=r31; + return; + case 0x2927c: + r31=0x29284; + pc=0x23000; + run_23000(); return; + case 0x29284: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r4 = r0 + -33; + r4 = r2 & r4; + r3 = r0 + 80; + if(r4 != r3) { + pc=0x292a8; + continue; + } + r31=0x292a4; + pc=0x23000; + run_23000(); return; + case 0x292a4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + case 0x292a8: + r3 = r0 + 32; + if(r2 == r3) { + pc=0x29354; + continue; + } + r31= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x292c8: + r31=0x292d0; + pc=0x23000; + run_23000(); return; + case 0x292d0: + r3 = r0 + 32; + if(r2 == r3) { + pc=0x2937c; + continue; + } + r31= page[(r29+20)>>>2]; + r2 = r0 + 2; + r29 = r29 + 24; + pc=r31; + return; + case 0x292f0: + r31=0x292f8; + pc=0x23000; + run_23000(); return; + case 0x292f8: + r3 = r0 + 32; + if(r2 == r3) { + pc=0x29368; + continue; + } + r31= page[(r29+20)>>>2]; + r2 = r0 + 3; + r29 = r29 + 24; + pc=r31; + return; + case 0x29318: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2932c; + pc=0x1fc00; + run_1f800(); return; + case 0x2932c: + r31= page[(r29+20)>>>2]; + r2 = r0 + r0; + r29 = r29 + 24; + pc=r31; + return; + case 0x29340: + r31=0x29348; + pc=0x23000; + run_23000(); return; + case 0x29348: + r2 = r0 + 4; + pc=0x2926c; + continue; + case 0x29354: + r31=0x2935c; + pc=0x23000; + run_23000(); return; + case 0x2935c: + r2 = r0 + 1; + pc=0x2926c; + continue; + case 0x29368: + r31=0x29370; + pc=0x23000; + run_23000(); return; + case 0x29370: + r2 = r0 + 3; + pc=0x2926c; + continue; + case 0x2937c: + r31=0x29384; + pc=0x23000; + run_23000(); return; + case 0x29384: + r2 = r0 + 2; + pc=0x2926c; + continue; case 0x29400: - pc=0x29400; + r29 = r29 + -72; + r5 = r0 + r0; + page[(r29+64)>>>2] = r16; + r16 = r4 + r0; + r4 = r29 + 16; + page[(r29+68)>>>2] = r31; + r31=0x29420; + pc=0x1a800; + run_1a800(); return; + case 0x29420: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x29440; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x29440; + pc=0x21200; + run_21000(); return; + case 0x29440: + r4 = r16 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x29454; + pc=0x56fe0; + run_56800(); return; + case 0x29454: + r31= page[(r29+68)>>>2]; + r16= page[(r29+64)>>>2]; + r29 = r29 + 72; + pc=r31; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_29400() throws ExecutionException { /* 0x29400 - 0x29600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x29400: - r4 = 7 << 16; - r5 = 2 << 16; - r4 = r4 + -1548; - r5 = r5 + -20480; - /* Next insn is delay slot */ - pc=0x28e00; - run_28e00(); return; case 0x29600: - pc=0x29600; + r29 = r29 + -136; + page[(r29+128)>>>2] = r16; + r16 = r4 + r0; + r4 = r29 + 104; + page[(r29+132)>>>2] = r31; + r31=0x2961c; + pc=0x36a00; + run_36800(); return; + case 0x2961c: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2962c; + pc=0x1a800; + run_1a800(); return; + case 0x2962c: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x2964c; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2964c; + pc=0x21200; + run_21000(); return; + case 0x2964c: + r4 = r29 + 80; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x29660; + pc=0x56fe0; + run_56800(); return; + case 0x29660: + r4 = r29 + 80; + r31=0x2966c; + pc=0x42e00; + run_42800(); return; + case 0x2966c: + r2= page[(r29+104)>>>2]; + r3 = r0 + 1; + if(r2 == r3) { + pc=0x296a4; + continue; + } + case 0x2967c: + r4 = r0 + r0; + case 0x29680: + r31=0x29688; + pc=0x22000; + run_22000(); return; + case 0x29688: + r31=0x29690; + pc=0x24000; + run_24000(); return; + case 0x29690: + r31= page[(r29+132)>>>2]; + r16= page[(r29+128)>>>2]; + r29 = r29 + 136; + pc=r31; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_29600() throws ExecutionException { /* 0x29600 - 0x29800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x29600: - r4 = 7 << 16; - r5 = 2 << 16; - r4 = r4 + -1536; - r5 = r5 + -21504; - /* Next insn is delay slot */ - pc=0x28e00; - run_28e00(); return; + case 0x296a4: + r3= page[(r29+80)>>>2]; + if(r3 != r2) { + pc=0x2967c; + continue; + } + r6= page[(r29+88)>>>2]; + r2 = r0 | 65535; + r3 = r6 | 65535; + if(r3 != r2) { + pc=0x296e4; + continue; + } + r4= page[(r29+112)>>>2]; + r4 = r16 + r4; + r4 = r6 - r4; + r4 = r4 & 65535; + pc=0x29680; + continue; + case 0x296e4: + r5 = 6 << 16; + r4 = r29 + 16; + r5 = r5 + 6460; + r31=0x296f8; + pc=0x50c00; + run_50800(); return; + case 0x296f8: + r4 = r0 + -2; + r5 = r29 + 16; + r31=0x29708; + pc=0x1fc00; + run_1f800(); return; + case 0x29708: + r4 = r0 + r0; + pc=0x29680; + continue; case 0x29800: pc=0x29800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_29800() throws ExecutionException { /* 0x29800 - 0x29a00 */ + private final void run_29800() throws ExecutionException { /* 0x29800 - 0x2a000 */ int addr, tmp; for(;;) { switch(pc) { case 0x29800: - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - r29 = r29 + -24; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x29870; - continue; - } - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 123; - r16 = r0 + 123; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x29844; - continue; - } - case 0x2982c: - /* Next insn is delay slot */ - r31=0x29834; - pc=0x1c000; - run_1c000(); return; - case 0x29834: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r16) { - /* Next insn is delay slot */ - pc=0x2982c; - continue; - } - case 0x29844: - r4 = r0 + r0; - /* Next insn is delay slot */ - r31=0x29850; - pc=0x1d400; - run_1d400(); return; - case 0x29850: - /* Next insn is delay slot */ - r31=0x29858; - pc=0x1c000; - run_1c000(); return; - case 0x29858: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x29870: - /* Next insn is delay slot */ - r31=0x29878; - pc=0x20600; - run_20600(); return; - case 0x29878: - /* Next insn is delay slot */ - r31=0x29880; - pc=0x1c000; - run_1c000(); return; - case 0x29880: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x29a00: - pc=0x29a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_29a00() throws ExecutionException { /* 0x29a00 - 0x29c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x29a00: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r29 = r29 + -56; - r2 = r0 + 32; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x29ae0; - continue; - } - case 0x29a18: + r29 = r29 + -136; + page[(r29+128)>>>2] = r16; + r16 = r4 + r0; + r4 = r29 + 104; + page[(r29+132)>>>2] = r31; + r31=0x2981c; + pc=0x36a00; + run_36800(); return; + case 0x2981c: r4 = r29 + 16; - r5 = r0 + 123; - /* Next insn is delay slot */ - r31=0x29a28; - pc=0x19600; - run_19600(); return; - case 0x29a28: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 123; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x29a48; - continue; - } - r4 = 7 << 16; - r4 = r4 + -6860; - /* Next insn is delay slot */ - r31=0x29a48; - pc=0x1b200; - run_1b200(); return; - case 0x29a48: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = r0 + 1; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x29a64; - pc=0x1d400; - run_1d400(); return; - case 0x29a64: - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x29a70; - pc=0x1c000; - run_1c000(); return; - case 0x29a70: - r3 = r0 + 32; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x29ad0; - continue; - } - case 0x29a7c: r5 = r0 + r0; - r4 = r29 + 36; - /* Next insn is delay slot */ - r31=0x29a8c; - pc=0x19600; - run_19600(); return; - case 0x29a8c: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x29a98; - pc=0x19800; - run_19800(); return; - case 0x29a98: - r4 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x29aa4; - pc=0x3ea00; - run_3ea00(); return; - case 0x29aa4: - r4 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x29ab0; - pc=0x3ea00; - run_3ea00(); return; - case 0x29ab0: - r4 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x29abc; - pc=0x3ea00; - run_3ea00(); return; - case 0x29abc: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r2 = r0 + 3; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x29ad0: - /* Next insn is delay slot */ - r31=0x29ad8; - pc=0x1c000; - run_1c000(); return; - case 0x29ad8: - /* Next insn is delay slot */ - pc=0x29a7c; - continue; - case 0x29ae0: - /* Next insn is delay slot */ - r31=0x29ae8; - pc=0x1c000; - run_1c000(); return; - case 0x29ae8: - /* Next insn is delay slot */ - pc=0x29a18; - continue; - case 0x29c00: - pc=0x29c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_29c00() throws ExecutionException { /* 0x29c00 - 0x29e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x29c00: - r29 = r29 + -88; - r4 = r29 + 72; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x29c14; - pc=0x1e400; - run_1e400(); return; - case 0x29c14: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x29c30; + r31=0x2982c; + pc=0x1a800; + run_1a800(); return; + case 0x2982c: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x2984c; continue; } - r31 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 88; - /* Next insn is delay slot */ + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2984c; + pc=0x21200; + run_21000(); return; + case 0x2984c: + r4 = r29 + 80; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x29860; + pc=0x56fe0; + run_56800(); return; + case 0x29860: + r4 = r29 + 80; + r31=0x2986c; + pc=0x42e00; + run_42800(); return; + case 0x2986c: + r2= page[(r29+104)>>>2]; + r3 = r0 + 1; + if(r2 == r3) { + pc=0x298ac; + continue; + } + case 0x2987c: + r16 = r0 + r0; + case 0x29880: + r2= page[(r28+-31264)>>>2]; + r4 = r16 + r0; + pc=r2; + r31=0x29890; + return; + case 0x29890: + r31=0x29898; + pc=0x24000; + run_24000(); return; + case 0x29898: + r31= page[(r29+132)>>>2]; + r16= page[(r29+128)>>>2]; + r29 = r29 + 136; pc=r31; return; - case 0x29c30: - /* Next insn is delay slot */ - r31=0x29c38; - pc=0x20200; - run_20200(); return; + case 0x298ac: + r3= page[(r29+80)>>>2]; + if(r3 != r2) { + pc=0x2987c; + continue; + } + r6= page[(r29+88)>>>2]; + r2 = r0 | 65535; + r3 = r6 | 65535; + if(r3 != r2) { + pc=0x29940; + continue; + } + r2= page[(r29+112)>>>2]; + r16 = r16 + r2; + r6 = r6 - r16; + r16 = r6 & 65535; + r6 = r6 & 32768; + if(r6 != r0) { + pc=0x29970; + continue; + } + case 0x298f0: + r2 = r16 + 128; + r2 = (r2&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x29880; + continue; + } + r2 = r16 < -128 ? 1 : 0; + if(r2 != r0) { + pc=0x29980; + continue; + } + r7 = r16 + -127; + case 0x29910: + r5 = 6 << 16; + r4 = r29 + 16; + r5 = r5 + 6488; + r6 = r16 + r0; + r31=0x29928; + pc=0x50c00; + run_50800(); return; + case 0x29928: + r4 = r0 + -2; + r5 = r29 + 16; + r31=0x29938; + pc=0x1fc00; + run_1f800(); return; + case 0x29938: + pc=0x29880; + continue; + case 0x29940: + r5 = 6 << 16; + r4 = r29 + 16; + r5 = r5 + 6460; + r31=0x29954; + pc=0x50c00; + run_50800(); return; + case 0x29954: + r4 = r0 + -2; + r5 = r29 + 16; + r31=0x29964; + pc=0x1fc00; + run_1f800(); return; + case 0x29964: + r16 = r0 + r0; + pc=0x29880; + continue; + case 0x29970: + r2 = 65535 << 16; + r16 = r16 + r2; + pc=0x298f0; + continue; + case 0x29980: + r7 = r0 + -128; + r7 = r7 - r16; + pc=0x29910; + continue; + case 0x29a00: + r29 = r29 + -32; + r3 = r6 & 255; + page[(r29+24)>>>2] = r16; + r16 = r5 + r0; + r5 = r6 & 65280; + page[(r29+28)>>>2] = r31; + r2 = ((r0 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; + if(r5 == r0) { + pc=0x29a28; + continue; + } + r2 = r2 | 2; + case 0x29a28: + r5 = 255 << 16; + r5 = r6 & r5; + if(r5 == r0) { + pc=0x29a3c; + continue; + } + r2 = r2 | 4; + case 0x29a3c: + if(r2 == r0) { + pc=0x29bd0; + continue; + } + if(r4 == r0) { + pc=0x29a9c; + continue; + } + r2 = r2 & r4; + if(r2 == r0) { + pc=0x29ca8; + continue; + } + case 0x29a58: + r2 = r0 + 2; + if(r4 == r2) { + pc=0x29ba4; + continue; + } + r2 = r0 + 4; + if(r4 != r2) { + pc=0x29c38; + continue; + } + case 0x29a70: + r4 = r6 >>> 16; + r2= page[(r28+-31264)>>>2]; + r4 = r4 & 255; + pc=r2; + r31=0x29a84; + return; + case 0x29a84: + r31= page[(r29+28)>>>2]; + r4= page[(r16+8)>>>2]; + r16= page[(r29+24)>>>2]; + r29 = r29 + 32; + pc=0x22400; + run_22000(); return; + case 0x29a9c: + r4= page[(r16+4)>>>2]; + r5 = r4 & 7; + if(r5 != r0) { + pc=0x29bf0; + continue; + } + r5 = r2 + -1; + r5 = (r5&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; + if(r5 != r0) { + pc=0x29cec; + continue; + } + r5 = r0 + 4; + if(r2 == r5) { + pc=0x29a70; + continue; + } + r5 = r4 & 16; + if(r5 == r0) { + pc=0x29c58; + continue; + } + r5 = r2 & 1; + if(r5 == r0) { + pc=0x29af0; + continue; + } + r4 = r4 & 8; + if(r4 != r0) { + pc=0x29c80; + continue; + } + case 0x29af0: + r4 = r2 & 2; + if(r4 != r0) { + pc=0x29b5c; + continue; + } + r2 = r2 & 4; + if(r2 == r0) { + pc=0x29c80; + continue; + } + r2= page[(r16+0)>>>2]; + if(r2 == r0) { + pc=0x29a70; + continue; + } + r3= page[(r16+8)>>>2]; + r2 = r0 | 32768; + r3 = r3 + r2; + r2 = 1 << 16; + r2 = r2 | 32768; + r2 = ((r3 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; + if(r2 == r0) { + pc=0x29a70; + continue; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 8556; + page[(r29+16)>>>2] = r6; + r31=0x29b50; + pc=0x1fc00; + run_1f800(); return; + case 0x29b50: + r6= page[(r29+16)>>>2]; + pc=0x29a70; + continue; + case 0x29b5c: + r2= page[(r16+0)>>>2]; + if(r2 == r0) { + pc=0x29ba4; + continue; + } + r2= page[(r16+8)>>>2]; + r2 = r2 + 128; + r2 = (r2&0xffffffffL) < (384&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x29ba4; + continue; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 8556; + page[(r29+16)>>>2] = r6; + r31=0x29b9c; + pc=0x1fc00; + run_1f800(); return; + case 0x29b9c: + r6= page[(r29+16)>>>2]; + case 0x29ba4: + r4 = r6 >>> 8; + r2= page[(r28+-31264)>>>2]; + r4 = r4 & 255; + pc=r2; + r31=0x29bb8; + return; + case 0x29bb8: + r31= page[(r29+28)>>>2]; + r4= page[(r16+8)>>>2]; + r16= page[(r29+24)>>>2]; + r29 = r29 + 32; + pc=0x22000; + run_22000(); return; + case 0x29bd0: + r31= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 8592; + r29 = r29 + 32; + pc=0x1fc00; + run_1f800(); return; + case 0x29bf0: + r4 = r2 & r4; + r5 = r4 & 1; + if(r5 != r0) { + pc=0x29c80; + continue; + } + r4 = r4 & 2; + if(r4 != r0) { + pc=0x29ba4; + continue; + } + case 0x29c0c: + r2 = r2 & 4; + if(r2 != r0) { + pc=0x29a70; + continue; + } + r31= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5184; + r29 = r29 + 32; + pc=0x1fc00; + run_1f800(); return; case 0x29c38: - r4 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r5 = r2 + r0; - /* Next insn is delay slot */ - r31=0x29c48; - pc=0x2f400; - run_2f400(); return; - case 0x29c48: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x29c54; - pc=0x20000; - run_20000(); return; - case 0x29c54: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x29db0; + r2 = r0 + 1; + if(r4 == r2) { + pc=0x29c80; continue; } - r4 = r29 + 48; - /* Next insn is delay slot */ - r31=0x29c68; - pc=0x16000; - run_16000(); return; - case 0x29c68: - r2 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x29c7c; - pc=0x20000; - run_20000(); return; - case 0x29c7c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x29d04; + r31= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x29c58: + r4= page[(r16+8)>>>2]; + if(r4 < 0) { + pc=0x29cf8; continue; } - r2 = readPages[(r28+-32336)>>>12][((r28+-32336)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x29df8; + r5 = r2 & 1; + if(r5 == r0) { + pc=0x29cc8; continue; } - case 0x29c94: - r2 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r4 = r29 + 48; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x29ca8; - pc=0x16000; - run_16000(); return; + r5 = r4 < 256 ? 1 : 0; + if(r5 == r0) { + pc=0x29cc8; + continue; + } + case 0x29c80: + r2= page[(r28+-31264)>>>2]; + r4 = r3 + r0; + pc=r2; + r31=0x29c90; + return; + case 0x29c90: + r31= page[(r29+28)>>>2]; + r4= page[(r16+8)>>>2]; + r16= page[(r29+24)>>>2]; + r29 = r29 + 32; + pc=0x21c00; + run_21800(); return; case 0x29ca8: - r2 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r3 = readPages[(r28+-30740)>>>12][((r28+-30740)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r2; + r31= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 6528; + r29 = r29 + 32; + pc=0x1fc00; + run_1f800(); return; + case 0x29cc8: + r3 = r2 & 2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x29ce4; + pc=0x29c0c; continue; } - r3 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r4 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - if(r4 == r3) { - /* Next insn is delay slot */ - pc=0x29ce4; + r3 = 1 << 16; + r4 = r4 < r3 ? 1 : 0; + if(r4 != r0) { + pc=0x29ba4; continue; } - r4 = 7 << 16; - r4 = r4 + -1500; - /* Next insn is delay slot */ - r31=0x29ce0; - pc=0x1ae00; - run_1ae00(); return; - case 0x29ce0: - r2 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - case 0x29ce4: - r3 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r2 = r2 < r3 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x29d34; - continue; - } - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x29d38; + pc=0x29c0c; continue; - case 0x29d04: - r2 = r0 + 1; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-32336)>>>12][((r28+-32336)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x29e10; - run_29e00(); return; - } - case 0x29d1c: - r2 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x29dd4; - continue; - } - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r2; - case 0x29d34: - r2 = r0 + 1; - case 0x29d38: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + case 0x29cec: + r4 = r2 + r0; + pc=0x29a58; + continue; + case 0x29cf8: + r31= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 6584; + r29 = r29 + 32; + pc=0x1fc00; + run_1f800(); return; + case 0x29e00: + r29 = r29 + -112; + page[(r29+100)>>>2] = r18; + page[(r29+96)>>>2] = r17; + page[(r29+108)>>>2] = r31; + page[(r29+104)>>>2] = r19; + page[(r29+92)>>>2] = r16; + r18 = r4 + r0; + r31=0x29e24; + pc=0x27e00; + run_27800(); return; + case 0x29e24: + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; - r2 = r0 + 123; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x29d5c; + r5 = r0 + 32; + r17 = r2 + r0; + if(r3 == r5) { + pc=0x2a140; + run_2a000(); return; + } + case 0x29e38: + r5 = r0 + 35; + if(r3 == r5) { + pc=0x29f24; + continue; + } + r2 = r0 + 91; + if(r3 == r2) { + pc=0x29f98; + continue; + } + if(r3 == r0) { + pc=0x29f5c; continue; } - r4 = 7 << 16; - r4 = r4 + -6860; - /* Next insn is delay slot */ - r31=0x29d5c; - pc=0x1b200; - run_1b200(); return; - case 0x29d5c: - r2 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - r4 = r0 + 1; - r2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x29d78; - pc=0x1d400; - run_1d400(); return; - case 0x29d78: r4 = r29 + 16; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x29d88; - pc=0x19400; - run_19400(); return; - case 0x29d88: - r4 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x29d94; - pc=0x3ea00; - run_3ea00(); return; - case 0x29d94: - /* Next insn is delay slot */ - r31=0x29d9c; - pc=0x1c000; - run_1c000(); return; - case 0x29d9c: - r31 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 88; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x29db0: - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x29dc0; - pc=0x1b000; - run_1b000(); return; - case 0x29dc0: - r31 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 88; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x29dd4: - r4 = 7 << 16; - r4 = r4 + -1404; - /* Next insn is delay slot */ - r31=0x29de4; - pc=0x1b200; - run_1b200(); return; - case 0x29de4: - r2 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x29d34; + r5 = r0 + 1; + r16 = r29 + 64; + r31=0x29e6c; + pc=0x1a800; + run_1a800(); return; + case 0x29e6c: + r4 = r16 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x29e80; + pc=0x56fe0; + run_56800(); return; + case 0x29e80: + r4 = r16 + r0; + r31=0x29e8c; + pc=0x42e00; + run_42800(); return; + case 0x29e8c: + r19= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r19 = ((r0 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; + r19 = r19 << 2; + if(r2 != r0) { + pc=0x2a0e4; + run_2a000(); return; + } + case 0x29ea4: + r31=0x29eac; + pc=0x29200; + run_29000(); return; + case 0x29eac: + r2 = r2 << 7; + r19 = r2 | r19; + case 0x29eb4: + r31=0x29ebc; + pc=0x24000; + run_24000(); return; + case 0x29ebc: + r2 = r0 + 4; + if(r19 == r2) { + pc=0x2a044; + run_2a000(); return; + } + r2 = (r19&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2a164; + run_2a000(); return; + } + r2 = r0 + 8; + if(r19 != r2) { + pc=0x2a0c4; + run_2a000(); return; + } + r2 = 6 << 16; + r18 = r18 << 1; + r2 = r2 + 8656; + case 0x29eec: + r18 = r18 + r2; + addr=r18+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r4 = r17 + r0; + r5 = r16 + r0; + r31=0x29f04; + pc=0x29a00; continue; - case 0x29df8: - r4 = 7 << 16; - r4 = r4 + -1528; - case 0x29e00: - pc=0x29e00; + case 0x29f04: + r31= page[(r29+108)>>>2]; + r19= page[(r29+104)>>>2]; + r18= page[(r29+100)>>>2]; + r17= page[(r29+96)>>>2]; + r16= page[(r29+92)>>>2]; + r29 = r29 + 112; + pc=r31; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_29e00() throws ExecutionException { /* 0x29e00 - 0x2a000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x29e00: - /* Next insn is delay slot */ - r31=0x29e08; - pc=0x1ae00; - run_1ae00(); return; - case 0x29e08: - /* Next insn is delay slot */ - pc=0x29c94; - run_29c00(); return; - case 0x29e10: - r4 = 7 << 16; - r4 = r4 + -1432; - /* Next insn is delay slot */ - r31=0x29e20; - pc=0x1ae00; - run_1ae00(); return; - case 0x29e20: - /* Next insn is delay slot */ - pc=0x29d1c; - run_29c00(); return; + case 0x29f24: + r31=0x29f2c; + pc=0x23000; + run_23000(); return; + case 0x29f2c: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x29f3c; + pc=0x1a800; + run_1a800(); return; + case 0x29f3c: + r4 = r29 + 64; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x29f50; + pc=0x56fe0; + run_56800(); return; + case 0x29f50: + r4 = r29 + 64; + r31=0x29f5c; + pc=0x42c00; + run_42800(); return; + case 0x29f5c: + r31=0x29f64; + pc=0x24000; + run_24000(); return; + case 0x29f64: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 8592; + r31=0x29f78; + pc=0x1fc00; + run_1f800(); return; + case 0x29f78: + r31= page[(r29+108)>>>2]; + r19= page[(r29+104)>>>2]; + r18= page[(r29+100)>>>2]; + r17= page[(r29+96)>>>2]; + r16= page[(r29+92)>>>2]; + r29 = r29 + 112; + pc=r31; + return; + case 0x29f98: + r31=0x29fa0; + pc=0x23000; + run_23000(); return; + case 0x29fa0: + r16 = r29 + 64; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x29fb4; + pc=0x1a800; + run_1a800(); return; + case 0x29fb4: + r4 = r16 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x29fc8; + pc=0x56fe0; + run_56800(); return; + case 0x29fc8: + r4 = r16 + r0; + r31=0x29fd4; + pc=0x42e00; + run_42800(); return; + case 0x29fd4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x2a120; + run_2a000(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x29ff8; + pc=0x1fc00; + run_1f800(); return; + case 0x29ff8: + r31=0x2a000; + pc=0x24000; + run_24000(); return; case 0x2a000: pc=0x2a000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_2a000() throws ExecutionException { /* 0x2a000 - 0x2a200 */ + private final void run_2a000() throws ExecutionException { /* 0x2a000 - 0x2a800 */ int addr, tmp; for(;;) { switch(pc) { case 0x2a000: - r29 = r29 + -32; - r4 = r29 + 16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x2a018; - pc=0x1e400; - run_1e400(); return; - case 0x2a018: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2a038; - continue; - } - r2 = r0 + r0; - case 0x2a024: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2a038: - r5 = 7 << 16; - r6 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r4 = r29 + 20; - r5 = r5 + 16944; - r7 = r0 + r0; - /* Next insn is delay slot */ - r31=0x2a054; - pc=0x31200; - run_31200(); return; - case 0x2a054: - r2 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2a0d4; - continue; - } - r3 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - r2 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2a0bc; - continue; - } - case 0x2a074: - r16 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r16 = r16 >>> 4; - r16 = r16 & 1; - r16 = r16 ^ 1; - case 0x2a088: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 32; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x2a0f8; - continue; - } - case 0x2a098: - r2 = r0 + 123; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x2a0e0; - continue; - } - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r16 << 1; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2a0bc: - r3 = readPages[(r2+24)>>>12][((r2+24)>>>2)&0x3ff]; - r3 = r3 + 1; - writePages[(r2+24)>>>12][((r2+24)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x2a074; - continue; - case 0x2a0d4: - r16 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2a088; - continue; - case 0x2a0e0: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x2a0ec; - pc=0x19a00; - run_19a00(); return; - case 0x2a0ec: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2a024; - continue; - case 0x2a0f8: - /* Next insn is delay slot */ - r31=0x2a100; - pc=0x1c000; - run_1c000(); return; - case 0x2a100: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - /* Next insn is delay slot */ - pc=0x2a098; - continue; - case 0x2a200: - pc=0x2a200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2a200() throws ExecutionException { /* 0x2a200 - 0x2a400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2a200: - r29 = r29 + -48; - r4 = r29 + 16; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x2a214; - pc=0x16000; - run_16000(); return; - case 0x2a214: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 123; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x2a234; - continue; - } - r4 = 7 << 16; - r4 = r4 + -6860; - /* Next insn is delay slot */ - r31=0x2a234; - pc=0x1b200; - run_1b200(); return; - case 0x2a234: - r4 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r4 = ((r0 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; - /* Next insn is delay slot */ - r31=0x2a248; - pc=0x19a00; - run_19a00(); return; - case 0x2a248: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2a400: - pc=0x2a400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2a400() throws ExecutionException { /* 0x2a400 - 0x2a600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2a400: - r29 = r29 + -64; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r16; - r16 = 7 << 16; - r16 = r16 + 30664; - r4 = r29 + 16; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r19; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r18; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r17; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; - r18 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x2a430; - pc=0x16000; - run_16000(); return; - case 0x2a430: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r2 = r2 | 16; - r19 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r17; - /* Next insn is delay slot */ - r31=0x2a450; - pc=0x1b600; - run_1b600(); return; - case 0x2a450: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2a494; - continue; - } - r17 = r17 - r19; - r19 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r17 = r19 - r17; - r17 = r17 & 65535; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r17; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r18; - r19 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r18 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r17 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r16 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 64; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2a494: - r4 = 7 << 16; - r4 = r4 + -732; - /* Next insn is delay slot */ - r31=0x2a4a4; - pc=0x1b000; - run_1b000(); return; - case 0x2a4a4: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r19 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r18 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r17 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r16 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 64; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2a600: - pc=0x2a600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2a600() throws ExecutionException { /* 0x2a600 - 0x2a800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2a600: - r29 = r29 + -40; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r16; - r16 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r4 = r29 + 16; + r2 = 6 << 16; + r2 = r2 + 8704; + r18 = r18 << 2; + r18 = r18 + r2; + r6= page[(r18+0)>>>2]; + r4 = r17 + r0; r5 = r16 + r0; - r6 = r0 + 16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x2a624; - pc=0x48fdc; - run_48e00(); return; - case 0x2a624: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + r31=0x2a024; + pc=0x29a00; + run_29800(); return; + case 0x2a024: + r31= page[(r29+108)>>>2]; + r19= page[(r29+104)>>>2]; + r18= page[(r29+100)>>>2]; + r17= page[(r29+96)>>>2]; + r16= page[(r29+92)>>>2]; + r29 = r29 + 112; + pc=r31; + return; + case 0x2a044: + r2 = 6 << 16; + r2 = r2 + 8688; + r18 = r18 << 1; + r18 = r18 + r2; + addr=r18+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r4 = r17 + r0; + r5 = r16 + r0; + r31=0x2a068; + pc=0x29a00; + run_29800(); return; + case 0x2a068: + r3= page[(r29+64)>>>2]; + r2 = r0 + 1; + if(r3 != r2) { + pc=0x29f78; + run_29800(); return; + } + addr=r29+75; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r3 = tmp; - r2 = 7 << 16; - r2 = r2 + -7236; - r2 = r3 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + r2 = r0 + 255; + if(r3 != r2) { + pc=0x29f78; + run_29800(); return; + } + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 1; + if(r2 == r0) { + pc=0x29f78; + run_29800(); return; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6632; + r31=0x2a0bc; + pc=0x1fc00; + run_1f800(); return; + case 0x2a0bc: + pc=0x29f78; + run_29800(); return; + case 0x2a0c4: + r2 = r0 + 36; + if(r19 != r2) { + pc=0x29f64; + run_29800(); return; + } + r2 = 6 << 16; + r18 = r18 << 1; + r2 = r2 + 8672; + pc=0x29eec; + run_29800(); return; + case 0x2a0e4: + r31=0x2a0ec; + pc=0x29200; + run_29000(); return; + case 0x2a0ec: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r2 & 64; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2a6e4; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r19 = r19 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x2a154; continue; } - r6 = 7 << 16; - r4 = r16 + r0; - r7 = r0 + r0; - r6 = r6 + 6068; - case 0x2a658: - r5 = 7 << 16; - r5 = r5 + -1380; - /* Next insn is delay slot */ - r31=0x2a668; - pc=0x2e400; - run_2e400(); return; - case 0x2a668: - /* Next insn is delay slot */ - r31=0x2a670; - pc=0x1b600; - run_1b600(); return; - case 0x2a670: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2a6ac; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2a118; + pc=0x1fc00; + run_1f800(); return; + case 0x2a118: + pc=0x29ea4; + run_29800(); return; + case 0x2a120: + r31=0x2a128; + pc=0x23000; + run_23000(); return; + case 0x2a128: + r31=0x2a130; + pc=0x29200; + run_29000(); return; + case 0x2a130: + r2 = r2 << 7; + r19 = r2 | 8; + pc=0x29eb4; + run_29800(); return; + case 0x2a140: + r31=0x2a148; + pc=0x23000; + run_23000(); return; + case 0x2a148: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + pc=0x29e38; + run_29800(); return; + case 0x2a154: + r31=0x2a15c; + pc=0x23000; + run_23000(); return; + case 0x2a15c: + pc=0x29ea4; + run_29800(); return; + case 0x2a164: + if(r19 == r0) { + pc=0x2a000; continue; } + pc=0x29f64; + run_29800(); return; + case 0x2a200: + r29 = r29 + -200; + r6 = 6 << 16; + r5 = r29 + 168; + r6 = r6 + 22536; + page[(r29+196)>>>2] = r31; + page[(r29+192)>>>2] = r20; + page[(r29+188)>>>2] = r19; + page[(r29+184)>>>2] = r18; + page[(r29+180)>>>2] = r17; + page[(r29+176)>>>2] = r16; + r31=0x2a230; + pc=0x42400; + run_42000(); return; + case 0x2a230: + if(r2 == r0) { + pc=0x2a284; + continue; + } + r16= page[(r29+168)>>>2]; + r2 = r16 & 1024; + r17 = r16 & 255; + if(r2 != r0) { + pc=0x2a2ac; + continue; + } + r2 = r16 + r0; + case 0x2a254: + r2 = r2 >> 12; + r3 = (r2&0xffffffffL) < (11&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x2a840; + run_2a800(); return; + } + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 8072; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; + return; + case 0x2a284: + r2 = r0 + r0; + case 0x2a288: + r31= page[(r29+196)>>>2]; + r20= page[(r29+192)>>>2]; + r19= page[(r29+188)>>>2]; + r18= page[(r29+184)>>>2]; + r17= page[(r29+180)>>>2]; + r16= page[(r29+176)>>>2]; + r29 = r29 + 200; + pc=r31; + return; + case 0x2a2ac: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x2a2bc; + return; + case 0x2a2bc: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x2a2cc; + return; + case 0x2a2cc: + r2= page[(r29+168)>>>2]; + pc=0x2a254; + continue; + case 0x2a2d8: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2a2e8; + pc=0x1a800; + run_1a800(); return; + case 0x2a2e8: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x2a308; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2a308; + pc=0x21200; + run_21000(); return; + case 0x2a308: + r5 = r29 + 24; + r6 = r0 + 24; + r4 = r29 + 120; + r31=0x2a31c; + pc=0x56fe0; + run_56800(); return; + case 0x2a31c: + r4 = r29 + 120; + r31=0x2a328; + pc=0x42e00; + run_42800(); return; + case 0x2a328: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2a338; + return; + case 0x2a338: + r4= page[(r29+128)>>>2]; + r31=0x2a344; + pc=0x21c00; + run_21800(); return; + case 0x2a344: + r31=0x2a34c; + pc=0x24000; + run_24000(); return; + case 0x2a34c: + r2 = r0 + 1; + case 0x2a350: + r31= page[(r29+196)>>>2]; + r20= page[(r29+192)>>>2]; + r19= page[(r29+188)>>>2]; + r18= page[(r29+184)>>>2]; + r17= page[(r29+180)>>>2]; + r16= page[(r29+176)>>>2]; + r29 = r29 + 200; + pc=r31; + return; + case 0x2a374: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x2ab24; + run_2a800(); return; + } + case 0x2a384: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x2ab0c; + run_2a800(); return; + } + r18 = r0 + 1; + r16 = r0 + r0; + case 0x2a398: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2a3a8; + pc=0x1a800; + run_1a800(); return; + case 0x2a3a8: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x2a3c8; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2a3c8; + pc=0x21200; + run_21000(); return; + case 0x2a3c8: + r4 = r29 + 144; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2a3dc; + pc=0x56fe0; + run_56800(); return; + case 0x2a3dc: + r4 = r29 + 144; + r31=0x2a3e8; + pc=0x42c00; + run_42800(); return; + case 0x2a3e8: + r31=0x2a3f0; + pc=0x27c00; + run_27800(); return; + case 0x2a3f0: + if(r2 == r0) { + pc=0x2acf8; + run_2a800(); return; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 35; + if(r3 == r2) { + pc=0x2ada4; + run_2a800(); return; + } + case 0x2a408: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2a418; + pc=0x1a800; + run_1a800(); return; + case 0x2a418: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x2a438; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2a438; + pc=0x21200; + run_21000(); return; + case 0x2a438: + r5 = r29 + 24; + r6 = r0 + 24; + r4 = r29 + 120; + r31=0x2a44c; + pc=0x56fe0; + run_56800(); return; + case 0x2a44c: + r4 = r29 + 120; + r31=0x2a458; + pc=0x42c00; + run_42800(); return; + case 0x2a458: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2a468; + return; + case 0x2a468: + r4= page[(r29+128)>>>2]; + r31=0x2a474; + pc=0x21c00; + run_21800(); return; + case 0x2a474: + r4= page[(r29+152)>>>2]; + r31=0x2a480; + pc=0x21c00; + run_21800(); return; + case 0x2a480: + if(r16 == r0) { + pc=0x2a344; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2a49c; + pc=0x1fc00; + run_1f800(); return; + case 0x2a49c: + r31=0x2a4a4; + pc=0x24000; + run_24000(); return; + case 0x2a4a4: + pc=0x2a34c; + continue; + case 0x2a4ac: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2a4bc; + return; + case 0x2a4bc: + r4 = r0 + 3; + r31=0x2a4c8; + pc=0x29600; + run_29000(); return; + case 0x2a4c8: + r2 = r0 + 1; + pc=0x2a288; + continue; + case 0x2a4d4: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2a4e4; + return; + case 0x2a4e4: + r4 = r0 + 2; + r31=0x2a4f0; + pc=0x29600; + run_29000(); return; + case 0x2a4f0: + r2 = r0 + 1; + pc=0x2a288; + continue; + case 0x2a4fc: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2a50c; + pc=0x1a800; + run_1a800(); return; + case 0x2a50c: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x2a52c; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2a52c; + pc=0x21200; + run_21000(); return; + case 0x2a52c: + r4 = r29 + 120; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2a540; + pc=0x56fe0; + run_56800(); return; + case 0x2a540: + r4 = r29 + 120; + r31=0x2a54c; + pc=0x42e00; + run_42800(); return; + case 0x2a54c: + r31=0x2a554; + pc=0x27c00; + run_27800(); return; + case 0x2a554: + if(r2 != r0) { + pc=0x2a860; + run_2a800(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2a570; + pc=0x1fc00; + run_1f800(); return; + case 0x2a570: + r2 = r0 + 1; + pc=0x2a350; + continue; + case 0x2a57c: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2a58c; + return; + case 0x2a58c: + r4 = r0 + 2; + r31=0x2a598; + pc=0x29800; + run_29800(); return; + case 0x2a598: + r2 = r0 + 1; + pc=0x2a288; + continue; + case 0x2a5a4: + r2 = r0 + 248; + if(r17 == r2) { + pc=0x2a898; + run_2a800(); return; + } + case 0x2a5b0: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2a5c0; + return; + case 0x2a5c0: + r31=0x2a5c8; + pc=0x24000; + run_24000(); return; + case 0x2a5c8: + r2 = r0 + 1; + pc=0x2a288; + continue; + case 0x2a5d4: + r4 = r17 + r0; + r31=0x2a5e0; + pc=0x29e00; + run_29800(); return; + case 0x2a5e0: + r2 = r0 + 1; + pc=0x2a288; + continue; + case 0x2a5ec: + r31=0x2a5f4; + pc=0x27e00; + run_27800(); return; + case 0x2a5f4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r5 = r0 + 32; + r19 = r2 + r0; + if(r3 == r5) { + pc=0x2ab4c; + run_2a800(); return; + } + case 0x2a608: + r5 = r0 + 35; + if(r3 == r5) { + pc=0x2a8d0; + run_2a800(); return; + } + r2 = r0 + 91; + if(r3 == r2) { + pc=0x2ac7c; + run_2a800(); return; + } + if(r3 == r0) { + pc=0x2ac3c; + run_2a800(); return; + } r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x2a684; - pc=0x2e600; - run_2e600(); return; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x2a63c; + pc=0x1a800; + run_1a800(); return; + case 0x2a63c: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2a650; + pc=0x56fe0; + run_56800(); return; + case 0x2a650: + r4 = r18 + r0; + r31=0x2a65c; + pc=0x42e00; + run_42800(); return; + case 0x2a65c: + r20= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; + r20 = r20 << 2; + if(r2 != r0) { + pc=0x2adb8; + run_2a800(); return; + } + case 0x2a674: + r31=0x2a67c; + pc=0x29200; + run_29000(); return; + case 0x2a67c: + r2 = r2 << 7; + r20 = r2 | r20; case 0x2a684: - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r3 = 7 << 16; - r3 = r3 + 12764; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - r16 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + r31=0x2a68c; + pc=0x24000; + run_24000(); return; + case 0x2a68c: + r2 = r0 + 2; + if(r20 == r2) { + pc=0x2a914; + run_2a800(); return; + } + r2 = (r20&0xffffffffL) < (3&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2ab60; + run_2a800(); return; + } + r2 = r0 + 256; + if(r20 == r2) { + pc=0x2ad18; + run_2a800(); return; + } + r2 = r0 + 384; + if(r20 != r2) { + pc=0x2ab74; + run_2a800(); return; + } + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8736; + case 0x2a6c8: + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r4 = r19 + r0; + r5 = r18 + r0; + r31=0x2a6e0; + pc=0x29a00; + run_29800(); return; + case 0x2a6e0: r2 = r0 + 1; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2a6ac: - r4 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x2a6b8; - pc=0x2e600; - run_2e600(); return; - case 0x2a6b8: - r4 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r5 = r29 + 16; - r6 = r0 + 16; - /* Next insn is delay slot */ - r31=0x2a6cc; - pc=0x48fdc; - run_48e00(); return; - case 0x2a6cc: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r16 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2a6e4: - /* Next insn is delay slot */ - r31=0x2a6ec; - pc=0x1ec00; - run_1ec00(); return; - case 0x2a6ec: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x2a6f8; - pc=0x17a00; - run_17a00(); return; - case 0x2a6f8: - r6 = r2 + r0; - r4 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r7 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2a658; + pc=0x2a350; continue; + case 0x2a6ec: + r31=0x2a6f4; + pc=0x27e00; + run_27800(); return; + case 0x2a6f4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r5 = r0 + 32; + r19 = r2 + r0; + if(r3 == r5) { + pc=0x2ab38; + run_2a800(); return; + } + case 0x2a708: + r5 = r0 + 35; + if(r3 == r5) { + pc=0x2aa24; + run_2a800(); return; + } + r2 = r0 + 91; + if(r3 == r2) { + pc=0x2aba4; + run_2a800(); return; + } + if(r3 == r0) { + pc=0x2ab94; + run_2a800(); return; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x2a73c; + pc=0x1a800; + run_1a800(); return; + case 0x2a73c: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2a750; + pc=0x56fe0; + run_56800(); return; + case 0x2a750: + r4 = r18 + r0; + r31=0x2a75c; + pc=0x42e00; + run_42800(); return; + case 0x2a75c: + r20= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; + r20 = r20 << 2; + if(r2 != r0) { + pc=0x2adf4; + run_2a800(); return; + } + case 0x2a774: + r31=0x2a77c; + pc=0x29200; + run_29000(); return; + case 0x2a77c: + r2 = r2 << 7; + r20 = r2 | r20; + case 0x2a784: + r31=0x2a78c; + pc=0x24000; + run_24000(); return; + case 0x2a78c: + r2 = r0 + 256; + if(r20 == r2) { + pc=0x2ae6c; + run_2a800(); return; + } + r2 = (r20&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2ad2c; + run_2a800(); return; + } + r2 = r0 + 392; + if(r20 == r2) { + pc=0x2af40; + run_2a800(); return; + } + r2 = (r20&0xffffffffL) < (393&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2af80; + run_2a800(); return; + } + r2 = r0 + 516; + if(r20 == r2) { + pc=0x2aea0; + run_2a800(); return; + } + r2 = r0 + 520; + if(r20 == r2) { + pc=0x2ae30; + run_2a800(); return; + } + r2 = r0 + 404; + if(r20 != r2) { + pc=0x2ab74; + run_2a800(); return; + } + r2 = 6 << 16; + r2 = r2 + 9360; + case 0x2a7e8: + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r4 = r19 + r0; + r5 = r18 + r0; + r31=0x2a800; + pc=0x29a00; + run_29800(); return; case 0x2a800: pc=0x2a800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_2a800() throws ExecutionException { /* 0x2a800 - 0x2aa00 */ + private final void run_2a800() throws ExecutionException { /* 0x2a800 - 0x2b000 */ int addr, tmp; for(;;) { switch(pc) { case 0x2a800: - r29 = r29 + -64; - r4 = r29 + 40; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r17; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x2a81c; - pc=0x1e400; - run_1e400(); return; - case 0x2a81c: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2a840; - continue; - } - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r17 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r16 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 64; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2a840: - /* Next insn is delay slot */ - r31=0x2a848; - pc=0x20200; - run_20200(); return; - case 0x2a848: - r4 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r5 = r2 + r0; - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2a85c; - pc=0x2f400; - run_2f400(); return; - case 0x2a85c: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r17 = r2 + r0; - r2 = r0 + 61; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x2a89c; - continue; - } - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x2a880; - pc=0x1b000; - run_1b000(); return; - case 0x2a880: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r17 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r16 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 64; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2a89c: - /* Next insn is delay slot */ - r31=0x2a8a4; - pc=0x1c000; - run_1c000(); return; - case 0x2a8a4: + r2 = r0 + 1; + pc=0x2a350; + run_2a000(); return; + case 0x2a80c: + r5 = 6 << 16; r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x2a8b0; - pc=0x16400; - run_16400(); return; - case 0x2a8b0: - r3 = readPages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff]; - r2 = r0 + -16; - r3 = r3 & r2; - if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x2a8f8; - continue; - } - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r3; - case 0x2a8c8: - r4 = r17 + r0; + r5 = r5 + 6828; + r6 = r17 + r0; + r31=0x2a824; + pc=0x50c00; + run_50800(); return; + case 0x2a824: + r4 = r0 + -2; r5 = r29 + 16; - r6 = r0 + 1; - /* Next insn is delay slot */ - r31=0x2a8dc; - pc=0x2f600; - run_2f600(); return; - case 0x2a8dc: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r17 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r16 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; + r31=0x2a834; + pc=0x1fc00; + run_1f800(); return; + case 0x2a834: r2 = r0 + 1; - r29 = r29 + 64; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2a8f8: - r3 = r16 | r3; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r3 & r2; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x2a8c8; - continue; - case 0x2aa00: - pc=0x2aa00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2aa00() throws ExecutionException { /* 0x2aa00 - 0x2ac00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2aa00: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r29 = r29 + -24; - r3 = r0 + 32; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x2aa60; - continue; - } - case 0x2aa18: - r3 = r0 + 123; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x2aa44; - continue; - } - r4 = r0 + 1; - /* Next insn is delay slot */ - r31=0x2aa30; - pc=0x31e00; - run_31e00(); return; - case 0x2aa30: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 2; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2aa44: - /* Next insn is delay slot */ - r31=0x2aa4c; - pc=0x31c00; - run_31c00(); return; - case 0x2aa4c: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2aa60: - /* Next insn is delay slot */ - r31=0x2aa68; - pc=0x1c000; - run_1c000(); return; - case 0x2aa68: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - /* Next insn is delay slot */ - pc=0x2aa18; - continue; - case 0x2ac00: - pc=0x2ac00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2ac00() throws ExecutionException { /* 0x2ac00 - 0x2ae00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2ac00: - r2 = 7 << 16; - r29 = r29 + -32; - r4 = r2 + 30704; - r5 = r0 + 1; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r17 = readPages[(r2+30704)>>>12][((r2+30704)>>>2)&0x3ff]; - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2ac2c; - pc=0x17200; - run_17200(); return; - case 0x2ac2c: - /* Next insn is delay slot */ - r31=0x2ac34; - pc=0x1b600; - run_1b600(); return; - case 0x2ac34: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2ac4c; - continue; - } - r4 = r16 + 30704; + pc=0x2a288; + run_2a000(); return; + case 0x2a840: + r4 = 6 << 16; + r4 = r4 + 6908; r5 = r17 + r0; - /* Next insn is delay slot */ - r31=0x2ac4c; - pc=0x17200; - run_17200(); return; - case 0x2ac4c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r31=0x2a854; + pc=0x21400; + run_21000(); return; + case 0x2a854: r2 = r0 + 1; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; + pc=0x2a350; + run_2a000(); return; + case 0x2a860: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2a870; return; - case 0x2ae00: - pc=0x2ae00; + case 0x2a870: + r2= page[(r28+-31264)>>>2]; + r4= page[(r29+128)>>>2]; + pc=r2; + r31=0x2a880; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2ae00() throws ExecutionException { /* 0x2ae00 - 0x2b000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2ae00: - r29 = r29 + -32; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r16 = 7 << 16; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r17 = readPages[(r16+30664)>>>12][((r16+30664)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x2ae20; - pc=0x1f400; - run_1f400(); return; - case 0x2ae20: + case 0x2a880: + r4 = r0 + 3; + r31=0x2a88c; + pc=0x29800; + run_29800(); return; + case 0x2a88c: + r2 = r0 + 1; + pc=0x2a350; + run_2a000(); return; + case 0x2a898: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 16; + if(r2 == r0) { + pc=0x2a5b0; + run_2a000(); return; + } + r4 = 6 << 16; + r4 = r4 + 6768; + r31=0x2a8c8; + pc=0x21200; + run_21000(); return; + case 0x2a8c8: + pc=0x2a5b0; + run_2a000(); return; + case 0x2a8d0: + r31=0x2a8d8; + pc=0x23000; + run_23000(); return; + case 0x2a8d8: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2a8ec; + pc=0x1a800; + run_1a800(); return; + case 0x2a8ec: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2a900; + pc=0x56fe0; + run_56800(); return; + case 0x2a900: + r4 = r18 + r0; + r31=0x2a90c; + pc=0x42c00; + run_42800(); return; + case 0x2a90c: + r31=0x2a914; + pc=0x24000; + run_24000(); return; + case 0x2a914: + r2 = 6 << 16; + r2 = r2 + 9024; + r17 = r17 + r2; + r5 = r16 & 768; + r2 = r0 + 256; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r17 = tmp; + if(r5 == r2) { + pc=0x2b004; + run_2b000(); return; + } + r2 = (r5&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2ae58; + pc=0x2afbc; continue; } - case 0x2ae28: - /* Next insn is delay slot */ - r31=0x2ae30; - pc=0x1b600; - run_1b600(); return; - case 0x2ae30: + r2 = r0 + 512; + if(r5 == r2) { + pc=0x2aff0; + continue; + } + r2 = r0 + 768; + if(r5 != r2) { + pc=0x2afd0; + continue; + } + r16 = 6 << 16; + r2 = r16 + 31424; + r3= page[(r2+40)>>>2]; + case 0x2a964: + r2= page[(r16+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 2; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2ae3c; + pc=0x2a99c; continue; } - writePages[(r16+30664)>>>12][((r16+30664)>>>2)&0x3ff] = r17; - case 0x2ae3c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + if(r19 != r0) { + pc=0x2a994; + continue; + } + r19 = (r3&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + r2 = r0 + 2; + r19 = r2 - r19; + case 0x2a994: + r2 = r17 << 8; + r17 = r2 | r17; + case 0x2a99c: + r4 = r19 + r0; + r5 = r18 + r0; + r6 = r17 + r0; + r31=0x2a9b0; + pc=0x29a00; + run_29800(); return; + case 0x2a9b0: + r2= page[(r16+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 4; + if(r2 == r0) { + pc=0x2a34c; + run_2a000(); return; + } + r3= page[(r29+120)>>>2]; r2 = r0 + 1; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2ae58: - /* Next insn is delay slot */ - r31=0x2ae60; - pc=0x17000; - run_17000(); return; - case 0x2ae60: + if(r3 != r2) { + pc=0x2a34c; + run_2a000(); return; + } + r2= page[(r29+128)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2ae74; + pc=0x2a34c; + run_2a000(); return; + } + r2 = r0 + 139; + if(r17 == r2) { + pc=0x2b088; + run_2b000(); return; + } + r2 = r0 + 171; + if(r17 != r2) { + pc=0x2a34c; + run_2a000(); return; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6720; + r31=0x2aa18; + pc=0x1fc00; + run_1f800(); return; + case 0x2aa18: + r2 = r0 + 1; + pc=0x2a350; + run_2a000(); return; + case 0x2aa24: + r31=0x2aa2c; + pc=0x23000; + run_23000(); return; + case 0x2aa2c: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2aa40; + pc=0x1a800; + run_1a800(); return; + case 0x2aa40: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2aa54; + pc=0x56fe0; + run_56800(); return; + case 0x2aa54: + r4 = r18 + r0; + r31=0x2aa60; + pc=0x42c00; + run_42800(); return; + case 0x2aa60: + r31=0x2aa68; + pc=0x24000; + run_24000(); return; + case 0x2aa68: + r2 = 6 << 16; + r2 = r2 + 10240; + r17 = r17 + r2; + r5 = r16 & 768; + r2 = r0 + 256; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r17 = tmp; + if(r5 == r2) { + pc=0x2b068; + run_2b000(); return; + } + r2 = (r5&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2b020; + run_2b000(); return; + } + r2 = r0 + 512; + if(r5 == r2) { + pc=0x2b074; + run_2b000(); return; + } + r2 = r0 + 768; + if(r5 != r2) { + pc=0x2b028; + run_2b000(); return; + } + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+40)>>>2]; + case 0x2aab8: + r3= page[(r16+31424)>>>2]; + r3= page[(r3+4)>>>2]; + r3 = r3 & 2; + if(r3 == r0) { + pc=0x2b014; + run_2b000(); return; + } + if(r19 != r0) { + pc=0x2aae8; continue; } - writePages[(r16+30664)>>>12][((r16+30664)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x2ae28; + r19 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + r2 = r0 + 2; + r19 = r2 - r19; + case 0x2aae8: + r6 = r17 << 8; + r6 = r6 | r17; + case 0x2aaf0: + r4 = r19 + r0; + r5 = r18 + r0; + r31=0x2ab00; + pc=0x29a00; + run_29800(); return; + case 0x2ab00: + r2 = r0 + 1; + pc=0x2a350; + run_2a000(); return; + case 0x2ab0c: + r31=0x2ab14; + pc=0x23000; + run_23000(); return; + case 0x2ab14: + r18 = r0 + r0; + r16 = r0 + 1; + pc=0x2a398; + run_2a000(); return; + case 0x2ab24: + r31=0x2ab2c; + pc=0x23000; + run_23000(); return; + case 0x2ab2c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2a384; + run_2a000(); return; + case 0x2ab38: + r31=0x2ab40; + pc=0x23000; + run_23000(); return; + case 0x2ab40: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + pc=0x2a708; + run_2a000(); return; + case 0x2ab4c: + r31=0x2ab54; + pc=0x23000; + run_23000(); return; + case 0x2ab54: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + pc=0x2a608; + run_2a000(); return; + case 0x2ab60: + if(r20 == r0) { + pc=0x2ace4; + continue; + } + r2 = r0 + 1; + if(r20 == r2) { + pc=0x2ac44; + continue; + } + case 0x2ab74: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 8592; + r31=0x2ab88; + pc=0x1fc00; + run_1f800(); return; + case 0x2ab88: + r2 = r0 + 1; + pc=0x2a350; + run_2a000(); return; + case 0x2ab94: + r31=0x2ab9c; + pc=0x24000; + run_24000(); return; + case 0x2ab9c: + pc=0x2ab74; continue; - case 0x2ae74: - r4 = 7 << 16; - r4 = r4 + -1372; - /* Next insn is delay slot */ - r31=0x2ae84; - pc=0x1b000; - run_1b000(); return; - case 0x2ae84: - /* Next insn is delay slot */ - pc=0x2ae28; + case 0x2aba4: + r31=0x2abac; + pc=0x23000; + run_23000(); return; + case 0x2abac: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2abc0; + pc=0x1a800; + run_1a800(); return; + case 0x2abc0: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2abd4; + pc=0x56fe0; + run_56800(); return; + case 0x2abd4: + r4 = r18 + r0; + r31=0x2abe0; + pc=0x42e00; + run_42800(); return; + case 0x2abe0: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x2ae80; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2ac04; + pc=0x1fc00; + run_1f800(); return; + case 0x2ac04: + r31=0x2ac0c; + pc=0x24000; + run_24000(); return; + case 0x2ac0c: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 10008; + case 0x2ac18: + r2 = r17 + r2; + r6= page[(r2+0)>>>2]; + r4 = r19 + r0; + r5 = r18 + r0; + r31=0x2ac30; + pc=0x29a00; + run_29800(); return; + case 0x2ac30: + r2 = r0 + 1; + pc=0x2a350; + run_2a000(); return; + case 0x2ac3c: + r31=0x2ac44; + pc=0x24000; + run_24000(); return; + case 0x2ac44: + r2 = 6 << 16; + r2 = r2 + 9072; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 == r0) { + pc=0x2ab74; + continue; + } + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x2ac70; + return; + case 0x2ac70: + r2 = r0 + 1; + pc=0x2a350; + run_2a000(); return; + case 0x2ac7c: + r31=0x2ac84; + pc=0x23000; + run_23000(); return; + case 0x2ac84: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2ac98; + pc=0x1a800; + run_1a800(); return; + case 0x2ac98: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2acac; + pc=0x56fe0; + run_56800(); return; + case 0x2acac: + r4 = r18 + r0; + r31=0x2acb8; + pc=0x42e00; + run_42800(); return; + case 0x2acb8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x2af60; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2acdc; + pc=0x1fc00; + run_1f800(); return; + case 0x2acdc: + r31=0x2ace4; + pc=0x24000; + run_24000(); return; + case 0x2ace4: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8928; + pc=0x2a6c8; + run_2a000(); return; + case 0x2acf8: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2ad0c; + pc=0x1fc00; + run_1f800(); return; + case 0x2ad0c: + r2 = r0 + 1; + pc=0x2a288; + run_2a000(); return; + case 0x2ad18: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8832; + pc=0x2a6c8; + run_2a000(); return; + case 0x2ad2c: + r2 = r0 + 4; + if(r20 == r2) { + pc=0x2af30; + continue; + } + r2 = (r20&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2b0a8; + run_2b000(); return; + } + r2 = r0 + 36; + if(r20 == r2) { + pc=0x2af20; + continue; + } + r2 = r0 + 128; + if(r20 == r2) { + pc=0x2af50; + continue; + } + r2 = r0 + 8; + if(r20 != r2) { + pc=0x2ab74; + continue; + } + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x2ad84; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x2a7e8; + run_2a000(); return; + case 0x2ad84: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x2ad94; + return; + case 0x2ad94: + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x2a7e8; + run_2a000(); return; + case 0x2ada4: + r31=0x2adac; + pc=0x23000; + run_23000(); return; + case 0x2adac: + r16 = r18 + r0; + pc=0x2a408; + run_2a000(); return; + case 0x2adb8: + r31=0x2adc0; + pc=0x29200; + run_29000(); return; + case 0x2adc0: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r20 = r20 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x2b058; + run_2b000(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2adec; + pc=0x1fc00; + run_1f800(); return; + case 0x2adec: + pc=0x2a674; + run_2a000(); return; + case 0x2adf4: + r31=0x2adfc; + pc=0x29200; + run_29000(); return; + case 0x2adfc: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r20 = r20 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x2b048; + run_2b000(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2ae28; + pc=0x1fc00; + run_1f800(); return; + case 0x2ae28: + pc=0x2a774; + run_2a000(); return; + case 0x2ae30: + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x2ae4c; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x2a7e8; + run_2a000(); return; + case 0x2ae4c: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x2ae5c; + return; + case 0x2ae5c: + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x2a7e8; + run_2a000(); return; + case 0x2ae6c: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 9776; + pc=0x2ac18; + continue; + case 0x2ae80: + r31=0x2ae88; + pc=0x23000; + run_23000(); return; + case 0x2ae88: + r31=0x2ae90; + pc=0x29200; + run_29000(); return; + case 0x2ae90: + r2 = r2 << 7; + r20 = r2 | 8; + pc=0x2a784; + run_2a000(); return; + case 0x2aea0: + r2 = 6 << 16; + r2 = r2 + 9180; + case 0x2aea8: + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r4 = r19 + r0; + r5 = r18 + r0; + r31=0x2aec0; + pc=0x29a00; + run_29800(); return; + case 0x2aec0: + r3= page[(r29+120)>>>2]; + r2 = r0 + 1; + if(r3 != r2) { + pc=0x2a34c; + run_2a000(); return; + } + r3= page[(r29+128)>>>2]; + r2 = r0 + 255; + if(r3 != r2) { + pc=0x2a34c; + run_2a000(); return; + } + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 32; + if(r2 == r0) { + pc=0x2a34c; + run_2a000(); return; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6324; + r31=0x2af14; + pc=0x1fc00; + run_1f800(); return; + case 0x2af14: + r2 = r0 + 1; + pc=0x2a350; + run_2a000(); return; + case 0x2af20: + r2 = 6 << 16; + r2 = r2 + 9600; + pc=0x2a7e8; + run_2a000(); return; + case 0x2af30: + r2 = 6 << 16; + r2 = r2 + 9480; + pc=0x2aea8; + continue; + case 0x2af40: + r2 = 6 << 16; + r2 = r2 + 9240; + pc=0x2a7e8; + run_2a000(); return; + case 0x2af50: + r2 = 6 << 16; + r2 = r2 + 9420; + pc=0x2a7e8; + run_2a000(); return; + case 0x2af60: + r31=0x2af68; + pc=0x23000; + run_23000(); return; + case 0x2af68: + r31=0x2af70; + pc=0x29200; + run_29000(); return; + case 0x2af70: + r2 = r2 << 7; + r20 = r2 | 8; + pc=0x2a684; + run_2a000(); return; + case 0x2af80: + r2 = r0 + 384; + if(r20 == r2) { + pc=0x2afa8; + continue; + } + r2 = r0 + 388; + if(r20 != r2) { + pc=0x2ab74; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9540; + pc=0x2aea8; + continue; + case 0x2afa8: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 9660; + pc=0x2a6c8; + run_2a000(); return; + case 0x2afbc: + if(r5 != r0) { + pc=0x2afd0; + continue; + } + r16 = 6 << 16; + pc=0x2a99c; + continue; + case 0x2afd0: + r4 = 6 << 16; + r4 = r4 + 6300; + r31=0x2afe0; + pc=0x21400; + run_21000(); return; + case 0x2afe0: + r16 = 6 << 16; + r3 = r0 + r0; + pc=0x2a964; + continue; + case 0x2aff0: + r16 = 6 << 16; + r2 = r16 + 31424; + r3= page[(r2+36)>>>2]; + pc=0x2a964; continue; case 0x2b000: pc=0x2b000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_2b000() throws ExecutionException { /* 0x2b000 - 0x2b200 */ + private final void run_2b000() throws ExecutionException { /* 0x2b000 - 0x2b800 */ int addr, tmp; for(;;) { switch(pc) { case 0x2b000: - r29 = r29 + -48; - r4 = r29 + 16; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x2b018; - pc=0x16000; - run_16000(); return; - case 0x2b018: - /* Next insn is delay slot */ - r31=0x2b020; - pc=0x20000; - run_20000(); return; + case 0x2b004: + r17 = r17 << 8; + r16 = 6 << 16; + pc=0x2a99c; + run_2a800(); return; + case 0x2b014: + r6 = r17 + r0; + pc=0x2aaf0; + run_2a800(); return; case 0x2b020: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2b080; + if(r5 == r0) { + pc=0x2b014; continue; } - r16 = r0 + r0; - case 0x2b02c: - r2 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r3 = r2 + -1; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r3; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2b068; - continue; - } - case 0x2b044: - r4 = r16 + r0; - /* Next insn is delay slot */ + case 0x2b028: + r4 = 6 << 16; + r4 = r4 + 6300; + r31=0x2b038; + pc=0x21400; + run_21000(); return; + case 0x2b038: + r16 = 6 << 16; + r2 = r0 + r0; + pc=0x2aab8; + run_2a800(); return; + case 0x2b048: r31=0x2b050; - pc=0x25e00; - run_25e00(); return; + pc=0x23000; + run_23000(); return; case 0x2b050: - r3 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r5 = r3 + -1; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r5; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x2b044; - continue; - } + pc=0x2a774; + run_2a000(); return; + case 0x2b058: + r31=0x2b060; + pc=0x23000; + run_23000(); return; + case 0x2b060: + pc=0x2a674; + run_2a000(); return; case 0x2b068: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r16 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2b080: - /* Next insn is delay slot */ - r31=0x2b088; - pc=0x15e00; - run_15e00(); return; + r6 = r17 << 8; + pc=0x2aaf0; + run_2a800(); return; + case 0x2b074: + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+36)>>>2]; + pc=0x2aab8; + run_2a800(); return; case 0x2b088: - r16 = r2 + r0; - /* Next insn is delay slot */ - pc=0x2b02c; - continue; - case 0x2b200: - pc=0x2b200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2b200() throws ExecutionException { /* 0x2b200 - 0x2b400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2b200: - r29 = r29 + -48; - r2 = r0 + -1; - r4 = r0 + 1; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r17; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r2; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - r31=0x2b228; + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6672; + r31=0x2b09c; pc=0x1fc00; - run_1fc00(); return; - case 0x2b228: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2b24c; + run_1f800(); return; + case 0x2b09c: + r2 = r0 + 1; + pc=0x2a350; + run_2a000(); return; + case 0x2b0a8: + if(r20 == r0) { + pc=0x2ac0c; + run_2a800(); return; + } + r2 = r0 + 2; + if(r20 != r2) { + pc=0x2ab74; + run_2a800(); return; + } + pc=0x2aa68; + run_2a800(); return; + case 0x2b200: + r2 = r0 + 3; + if(r4 == r2) { + pc=0x2b218; continue; } r2 = r0 + r0; - case 0x2b234: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r17 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r16 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; + case 0x2b218: + r29 = r29 + -176; + r5 = 6 << 16; + page[(r29+152)>>>2] = r16; + r16 = 6 << 16; + r4 = r16 + 22536; + r5 = r5 + 17104; + page[(r29+172)>>>2] = r31; + page[(r29+168)>>>2] = r20; + page[(r29+164)>>>2] = r19; + page[(r29+160)>>>2] = r18; + page[(r29+156)>>>2] = r17; + r31=0x2b24c; + pc=0x1cc00; + run_1c800(); return; case 0x2b24c: - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r5 = r5 + 12832; - /* Next insn is delay slot */ + r4 = 6 << 16; + r4 = r4 + 21396; + r5 = r29 + 148; + r6 = r16 + 22536; r31=0x2b264; - pc=0x3b800; - run_3b800(); return; + pc=0x42400; + run_42000(); return; case 0x2b264: - r16 = r2 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2b498; - run_2b400(); return; + pc=0x2b2b8; + continue; } - /* Next insn is delay slot */ - r31=0x2b278; - pc=0x20000; - run_20000(); return; - case 0x2b278: + r16= page[(r29+148)>>>2]; + r2 = r16 & 1024; + r17 = r16 & 255; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2b438; - run_2b400(); return; - } - case 0x2b280: - r4 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - if(r4 < 0) { - /* Next insn is delay slot */ - pc=0x2b2b0; + pc=0x2b7bc; continue; } - r2 = readPages[(r28+-30576)>>>12][((r28+-30576)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2b3a0; + r2 = r16 + r0; + case 0x2b288: + r2 = r2 >> 12; + r3 = (r2&0xffffffffL) < (11&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x2b7e8; continue; } - r2 = readPages[(r28+-30580)>>>12][((r28+-30580)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2b3a0; - continue; - } - case 0x2b2b0: - r5 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r4 = r16 + r0; - r6 = r0 + r0; - /* Next insn is delay slot */ - r31=0x2b2c4; - pc=0x3d400; - run_3d400(); return; - case 0x2b2c4: - r2 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2b3a8; - continue; - } - r17 = r0 + -1; - /* Next insn is delay slot */ - pc=0x2b31c; - continue; + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 8116; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; + return; + case 0x2b2b8: + r2 = r0 + r0; + case 0x2b2bc: + r31= page[(r29+172)>>>2]; + r20= page[(r29+168)>>>2]; + r19= page[(r29+164)>>>2]; + r18= page[(r29+160)>>>2]; + r17= page[(r29+156)>>>2]; + r16= page[(r29+152)>>>2]; + r29 = r29 + 176; + pc=r31; + return; case 0x2b2e0: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r2 + 1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r3; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - case 0x2b2f4: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - r31=0x2b304; - return; - case 0x2b304: - r2 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r2; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2b2f0; + pc=0x1a800; + run_1a800(); return; + case 0x2b2f0: + r2= page[(r29+56)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2b3a8; + pc=0x2b310; continue; } - case 0x2b31c: - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x2b2e0; - continue; - } - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x2b344; - pc=0x41600; - run_41600(); return; - case 0x2b344: - r4 = r2 + r0; - if(r2 != r17) { - /* Next insn is delay slot */ - pc=0x2b2f4; - continue; - } - r2 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x2b3a8; - continue; - } - r4 = 7 << 16; - r4 = r4 + -1328; - /* Next insn is delay slot */ - r31=0x2b370; - pc=0x1ac00; - run_1ac00(); return; - case 0x2b370: - r2 = readPages[(r28+-30572)>>>12][((r28+-30572)>>>2)&0x3ff]; - r4 = r0 + r0; - /* Next insn is delay slot */ + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2b310; + pc=0x21200; + run_21000(); return; + case 0x2b310: + r5 = r29 + 24; + r6 = r0 + 24; + r4 = r29 + 120; + r31=0x2b324; + pc=0x56fe0; + run_56800(); return; + case 0x2b324: + r4 = r29 + 120; + r31=0x2b330; + pc=0x42e00; + run_42800(); return; + case 0x2b330: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; pc=r2; - r31=0x2b380; + r31=0x2b340; return; - case 0x2b380: - r2 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r2; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2b370; + case 0x2b340: + r4= page[(r29+128)>>>2]; + r31=0x2b34c; + pc=0x21c00; + run_21800(); return; + case 0x2b34c: + r31=0x2b354; + pc=0x24000; + run_24000(); return; + case 0x2b354: + r2 = r0 + 1; + pc=0x2b2bc; + continue; + case 0x2b360: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x2bc5c; + run_2b800(); return; + } + case 0x2b370: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x2bc44; + run_2b800(); return; + } + r18 = r0 + 1; + r16 = r0 + r0; + case 0x2b384: + r4 = r29 + 120; + r31=0x2b390; + pc=0x29400; + run_29000(); return; + case 0x2b390: + r4 = r29 + 120; + r31=0x2b39c; + pc=0x42c00; + run_42800(); return; + case 0x2b39c: + r31=0x2b3a4; + pc=0x27c00; + run_27800(); return; + case 0x2b3a4: + if(r2 == r0) { + pc=0x2bbe8; + run_2b800(); return; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 35; + if(r3 == r2) { + pc=0x2bce8; + run_2b800(); return; + } + case 0x2b3bc: + r4 = r29 + 16; + r31=0x2b3c8; + pc=0x29400; + run_29000(); return; + case 0x2b3c8: + r4 = r29 + 16; + r31=0x2b3d4; + pc=0x42c00; + run_42800(); return; + case 0x2b3d4: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2b3e4; + return; + case 0x2b3e4: + r4= page[(r29+24)>>>2]; + r31=0x2b3f0; + pc=0x21c00; + run_21800(); return; + case 0x2b3f0: + r4= page[(r29+128)>>>2]; + r31=0x2b3fc; + pc=0x21c00; + run_21800(); return; + case 0x2b3fc: + if(r16 == r0) { + pc=0x2b34c; continue; } - /* Next insn is delay slot */ - pc=0x2b3a8; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2b418; + pc=0x1fc00; + run_1f800(); return; + case 0x2b418: + r31=0x2b420; + pc=0x24000; + run_24000(); return; + case 0x2b420: + pc=0x2b354; continue; - case 0x2b3a0: - /* Next insn is delay slot */ - r31=0x2b3a8; - pc=0x25c00; - run_25c00(); return; - case 0x2b3a8: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x2b3b4; - pc=0x39200; - run_39200(); return; - case 0x2b3b4: - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2b41c; - run_2b400(); return; - } - r2 = readPages[(r28+-30736)>>>12][((r28+-30736)>>>2)&0x3ff]; - r2 = r2 < 2 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2b41c; - run_2b400(); return; - } - /* Next insn is delay slot */ - r31=0x2b3e0; - pc=0x28200; - run_28200(); return; - case 0x2b3e0: - r7 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r4 = 7 << 16; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - r4 = r4 + -1304; - r5 = r2 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2b400; - pc=0x3fc00; - run_3fc00(); return; - case 0x2b400: - pc=0x2b400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2b400() throws ExecutionException { /* 0x2b400 - 0x2b600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2b400: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r17 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r16 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2b41c: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r17 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r16 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; + case 0x2b428: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2b438; return; case 0x2b438: - r4 = r29 + 28; - /* Next insn is delay slot */ + r4 = r0 + 3; r31=0x2b444; - pc=0x15a00; - run_15a00(); return; + pc=0x29600; + run_29000(); return; case 0x2b444: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2b45c; - continue; - } - r2 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x2b480; - continue; - } - case 0x2b45c: - /* Next insn is delay slot */ - r31=0x2b464; - pc=0x20000; - run_20000(); return; - case 0x2b464: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2b280; - run_2b200(); return; - } - r4 = r29 + 24; - /* Next insn is delay slot */ - r31=0x2b478; - pc=0x15a00; - run_15a00(); return; - case 0x2b478: - /* Next insn is delay slot */ - pc=0x2b280; - run_2b200(); return; - case 0x2b480: - r4 = 7 << 16; - r4 = r4 + -1352; - /* Next insn is delay slot */ - r31=0x2b490; - pc=0x1b200; - run_1b200(); return; - case 0x2b490: - /* Next insn is delay slot */ - pc=0x2b45c; - continue; - case 0x2b498: - r4 = 7 << 16; - r4 = r4 + -6824; - /* Next insn is delay slot */ - r31=0x2b4a8; - pc=0x1b000; - run_1b000(); return; - case 0x2b4a8: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x2b234; - run_2b200(); return; - case 0x2b600: - pc=0x2b600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2b600() throws ExecutionException { /* 0x2b600 - 0x2b800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2b600: - r2 = 7 << 16; - r29 = r29 + -32; - r2 = r2 + 12720; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r17 = readPages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff] = r2; - r16 = r0 + 34; - /* Next insn is delay slot */ - pc=0x2b650; - continue; - case 0x2b62c: - /* Next insn is delay slot */ - r31=0x2b634; - pc=0x15e00; - run_15e00(); return; - case 0x2b634: - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2b640; - pc=0x25e00; - run_25e00(); return; - case 0x2b640: - /* Next insn is delay slot */ - r31=0x2b648; - pc=0x20000; - run_20000(); return; - case 0x2b648: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2b6e0; - continue; - } - case 0x2b650: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r16) { - /* Next insn is delay slot */ - pc=0x2b62c; - continue; - } - /* Next insn is delay slot */ - r31=0x2b668; - pc=0x1c600; - run_1c600(); return; - case 0x2b668: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x2b6ac; - continue; - } - case 0x2b678: - if(r4 == r16) { - /* Next insn is delay slot */ - pc=0x2b6c8; - continue; - } - /* Next insn is delay slot */ - r31=0x2b688; - pc=0x18c00; - run_18c00(); return; - case 0x2b688: - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2b694; - pc=0x25e00; - run_25e00(); return; - case 0x2b694: - /* Next insn is delay slot */ - r31=0x2b69c; - pc=0x1c600; - run_1c600(); return; - case 0x2b69c: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x2b678; - continue; - } - case 0x2b6ac: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 3; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2b6c8: - /* Next insn is delay slot */ - r31=0x2b6d0; - pc=0x1c000; - run_1c000(); return; - case 0x2b6d0: - /* Next insn is delay slot */ - r31=0x2b6d8; - pc=0x20000; - run_20000(); return; - case 0x2b6d8: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2b650; - continue; - } - case 0x2b6e0: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff] = r17; r2 = r0 + 1; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; + pc=0x2b2bc; + continue; + case 0x2b450: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2b460; return; + case 0x2b460: + r4 = r0 + 2; + r31=0x2b46c; + pc=0x29600; + run_29000(); return; + case 0x2b46c: + r2 = r0 + 1; + pc=0x2b2bc; + continue; + case 0x2b478: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2b488; + pc=0x1a800; + run_1a800(); return; + case 0x2b488: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x2b4a8; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2b4a8; + pc=0x21200; + run_21000(); return; + case 0x2b4a8: + r4 = r29 + 120; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2b4bc; + pc=0x56fe0; + run_56800(); return; + case 0x2b4bc: + r4 = r29 + 120; + r31=0x2b4c8; + pc=0x42e00; + run_42800(); return; + case 0x2b4c8: + r31=0x2b4d0; + pc=0x27c00; + run_27800(); return; + case 0x2b4d0: + if(r2 != r0) { + pc=0x2b808; + run_2b800(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2b4ec; + pc=0x1fc00; + run_1f800(); return; + case 0x2b4ec: + r2 = r0 + 1; + pc=0x2b2bc; + continue; + case 0x2b4f8: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2b508; + return; + case 0x2b508: + r4 = r0 + 2; + r31=0x2b514; + pc=0x29800; + run_29800(); return; + case 0x2b514: + r2 = r0 + 1; + pc=0x2b2bc; + continue; + case 0x2b520: + r31=0x2b528; + pc=0x27e00; + run_27800(); return; + case 0x2b528: + page[(r29+144)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x2bc1c; + run_2b800(); return; + } + case 0x2b53c: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x2b8ac; + run_2b800(); return; + } + r3 = r0 + 91; + if(r2 == r3) { + pc=0x2b940; + run_2b800(); return; + } + if(r2 == r0) { + pc=0x2b930; + run_2b800(); return; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x2b570; + pc=0x1a800; + run_1a800(); return; + case 0x2b570: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2b584; + pc=0x56fe0; + run_56800(); return; + case 0x2b584: + r4 = r18 + r0; + r31=0x2b590; + pc=0x42e00; + run_42800(); return; + case 0x2b590: + r19= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r19 = ((r0 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; + r19 = r19 << 2; + if(r2 != r0) { + pc=0x2be44; + run_2b800(); return; + } + case 0x2b5a8: + r31=0x2b5b0; + pc=0x29200; + run_29000(); return; + case 0x2b5b0: + r2 = r2 << 7; + r19 = r2 | r19; + case 0x2b5b8: + r31=0x2b5c0; + pc=0x24000; + run_24000(); return; + case 0x2b5c0: + r2 = r0 + 256; + if(r19 == r2) { + pc=0x2be30; + run_2b800(); return; + } + r2 = (r19&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2bc70; + run_2b800(); return; + } + r2 = r0 + 392; + if(r19 == r2) { + pc=0x2bdd4; + run_2b800(); return; + } + r2 = (r19&0xffffffffL) < (393&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2be80; + run_2b800(); return; + } + r2 = r0 + 516; + if(r19 == r2) { + pc=0x2bde4; + run_2b800(); return; + } + r2 = r0 + 520; + if(r19 == r2) { + pc=0x2bdf4; + run_2b800(); return; + } + r2 = r0 + 404; + if(r19 != r2) { + pc=0x2b88c; + run_2b800(); return; + } + r2 = 6 << 16; + r2 = r2 + 9360; + case 0x2b61c: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x2b634; + pc=0x29a00; + run_29800(); return; + case 0x2b634: + r2 = r0 + 1; + pc=0x2b2bc; + continue; + case 0x2b640: + r5 = 6 << 16; + r4 = r29 + 16; + r5 = r5 + 6828; + r6 = r17 + r0; + r31=0x2b658; + pc=0x50c00; + run_50800(); return; + case 0x2b658: + r4 = r0 + -2; + r5 = r29 + 16; + r31=0x2b668; + pc=0x1fc00; + run_1f800(); return; + case 0x2b668: + r2 = r0 + 1; + pc=0x2b2bc; + continue; + case 0x2b674: + r4 = r17 + r0; + r31=0x2b680; + pc=0x29e00; + run_29800(); return; + case 0x2b680: + r2 = r0 + 1; + pc=0x2b2bc; + continue; + case 0x2b68c: + r31=0x2b694; + pc=0x27e00; + run_27800(); return; + case 0x2b694: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r5 = r0 + 32; + r19 = r2 + r0; + if(r3 == r5) { + pc=0x2bc30; + run_2b800(); return; + } + case 0x2b6a8: + r5 = r0 + 35; + if(r3 == r5) { + pc=0x2ba18; + run_2b800(); return; + } + r2 = r0 + 91; + if(r3 == r2) { + pc=0x2bb6c; + run_2b800(); return; + } + if(r3 == r0) { + pc=0x2b9d8; + run_2b800(); return; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x2b6dc; + pc=0x1a800; + run_1a800(); return; + case 0x2b6dc: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2b6f0; + pc=0x56fe0; + run_56800(); return; + case 0x2b6f0: + r4 = r18 + r0; + r31=0x2b6fc; + pc=0x42e00; + run_42800(); return; + case 0x2b6fc: + r20= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; + r20 = r20 << 2; + if(r2 != r0) { + pc=0x2bd98; + run_2b800(); return; + } + case 0x2b714: + r31=0x2b71c; + pc=0x29200; + run_29000(); return; + case 0x2b71c: + r2 = r2 << 7; + r20 = r2 | r20; + case 0x2b724: + r31=0x2b72c; + pc=0x24000; + run_24000(); return; + case 0x2b72c: + r2 = r0 + 2; + if(r20 == r2) { + pc=0x2ba5c; + run_2b800(); return; + } + r2 = (r20&0xffffffffL) < (3&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2b878; + run_2b800(); return; + } + r2 = r0 + 256; + if(r20 == r2) { + pc=0x2bc08; + run_2b800(); return; + } + r2 = r0 + 384; + if(r20 != r2) { + pc=0x2b88c; + run_2b800(); return; + } + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8736; + case 0x2b768: + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r4 = r19 + r0; + r5 = r18 + r0; + r31=0x2b780; + pc=0x29a00; + run_29800(); return; + case 0x2b780: + r2 = r0 + 1; + pc=0x2b2bc; + continue; + case 0x2b78c: + r2 = r0 + 248; + if(r17 == r2) { + pc=0x2b840; + run_2b800(); return; + } + case 0x2b798: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2b7a8; + return; + case 0x2b7a8: + r31=0x2b7b0; + pc=0x24000; + run_24000(); return; + case 0x2b7b0: + r2 = r0 + 1; + pc=0x2b2bc; + continue; + case 0x2b7bc: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x2b7cc; + return; + case 0x2b7cc: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x2b7dc; + return; + case 0x2b7dc: + r2= page[(r29+148)>>>2]; + pc=0x2b288; + continue; + case 0x2b7e8: + r4 = 6 << 16; + r4 = r4 + 6908; + r5 = r17 + r0; + r31=0x2b7fc; + pc=0x21400; + run_21000(); return; + case 0x2b7fc: + r2 = r0 + 1; case 0x2b800: pc=0x2b800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_2b800() throws ExecutionException { /* 0x2b800 - 0x2ba00 */ + private final void run_2b800() throws ExecutionException { /* 0x2b800 - 0x2c000 */ int addr, tmp; for(;;) { switch(pc) { case 0x2b800: - r2 = readPages[(r28+-32764)>>>12][((r28+-32764)>>>2)&0x3ff]; - r29 = r29 + -64; - r2 = r2 + -1; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r30; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r19; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r18; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r17; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r16; - r30 = r29 + r0; - writePages[(r28+-32764)>>>12][((r28+-32764)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x2b934; - continue; - } - case 0x2b834: - r4 = r0 + 1; - /* Next insn is delay slot */ - r31=0x2b840; - pc=0x1fc00; - run_1fc00(); return; - case 0x2b840: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2b874; - continue; - } - r29 = r30 + r0; - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r30 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r19 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r18 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r17 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r16 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 64; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2b874: - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r5 = r5 + 12832; - /* Next insn is delay slot */ - r31=0x2b88c; - pc=0x3b800; - run_3b800(); return; - case 0x2b88c: - r16 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2b94c; - continue; - } - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r17 = r29 + r0; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r3 = r3 + 7; - r3 = r3 >>> 3; - r3 = r3 << 3; - r29 = r29 - r3; - r3 = r29 + 16; - r4 = r3 + r0; - /* Next insn is delay slot */ - r31=0x2b8c8; - pc=0x42e00; - run_42e00(); return; - case 0x2b8c8: - r3 = r2 + r0; - r19 = readPages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff]; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r18 = tmp; - r2 = r30 + 16; - r4 = r16 + r0; - r5 = r3 + r0; - writePages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x2b8ec; - pc=0x19c00; - run_19c00(); return; - case 0x2b8ec: - writePages[(r28+-32244)>>>12][((r28+-32244)>>>2)&0x3ff] = r19; - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r29 = r17 + r0; - case 0x2b8f8: - r2 = readPages[(r28+-32764)>>>12][((r28+-32764)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r28+-32764)>>>12][((r28+-32764)>>>2)&0x3ff] = r2; - r29 = r30 + r0; - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r30 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r19 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r18 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r17 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r16 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 64; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2b934: - r4 = 7 << 16; - r4 = r4 + -1244; - /* Next insn is delay slot */ - r31=0x2b944; - pc=0x1b200; - run_1b200(); return; - case 0x2b944: - /* Next insn is delay slot */ - pc=0x2b834; - continue; - case 0x2b94c: - r4 = 7 << 16; - r4 = r4 + -6824; - /* Next insn is delay slot */ - r31=0x2b95c; - pc=0x1b000; - run_1b000(); return; - case 0x2b95c: - /* Next insn is delay slot */ - pc=0x2b8f8; - continue; - case 0x2ba00: - pc=0x2ba00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2ba00() throws ExecutionException { /* 0x2ba00 - 0x2bc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2ba00: - r29 = r29 + -24; - r4 = r0 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x2ba14; - pc=0x1fc00; - run_1fc00(); return; - case 0x2ba14: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2ba60; - continue; - } - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2ba60; - continue; - } - r2 = readPages[(r28+-30840)>>>12][((r28+-30840)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2ba74; - continue; - } - r4 = 7 << 16; - r4 = r4 + -1204; - /* Next insn is delay slot */ - r31=0x2ba4c; - pc=0x1ac00; - run_1ac00(); return; - case 0x2ba4c: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2ba60: - r2 = r0 + r0; - case 0x2ba64: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2ba74: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x2ba80; - pc=0x17a00; - run_17a00(); return; - case 0x2ba80: - writePages[(r28+-30840)>>>12][((r28+-30840)>>>2)&0x3ff] = r2; - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2ba64; - continue; - case 0x2bc00: - pc=0x2bc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2bc00() throws ExecutionException { /* 0x2bc00 - 0x2be00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2bc00: - r29 = r29 + -80; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = r17; - r17 = 7 << 16; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r16; - r16 = r17 + 30664; - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - writePages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff] = r31; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r18; - r2 = r2 & 16; - r18 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2bce4; - continue; - } - r4 = r29 + 40; - /* Next insn is delay slot */ - r31=0x2bc3c; - pc=0x16000; - run_16000(); return; - case 0x2bc3c: - /* Next insn is delay slot */ - r31=0x2bc44; - pc=0x20000; - run_20000(); return; - case 0x2bc44: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2bd34; - continue; - } - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x2bc58; - pc=0x16000; - run_16000(); return; - case 0x2bc58: - /* Next insn is delay slot */ - r31=0x2bc60; - pc=0x20000; - run_20000(); return; - case 0x2bc60: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2bd20; - continue; - } - case 0x2bc68: - r2 = readPages[(r17+30664)>>>12][((r17+30664)>>>2)&0x3ff]; - addr=r2+8; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r17 = tmp; - case 0x2bc74: - r2 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r16 = r18 + 1; - r18 = r18 & r2; - r2 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - if(r18 != r2) { - /* Next insn is delay slot */ - pc=0x2bc9c; - continue; - } - /* Next insn is delay slot */ - pc=0x2bcc4; - continue; - case 0x2bc98: - r16 = r5 + r0; - case 0x2bc9c: + pc=0x2b2bc; + run_2b000(); return; + case 0x2b808: + r2= page[(r28+-31264)>>>2]; r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x2bca8; - pc=0x25e00; - run_25e00(); return; - case 0x2bca8: - r3 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r5 = r16 + 1; - r16 = r16 & r3; - r3 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - if(r16 != r3) { - /* Next insn is delay slot */ - pc=0x2bc98; - continue; - } - case 0x2bcc4: - r31 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - r18 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r17 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r16 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; + pc=r2; + r31=0x2b818; + return; + case 0x2b818: + r2= page[(r28+-31264)>>>2]; + r4= page[(r29+128)>>>2]; + pc=r2; + r31=0x2b828; + return; + case 0x2b828: + r4 = r0 + 3; + r31=0x2b834; + pc=0x29800; + run_29800(); return; + case 0x2b834: r2 = r0 + 1; - r29 = r29 + 80; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2bce4: - r4 = 7 << 16; - r4 = r4 + -6964; - /* Next insn is delay slot */ - r31=0x2bcf4; - pc=0x1b000; - run_1b000(); return; - case 0x2bcf4: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r31 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - r2 = r2 | 16; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - r18 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r17 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r16 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 80; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2bd20: - /* Next insn is delay slot */ - r31=0x2bd28; - pc=0x15e00; - run_15e00(); return; - case 0x2bd28: - r17 = r2 + r0; - /* Next insn is delay slot */ - pc=0x2bc74; - continue; - case 0x2bd34: - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x2bd44; - pc=0x1b000; - run_1b000(); return; - case 0x2bd44: - r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x2bd50; - pc=0x16000; - run_16000(); return; - case 0x2bd50: - /* Next insn is delay slot */ - r31=0x2bd58; - pc=0x20000; - run_20000(); return; - case 0x2bd58: + pc=0x2b2bc; + run_2b000(); return; + case 0x2b840: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 16; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2bc68; + pc=0x2b798; + run_2b000(); return; + } + r4 = 6 << 16; + r4 = r4 + 6768; + r31=0x2b870; + pc=0x21200; + run_21000(); return; + case 0x2b870: + pc=0x2b798; + run_2b000(); return; + case 0x2b878: + if(r20 == r0) { + pc=0x2bbd4; continue; } - /* Next insn is delay slot */ - pc=0x2bd20; - continue; - case 0x2be00: - pc=0x2be00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2be00() throws ExecutionException { /* 0x2be00 - 0x2c000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2be00: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r29 = r29 + -288; - r3 = r0 + 60; - writePages[(r29+284)>>>12][((r29+284)>>>2)&0x3ff] = r31; - writePages[(r29+280)>>>12][((r29+280)>>>2)&0x3ff] = r18; - writePages[(r29+276)>>>12][((r29+276)>>>2)&0x3ff] = r17; - writePages[(r29+272)>>>12][((r29+272)>>>2)&0x3ff] = r16; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x2be88; - continue; - } - r3 = r0 + 34; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x2be88; - continue; - } - r16 = readPages[(r28+-32344)>>>12][((r28+-32344)>>>2)&0x3ff]; - r17 = readPages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x2be40; - pc=0x1f400; - run_1f400(); return; - case 0x2be40: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2bf34; - continue; - } - case 0x2be48: - r2 = r29 + 16; - writePages[(r28+-32344)>>>12][((r28+-32344)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x2be58; - pc=0x1b600; - run_1b600(); return; - case 0x2be58: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2be64; - continue; - } - writePages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff] = r17; - case 0x2be64: - r31 = readPages[(r29+284)>>>12][((r29+284)>>>2)&0x3ff]; - r18 = readPages[(r29+280)>>>12][((r29+280)>>>2)&0x3ff]; - r17 = readPages[(r29+276)>>>12][((r29+276)>>>2)&0x3ff]; - writePages[(r28+-32344)>>>12][((r28+-32344)>>>2)&0x3ff] = r16; r2 = r0 + 1; - r16 = readPages[(r29+272)>>>12][((r29+272)>>>2)&0x3ff]; - r29 = r29 + 288; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2be88: - r4 = r0 + 1; - /* Next insn is delay slot */ - r31=0x2be94; + if(r20 == r2) { + pc=0x2b9e0; + continue; + } + case 0x2b88c: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 8592; + r31=0x2b8a0; pc=0x1fc00; - run_1fc00(); return; - case 0x2be94: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2bebc; + run_1f800(); return; + case 0x2b8a0: + r2 = r0 + 1; + pc=0x2b2bc; + run_2b000(); return; + case 0x2b8ac: + r31=0x2b8b4; + pc=0x23000; + run_23000(); return; + case 0x2b8b4: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2b8c8; + pc=0x1a800; + run_1a800(); return; + case 0x2b8c8: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2b8dc; + pc=0x56fe0; + run_56800(); return; + case 0x2b8dc: + r4 = r18 + r0; + r31=0x2b8e8; + pc=0x42c00; + run_42800(); return; + case 0x2b8e8: + r31=0x2b8f0; + pc=0x24000; + run_24000(); return; + case 0x2b8f0: + r2 = 6 << 16; + r2 = r2 + 10240; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r5 = tmp; + r4 = r29 + 144; + r6 = r16 & 768; + r31=0x2b910; + pc=0x28e00; + run_28800(); return; + case 0x2b910: + r4= page[(r29+144)>>>2]; + r6 = r2 + r0; + r5 = r18 + r0; + r31=0x2b924; + pc=0x29a00; + run_29800(); return; + case 0x2b924: + r2 = r0 + 1; + pc=0x2b2bc; + run_2b000(); return; + case 0x2b930: + r31=0x2b938; + pc=0x24000; + run_24000(); return; + case 0x2b938: + pc=0x2b88c; + continue; + case 0x2b940: + r31=0x2b948; + pc=0x23000; + run_23000(); return; + case 0x2b948: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2b95c; + pc=0x1a800; + run_1a800(); return; + case 0x2b95c: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2b970; + pc=0x56fe0; + run_56800(); return; + case 0x2b970: + r4 = r18 + r0; + r31=0x2b97c; + pc=0x42e00; + run_42800(); return; + case 0x2b97c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x2bd1c; continue; } - r31 = readPages[(r29+284)>>>12][((r29+284)>>>2)&0x3ff]; - r18 = readPages[(r29+280)>>>12][((r29+280)>>>2)&0x3ff]; - r17 = readPages[(r29+276)>>>12][((r29+276)>>>2)&0x3ff]; - r16 = readPages[(r29+272)>>>12][((r29+272)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 288; - /* Next insn is delay slot */ - pc=r31; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2b9a0; + pc=0x1fc00; + run_1f800(); return; + case 0x2b9a0: + r31=0x2b9a8; + pc=0x24000; + run_24000(); return; + case 0x2b9a8: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 10008; + case 0x2b9b4: + r2 = r17 + r2; + r6= page[(r2+0)>>>2]; + r4= page[(r29+144)>>>2]; + r5 = r18 + r0; + r31=0x2b9cc; + pc=0x29a00; + run_29800(); return; + case 0x2b9cc: + r2 = r0 + 1; + pc=0x2b2bc; + run_2b000(); return; + case 0x2b9d8: + r31=0x2b9e0; + pc=0x24000; + run_24000(); return; + case 0x2b9e0: + r2 = 6 << 16; + r2 = r2 + 9072; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 == r0) { + pc=0x2b88c; + continue; + } + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x2ba0c; return; - case 0x2bebc: - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r16 = r29 + 16; - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r16 + r0; - r17 = readPages[(r28+-32344)>>>12][((r28+-32344)>>>2)&0x3ff]; - r18 = readPages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x2bedc; - pc=0x19000; - run_19000(); return; - case 0x2bedc: - r2 = 7 << 16; - r2 = r2 + 12712; - writePages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff] = r2; - writePages[(r28+-32344)>>>12][((r28+-32344)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x2bef4; - pc=0x1b600; - run_1b600(); return; - case 0x2bef4: + case 0x2ba0c: + r2 = r0 + 1; + pc=0x2b2bc; + run_2b000(); return; + case 0x2ba18: + r31=0x2ba20; + pc=0x23000; + run_23000(); return; + case 0x2ba20: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2ba34; + pc=0x1a800; + run_1a800(); return; + case 0x2ba34: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2ba48; + pc=0x56fe0; + run_56800(); return; + case 0x2ba48: + r4 = r18 + r0; + r31=0x2ba54; + pc=0x42c00; + run_42800(); return; + case 0x2ba54: + r31=0x2ba5c; + pc=0x24000; + run_24000(); return; + case 0x2ba5c: + r2 = 6 << 16; + r2 = r2 + 9024; + r17 = r17 + r2; + r5 = r16 & 768; + r2 = r0 + 256; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r17 = tmp; + if(r5 == r2) { + pc=0x2bf0c; + continue; + } + r2 = (r5&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ + pc=0x2bed8; + continue; + } + r2 = r0 + 512; + if(r5 == r2) { + pc=0x2bf1c; + continue; + } + r2 = r0 + 768; + if(r5 != r2) { + pc=0x2beec; + continue; + } + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+40)>>>2]; + case 0x2baac: + r3= page[(r16+31424)>>>2]; + r3= page[(r3+4)>>>2]; + r3 = r3 & 2; + if(r3 == r0) { + pc=0x2bae4; + continue; + } + if(r19 != r0) { + pc=0x2badc; + continue; + } + r19 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + r2 = r0 + 2; + r19 = r2 - r19; + case 0x2badc: + r2 = r17 << 8; + r17 = r2 | r17; + case 0x2bae4: + r4 = r19 + r0; + r5 = r18 + r0; + r6 = r17 + r0; + r31=0x2baf8; + pc=0x29a00; + run_29800(); return; + case 0x2baf8: + r2= page[(r16+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 4; + if(r2 == r0) { + pc=0x2b354; + run_2b000(); return; + } + r3= page[(r29+120)>>>2]; + r2 = r0 + 1; + if(r3 != r2) { + pc=0x2b354; + run_2b000(); return; + } + r2= page[(r29+128)>>>2]; + if(r2 == r0) { + pc=0x2b354; + run_2b000(); return; + } + r2 = r0 + 139; + if(r17 == r2) { pc=0x2bf50; continue; } - r4 = r17 + r0; - r5 = r16 + r0; - r6 = r0 + 256; - /* Next insn is delay slot */ - r31=0x2bf10; - pc=0x48fdc; - run_48e00(); return; - case 0x2bf10: - writePages[(r28+-32344)>>>12][((r28+-32344)>>>2)&0x3ff] = r17; + r2 = r0 + 171; + if(r17 != r2) { + pc=0x2b354; + run_2b000(); return; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6720; + r31=0x2bb60; + pc=0x1fc00; + run_1f800(); return; + case 0x2bb60: r2 = r0 + 1; - case 0x2bf18: - r31 = readPages[(r29+284)>>>12][((r29+284)>>>2)&0x3ff]; - r18 = readPages[(r29+280)>>>12][((r29+280)>>>2)&0x3ff]; - r17 = readPages[(r29+276)>>>12][((r29+276)>>>2)&0x3ff]; - r16 = readPages[(r29+272)>>>12][((r29+272)>>>2)&0x3ff]; - r29 = r29 + 288; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2bf34: - /* Next insn is delay slot */ - r31=0x2bf3c; - pc=0x19200; - run_19200(); return; - case 0x2bf3c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2be48; + pc=0x2b2bc; + run_2b000(); return; + case 0x2bb6c: + r31=0x2bb74; + pc=0x23000; + run_23000(); return; + case 0x2bb74: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2bb88; + pc=0x1a800; + run_1a800(); return; + case 0x2bb88: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2bb9c; + pc=0x56fe0; + run_56800(); return; + case 0x2bb9c: + r4 = r18 + r0; + r31=0x2bba8; + pc=0x42e00; + run_42800(); return; + case 0x2bba8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x2bcfc; continue; } - writePages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x2be48; - continue; - case 0x2bf50: - writePages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff] = r18; - writePages[(r28+-32344)>>>12][((r28+-32344)>>>2)&0x3ff] = r17; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2bbcc; + pc=0x1fc00; + run_1f800(); return; + case 0x2bbcc: + r31=0x2bbd4; + pc=0x24000; + run_24000(); return; + case 0x2bbd4: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8928; + pc=0x2b768; + run_2b000(); return; + case 0x2bbe8: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2bbfc; + pc=0x1fc00; + run_1f800(); return; + case 0x2bbfc: r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2bf18; + pc=0x2b2bc; + run_2b000(); return; + case 0x2bc08: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8832; + pc=0x2b768; + run_2b000(); return; + case 0x2bc1c: + r31=0x2bc24; + pc=0x23000; + run_23000(); return; + case 0x2bc24: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2b53c; + run_2b000(); return; + case 0x2bc30: + r31=0x2bc38; + pc=0x23000; + run_23000(); return; + case 0x2bc38: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + pc=0x2b6a8; + run_2b000(); return; + case 0x2bc44: + r31=0x2bc4c; + pc=0x23000; + run_23000(); return; + case 0x2bc4c: + r18 = r0 + r0; + r16 = r0 + 1; + pc=0x2b384; + run_2b000(); return; + case 0x2bc5c: + r31=0x2bc64; + pc=0x23000; + run_23000(); return; + case 0x2bc64: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2b370; + run_2b000(); return; + case 0x2bc70: + r2 = r0 + 4; + if(r19 == r2) { + pc=0x2bd5c; + continue; + } + r2 = (r19&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2bf70; + continue; + } + r2 = r0 + 36; + if(r19 == r2) { + pc=0x2bd4c; + continue; + } + r2 = r0 + 128; + if(r19 == r2) { + pc=0x2bd3c; + continue; + } + r2 = r0 + 8; + if(r19 != r2) { + pc=0x2b88c; + continue; + } + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x2bcc8; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x2b61c; + run_2b000(); return; + case 0x2bcc8: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x2bcd8; + return; + case 0x2bcd8: + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x2b61c; + run_2b000(); return; + case 0x2bce8: + r31=0x2bcf0; + pc=0x23000; + run_23000(); return; + case 0x2bcf0: + r16 = r18 + r0; + pc=0x2b3bc; + run_2b000(); return; + case 0x2bcfc: + r31=0x2bd04; + pc=0x23000; + run_23000(); return; + case 0x2bd04: + r31=0x2bd0c; + pc=0x29200; + run_29000(); return; + case 0x2bd0c: + r2 = r2 << 7; + r20 = r2 | 8; + pc=0x2b724; + run_2b000(); return; + case 0x2bd1c: + r31=0x2bd24; + pc=0x23000; + run_23000(); return; + case 0x2bd24: + r31=0x2bd2c; + pc=0x29200; + run_29000(); return; + case 0x2bd2c: + r2 = r2 << 7; + r19 = r2 | 8; + pc=0x2b5b8; + run_2b000(); return; + case 0x2bd3c: + r2 = 6 << 16; + r2 = r2 + 9420; + pc=0x2b61c; + run_2b000(); return; + case 0x2bd4c: + r2 = 6 << 16; + r2 = r2 + 9600; + pc=0x2b61c; + run_2b000(); return; + case 0x2bd5c: + r2 = 6 << 16; + r2 = r2 + 9480; + case 0x2bd64: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x2bd7c; + pc=0x29a00; + run_29800(); return; + case 0x2bd7c: + r4= page[(r29+120)>>>2]; + r5 = r29 + 128; + r31=0x2bd8c; + pc=0x29000; + run_29000(); return; + case 0x2bd8c: + r2 = r0 + 1; + pc=0x2b2bc; + run_2b000(); return; + case 0x2bd98: + r31=0x2bda0; + pc=0x29200; + run_29000(); return; + case 0x2bda0: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r20 = r20 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x2bf40; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2bdcc; + pc=0x1fc00; + run_1f800(); return; + case 0x2bdcc: + pc=0x2b714; + run_2b000(); return; + case 0x2bdd4: + r2 = 6 << 16; + r2 = r2 + 9240; + pc=0x2b61c; + run_2b000(); return; + case 0x2bde4: + r2 = 6 << 16; + r2 = r2 + 9180; + pc=0x2bd64; + continue; + case 0x2bdf4: + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x2be10; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x2b61c; + run_2b000(); return; + case 0x2be10: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x2be20; + return; + case 0x2be20: + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x2b61c; + run_2b000(); return; + case 0x2be30: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 9776; + pc=0x2b9b4; + continue; + case 0x2be44: + r31=0x2be4c; + pc=0x29200; + run_29000(); return; + case 0x2be4c: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r19 = r19 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x2bf30; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2be78; + pc=0x1fc00; + run_1f800(); return; + case 0x2be78: + pc=0x2b5a8; + run_2b000(); return; + case 0x2be80: + r2 = r0 + 384; + if(r19 == r2) { + pc=0x2bea8; + continue; + } + r2 = r0 + 388; + if(r19 != r2) { + pc=0x2b88c; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9540; + pc=0x2bd64; + continue; + case 0x2bea8: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 9660; + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r4= page[(r29+144)>>>2]; + r5 = r18 + r0; + r31=0x2becc; + pc=0x29a00; + run_29800(); return; + case 0x2becc: + r2 = r0 + 1; + pc=0x2b2bc; + run_2b000(); return; + case 0x2bed8: + if(r5 != r0) { + pc=0x2beec; + continue; + } + r16 = 6 << 16; + pc=0x2bae4; + continue; + case 0x2beec: + r4 = 6 << 16; + r4 = r4 + 6300; + r31=0x2befc; + pc=0x21400; + run_21000(); return; + case 0x2befc: + r16 = 6 << 16; + r2 = r0 + r0; + pc=0x2baac; + continue; + case 0x2bf0c: + r17 = r17 << 8; + r16 = 6 << 16; + pc=0x2bae4; + continue; + case 0x2bf1c: + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+36)>>>2]; + pc=0x2baac; + continue; + case 0x2bf30: + r31=0x2bf38; + pc=0x23000; + run_23000(); return; + case 0x2bf38: + pc=0x2b5a8; + run_2b000(); return; + case 0x2bf40: + r31=0x2bf48; + pc=0x23000; + run_23000(); return; + case 0x2bf48: + pc=0x2b714; + run_2b000(); return; + case 0x2bf50: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6672; + r31=0x2bf64; + pc=0x1fc00; + run_1f800(); return; + case 0x2bf64: + r2 = r0 + 1; + pc=0x2b2bc; + run_2b000(); return; + case 0x2bf70: + if(r19 == r0) { + pc=0x2b9a8; + continue; + } + r2 = r0 + 2; + if(r19 != r2) { + pc=0x2b88c; + continue; + } + pc=0x2b8f0; continue; case 0x2c000: pc=0x2c000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_2c000() throws ExecutionException { /* 0x2c000 - 0x2c200 */ + private final void run_2c000() throws ExecutionException { /* 0x2c000 - 0x2c800 */ int addr, tmp; for(;;) { switch(pc) { case 0x2c000: - r29 = r29 + -24; - r4 = r0 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x2c014; - pc=0x1fc00; - run_1fc00(); return; - case 0x2c014: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2c02c; + r2 = r0 + 3; + if(r4 == r2) { + pc=0x2c018; continue; } - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2c040; - continue; - } - case 0x2c02c: r2 = r0 + r0; - case 0x2c030: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ pc=r31; return; - case 0x2c040: - /* Next insn is delay slot */ - r31=0x2c048; - pc=0x26c00; - run_26c00(); return; - case 0x2c048: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2c02c; - continue; - } - /* Next insn is delay slot */ - r31=0x2c058; - pc=0x20000; - run_20000(); return; - case 0x2c058: + case 0x2c018: + r29 = r29 + -176; + r5 = 6 << 16; + page[(r29+152)>>>2] = r16; + r16 = 6 << 16; + r4 = r16 + 22536; + r5 = r5 + 17104; + page[(r29+172)>>>2] = r31; + page[(r29+168)>>>2] = r20; + page[(r29+164)>>>2] = r19; + page[(r29+160)>>>2] = r18; + page[(r29+156)>>>2] = r17; + r31=0x2c04c; + pc=0x1cc00; + run_1c800(); return; + case 0x2c04c: + r4 = 6 << 16; + r4 = r4 + 20916; + r5 = r29 + 148; + r6 = r16 + 22536; + r31=0x2c064; + pc=0x42400; + run_42000(); return; + case 0x2c064: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2c08c; - continue; - } - /* Next insn is delay slot */ - r31=0x2c068; - pc=0x1f400; - run_1f400(); return; - case 0x2c068: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2c02c; - continue; - } - /* Next insn is delay slot */ - r31=0x2c078; - pc=0x26800; - run_26800(); return; - case 0x2c078: - if(r2 != r0) { - /* Next insn is delay slot */ pc=0x2c0b8; continue; } - case 0x2c080: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2c030; - continue; - case 0x2c08c: - /* Next insn is delay slot */ - r31=0x2c094; - pc=0x26a00; - run_26a00(); return; - case 0x2c094: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2c080; + r16= page[(r29+148)>>>2]; + r2 = r16 & 1024; + r17 = r16 & 255; + if(r2 != r0) { + pc=0x2c5c4; continue; } - r4 = 7 << 16; - r4 = r4 + -1164; - /* Next insn is delay slot */ - r31=0x2c0ac; - pc=0x1ac00; - run_1ac00(); return; - case 0x2c0ac: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2c030; - continue; + r2 = r16 + r0; + case 0x2c088: + r2 = r2 >> 12; + r3 = (r2&0xffffffffL) < (11&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x2c5f0; + continue; + } + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 8160; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; + return; case 0x2c0b8: - r4 = 7 << 16; - r4 = r4 + -1100; - /* Next insn is delay slot */ + r4 = 6 << 16; + r4 = r4 + 20876; r31=0x2c0c8; - pc=0x1b000; - run_1b000(); return; + pc=0x2a200; + run_2a000(); return; case 0x2c0c8: - /* Next insn is delay slot */ - pc=0x2c02c; - continue; - case 0x2c200: - pc=0x2c200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2c200() throws ExecutionException { /* 0x2c200 - 0x2c400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2c200: - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - r29 = r29 + -48; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2c228; + pc=0x2c0f8; continue; } - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 48; - /* Next insn is delay slot */ + case 0x2c0d0: + r2 = r0 + 1; + case 0x2c0d4: + r31= page[(r29+172)>>>2]; + r20= page[(r29+168)>>>2]; + r19= page[(r29+164)>>>2]; + r18= page[(r29+160)>>>2]; + r17= page[(r29+156)>>>2]; + r16= page[(r29+152)>>>2]; + r29 = r29 + 176; pc=r31; return; - case 0x2c228: + case 0x2c0f8: + r4 = 6 << 16; + r4 = r4 + 21396; + r31=0x2c108; + pc=0x2a200; + run_2a000(); return; + case 0x2c108: + pc=0x2c0d4; + continue; + case 0x2c110: r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x2c234; - pc=0x16000; - run_16000(); return; - case 0x2c234: - r4 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r2 = r4 + 128; - r2 = (r2&0xffffffffL) < (384&0xffffffffL) ? 1 : 0; + r5 = r0 + r0; + r31=0x2c120; + pc=0x1a800; + run_1a800(); return; + case 0x2c120: + r2= page[(r29+56)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2c270; + pc=0x2c140; continue; } - case 0x2c24c: - r4 = r4 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x2c25c; - pc=0x26600; - run_26600(); return; - case 0x2c25c: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r2 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2c140; + pc=0x21200; + run_21000(); return; + case 0x2c140: + r5 = r29 + 24; + r6 = r0 + 24; + r4 = r29 + 120; + r31=0x2c154; + pc=0x56fe0; + run_56800(); return; + case 0x2c154: + r4 = r29 + 120; + r31=0x2c160; + pc=0x42e00; + run_42800(); return; + case 0x2c160: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2c170; return; - case 0x2c270: - r4 = 7 << 16; - r4 = r4 + -6936; - /* Next insn is delay slot */ - r31=0x2c280; - pc=0x1b000; - run_1b000(); return; - case 0x2c280: - r4 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x2c24c; + case 0x2c170: + r4= page[(r29+128)>>>2]; + r31=0x2c17c; + pc=0x21c00; + run_21800(); return; + case 0x2c17c: + r31=0x2c184; + pc=0x24000; + run_24000(); return; + case 0x2c184: + pc=0x2c0d0; continue; - case 0x2c400: - pc=0x2c400; + case 0x2c18c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x2ca18; + run_2c800(); return; + } + case 0x2c19c: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x2ca00; + run_2c800(); return; + } + r18 = r0 + 1; + r16 = r0 + r0; + case 0x2c1b0: + r4 = r29 + 120; + r31=0x2c1bc; + pc=0x29400; + run_29000(); return; + case 0x2c1bc: + r4 = r29 + 120; + r31=0x2c1c8; + pc=0x42c00; + run_42800(); return; + case 0x2c1c8: + r31=0x2c1d0; + pc=0x27c00; + run_27800(); return; + case 0x2c1d0: + if(r2 == r0) { + pc=0x2c2fc; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 35; + if(r3 == r2) { + pc=0x2cab8; + run_2c800(); return; + } + case 0x2c1e8: + r4 = r29 + 16; + r31=0x2c1f4; + pc=0x29400; + run_29000(); return; + case 0x2c1f4: + r4 = r29 + 16; + r31=0x2c200; + pc=0x42c00; + run_42800(); return; + case 0x2c200: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2c210; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2c400() throws ExecutionException { /* 0x2c400 - 0x2c600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2c400: - r29 = r29 + -24; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - case 0x2c408: - /* Next insn is delay slot */ - r31=0x2c410; - pc=0x15e00; - run_15e00(); return; - case 0x2c410: - r4 = r2 + r0; - /* Next insn is delay slot */ + case 0x2c210: + r4= page[(r29+24)>>>2]; + r31=0x2c21c; + pc=0x21c00; + run_21800(); return; + case 0x2c21c: + r4= page[(r29+128)>>>2]; + r31=0x2c228; + pc=0x21c00; + run_21800(); return; + case 0x2c228: + if(r16 == r0) { + pc=0x2c17c; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2c244; + pc=0x1fc00; + run_1f800(); return; + case 0x2c244: + r31=0x2c24c; + pc=0x24000; + run_24000(); return; + case 0x2c24c: + pc=0x2c0d0; + continue; + case 0x2c254: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2c264; + return; + case 0x2c264: + r4 = r0 + 3; + r31=0x2c270; + pc=0x29600; + run_29000(); return; + case 0x2c270: + pc=0x2c0d0; + continue; + case 0x2c278: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2c288; + return; + case 0x2c288: + r4 = r0 + 2; + r31=0x2c294; + pc=0x29600; + run_29000(); return; + case 0x2c294: + pc=0x2c0d0; + continue; + case 0x2c29c: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2c2ac; + pc=0x1a800; + run_1a800(); return; + case 0x2c2ac: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x2c2cc; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2c2cc; + pc=0x21200; + run_21000(); return; + case 0x2c2cc: + r4 = r29 + 120; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2c2e0; + pc=0x56fe0; + run_56800(); return; + case 0x2c2e0: + r4 = r29 + 120; + r31=0x2c2ec; + pc=0x42e00; + run_42800(); return; + case 0x2c2ec: + r31=0x2c2f4; + pc=0x27c00; + run_27800(); return; + case 0x2c2f4: + if(r2 != r0) { + pc=0x2c60c; + continue; + } + case 0x2c2fc: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2c310; + pc=0x1fc00; + run_1f800(); return; + case 0x2c310: + pc=0x2c0d0; + continue; + case 0x2c318: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2c328; + return; + case 0x2c328: + r4 = r0 + 2; + r31=0x2c334; + pc=0x29800; + run_29800(); return; + case 0x2c334: + pc=0x2c0d0; + continue; + case 0x2c33c: + r2 = r0 + 248; + if(r17 == r2) { + pc=0x2c644; + continue; + } + case 0x2c348: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2c358; + return; + case 0x2c358: + r31=0x2c360; + pc=0x24000; + run_24000(); return; + case 0x2c360: + pc=0x2c0d0; + continue; + case 0x2c368: + r4 = r17 + r0; + r31=0x2c374; + pc=0x29e00; + run_29800(); return; + case 0x2c374: + pc=0x2c0d0; + continue; + case 0x2c37c: + r31=0x2c384; + pc=0x27e00; + run_27800(); return; + case 0x2c384: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r5 = r0 + 32; + r19 = r2 + r0; + if(r3 == r5) { + pc=0x2ca2c; + run_2c800(); return; + } + case 0x2c398: + r5 = r0 + 35; + if(r3 == r5) { + pc=0x2c764; + continue; + } + r2 = r0 + 91; + if(r3 == r2) { + pc=0x2c6e8; + continue; + } + if(r3 == r0) { + pc=0x2c6ac; + continue; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x2c3cc; + pc=0x1a800; + run_1a800(); return; + case 0x2c3cc: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2c3e0; + pc=0x56fe0; + run_56800(); return; + case 0x2c3e0: + r4 = r18 + r0; + r31=0x2c3ec; + pc=0x42e00; + run_42800(); return; + case 0x2c3ec: + r20= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; + r20 = r20 << 2; + if(r2 != r0) { + pc=0x2cb70; + run_2c800(); return; + } + case 0x2c404: + r31=0x2c40c; + pc=0x29200; + run_29000(); return; + case 0x2c40c: + r2 = r2 << 7; + r20 = r2 | r20; + case 0x2c414: r31=0x2c41c; - pc=0x25e00; - run_25e00(); return; + pc=0x24000; + run_24000(); return; case 0x2c41c: - /* Next insn is delay slot */ - r31=0x2c424; - pc=0x20000; - run_20000(); return; - case 0x2c424: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2c408; + r2 = r0 + 2; + if(r20 == r2) { + pc=0x2c7a8; continue; } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; + r2 = (r20&0xffffffffL) < (3&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2c67c; + continue; + } + r2 = r0 + 256; + if(r20 == r2) { + pc=0x2c9d8; + run_2c800(); return; + } + r2 = r0 + 384; + if(r20 != r2) { + pc=0x2c690; + continue; + } + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8736; + case 0x2c458: + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r4 = r19 + r0; + r5 = r18 + r0; + r31=0x2c470; + pc=0x29a00; + run_29800(); return; + case 0x2c470: + pc=0x2c0d0; + continue; + case 0x2c478: + r31=0x2c480; + pc=0x27e00; + run_27800(); return; + case 0x2c480: + page[(r29+144)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x2c9ec; + run_2c800(); return; + } + case 0x2c494: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x2c8c4; + run_2c800(); return; + } + r3 = r0 + 91; + if(r2 == r3) { + pc=0x2c944; + run_2c800(); return; + } + if(r2 == r0) { + pc=0x2c8b4; + run_2c800(); return; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x2c4c8; + pc=0x1a800; + run_1a800(); return; + case 0x2c4c8: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2c4dc; + pc=0x56fe0; + run_56800(); return; + case 0x2c4dc: + r4 = r18 + r0; + r31=0x2c4e8; + pc=0x42e00; + run_42800(); return; + case 0x2c4e8: + r19= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r19 = ((r0 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; + r19 = r19 << 2; + if(r2 != r0) { + pc=0x2cc00; + run_2c800(); return; + } + case 0x2c500: + r31=0x2c508; + pc=0x29200; + run_29000(); return; + case 0x2c508: + r2 = r2 << 7; + r19 = r2 | r19; + case 0x2c510: + r31=0x2c518; + pc=0x24000; + run_24000(); return; + case 0x2c518: + r2 = r0 + 256; + if(r19 == r2) { + pc=0x2cbec; + run_2c800(); return; + } + r2 = (r19&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2ca40; + run_2c800(); return; + } + r2 = r0 + 392; + if(r19 == r2) { + pc=0x2cc3c; + run_2c800(); return; + } + r2 = (r19&0xffffffffL) < (393&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2cc4c; + run_2c800(); return; + } + r2 = r0 + 516; + if(r19 == r2) { + pc=0x2cb08; + run_2c800(); return; + } + r2 = r0 + 520; + if(r19 == r2) { + pc=0x2cacc; + run_2c800(); return; + } + r2 = r0 + 404; + if(r19 != r2) { + pc=0x2c690; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9360; + case 0x2c574: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x2c58c; + pc=0x29a00; + run_29800(); return; + case 0x2c58c: + pc=0x2c0d0; + continue; + case 0x2c594: + r5 = 6 << 16; + r4 = r29 + 16; + r5 = r5 + 6828; + r6 = r17 + r0; + r31=0x2c5ac; + pc=0x50c00; + run_50800(); return; + case 0x2c5ac: + r4 = r0 + -2; + r5 = r29 + 16; + r31=0x2c5bc; + pc=0x1fc00; + run_1f800(); return; + case 0x2c5bc: + pc=0x2c0d0; + continue; + case 0x2c5c4: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x2c5d4; return; - case 0x2c600: - pc=0x2c600; + case 0x2c5d4: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x2c5e4; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2c600() throws ExecutionException { /* 0x2c600 - 0x2c800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2c600: - r29 = r29 + -24; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - case 0x2c608: - /* Next insn is delay slot */ - r31=0x2c610; - pc=0x15e00; - run_15e00(); return; - case 0x2c610: - r4 = r2 + r0; - /* Next insn is delay slot */ + case 0x2c5e4: + r2= page[(r29+148)>>>2]; + pc=0x2c088; + continue; + case 0x2c5f0: + r4 = 6 << 16; + r4 = r4 + 6908; + r5 = r17 + r0; + r31=0x2c604; + pc=0x21400; + run_21000(); return; + case 0x2c604: + pc=0x2c0d0; + continue; + case 0x2c60c: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; r31=0x2c61c; - pc=0x26000; - run_26000(); return; + return; case 0x2c61c: - /* Next insn is delay slot */ - r31=0x2c624; - pc=0x20000; - run_20000(); return; - case 0x2c624: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2c608; + r4= page[(r29+128)>>>2]; + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x2c630; + return; + case 0x2c630: + r4 = r0 + 3; + r31=0x2c63c; + pc=0x29800; + run_29800(); return; + case 0x2c63c: + pc=0x2c0d0; + continue; + case 0x2c644: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 16; + if(r2 == r0) { + pc=0x2c348; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6768; + r31=0x2c674; + pc=0x21200; + run_21000(); return; + case 0x2c674: + pc=0x2c348; + continue; + case 0x2c67c: + if(r20 == r0) { + pc=0x2c750; continue; } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; r2 = r0 + 1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; + if(r20 == r2) { + pc=0x2c6b4; + continue; + } + case 0x2c690: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 8592; + r31=0x2c6a4; + pc=0x1fc00; + run_1f800(); return; + case 0x2c6a4: + pc=0x2c0d0; + continue; + case 0x2c6ac: + r31=0x2c6b4; + pc=0x24000; + run_24000(); return; + case 0x2c6b4: + r2 = 6 << 16; + r2 = r2 + 9072; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 == r0) { + pc=0x2c690; + continue; + } + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x2c6e0; return; + case 0x2c6e0: + pc=0x2c0d0; + continue; + case 0x2c6e8: + r31=0x2c6f0; + pc=0x23000; + run_23000(); return; + case 0x2c6f0: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2c704; + pc=0x1a800; + run_1a800(); return; + case 0x2c704: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2c718; + pc=0x56fe0; + run_56800(); return; + case 0x2c718: + r4 = r18 + r0; + r31=0x2c724; + pc=0x42e00; + run_42800(); return; + case 0x2c724: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x2cbac; + run_2c800(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2c748; + pc=0x1fc00; + run_1f800(); return; + case 0x2c748: + r31=0x2c750; + pc=0x24000; + run_24000(); return; + case 0x2c750: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8928; + pc=0x2c458; + continue; + case 0x2c764: + r31=0x2c76c; + pc=0x23000; + run_23000(); return; + case 0x2c76c: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2c780; + pc=0x1a800; + run_1a800(); return; + case 0x2c780: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2c794; + pc=0x56fe0; + run_56800(); return; + case 0x2c794: + r4 = r18 + r0; + r31=0x2c7a0; + pc=0x42c00; + run_42800(); return; + case 0x2c7a0: + r31=0x2c7a8; + pc=0x24000; + run_24000(); return; + case 0x2c7a8: + r2 = 6 << 16; + r2 = r2 + 9024; + r17 = r17 + r2; + r5 = r16 & 768; + r2 = r0 + 256; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r17 = tmp; + if(r5 == r2) { + pc=0x2ccd4; + run_2c800(); return; + } + r2 = (r5&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2cca0; + run_2c800(); return; + } + r2 = r0 + 512; + if(r5 == r2) { + pc=0x2cce4; + run_2c800(); return; + } + r2 = r0 + 768; + if(r5 != r2) { + pc=0x2ccb4; + run_2c800(); return; + } + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+40)>>>2]; + case 0x2c7f8: + r3= page[(r16+31424)>>>2]; case 0x2c800: pc=0x2c800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_2c800() throws ExecutionException { /* 0x2c800 - 0x2ca00 */ + private final void run_2c800() throws ExecutionException { /* 0x2c800 - 0x2d000 */ int addr, tmp; for(;;) { switch(pc) { case 0x2c800: - r29 = r29 + -24; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - case 0x2c808: - /* Next insn is delay slot */ - r31=0x2c810; - pc=0x15e00; - run_15e00(); return; - case 0x2c810: - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2c81c; - pc=0x26200; - run_26200(); return; - case 0x2c81c: - /* Next insn is delay slot */ - r31=0x2c824; - pc=0x20000; - run_20000(); return; - case 0x2c824: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2c808; + r3= page[(r3+4)>>>2]; + r3 = r3 & 2; + if(r3 == r0) { + pc=0x2c830; continue; } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2ca00: - pc=0x2ca00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2ca00() throws ExecutionException { /* 0x2ca00 - 0x2cc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2ca00: - r29 = r29 + -24; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - case 0x2ca08: - /* Next insn is delay slot */ - r31=0x2ca10; - pc=0x15e00; - run_15e00(); return; - case 0x2ca10: - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2ca1c; - pc=0x26400; - run_26400(); return; - case 0x2ca1c: - /* Next insn is delay slot */ - r31=0x2ca24; - pc=0x20000; - run_20000(); return; - case 0x2ca24: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2ca08; + if(r19 != r0) { + pc=0x2c828; continue; } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r19 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + r2 = r0 + 2; + r19 = r2 - r19; + case 0x2c828: + r2 = r17 << 8; + r17 = r2 | r17; + case 0x2c830: + r4 = r19 + r0; + r5 = r18 + r0; + r6 = r17 + r0; + r31=0x2c844; + pc=0x29a00; + run_29800(); return; + case 0x2c844: + r2= page[(r16+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 4; + if(r2 == r0) { + pc=0x2c0d0; + run_2c000(); return; + } + r3= page[(r29+120)>>>2]; r2 = r0 + 1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2cc00: - pc=0x2cc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2cc00() throws ExecutionException { /* 0x2cc00 - 0x2ce00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2cc00: - r2 = 7 << 16; - r29 = r29 + -32; - r4 = r2 + 30700; + if(r3 != r2) { + pc=0x2c0d0; + run_2c000(); return; + } + r2= page[(r29+128)>>>2]; + if(r2 == r0) { + pc=0x2c0d0; + run_2c000(); return; + } + r2 = r0 + 139; + if(r17 == r2) { + pc=0x2cd34; + continue; + } + r2 = r0 + 171; + if(r17 != r2) { + pc=0x2c0d0; + run_2c000(); return; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6720; + r31=0x2c8ac; + pc=0x1fc00; + run_1f800(); return; + case 0x2c8ac: + pc=0x2c0d0; + run_2c000(); return; + case 0x2c8b4: + r31=0x2c8bc; + pc=0x24000; + run_24000(); return; + case 0x2c8bc: + pc=0x2c690; + run_2c000(); return; + case 0x2c8c4: + r31=0x2c8cc; + pc=0x23000; + run_23000(); return; + case 0x2c8cc: + r18 = r29 + 120; + r4 = r29 + 16; r5 = r0 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r17 = readPages[(r2+30700)>>>12][((r2+30700)>>>2)&0x3ff]; - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2cc2c; - pc=0x17200; - run_17200(); return; - case 0x2cc2c: - /* Next insn is delay slot */ + r31=0x2c8e0; + pc=0x1a800; + run_1a800(); return; + case 0x2c8e0: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2c8f4; + pc=0x56fe0; + run_56800(); return; + case 0x2c8f4: + r4 = r18 + r0; + r31=0x2c900; + pc=0x42c00; + run_42800(); return; + case 0x2c900: + r31=0x2c908; + pc=0x24000; + run_24000(); return; + case 0x2c908: + r2 = 6 << 16; + r2 = r2 + 10240; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r5 = tmp; + r4 = r29 + 144; + r6 = r16 & 768; + r31=0x2c928; + pc=0x28e00; + run_28800(); return; + case 0x2c928: + r4= page[(r29+144)>>>2]; + r5 = r18 + r0; + r6 = r2 + r0; + r31=0x2c93c; + pc=0x29a00; + run_29800(); return; + case 0x2c93c: + pc=0x2c0d0; + run_2c000(); return; + case 0x2c944: + r31=0x2c94c; + pc=0x23000; + run_23000(); return; + case 0x2c94c: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2c960; + pc=0x1a800; + run_1a800(); return; + case 0x2c960: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2c974; + pc=0x56fe0; + run_56800(); return; + case 0x2c974: + r4 = r18 + r0; + r31=0x2c980; + pc=0x42e00; + run_42800(); return; + case 0x2c980: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x2cbcc; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2c9a4; + pc=0x1fc00; + run_1f800(); return; + case 0x2c9a4: + r31=0x2c9ac; + pc=0x24000; + run_24000(); return; + case 0x2c9ac: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 10008; + case 0x2c9b8: + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + r6= page[(r2+0)>>>2]; + r5 = r18 + r0; + r31=0x2c9d0; + pc=0x29a00; + run_29800(); return; + case 0x2c9d0: + pc=0x2c0d0; + run_2c000(); return; + case 0x2c9d8: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8832; + pc=0x2c458; + run_2c000(); return; + case 0x2c9ec: + r31=0x2c9f4; + pc=0x23000; + run_23000(); return; + case 0x2c9f4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2c494; + run_2c000(); return; + case 0x2ca00: + r31=0x2ca08; + pc=0x23000; + run_23000(); return; + case 0x2ca08: + r18 = r0 + r0; + r16 = r0 + 1; + pc=0x2c1b0; + run_2c000(); return; + case 0x2ca18: + r31=0x2ca20; + pc=0x23000; + run_23000(); return; + case 0x2ca20: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2c19c; + run_2c000(); return; + case 0x2ca2c: + r31=0x2ca34; + pc=0x23000; + run_23000(); return; + case 0x2ca34: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + pc=0x2c398; + run_2c000(); return; + case 0x2ca40: + r2 = r0 + 4; + if(r19 == r2) { + pc=0x2cb60; + continue; + } + r2 = (r19&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2cd18; + continue; + } + r2 = r0 + 36; + if(r19 == r2) { + pc=0x2cb50; + continue; + } + r2 = r0 + 128; + if(r19 == r2) { + pc=0x2cb40; + continue; + } + r2 = r0 + 8; + if(r19 != r2) { + pc=0x2c690; + run_2c000(); return; + } + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x2ca98; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x2c574; + run_2c000(); return; + case 0x2ca98: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x2caa8; + return; + case 0x2caa8: + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x2c574; + run_2c000(); return; + case 0x2cab8: + r31=0x2cac0; + pc=0x23000; + run_23000(); return; + case 0x2cac0: + r16 = r18 + r0; + pc=0x2c1e8; + run_2c000(); return; + case 0x2cacc: + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x2cae8; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x2c574; + run_2c000(); return; + case 0x2cae8: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x2caf8; + return; + case 0x2caf8: + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x2c574; + run_2c000(); return; + case 0x2cb08: + r2 = 6 << 16; + r2 = r2 + 9180; + case 0x2cb10: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x2cb28; + pc=0x29a00; + run_29800(); return; + case 0x2cb28: + r4= page[(r29+120)>>>2]; + r5 = r29 + 128; + r31=0x2cb38; + pc=0x29000; + run_29000(); return; + case 0x2cb38: + pc=0x2c0d0; + run_2c000(); return; + case 0x2cb40: + r2 = 6 << 16; + r2 = r2 + 9420; + pc=0x2c574; + run_2c000(); return; + case 0x2cb50: + r2 = 6 << 16; + r2 = r2 + 9600; + pc=0x2c574; + run_2c000(); return; + case 0x2cb60: + r2 = 6 << 16; + r2 = r2 + 9480; + pc=0x2cb10; + continue; + case 0x2cb70: + r31=0x2cb78; + pc=0x29200; + run_29000(); return; + case 0x2cb78: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r20 = r20 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x2ccf8; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2cba4; + pc=0x1fc00; + run_1f800(); return; + case 0x2cba4: + pc=0x2c404; + run_2c000(); return; + case 0x2cbac: + r31=0x2cbb4; + pc=0x23000; + run_23000(); return; + case 0x2cbb4: + r31=0x2cbbc; + pc=0x29200; + run_29000(); return; + case 0x2cbbc: + r2 = r2 << 7; + r20 = r2 | 8; + pc=0x2c414; + run_2c000(); return; + case 0x2cbcc: + r31=0x2cbd4; + pc=0x23000; + run_23000(); return; + case 0x2cbd4: + r31=0x2cbdc; + pc=0x29200; + run_29000(); return; + case 0x2cbdc: + r2 = r2 << 7; + r19 = r2 | 8; + pc=0x2c510; + run_2c000(); return; + case 0x2cbec: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 9776; + pc=0x2c9b8; + continue; + case 0x2cc00: + r31=0x2cc08; + pc=0x29200; + run_29000(); return; + case 0x2cc08: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r19 = r19 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x2cd08; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; r31=0x2cc34; - pc=0x1b600; - run_1b600(); return; + pc=0x1fc00; + run_1f800(); return; case 0x2cc34: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2cc4c; - continue; - } - r4 = r16 + 30700; - r5 = r17 + r0; - /* Next insn is delay slot */ - r31=0x2cc4c; - pc=0x17200; - run_17200(); return; + pc=0x2c500; + run_2c000(); return; + case 0x2cc3c: + r2 = 6 << 16; + r2 = r2 + 9240; + pc=0x2c574; + run_2c000(); return; case 0x2cc4c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2ce00: - pc=0x2ce00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2ce00() throws ExecutionException { /* 0x2ce00 - 0x2d000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2ce00: - r2 = 7 << 16; - r29 = r29 + -32; - r4 = r2 + 30700; - r5 = r0 + 1; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r17 = readPages[(r2+30700)>>>12][((r2+30700)>>>2)&0x3ff]; - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2ce2c; - pc=0x17200; - run_17200(); return; - case 0x2ce2c: - /* Next insn is delay slot */ - r31=0x2ce34; - pc=0x1b600; - run_1b600(); return; - case 0x2ce34: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2ce4c; + r2 = r0 + 384; + if(r19 == r2) { + pc=0x2cc74; continue; } - r4 = r16 + 30700; - r5 = r17 + r0; - /* Next insn is delay slot */ - r31=0x2ce4c; - pc=0x17200; - run_17200(); return; - case 0x2ce4c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 32; - /* Next insn is delay slot */ + r2 = r0 + 388; + if(r19 != r2) { + pc=0x2c690; + run_2c000(); return; + } + r2 = 6 << 16; + r2 = r2 + 9540; + pc=0x2cb10; + continue; + case 0x2cc74: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 9660; + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r5 = r18 + r0; + r31=0x2cc98; + pc=0x29a00; + run_29800(); return; + case 0x2cc98: + pc=0x2c0d0; + run_2c000(); return; + case 0x2cca0: + if(r5 != r0) { + pc=0x2ccb4; + continue; + } + r16 = 6 << 16; + pc=0x2c830; + continue; + case 0x2ccb4: + r4 = 6 << 16; + r4 = r4 + 6300; + r31=0x2ccc4; + pc=0x21400; + run_21000(); return; + case 0x2ccc4: + r16 = 6 << 16; + r2 = r0 + r0; + pc=0x2c7f8; + run_2c000(); return; + case 0x2ccd4: + r17 = r17 << 8; + r16 = 6 << 16; + pc=0x2c830; + continue; + case 0x2cce4: + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+36)>>>2]; + pc=0x2c7f8; + run_2c000(); return; + case 0x2ccf8: + r31=0x2cd00; + pc=0x23000; + run_23000(); return; + case 0x2cd00: + pc=0x2c404; + run_2c000(); return; + case 0x2cd08: + r31=0x2cd10; + pc=0x23000; + run_23000(); return; + case 0x2cd10: + pc=0x2c500; + run_2c000(); return; + case 0x2cd18: + if(r19 == r0) { + pc=0x2c9ac; + continue; + } + r2 = r0 + 2; + if(r19 != r2) { + pc=0x2c690; + run_2c000(); return; + } + pc=0x2c908; + continue; + case 0x2cd34: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6672; + r31=0x2cd48; + pc=0x1fc00; + run_1f800(); return; + case 0x2cd48: + pc=0x2c0d0; + run_2c000(); return; + case 0x2ce00: + r2 = r0 + 3; + if(r4 == r2) { + pc=0x2ce18; + continue; + } + r2 = r0 + r0; pc=r31; return; + case 0x2ce18: + r29 = r29 + -176; + r5 = 6 << 16; + page[(r29+152)>>>2] = r16; + r16 = 6 << 16; + r4 = r16 + 22536; + r5 = r5 + 17104; + page[(r29+172)>>>2] = r31; + page[(r29+168)>>>2] = r20; + page[(r29+164)>>>2] = r19; + page[(r29+160)>>>2] = r18; + page[(r29+156)>>>2] = r17; + r31=0x2ce4c; + pc=0x1cc00; + run_1c800(); return; + case 0x2ce4c: + r4 = 6 << 16; + r4 = r4 + 20796; + r5 = r29 + 148; + r6 = r16 + 22536; + r31=0x2ce64; + pc=0x42400; + run_42000(); return; + case 0x2ce64: + if(r2 == r0) { + pc=0x2ceb8; + continue; + } + r16= page[(r29+148)>>>2]; + r2 = r16 & 1024; + r17 = r16 & 255; + if(r2 != r0) { + pc=0x2d3c4; + run_2d000(); return; + } + r2 = r16 + r0; + case 0x2ce88: + r2 = r2 >> 12; + r3 = (r2&0xffffffffL) < (11&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x2d3f0; + run_2d000(); return; + } + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 8204; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; + return; + case 0x2ceb8: + r4 = 6 << 16; + r4 = r4 + 20916; + r31=0x2cec8; + pc=0x2a200; + run_2a000(); return; + case 0x2cec8: + if(r2 == r0) { + pc=0x2cef8; + continue; + } + case 0x2ced0: + r2 = r0 + 1; + case 0x2ced4: + r31= page[(r29+172)>>>2]; + r20= page[(r29+168)>>>2]; + r19= page[(r29+164)>>>2]; + r18= page[(r29+160)>>>2]; + r17= page[(r29+156)>>>2]; + r16= page[(r29+152)>>>2]; + r29 = r29 + 176; + pc=r31; + return; + case 0x2cef8: + r4 = 6 << 16; + r4 = r4 + 21396; + r31=0x2cf08; + pc=0x2a200; + run_2a000(); return; + case 0x2cf08: + pc=0x2ced4; + continue; + case 0x2cf10: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2cf20; + pc=0x1a800; + run_1a800(); return; + case 0x2cf20: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x2cf40; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2cf40; + pc=0x21200; + run_21000(); return; + case 0x2cf40: + r5 = r29 + 24; + r6 = r0 + 24; + r4 = r29 + 120; + r31=0x2cf54; + pc=0x56fe0; + run_56800(); return; + case 0x2cf54: + r4 = r29 + 120; + r31=0x2cf60; + pc=0x42e00; + run_42800(); return; + case 0x2cf60: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2cf70; + return; + case 0x2cf70: + r4= page[(r29+128)>>>2]; + r31=0x2cf7c; + pc=0x21c00; + run_21800(); return; + case 0x2cf7c: + r31=0x2cf84; + pc=0x24000; + run_24000(); return; + case 0x2cf84: + pc=0x2ced0; + continue; + case 0x2cf8c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x2d818; + run_2d800(); return; + } + case 0x2cf9c: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x2d800; + run_2d800(); return; + } + r18 = r0 + 1; + r16 = r0 + r0; + case 0x2cfb0: + r4 = r29 + 120; + r31=0x2cfbc; + pc=0x29400; + run_29000(); return; + case 0x2cfbc: + r4 = r29 + 120; + r31=0x2cfc8; + pc=0x42c00; + run_42800(); return; + case 0x2cfc8: + r31=0x2cfd0; + pc=0x27c00; + run_27800(); return; + case 0x2cfd0: + if(r2 == r0) { + pc=0x2d0fc; + run_2d000(); return; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 35; + if(r3 == r2) { + pc=0x2d8b8; + run_2d800(); return; + } + case 0x2cfe8: + r4 = r29 + 16; + r31=0x2cff4; + pc=0x29400; + run_29000(); return; + case 0x2cff4: + r4 = r29 + 16; + r31=0x2d000; + pc=0x42c00; + run_42800(); return; case 0x2d000: pc=0x2d000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_2d000() throws ExecutionException { /* 0x2d000 - 0x2d200 */ + private final void run_2d000() throws ExecutionException { /* 0x2d000 - 0x2d800 */ int addr, tmp; for(;;) { switch(pc) { case 0x2d000: - r2 = 7 << 16; - r29 = r29 + -32; - r4 = r2 + 30704; - r5 = r0 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r17 = readPages[(r2+30704)>>>12][((r2+30704)>>>2)&0x3ff]; - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2d02c; - pc=0x17200; - run_17200(); return; - case 0x2d02c: - /* Next insn is delay slot */ - r31=0x2d034; - pc=0x1b600; - run_1b600(); return; - case 0x2d034: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2d04c; - continue; + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2d010; + return; + case 0x2d010: + r4= page[(r29+24)>>>2]; + r31=0x2d01c; + pc=0x21c00; + run_21800(); return; + case 0x2d01c: + r4= page[(r29+128)>>>2]; + r31=0x2d028; + pc=0x21c00; + run_21800(); return; + case 0x2d028: + if(r16 == r0) { + pc=0x2cf7c; + run_2c800(); return; } - r4 = r16 + 30704; - r5 = r17 + r0; - /* Next insn is delay slot */ + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2d044; + pc=0x1fc00; + run_1f800(); return; + case 0x2d044: r31=0x2d04c; - pc=0x17200; - run_17200(); return; + pc=0x24000; + run_24000(); return; case 0x2d04c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; + pc=0x2ced0; + run_2c800(); return; + case 0x2d054: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2d064; return; - case 0x2d200: - pc=0x2d200; + case 0x2d064: + r4 = r0 + 3; + r31=0x2d070; + pc=0x29600; + run_29000(); return; + case 0x2d070: + pc=0x2ced0; + run_2c800(); return; + case 0x2d078: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2d088; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2d200() throws ExecutionException { /* 0x2d200 - 0x2d400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2d200: - r29 = r29 + -32; + case 0x2d088: + r4 = r0 + 2; + r31=0x2d094; + pc=0x29600; + run_29000(); return; + case 0x2d094: + pc=0x2ced0; + run_2c800(); return; + case 0x2d09c: r4 = r29 + 16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x2d218; - pc=0x1e400; - run_1e400(); return; - case 0x2d218: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2d238; - continue; - } - r2 = r0 + r0; - case 0x2d224: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2d238: - r5 = 7 << 16; - r6 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r4 = r29 + 20; - r5 = r5 + 16944; - r7 = r0 + r0; - /* Next insn is delay slot */ - r31=0x2d254; - pc=0x31200; - run_31200(); return; - case 0x2d254: - r2 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r5 = r0 + r0; + r31=0x2d0ac; + pc=0x1a800; + run_1a800(); return; + case 0x2d0ac: + r2= page[(r29+56)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2d2d0; + pc=0x2d0cc; continue; } - r3 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - r2 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2d2b8; + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2d0cc; + pc=0x21200; + run_21000(); return; + case 0x2d0cc: + r4 = r29 + 120; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2d0e0; + pc=0x56fe0; + run_56800(); return; + case 0x2d0e0: + r4 = r29 + 120; + r31=0x2d0ec; + pc=0x42e00; + run_42800(); return; + case 0x2d0ec: + r31=0x2d0f4; + pc=0x27c00; + run_27800(); return; + case 0x2d0f4: + if(r2 != r0) { + pc=0x2d40c; continue; } - case 0x2d274: - r16 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r16 = r16 >>> 4; - r16 = r16 & 1; - case 0x2d284: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + case 0x2d0fc: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2d110; + pc=0x1fc00; + run_1f800(); return; + case 0x2d110: + pc=0x2ced0; + run_2c800(); return; + case 0x2d118: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2d128; + return; + case 0x2d128: + r4 = r0 + 2; + r31=0x2d134; + pc=0x29800; + run_29800(); return; + case 0x2d134: + pc=0x2ced0; + run_2c800(); return; + case 0x2d13c: + r2 = r0 + 248; + if(r17 == r2) { + pc=0x2d444; + continue; + } + case 0x2d148: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2d158; + return; + case 0x2d158: + r31=0x2d160; + pc=0x24000; + run_24000(); return; + case 0x2d160: + pc=0x2ced0; + run_2c800(); return; + case 0x2d168: + r4 = r17 + r0; + r31=0x2d174; + pc=0x29e00; + run_29800(); return; + case 0x2d174: + pc=0x2ced0; + run_2c800(); return; + case 0x2d17c: + r31=0x2d184; + pc=0x27e00; + run_27800(); return; + case 0x2d184: + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - r2 = r0 + 32; + r5 = r0 + 32; + r19 = r2 + r0; + if(r3 == r5) { + pc=0x2d82c; + run_2d800(); return; + } + case 0x2d198: + r5 = r0 + 35; + if(r3 == r5) { + pc=0x2d564; + continue; + } + r2 = r0 + 91; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x2d2f4; + pc=0x2d4e8; + continue; + } + if(r3 == r0) { + pc=0x2d4ac; + continue; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x2d1cc; + pc=0x1a800; + run_1a800(); return; + case 0x2d1cc: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2d1e0; + pc=0x56fe0; + run_56800(); return; + case 0x2d1e0: + r4 = r18 + r0; + r31=0x2d1ec; + pc=0x42e00; + run_42800(); return; + case 0x2d1ec: + r20= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; + r20 = r20 << 2; + if(r2 != r0) { + pc=0x2d970; + run_2d800(); return; + } + case 0x2d204: + r31=0x2d20c; + pc=0x29200; + run_29000(); return; + case 0x2d20c: + r2 = r2 << 7; + r20 = r2 | r20; + case 0x2d214: + r31=0x2d21c; + pc=0x24000; + run_24000(); return; + case 0x2d21c: + r2 = r0 + 2; + if(r20 == r2) { + pc=0x2d5a8; + continue; + } + r2 = (r20&0xffffffffL) < (3&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2d47c; + continue; + } + r2 = r0 + 256; + if(r20 == r2) { + pc=0x2d7d8; + continue; + } + r2 = r0 + 384; + if(r20 != r2) { + pc=0x2d490; + continue; + } + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8736; + case 0x2d258: + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r4 = r19 + r0; + r5 = r18 + r0; + r31=0x2d270; + pc=0x29a00; + run_29800(); return; + case 0x2d270: + pc=0x2ced0; + run_2c800(); return; + case 0x2d278: + r31=0x2d280; + pc=0x27e00; + run_27800(); return; + case 0x2d280: + page[(r29+144)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x2d7ec; continue; } case 0x2d294: - r2 = r0 + 123; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x2d2dc; + r3 = r0 + 35; + if(r2 == r3) { + pc=0x2d6c4; continue; } - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r16 << 1; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2d2b8: - r3 = readPages[(r2+24)>>>12][((r2+24)>>>2)&0x3ff]; - r3 = r3 + 1; - writePages[(r2+24)>>>12][((r2+24)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x2d274; - continue; - case 0x2d2d0: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x2d284; - continue; + r3 = r0 + 91; + if(r2 == r3) { + pc=0x2d744; + continue; + } + if(r2 == r0) { + pc=0x2d6b4; + continue; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x2d2c8; + pc=0x1a800; + run_1a800(); return; + case 0x2d2c8: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2d2dc; + pc=0x56fe0; + run_56800(); return; case 0x2d2dc: - r4 = r16 + r0; - /* Next insn is delay slot */ + r4 = r18 + r0; r31=0x2d2e8; - pc=0x19a00; - run_19a00(); return; + pc=0x42e00; + run_42800(); return; case 0x2d2e8: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2d224; - continue; - case 0x2d2f4: - /* Next insn is delay slot */ - r31=0x2d2fc; - pc=0x1c000; - run_1c000(); return; - case 0x2d2fc: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - /* Next insn is delay slot */ - pc=0x2d294; - continue; - case 0x2d400: - pc=0x2d400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2d400() throws ExecutionException { /* 0x2d400 - 0x2d600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2d400: - r4 = 7 << 16; - r29 = r29 + -40; - r4 = r4 + -1076; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x2d41c; - pc=0x1b000; - run_1b000(); return; - case 0x2d41c: - r16 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r4 = r29 + 16; - r5 = r16 + r0; - r6 = r0 + 16; - /* Next insn is delay slot */ - r31=0x2d434; - pc=0x48fdc; - run_48e00(); return; - case 0x2d434: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r2 = 7 << 16; - r2 = r2 + -7236; - r2 = r3 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r2 & 64; + r19= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r19 = ((r0 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; + r19 = r19 << 2; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2d4f4; - continue; - } - r6 = 7 << 16; - r4 = r16 + r0; - r7 = r0 + r0; - r6 = r6 + 6068; - case 0x2d468: - r5 = 7 << 16; - r5 = r5 + -1380; - /* Next insn is delay slot */ - r31=0x2d478; - pc=0x2e400; - run_2e400(); return; - case 0x2d478: - /* Next insn is delay slot */ - r31=0x2d480; - pc=0x1b600; - run_1b600(); return; - case 0x2d480: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2d4bc; + pc=0x2da00; + run_2d800(); return; + } + case 0x2d300: + r31=0x2d308; + pc=0x29200; + run_29000(); return; + case 0x2d308: + r2 = r2 << 7; + r19 = r2 | r19; + case 0x2d310: + r31=0x2d318; + pc=0x24000; + run_24000(); return; + case 0x2d318: + r2 = r0 + 256; + if(r19 == r2) { + pc=0x2d9ec; + run_2d800(); return; + } + r2 = (r19&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2d840; + run_2d800(); return; + } + r2 = r0 + 392; + if(r19 == r2) { + pc=0x2da3c; + run_2d800(); return; + } + r2 = (r19&0xffffffffL) < (393&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2da4c; + run_2d800(); return; + } + r2 = r0 + 516; + if(r19 == r2) { + pc=0x2d908; + run_2d800(); return; + } + r2 = r0 + 520; + if(r19 == r2) { + pc=0x2d8cc; + run_2d800(); return; + } + r2 = r0 + 404; + if(r19 != r2) { + pc=0x2d490; continue; } + r2 = 6 << 16; + r2 = r2 + 9360; + case 0x2d374: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x2d38c; + pc=0x29a00; + run_29800(); return; + case 0x2d38c: + pc=0x2ced0; + run_2c800(); return; + case 0x2d394: + r5 = 6 << 16; r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x2d494; - pc=0x2e600; - run_2e600(); return; - case 0x2d494: - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r3 = 7 << 16; - r3 = r3 + 12764; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - r16 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2d4bc: - r4 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x2d4c8; - pc=0x2e600; - run_2e600(); return; - case 0x2d4c8: - r4 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; + r5 = r5 + 6828; + r6 = r17 + r0; + r31=0x2d3ac; + pc=0x50c00; + run_50800(); return; + case 0x2d3ac: + r4 = r0 + -2; r5 = r29 + 16; - r6 = r0 + 16; - /* Next insn is delay slot */ - r31=0x2d4dc; - pc=0x48fdc; - run_48e00(); return; - case 0x2d4dc: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r16 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + r31=0x2d3bc; + pc=0x1fc00; + run_1f800(); return; + case 0x2d3bc: + pc=0x2ced0; + run_2c800(); return; + case 0x2d3c4: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x2d3d4; + return; + case 0x2d3d4: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x2d3e4; + return; + case 0x2d3e4: + r2= page[(r29+148)>>>2]; + pc=0x2ce88; + run_2c800(); return; + case 0x2d3f0: + r4 = 6 << 16; + r4 = r4 + 6908; + r5 = r17 + r0; + r31=0x2d404; + pc=0x21400; + run_21000(); return; + case 0x2d404: + pc=0x2ced0; + run_2c800(); return; + case 0x2d40c: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2d41c; + return; + case 0x2d41c: + r4= page[(r29+128)>>>2]; + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x2d430; + return; + case 0x2d430: + r4 = r0 + 3; + r31=0x2d43c; + pc=0x29800; + run_29800(); return; + case 0x2d43c: + pc=0x2ced0; + run_2c800(); return; + case 0x2d444: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 16; + if(r2 == r0) { + pc=0x2d148; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6768; + r31=0x2d474; + pc=0x21200; + run_21000(); return; + case 0x2d474: + pc=0x2d148; + continue; + case 0x2d47c: + if(r20 == r0) { + pc=0x2d550; + continue; + } r2 = r0 + 1; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2d4f4: - /* Next insn is delay slot */ - r31=0x2d4fc; - pc=0x1ec00; - run_1ec00(); return; - case 0x2d4fc: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x2d508; - pc=0x17a00; - run_17a00(); return; - case 0x2d508: - r6 = r2 + r0; - r4 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r7 = r0 + 1; - /* Next insn is delay slot */ - pc=0x2d468; - continue; - case 0x2d600: - pc=0x2d600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2d600() throws ExecutionException { /* 0x2d600 - 0x2d800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2d600: - r29 = r29 + -32; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x2d61c; - pc=0x15e00; - run_15e00(); return; - case 0x2d61c: - r17 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2d628; - pc=0x20000; - run_20000(); return; - case 0x2d628: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2d738; + if(r20 == r2) { + pc=0x2d4b4; continue; } - r2 = 7 << 16; - r17 = r17 << 24; - r2 = r2 + 12716; - r18 = readPages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff]; - r17 = r17 >> 24; - writePages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff] = r2; - r16 = r0 + 34; - /* Next insn is delay slot */ - pc=0x2d678; - continue; - case 0x2d654: - /* Next insn is delay slot */ - r31=0x2d65c; - pc=0x15e00; - run_15e00(); return; - case 0x2d65c: - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2d668; - pc=0x25e00; - run_25e00(); return; - case 0x2d668: - /* Next insn is delay slot */ - r31=0x2d670; - pc=0x20000; - run_20000(); return; - case 0x2d670: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2d714; - continue; - } - case 0x2d678: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + case 0x2d490: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 8592; + r31=0x2d4a4; + pc=0x1fc00; + run_1f800(); return; + case 0x2d4a4: + pc=0x2ced0; + run_2c800(); return; + case 0x2d4ac: + r31=0x2d4b4; + pc=0x24000; + run_24000(); return; + case 0x2d4b4: + r2 = 6 << 16; + r2 = r2 + 9072; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r16) { - /* Next insn is delay slot */ - pc=0x2d654; - continue; - } - /* Next insn is delay slot */ - r31=0x2d690; - pc=0x1c600; - run_1c600(); return; - case 0x2d690: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ r4 = tmp; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x2d6dc; + pc=0x2d490; continue; } - case 0x2d6a0: - if(r4 == r16) { - /* Next insn is delay slot */ - pc=0x2d6fc; - continue; - } - /* Next insn is delay slot */ - r31=0x2d6b0; - pc=0x18c00; - run_18c00(); return; - case 0x2d6b0: - r4 = r2 ^ r17; - r4 = r4 << 24; - r4 = r4 >> 24; - /* Next insn is delay slot */ - r31=0x2d6c4; - pc=0x25e00; - run_25e00(); return; - case 0x2d6c4: - /* Next insn is delay slot */ - r31=0x2d6cc; - pc=0x1c600; - run_1c600(); return; - case 0x2d6cc: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x2d4e0; + return; + case 0x2d4e0: + pc=0x2ced0; + run_2c800(); return; + case 0x2d4e8: + r31=0x2d4f0; + pc=0x23000; + run_23000(); return; + case 0x2d4f0: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2d504; + pc=0x1a800; + run_1a800(); return; + case 0x2d504: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2d518; + pc=0x56fe0; + run_56800(); return; + case 0x2d518: + r4 = r18 + r0; + r31=0x2d524; + pc=0x42e00; + run_42800(); return; + case 0x2d524: + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x2d6a0; - continue; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x2d9ac; + run_2d800(); return; } - case 0x2d6dc: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r0 + 3; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2d6fc: - /* Next insn is delay slot */ - r31=0x2d704; - pc=0x1c000; - run_1c000(); return; - case 0x2d704: - /* Next insn is delay slot */ - r31=0x2d70c; - pc=0x20000; - run_20000(); return; - case 0x2d70c: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2d548; + pc=0x1fc00; + run_1f800(); return; + case 0x2d548: + r31=0x2d550; + pc=0x24000; + run_24000(); return; + case 0x2d550: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8928; + pc=0x2d258; + continue; + case 0x2d564: + r31=0x2d56c; + pc=0x23000; + run_23000(); return; + case 0x2d56c: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2d580; + pc=0x1a800; + run_1a800(); return; + case 0x2d580: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2d594; + pc=0x56fe0; + run_56800(); return; + case 0x2d594: + r4 = r18 + r0; + r31=0x2d5a0; + pc=0x42c00; + run_42800(); return; + case 0x2d5a0: + r31=0x2d5a8; + pc=0x24000; + run_24000(); return; + case 0x2d5a8: + r2 = 6 << 16; + r2 = r2 + 9024; + r17 = r17 + r2; + r5 = r16 & 768; + r2 = r0 + 256; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r17 = tmp; + if(r5 == r2) { + pc=0x2dad4; + run_2d800(); return; + } + r2 = (r5&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2d678; + pc=0x2daa0; + run_2d800(); return; + } + r2 = r0 + 512; + if(r5 == r2) { + pc=0x2dae4; + run_2d800(); return; + } + r2 = r0 + 768; + if(r5 != r2) { + pc=0x2dab4; + run_2d800(); return; + } + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+40)>>>2]; + case 0x2d5f8: + r3= page[(r16+31424)>>>2]; + r3= page[(r3+4)>>>2]; + r3 = r3 & 2; + if(r3 == r0) { + pc=0x2d630; continue; } - case 0x2d714: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - writePages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff] = r18; + if(r19 != r0) { + pc=0x2d628; + continue; + } + r19 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + r2 = r0 + 2; + r19 = r2 - r19; + case 0x2d628: + r2 = r17 << 8; + r17 = r2 | r17; + case 0x2d630: + r4 = r19 + r0; + r5 = r18 + r0; + r6 = r17 + r0; + r31=0x2d644; + pc=0x29a00; + run_29800(); return; + case 0x2d644: + r2= page[(r16+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 4; + if(r2 == r0) { + pc=0x2ced0; + run_2c800(); return; + } + r3= page[(r29+120)>>>2]; r2 = r0 + 1; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2d738: - r4 = 7 << 16; - r4 = r4 + -6980; - /* Next insn is delay slot */ - r31=0x2d748; - pc=0x1b000; - run_1b000(); return; - case 0x2d748: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; + if(r3 != r2) { + pc=0x2ced0; + run_2c800(); return; + } + r2= page[(r29+128)>>>2]; + if(r2 == r0) { + pc=0x2ced0; + run_2c800(); return; + } + r2 = r0 + 139; + if(r17 == r2) { + pc=0x2db34; + run_2d800(); return; + } + r2 = r0 + 171; + if(r17 != r2) { + pc=0x2ced0; + run_2c800(); return; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6720; + r31=0x2d6ac; + pc=0x1fc00; + run_1f800(); return; + case 0x2d6ac: + pc=0x2ced0; + run_2c800(); return; + case 0x2d6b4: + r31=0x2d6bc; + pc=0x24000; + run_24000(); return; + case 0x2d6bc: + pc=0x2d490; + continue; + case 0x2d6c4: + r31=0x2d6cc; + pc=0x23000; + run_23000(); return; + case 0x2d6cc: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2d6e0; + pc=0x1a800; + run_1a800(); return; + case 0x2d6e0: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2d6f4; + pc=0x56fe0; + run_56800(); return; + case 0x2d6f4: + r4 = r18 + r0; + r31=0x2d700; + pc=0x42c00; + run_42800(); return; + case 0x2d700: + r31=0x2d708; + pc=0x24000; + run_24000(); return; + case 0x2d708: + r2 = 6 << 16; + r2 = r2 + 10240; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r5 = tmp; + r4 = r29 + 144; + r6 = r16 & 768; + r31=0x2d728; + pc=0x28e00; + run_28800(); return; + case 0x2d728: + r4= page[(r29+144)>>>2]; + r5 = r18 + r0; + r6 = r2 + r0; + r31=0x2d73c; + pc=0x29a00; + run_29800(); return; + case 0x2d73c: + pc=0x2ced0; + run_2c800(); return; + case 0x2d744: + r31=0x2d74c; + pc=0x23000; + run_23000(); return; + case 0x2d74c: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2d760; + pc=0x1a800; + run_1a800(); return; + case 0x2d760: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2d774; + pc=0x56fe0; + run_56800(); return; + case 0x2d774: + r4 = r18 + r0; + r31=0x2d780; + pc=0x42e00; + run_42800(); return; + case 0x2d780: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x2d9cc; + run_2d800(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2d7a4; + pc=0x1fc00; + run_1f800(); return; + case 0x2d7a4: + r31=0x2d7ac; + pc=0x24000; + run_24000(); return; + case 0x2d7ac: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 10008; + case 0x2d7b8: + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + r6= page[(r2+0)>>>2]; + r5 = r18 + r0; + r31=0x2d7d0; + pc=0x29a00; + run_29800(); return; + case 0x2d7d0: + pc=0x2ced0; + run_2c800(); return; + case 0x2d7d8: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8832; + pc=0x2d258; + continue; + case 0x2d7ec: + r31=0x2d7f4; + pc=0x23000; + run_23000(); return; + case 0x2d7f4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2d294; + continue; case 0x2d800: pc=0x2d800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_2d800() throws ExecutionException { /* 0x2d800 - 0x2da00 */ + private final void run_2d800() throws ExecutionException { /* 0x2d800 - 0x2e000 */ int addr, tmp; for(;;) { switch(pc) { case 0x2d800: - r2 = 7 << 16; - r29 = r29 + -32; - r2 = r2 + 12724; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r17 = readPages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff] = r2; - r16 = r0 + 34; - /* Next insn is delay slot */ - pc=0x2d850; - continue; + r31=0x2d808; + pc=0x23000; + run_23000(); return; + case 0x2d808: + r18 = r0 + r0; + r16 = r0 + 1; + pc=0x2cfb0; + run_2c800(); return; + case 0x2d818: + r31=0x2d820; + pc=0x23000; + run_23000(); return; + case 0x2d820: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2cf9c; + run_2c800(); return; case 0x2d82c: - /* Next insn is delay slot */ r31=0x2d834; - pc=0x15e00; - run_15e00(); return; + pc=0x23000; + run_23000(); return; case 0x2d834: - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2d840; - pc=0x25e00; - run_25e00(); return; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + pc=0x2d198; + run_2d000(); return; case 0x2d840: - /* Next insn is delay slot */ - r31=0x2d848; - pc=0x20000; - run_20000(); return; - case 0x2d848: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2d8e0; + r2 = r0 + 4; + if(r19 == r2) { + pc=0x2d960; continue; } - case 0x2d850: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r16) { - /* Next insn is delay slot */ - pc=0x2d82c; - continue; - } - /* Next insn is delay slot */ - r31=0x2d868; - pc=0x1c600; - run_1c600(); return; - case 0x2d868: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x2d8ac; - continue; - } - case 0x2d878: - if(r4 == r16) { - /* Next insn is delay slot */ - pc=0x2d8c8; - continue; - } - /* Next insn is delay slot */ - r31=0x2d888; - pc=0x18c00; - run_18c00(); return; - case 0x2d888: - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2d894; - pc=0x25e00; - run_25e00(); return; - case 0x2d894: - /* Next insn is delay slot */ - r31=0x2d89c; - pc=0x1c600; - run_1c600(); return; - case 0x2d89c: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x2d878; - continue; - } - case 0x2d8ac: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 3; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2d8c8: - /* Next insn is delay slot */ - r31=0x2d8d0; - pc=0x1c000; - run_1c000(); return; - case 0x2d8d0: - /* Next insn is delay slot */ - r31=0x2d8d8; - pc=0x20000; - run_20000(); return; - case 0x2d8d8: + r2 = (r19&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2d850; + pc=0x2db18; continue; } - case 0x2d8e0: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff] = r17; - r2 = r0 + 1; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2da00: - pc=0x2da00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2da00() throws ExecutionException { /* 0x2da00 - 0x2dc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2da00: - r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r17 = readPages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff]; - r16 = r0 + 34; - /* Next insn is delay slot */ - pc=0x2da44; - continue; - case 0x2da20: - /* Next insn is delay slot */ - r31=0x2da28; - pc=0x15e00; - run_15e00(); return; - case 0x2da28: - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2da34; - pc=0x25e00; - run_25e00(); return; - case 0x2da34: - /* Next insn is delay slot */ - r31=0x2da3c; - pc=0x20000; - run_20000(); return; - case 0x2da3c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2dad4; + r2 = r0 + 36; + if(r19 == r2) { + pc=0x2d950; continue; } - case 0x2da44: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + r2 = r0 + 128; + if(r19 == r2) { + pc=0x2d940; + continue; + } + r2 = r0 + 8; + if(r19 != r2) { + pc=0x2d490; + run_2d000(); return; + } + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x2d898; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x2d374; + run_2d000(); return; + case 0x2d898: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x2d8a8; + return; + case 0x2d8a8: + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x2d374; + run_2d000(); return; + case 0x2d8b8: + r31=0x2d8c0; + pc=0x23000; + run_23000(); return; + case 0x2d8c0: + r16 = r18 + r0; + pc=0x2cfe8; + run_2c800(); return; + case 0x2d8cc: + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x2d8e8; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x2d374; + run_2d000(); return; + case 0x2d8e8: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x2d8f8; + return; + case 0x2d8f8: + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x2d374; + run_2d000(); return; + case 0x2d908: + r2 = 6 << 16; + r2 = r2 + 9180; + case 0x2d910: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r16) { - /* Next insn is delay slot */ - pc=0x2da20; - continue; - } - /* Next insn is delay slot */ - r31=0x2da5c; - pc=0x1c600; - run_1c600(); return; - case 0x2da5c: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x2daa0; - continue; - } - case 0x2da6c: - if(r4 == r16) { - /* Next insn is delay slot */ - pc=0x2dabc; - continue; - } - /* Next insn is delay slot */ - r31=0x2da7c; - pc=0x18c00; - run_18c00(); return; - case 0x2da7c: - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2da88; - pc=0x25e00; - run_25e00(); return; - case 0x2da88: - /* Next insn is delay slot */ - r31=0x2da90; - pc=0x1c600; - run_1c600(); return; - case 0x2da90: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x2da6c; - continue; - } - case 0x2daa0: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 3; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2dabc: - /* Next insn is delay slot */ - r31=0x2dac4; - pc=0x1c000; - run_1c000(); return; - case 0x2dac4: - /* Next insn is delay slot */ - r31=0x2dacc; - pc=0x20000; - run_20000(); return; - case 0x2dacc: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2da44; - continue; - } - case 0x2dad4: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff] = r17; - r2 = r0 + 1; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2dc00: - pc=0x2dc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2dc00() throws ExecutionException { /* 0x2dc00 - 0x2de00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2dc00: - r2 = 7 << 16; - r29 = r29 + -32; - r2 = r2 + 12716; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r17 = readPages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff] = r2; - r16 = r0 + 34; - /* Next insn is delay slot */ - pc=0x2dc50; - continue; - case 0x2dc2c: - /* Next insn is delay slot */ - r31=0x2dc34; - pc=0x15e00; - run_15e00(); return; - case 0x2dc34: - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2dc40; - pc=0x25e00; - run_25e00(); return; - case 0x2dc40: - /* Next insn is delay slot */ - r31=0x2dc48; - pc=0x20000; - run_20000(); return; - case 0x2dc48: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2dce0; - continue; - } - case 0x2dc50: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r16) { - /* Next insn is delay slot */ - pc=0x2dc2c; - continue; - } - /* Next insn is delay slot */ - r31=0x2dc68; - pc=0x1c600; - run_1c600(); return; - case 0x2dc68: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x2dcac; - continue; - } - case 0x2dc78: - if(r4 == r16) { - /* Next insn is delay slot */ - pc=0x2dcc8; - continue; - } - /* Next insn is delay slot */ - r31=0x2dc88; - pc=0x18c00; - run_18c00(); return; - case 0x2dc88: - r4 = r2 + r0; - /* Next insn is delay slot */ - r31=0x2dc94; - pc=0x25e00; - run_25e00(); return; - case 0x2dc94: - /* Next insn is delay slot */ - r31=0x2dc9c; - pc=0x1c600; - run_1c600(); return; - case 0x2dc9c: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x2dc78; - continue; - } - case 0x2dcac: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 3; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2dcc8: - /* Next insn is delay slot */ - r31=0x2dcd0; - pc=0x1c000; - run_1c000(); return; - case 0x2dcd0: - /* Next insn is delay slot */ - r31=0x2dcd8; - pc=0x20000; - run_20000(); return; - case 0x2dcd8: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2dc50; - continue; - } - case 0x2dce0: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r28+-30592)>>>12][((r28+-30592)>>>2)&0x3ff] = r17; - r2 = r0 + 1; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2de00: - pc=0x2de00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2de00() throws ExecutionException { /* 0x2de00 - 0x2e000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2de00: - r29 = r29 + -64; - r4 = r29 + 16; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r19; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r18; - r19 = 7 << 16; - r18 = 7 << 16; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r17; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r16; - r17 = r0 + r0; - /* Next insn is delay slot */ - r31=0x2de30; - pc=0x16000; - run_16000(); return; - case 0x2de30: - r18 = r18 + -1024; - r19 = r19 + -1016; - case 0x2de38: - /* Next insn is delay slot */ - r31=0x2de40; - pc=0x20000; - run_20000(); return; - case 0x2de40: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2de90; - continue; - } - case 0x2de48: - /* Next insn is delay slot */ - r31=0x2de50; - pc=0x1f400; - run_1f400(); return; - case 0x2de50: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2dea0; - continue; - } - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; + r6 = tmp; r5 = r18 + r0; - r16 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x2de74; - pc=0x42c00; - run_42c00(); return; - case 0x2de74: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2dec0; - continue; - } - r17 = r17 | 1; - /* Next insn is delay slot */ - r31=0x2de88; - pc=0x20000; - run_20000(); return; - case 0x2de88: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2de48; - continue; - } - case 0x2de90: - r4 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r5 = r17 + r0; - /* Next insn is delay slot */ - r31=0x2dea0; - pc=0x27e00; - run_27e00(); return; - case 0x2dea0: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r19 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r18 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r17 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r16 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r29 = r29 + 64; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2dec0: - r4 = r16 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x2ded0; - pc=0x42c00; - run_42c00(); return; - case 0x2ded0: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2dee4; - continue; - } - r17 = r17 | 2; - /* Next insn is delay slot */ - pc=0x2de38; + r31=0x2d928; + pc=0x29a00; + run_29800(); return; + case 0x2d928: + r4= page[(r29+120)>>>2]; + r5 = r29 + 128; + r31=0x2d938; + pc=0x29000; + run_29000(); return; + case 0x2d938: + pc=0x2ced0; + run_2c800(); return; + case 0x2d940: + r2 = 6 << 16; + r2 = r2 + 9420; + pc=0x2d374; + run_2d000(); return; + case 0x2d950: + r2 = 6 << 16; + r2 = r2 + 9600; + pc=0x2d374; + run_2d000(); return; + case 0x2d960: + r2 = 6 << 16; + r2 = r2 + 9480; + pc=0x2d910; continue; - case 0x2dee4: - r4 = 7 << 16; - r4 = r4 + -1004; - /* Next insn is delay slot */ - r31=0x2def4; - pc=0x1b000; - run_1b000(); return; - case 0x2def4: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r19 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r18 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r17 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r16 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r29 = r29 + 64; - /* Next insn is delay slot */ + case 0x2d970: + r31=0x2d978; + pc=0x29200; + run_29000(); return; + case 0x2d978: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r20 = r20 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x2daf8; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2d9a4; + pc=0x1fc00; + run_1f800(); return; + case 0x2d9a4: + pc=0x2d204; + run_2d000(); return; + case 0x2d9ac: + r31=0x2d9b4; + pc=0x23000; + run_23000(); return; + case 0x2d9b4: + r31=0x2d9bc; + pc=0x29200; + run_29000(); return; + case 0x2d9bc: + r2 = r2 << 7; + r20 = r2 | 8; + pc=0x2d214; + run_2d000(); return; + case 0x2d9cc: + r31=0x2d9d4; + pc=0x23000; + run_23000(); return; + case 0x2d9d4: + r31=0x2d9dc; + pc=0x29200; + run_29000(); return; + case 0x2d9dc: + r2 = r2 << 7; + r19 = r2 | 8; + pc=0x2d310; + run_2d000(); return; + case 0x2d9ec: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 9776; + pc=0x2d7b8; + run_2d000(); return; + case 0x2da00: + r31=0x2da08; + pc=0x29200; + run_29000(); return; + case 0x2da08: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r19 = r19 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x2db08; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2da34; + pc=0x1fc00; + run_1f800(); return; + case 0x2da34: + pc=0x2d300; + run_2d000(); return; + case 0x2da3c: + r2 = 6 << 16; + r2 = r2 + 9240; + pc=0x2d374; + run_2d000(); return; + case 0x2da4c: + r2 = r0 + 384; + if(r19 == r2) { + pc=0x2da74; + continue; + } + r2 = r0 + 388; + if(r19 != r2) { + pc=0x2d490; + run_2d000(); return; + } + r2 = 6 << 16; + r2 = r2 + 9540; + pc=0x2d910; + continue; + case 0x2da74: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 9660; + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r5 = r18 + r0; + r31=0x2da98; + pc=0x29a00; + run_29800(); return; + case 0x2da98: + pc=0x2ced0; + run_2c800(); return; + case 0x2daa0: + if(r5 != r0) { + pc=0x2dab4; + continue; + } + r16 = 6 << 16; + pc=0x2d630; + run_2d000(); return; + case 0x2dab4: + r4 = 6 << 16; + r4 = r4 + 6300; + r31=0x2dac4; + pc=0x21400; + run_21000(); return; + case 0x2dac4: + r16 = 6 << 16; + r2 = r0 + r0; + pc=0x2d5f8; + run_2d000(); return; + case 0x2dad4: + r17 = r17 << 8; + r16 = 6 << 16; + pc=0x2d630; + run_2d000(); return; + case 0x2dae4: + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+36)>>>2]; + pc=0x2d5f8; + run_2d000(); return; + case 0x2daf8: + r31=0x2db00; + pc=0x23000; + run_23000(); return; + case 0x2db00: + pc=0x2d204; + run_2d000(); return; + case 0x2db08: + r31=0x2db10; + pc=0x23000; + run_23000(); return; + case 0x2db10: + pc=0x2d300; + run_2d000(); return; + case 0x2db18: + if(r19 == r0) { + pc=0x2d7ac; + run_2d000(); return; + } + r2 = r0 + 2; + if(r19 != r2) { + pc=0x2d490; + run_2d000(); return; + } + pc=0x2d708; + run_2d000(); return; + case 0x2db34: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6672; + r31=0x2db48; + pc=0x1fc00; + run_1f800(); return; + case 0x2db48: + pc=0x2ced0; + run_2c800(); return; + case 0x2dc00: + r2 = r0 + 3; + if(r4 == r2) { + pc=0x2dc18; + continue; + } + r2 = r0 + r0; pc=r31; return; + case 0x2dc18: + r29 = r29 + -176; + r5 = 6 << 16; + page[(r29+152)>>>2] = r16; + r16 = 6 << 16; + r4 = r16 + 22536; + r5 = r5 + 17104; + page[(r29+172)>>>2] = r31; + page[(r29+168)>>>2] = r20; + page[(r29+164)>>>2] = r19; + page[(r29+160)>>>2] = r18; + page[(r29+156)>>>2] = r17; + r31=0x2dc4c; + pc=0x1cc00; + run_1c800(); return; + case 0x2dc4c: + r4 = 6 << 16; + r4 = r4 + 20376; + r5 = r29 + 148; + r6 = r16 + 22536; + r31=0x2dc64; + pc=0x42400; + run_42000(); return; + case 0x2dc64: + if(r2 == r0) { + pc=0x2dcb8; + continue; + } + r16= page[(r29+148)>>>2]; + r2 = r16 & 1024; + r17 = r16 & 255; + if(r2 != r0) { + pc=0x2e1e4; + run_2e000(); return; + } + r2 = r16 + r0; + case 0x2dc88: + r2 = r2 >> 12; + r3 = (r2&0xffffffffL) < (11&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x2e210; + run_2e000(); return; + } + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 8248; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; + return; + case 0x2dcb8: + r4 = 6 << 16; + r4 = r4 + 21396; + r31=0x2dcc8; + pc=0x2a200; + run_2a000(); return; + case 0x2dcc8: + r31= page[(r29+172)>>>2]; + r20= page[(r29+168)>>>2]; + r19= page[(r29+164)>>>2]; + r18= page[(r29+160)>>>2]; + r17= page[(r29+156)>>>2]; + r16= page[(r29+152)>>>2]; + r29 = r29 + 176; + pc=r31; + return; + case 0x2dcec: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2dcfc; + pc=0x1a800; + run_1a800(); return; + case 0x2dcfc: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x2dd1c; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2dd1c; + pc=0x21200; + run_21000(); return; + case 0x2dd1c: + r5 = r29 + 24; + r6 = r0 + 24; + r4 = r29 + 120; + r31=0x2dd30; + pc=0x56fe0; + run_56800(); return; + case 0x2dd30: + r4 = r29 + 120; + r31=0x2dd3c; + pc=0x42e00; + run_42800(); return; + case 0x2dd3c: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2dd4c; + return; + case 0x2dd4c: + r4= page[(r29+128)>>>2]; + r31=0x2dd58; + pc=0x21c00; + run_21800(); return; + case 0x2dd58: + r31=0x2dd60; + pc=0x24000; + run_24000(); return; + case 0x2dd60: + r2 = r0 + 1; + case 0x2dd64: + r31= page[(r29+172)>>>2]; + r20= page[(r29+168)>>>2]; + r19= page[(r29+164)>>>2]; + r18= page[(r29+160)>>>2]; + r17= page[(r29+156)>>>2]; + r16= page[(r29+152)>>>2]; + r29 = r29 + 176; + pc=r31; + return; + case 0x2dd88: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x2e650; + run_2e000(); return; + } + case 0x2dd98: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x2e638; + run_2e000(); return; + } + r18 = r0 + 1; + r16 = r0 + r0; + case 0x2ddac: + r4 = r29 + 120; + r31=0x2ddb8; + pc=0x29400; + run_29000(); return; + case 0x2ddb8: + r4 = r29 + 120; + r31=0x2ddc4; + pc=0x42c00; + run_42800(); return; + case 0x2ddc4: + r31=0x2ddcc; + pc=0x27c00; + run_27800(); return; + case 0x2ddcc: + if(r2 == r0) { + pc=0x2df00; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 35; + if(r3 == r2) { + pc=0x2e6f0; + run_2e000(); return; + } + case 0x2dde4: + r4 = r29 + 16; + r31=0x2ddf0; + pc=0x29400; + run_29000(); return; + case 0x2ddf0: + r4 = r29 + 16; + r31=0x2ddfc; + pc=0x42c00; + run_42800(); return; + case 0x2ddfc: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2de0c; + return; + case 0x2de0c: + r4= page[(r29+24)>>>2]; + r31=0x2de18; + pc=0x21c00; + run_21800(); return; + case 0x2de18: + r4= page[(r29+128)>>>2]; + r31=0x2de24; + pc=0x21c00; + run_21800(); return; + case 0x2de24: + if(r16 == r0) { + pc=0x2dd58; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2de40; + pc=0x1fc00; + run_1f800(); return; + case 0x2de40: + r31=0x2de48; + pc=0x24000; + run_24000(); return; + case 0x2de48: + pc=0x2dd60; + continue; + case 0x2de50: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2de60; + return; + case 0x2de60: + r4 = r0 + 3; + r31=0x2de6c; + pc=0x29600; + run_29000(); return; + case 0x2de6c: + r2 = r0 + 1; + pc=0x2dd64; + continue; + case 0x2de78: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2de88; + return; + case 0x2de88: + r4 = r0 + 2; + r31=0x2de94; + pc=0x29600; + run_29000(); return; + case 0x2de94: + r2 = r0 + 1; + pc=0x2dd64; + continue; + case 0x2dea0: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2deb0; + pc=0x1a800; + run_1a800(); return; + case 0x2deb0: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x2ded0; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2ded0; + pc=0x21200; + run_21000(); return; + case 0x2ded0: + r4 = r29 + 120; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2dee4; + pc=0x56fe0; + run_56800(); return; + case 0x2dee4: + r4 = r29 + 120; + r31=0x2def0; + pc=0x42e00; + run_42800(); return; + case 0x2def0: + r31=0x2def8; + pc=0x27c00; + run_27800(); return; + case 0x2def8: + if(r2 != r0) { + pc=0x2e230; + run_2e000(); return; + } + case 0x2df00: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2df14; + pc=0x1fc00; + run_1f800(); return; + case 0x2df14: + r2 = r0 + 1; + pc=0x2dd64; + continue; + case 0x2df20: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2df30; + return; + case 0x2df30: + r4 = r0 + 2; + r31=0x2df3c; + pc=0x29800; + run_29800(); return; + case 0x2df3c: + r2 = r0 + 1; + pc=0x2dd64; + continue; + case 0x2df48: + r2 = r0 + 248; + if(r17 == r2) { + pc=0x2e268; + run_2e000(); return; + } + case 0x2df54: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2df64; + return; + case 0x2df64: + r31=0x2df6c; + pc=0x24000; + run_24000(); return; + case 0x2df6c: + r2 = r0 + 1; + pc=0x2dd64; + continue; + case 0x2df78: + r4 = r17 + r0; + r31=0x2df84; + pc=0x29e00; + run_29800(); return; + case 0x2df84: + r2 = r0 + 1; + pc=0x2dd64; + continue; + case 0x2df90: + r31=0x2df98; + pc=0x27e00; + run_27800(); return; + case 0x2df98: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r5 = r0 + 32; + r19 = r2 + r0; + if(r3 == r5) { + pc=0x2e664; + run_2e000(); return; + } + case 0x2dfac: + r5 = r0 + 35; + if(r3 == r5) { + pc=0x2e390; + run_2e000(); return; + } + r2 = r0 + 91; + if(r3 == r2) { + pc=0x2e314; + run_2e000(); return; + } + if(r3 == r0) { + pc=0x2e2d4; + run_2e000(); return; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x2dfe0; + pc=0x1a800; + run_1a800(); return; + case 0x2dfe0: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2dff4; + pc=0x56fe0; + run_56800(); return; + case 0x2dff4: + r4 = r18 + r0; + r31=0x2e000; + pc=0x42e00; + run_42800(); return; case 0x2e000: pc=0x2e000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_2e000() throws ExecutionException { /* 0x2e000 - 0x2e200 */ + private final void run_2e000() throws ExecutionException { /* 0x2e000 - 0x2e800 */ int addr, tmp; for(;;) { switch(pc) { case 0x2e000: - r29 = r29 + -24; - r4 = r0 + 80; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x2e014; - pc=0x17600; - run_17600(); return; - case 0x2e014: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = r28 + -30668; - r5 = r5 + 8940; - r29 = r29 + 24; - writePages[(r28+-30672)>>>12][((r28+-30672)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x30e00; - run_30e00(); return; - case 0x2e200: - pc=0x2e200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2e200() throws ExecutionException { /* 0x2e200 - 0x2e400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2e200: - r29 = r29 + -32; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x2e214; - pc=0x1c000; - run_1c000(); return; - case 0x2e214: - /* Next insn is delay slot */ - r31=0x2e21c; - pc=0x1f400; - run_1f400(); return; - case 0x2e21c: + r20= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; + r20 = r20 << 2; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2e240; + pc=0x2e7ac; continue; } + case 0x2e018: + r31=0x2e020; + pc=0x29200; + run_29000(); return; + case 0x2e020: + r2 = r2 << 7; + r20 = r2 | r20; + case 0x2e028: + r31=0x2e030; + pc=0x24000; + run_24000(); return; + case 0x2e030: + r2 = r0 + 2; + if(r20 == r2) { + pc=0x2e3d4; + continue; + } + r2 = (r20&0xffffffffL) < (3&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2e2a0; + continue; + } + r2 = r0 + 256; + if(r20 == r2) { + pc=0x2e610; + continue; + } + r2 = r0 + 384; + if(r20 != r2) { + pc=0x2e2b4; + continue; + } + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8736; + case 0x2e06c: + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r4 = r19 + r0; + r5 = r18 + r0; + r31=0x2e084; + pc=0x29a00; + run_29800(); return; + case 0x2e084: + r2 = r0 + 1; + pc=0x2dd64; + run_2d800(); return; + case 0x2e090: + r31=0x2e098; + pc=0x27e00; + run_27800(); return; + case 0x2e098: + page[(r29+144)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x2e624; + continue; + } + case 0x2e0ac: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x2e4f4; + continue; + } + r3 = r0 + 91; + if(r2 == r3) { + pc=0x2e578; + continue; + } + if(r2 == r0) { + pc=0x2e4e4; + continue; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x2e0e0; + pc=0x1a800; + run_1a800(); return; + case 0x2e0e0: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2e0f4; + pc=0x56fe0; + run_56800(); return; + case 0x2e0f4: + r4 = r18 + r0; + r31=0x2e100; + pc=0x42e00; + run_42800(); return; + case 0x2e100: + r19= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r19 = ((r0 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; + r19 = r19 << 2; + if(r2 != r0) { + pc=0x2e83c; + run_2e800(); return; + } + case 0x2e118: + r31=0x2e120; + pc=0x29200; + run_29000(); return; + case 0x2e120: + r2 = r2 << 7; + r19 = r2 | r19; + case 0x2e128: + r31=0x2e130; + pc=0x24000; + run_24000(); return; + case 0x2e130: + r2 = r0 + 256; + if(r19 == r2) { + pc=0x2e828; + run_2e800(); return; + } + r2 = (r19&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2e678; + continue; + } + r2 = r0 + 392; + if(r19 == r2) { + pc=0x2e878; + run_2e800(); return; + } + r2 = (r19&0xffffffffL) < (393&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2e888; + run_2e800(); return; + } + r2 = r0 + 516; + if(r19 == r2) { + pc=0x2e740; + continue; + } + r2 = r0 + 520; + if(r19 == r2) { + pc=0x2e704; + continue; + } + r2 = r0 + 404; + if(r19 != r2) { + pc=0x2e2b4; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9360; + case 0x2e18c: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x2e1a4; + pc=0x29a00; + run_29800(); return; + case 0x2e1a4: + r2 = r0 + 1; + pc=0x2dd64; + run_2d800(); return; + case 0x2e1b0: + r5 = 6 << 16; + r4 = r29 + 16; + r5 = r5 + 6828; + r6 = r17 + r0; + r31=0x2e1c8; + pc=0x50c00; + run_50800(); return; + case 0x2e1c8: + r4 = r0 + -2; + r5 = r29 + 16; + r31=0x2e1d8; + pc=0x1fc00; + run_1f800(); return; + case 0x2e1d8: + r2 = r0 + 1; + pc=0x2dd64; + run_2d800(); return; + case 0x2e1e4: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x2e1f4; + return; + case 0x2e1f4: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x2e204; + return; + case 0x2e204: + r2= page[(r29+148)>>>2]; + pc=0x2dc88; + run_2d800(); return; + case 0x2e210: + r4 = 6 << 16; + r4 = r4 + 6908; + r5 = r17 + r0; + r31=0x2e224; + pc=0x21400; + run_21000(); return; case 0x2e224: - /* Next insn is delay slot */ - r31=0x2e22c; - pc=0x1c800; - run_1c800(); return; - case 0x2e22c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; + r2 = r0 + 1; + pc=0x2dd64; + run_2d800(); return; + case 0x2e230: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2e240; return; case 0x2e240: - r4 = readPages[(r28+-30668)>>>12][((r28+-30668)>>>2)&0x3ff]; - r6 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x2e254; - pc=0x31000; - run_31000(); return; - case 0x2e254: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2e2b4; - continue; - } - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x2e2b4; - continue; - } - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 32; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x2e2cc; - continue; - } - case 0x2e27c: - /* Next insn is delay slot */ - pc=r16; - r31=0x2e284; + r2= page[(r28+-31264)>>>2]; + r4= page[(r29+128)>>>2]; + pc=r2; + r31=0x2e250; return; - case 0x2e284: + case 0x2e250: + r4 = r0 + 3; + r31=0x2e25c; + pc=0x29800; + run_29800(); return; + case 0x2e25c: + r2 = r0 + 1; + pc=0x2dd64; + run_2d800(); return; + case 0x2e268: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 16; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2e224; - continue; + pc=0x2df54; + run_2d800(); return; } - r3 = r0 + 1; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x2e22c; - continue; - } - /* Next insn is delay slot */ - r31=0x2e2a0; - pc=0x1ce00; - run_1ce00(); return; + r4 = 6 << 16; + r4 = r4 + 6768; + r31=0x2e298; + pc=0x21200; + run_21000(); return; + case 0x2e298: + pc=0x2df54; + run_2d800(); return; case 0x2e2a0: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2e2b4: - r4 = 7 << 16; - r4 = r4 + -972; - /* Next insn is delay slot */ - r31=0x2e2c4; - pc=0x1b000; - run_1b000(); return; - case 0x2e2c4: - /* Next insn is delay slot */ - pc=0x2e224; - continue; - case 0x2e2cc: - /* Next insn is delay slot */ - r31=0x2e2d4; - pc=0x1c000; - run_1c000(); return; - case 0x2e2d4: - /* Next insn is delay slot */ - pc=0x2e27c; - continue; - case 0x2e400: - pc=0x2e400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2e400() throws ExecutionException { /* 0x2e400 - 0x2e600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2e400: - r2 = readPages[(r28+-30664)>>>12][((r28+-30664)>>>2)&0x3ff]; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r5; - r2 = r2 + 1; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r2; - writePages[(r28+-30664)>>>12][((r28+-30664)>>>2)&0x3ff] = r2; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = r6; - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = r7; - writePages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2e600: - pc=0x2e600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2e600() throws ExecutionException { /* 0x2e600 - 0x2e800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2e600: - r2 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2e618; + if(r20 == r0) { + pc=0x2e37c; continue; } - /* Next insn is delay slot */ - pc=r31; + r2 = r0 + 1; + if(r20 == r2) { + pc=0x2e2dc; + continue; + } + case 0x2e2b4: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 8592; + r31=0x2e2c8; + pc=0x1fc00; + run_1f800(); return; + case 0x2e2c8: + r2 = r0 + 1; + pc=0x2dd64; + run_2d800(); return; + case 0x2e2d4: + r31=0x2e2dc; + pc=0x24000; + run_24000(); return; + case 0x2e2dc: + r2 = 6 << 16; + r2 = r2 + 9072; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 == r0) { + pc=0x2e2b4; + continue; + } + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x2e308; return; - case 0x2e618: - r4 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x3ea00; - run_3ea00(); return; + case 0x2e308: + r2 = r0 + 1; + pc=0x2dd64; + run_2d800(); return; + case 0x2e314: + r31=0x2e31c; + pc=0x23000; + run_23000(); return; + case 0x2e31c: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2e330; + pc=0x1a800; + run_1a800(); return; + case 0x2e330: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2e344; + pc=0x56fe0; + run_56800(); return; + case 0x2e344: + r4 = r18 + r0; + r31=0x2e350; + pc=0x42e00; + run_42800(); return; + case 0x2e350: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x2e7e8; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2e374; + pc=0x1fc00; + run_1f800(); return; + case 0x2e374: + r31=0x2e37c; + pc=0x24000; + run_24000(); return; + case 0x2e37c: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8928; + pc=0x2e06c; + continue; + case 0x2e390: + r31=0x2e398; + pc=0x23000; + run_23000(); return; + case 0x2e398: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2e3ac; + pc=0x1a800; + run_1a800(); return; + case 0x2e3ac: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2e3c0; + pc=0x56fe0; + run_56800(); return; + case 0x2e3c0: + r4 = r18 + r0; + r31=0x2e3cc; + pc=0x42c00; + run_42800(); return; + case 0x2e3cc: + r31=0x2e3d4; + pc=0x24000; + run_24000(); return; + case 0x2e3d4: + r2 = 6 << 16; + r2 = r2 + 9024; + r17 = r17 + r2; + r5 = r16 & 768; + r2 = r0 + 256; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r17 = tmp; + if(r5 == r2) { + pc=0x2e914; + run_2e800(); return; + } + r2 = (r5&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2e8e0; + run_2e800(); return; + } + r2 = r0 + 512; + if(r5 == r2) { + pc=0x2e924; + run_2e800(); return; + } + r2 = r0 + 768; + if(r5 != r2) { + pc=0x2e8f4; + run_2e800(); return; + } + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+40)>>>2]; + case 0x2e424: + r3= page[(r16+31424)>>>2]; + r3= page[(r3+4)>>>2]; + r3 = r3 & 2; + if(r3 == r0) { + pc=0x2e45c; + continue; + } + if(r19 != r0) { + pc=0x2e454; + continue; + } + r19 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + r2 = r0 + 2; + r19 = r2 - r19; + case 0x2e454: + r2 = r17 << 8; + r17 = r2 | r17; + case 0x2e45c: + r4 = r19 + r0; + r5 = r18 + r0; + r6 = r17 + r0; + r31=0x2e470; + pc=0x29a00; + run_29800(); return; + case 0x2e470: + r2= page[(r16+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 4; + if(r2 == r0) { + pc=0x2dd60; + run_2d800(); return; + } + r3= page[(r29+120)>>>2]; + r2 = r0 + 1; + if(r3 != r2) { + pc=0x2dd60; + run_2d800(); return; + } + r2= page[(r29+128)>>>2]; + if(r2 == r0) { + pc=0x2dd60; + run_2d800(); return; + } + r2 = r0 + 139; + if(r17 == r2) { + pc=0x2e974; + run_2e800(); return; + } + r2 = r0 + 171; + if(r17 != r2) { + pc=0x2dd60; + run_2d800(); return; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6720; + r31=0x2e4d8; + pc=0x1fc00; + run_1f800(); return; + case 0x2e4d8: + r2 = r0 + 1; + pc=0x2dd64; + run_2d800(); return; + case 0x2e4e4: + r31=0x2e4ec; + pc=0x24000; + run_24000(); return; + case 0x2e4ec: + pc=0x2e2b4; + continue; + case 0x2e4f4: + r31=0x2e4fc; + pc=0x23000; + run_23000(); return; + case 0x2e4fc: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2e510; + pc=0x1a800; + run_1a800(); return; + case 0x2e510: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2e524; + pc=0x56fe0; + run_56800(); return; + case 0x2e524: + r4 = r18 + r0; + r31=0x2e530; + pc=0x42c00; + run_42800(); return; + case 0x2e530: + r31=0x2e538; + pc=0x24000; + run_24000(); return; + case 0x2e538: + r2 = 6 << 16; + r2 = r2 + 10240; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r5 = tmp; + r4 = r29 + 144; + r6 = r16 & 768; + r31=0x2e558; + pc=0x28e00; + run_28800(); return; + case 0x2e558: + r4= page[(r29+144)>>>2]; + r6 = r2 + r0; + r5 = r18 + r0; + r31=0x2e56c; + pc=0x29a00; + run_29800(); return; + case 0x2e56c: + r2 = r0 + 1; + pc=0x2dd64; + run_2d800(); return; + case 0x2e578: + r31=0x2e580; + pc=0x23000; + run_23000(); return; + case 0x2e580: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2e594; + pc=0x1a800; + run_1a800(); return; + case 0x2e594: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2e5a8; + pc=0x56fe0; + run_56800(); return; + case 0x2e5a8: + r4 = r18 + r0; + r31=0x2e5b4; + pc=0x42e00; + run_42800(); return; + case 0x2e5b4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x2e808; + run_2e800(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2e5d8; + pc=0x1fc00; + run_1f800(); return; + case 0x2e5d8: + r31=0x2e5e0; + pc=0x24000; + run_24000(); return; + case 0x2e5e0: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 10008; + case 0x2e5ec: + r2 = r17 + r2; + r6= page[(r2+0)>>>2]; + r4= page[(r29+144)>>>2]; + r5 = r18 + r0; + r31=0x2e604; + pc=0x29a00; + run_29800(); return; + case 0x2e604: + r2 = r0 + 1; + pc=0x2dd64; + run_2d800(); return; + case 0x2e610: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8832; + pc=0x2e06c; + continue; + case 0x2e624: + r31=0x2e62c; + pc=0x23000; + run_23000(); return; + case 0x2e62c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2e0ac; + continue; + case 0x2e638: + r31=0x2e640; + pc=0x23000; + run_23000(); return; + case 0x2e640: + r18 = r0 + r0; + r16 = r0 + 1; + pc=0x2ddac; + run_2d800(); return; + case 0x2e650: + r31=0x2e658; + pc=0x23000; + run_23000(); return; + case 0x2e658: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2dd98; + run_2d800(); return; + case 0x2e664: + r31=0x2e66c; + pc=0x23000; + run_23000(); return; + case 0x2e66c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + pc=0x2dfac; + run_2d800(); return; + case 0x2e678: + r2 = r0 + 4; + if(r19 == r2) { + pc=0x2e79c; + continue; + } + r2 = (r19&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2e958; + run_2e800(); return; + } + r2 = r0 + 36; + if(r19 == r2) { + pc=0x2e78c; + continue; + } + r2 = r0 + 128; + if(r19 == r2) { + pc=0x2e77c; + continue; + } + r2 = r0 + 8; + if(r19 != r2) { + pc=0x2e2b4; + continue; + } + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x2e6d0; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x2e18c; + continue; + case 0x2e6d0: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x2e6e0; + return; + case 0x2e6e0: + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x2e18c; + continue; + case 0x2e6f0: + r31=0x2e6f8; + pc=0x23000; + run_23000(); return; + case 0x2e6f8: + r16 = r18 + r0; + pc=0x2dde4; + run_2d800(); return; + case 0x2e704: + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x2e720; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x2e18c; + continue; + case 0x2e720: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x2e730; + return; + case 0x2e730: + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x2e18c; + continue; + case 0x2e740: + r2 = 6 << 16; + r2 = r2 + 9180; + case 0x2e748: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x2e760; + pc=0x29a00; + run_29800(); return; + case 0x2e760: + r4= page[(r29+120)>>>2]; + r5 = r29 + 128; + r31=0x2e770; + pc=0x29000; + run_29000(); return; + case 0x2e770: + r2 = r0 + 1; + pc=0x2dd64; + run_2d800(); return; + case 0x2e77c: + r2 = 6 << 16; + r2 = r2 + 9420; + pc=0x2e18c; + continue; + case 0x2e78c: + r2 = 6 << 16; + r2 = r2 + 9600; + pc=0x2e18c; + continue; + case 0x2e79c: + r2 = 6 << 16; + r2 = r2 + 9480; + pc=0x2e748; + continue; + case 0x2e7ac: + r31=0x2e7b4; + pc=0x29200; + run_29000(); return; + case 0x2e7b4: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r20 = r20 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x2e938; + run_2e800(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2e7e0; + pc=0x1fc00; + run_1f800(); return; + case 0x2e7e0: + pc=0x2e018; + continue; + case 0x2e7e8: + r31=0x2e7f0; + pc=0x23000; + run_23000(); return; + case 0x2e7f0: + r31=0x2e7f8; + pc=0x29200; + run_29000(); return; + case 0x2e7f8: + r2 = r2 << 7; + r20 = r2 | 8; case 0x2e800: pc=0x2e800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_2e800() throws ExecutionException { /* 0x2e800 - 0x2ea00 */ + private final void run_2e800() throws ExecutionException { /* 0x2e800 - 0x2f000 */ int addr, tmp; for(;;) { switch(pc) { case 0x2e800: - r3 = r0 + 1; - r2 = 7 << 16; - writePages[(r2+16928)>>>12][((r2+16928)>>>2)&0x3ff] = r3; - writePages[(r28+-30664)>>>12][((r28+-30664)>>>2)&0x3ff] = r3; - r3 = 7 << 16; - r2 = r2 + 16928; - r3 = r3 + 12764; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - r3 = 7 << 16; - r3 = r3 + 6068; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r3; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - writePages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2ea00: - pc=0x2ea00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2ea00() throws ExecutionException { /* 0x2ea00 - 0x2ec00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2ea00: - r2 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; - r6 = r0 + 16; - r7 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r3 = r4 + r0; - r7 = r7 & 272; - if(r7 == r6) { - /* Next insn is delay slot */ - pc=0x2ea24; + pc=0x2e028; + run_2e000(); return; + case 0x2e808: + r31=0x2e810; + pc=0x23000; + run_23000(); return; + case 0x2e810: + r31=0x2e818; + pc=0x29200; + run_29000(); return; + case 0x2e818: + r2 = r2 << 7; + r19 = r2 | 8; + pc=0x2e128; + run_2e000(); return; + case 0x2e828: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 9776; + pc=0x2e5ec; + run_2e000(); return; + case 0x2e83c: + r31=0x2e844; + pc=0x29200; + run_29000(); return; + case 0x2e844: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r19 = r19 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x2e948; continue; } - case 0x2ea1c: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2ea24: - r6 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r4 = r0 + 1; - if(r6 != r4) { - /* Next insn is delay slot */ + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2e870; + pc=0x1fc00; + run_1f800(); return; + case 0x2e870: + pc=0x2e118; + run_2e000(); return; + case 0x2e878: + r2 = 6 << 16; + r2 = r2 + 9240; + pc=0x2e18c; + run_2e000(); return; + case 0x2e888: + r2 = r0 + 384; + if(r19 == r2) { + pc=0x2e8b0; + continue; + } + r2 = r0 + 388; + if(r19 != r2) { + pc=0x2e2b4; + run_2e000(); return; + } + r2 = 6 << 16; + r2 = r2 + 9540; + pc=0x2e748; + run_2e000(); return; + case 0x2e8b0: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 9660; + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r4= page[(r29+144)>>>2]; + r5 = r18 + r0; + r31=0x2e8d4; + pc=0x29a00; + run_29800(); return; + case 0x2e8d4: + r2 = r0 + 1; + pc=0x2dd64; + run_2d800(); return; + case 0x2e8e0: + if(r5 != r0) { + pc=0x2e8f4; + continue; + } + r16 = 6 << 16; + pc=0x2e45c; + run_2e000(); return; + case 0x2e8f4: + r4 = 6 << 16; + r4 = r4 + 6300; + r31=0x2e904; + pc=0x21400; + run_21000(); return; + case 0x2e904: + r16 = 6 << 16; + r2 = r0 + r0; + pc=0x2e424; + run_2e000(); return; + case 0x2e914: + r17 = r17 << 8; + r16 = 6 << 16; + pc=0x2e45c; + run_2e000(); return; + case 0x2e924: + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+36)>>>2]; + pc=0x2e424; + run_2e000(); return; + case 0x2e938: + r31=0x2e940; + pc=0x23000; + run_23000(); return; + case 0x2e940: + pc=0x2e018; + run_2e000(); return; + case 0x2e948: + r31=0x2e950; + pc=0x23000; + run_23000(); return; + case 0x2e950: + pc=0x2e118; + run_2e000(); return; + case 0x2e958: + if(r19 == r0) { + pc=0x2e5e0; + run_2e000(); return; + } + r2 = r0 + 2; + if(r19 != r2) { + pc=0x2e2b4; + run_2e000(); return; + } + pc=0x2e538; + run_2e000(); return; + case 0x2e974: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6672; + r31=0x2e988; + pc=0x1fc00; + run_1f800(); return; + case 0x2e988: + r2 = r0 + 1; + pc=0x2dd64; + run_2d800(); return; + case 0x2ea00: + r4 = r4 + -3; + r4 = (r4&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; + if(r4 != r0) { pc=0x2ea1c; continue; } - r4 = r5 + r0; - r6 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r5 = 7 << 16; - r7 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r5 = r5 + -652; - /* Next insn is delay slot */ - pc=0x3bc00; - run_3bc00(); return; - case 0x2ec00: - pc=0x2ec00; + r2 = r0 + r0; + pc=r31; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2ec00() throws ExecutionException { /* 0x2ec00 - 0x2ee00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2ec00: - r2 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; - r3 = r4 + r0; - r6 = readPages[(r2+24)>>>12][((r2+24)>>>2)&0x3ff]; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x2ec2c; + case 0x2ea1c: + r29 = r29 + -176; + r5 = 6 << 16; + page[(r29+152)>>>2] = r16; + r16 = 6 << 16; + r4 = r16 + 22536; + r5 = r5 + 17104; + page[(r29+172)>>>2] = r31; + page[(r29+168)>>>2] = r20; + page[(r29+164)>>>2] = r19; + page[(r29+160)>>>2] = r18; + page[(r29+156)>>>2] = r17; + r31=0x2ea50; + pc=0x1cc00; + run_1c800(); return; + case 0x2ea50: + r4 = 6 << 16; + r4 = r4 + 20376; + r5 = r29 + 148; + r6 = r16 + 22536; + r31=0x2ea68; + pc=0x42400; + run_42000(); return; + case 0x2ea68: + if(r2 == r0) { + pc=0x2eabc; continue; } - r7 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r6 = r0 + 16; - r7 = r7 & 272; - if(r7 == r6) { - /* Next insn is delay slot */ - pc=0x2ec34; + r16= page[(r29+148)>>>2]; + r2 = r16 & 1024; + r17 = r16 & 255; + if(r2 != r0) { + pc=0x2efc8; continue; } + r2 = r16 + r0; + case 0x2ea8c: + r2 = r2 >> 12; + r3 = (r2&0xffffffffL) < (11&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x2eff4; + continue; + } + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 8292; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; + return; + case 0x2eabc: + r4 = 6 << 16; + r4 = r4 + 21396; + r31=0x2eacc; + pc=0x2a200; + run_2a000(); return; + case 0x2eacc: + if(r2 == r0) { + pc=0x2eafc; + continue; + } + case 0x2ead4: + r2 = r0 + 1; + case 0x2ead8: + r31= page[(r29+172)>>>2]; + r20= page[(r29+168)>>>2]; + r19= page[(r29+164)>>>2]; + r18= page[(r29+160)>>>2]; + r17= page[(r29+156)>>>2]; + r16= page[(r29+152)>>>2]; + r29 = r29 + 176; + pc=r31; + return; + case 0x2eafc: + r4 = 6 << 16; + r4 = r4 + 19716; + r31=0x2eb0c; + pc=0x2a200; + run_2a000(); return; + case 0x2eb0c: + pc=0x2ead8; + continue; + case 0x2eb14: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2eb24; + pc=0x1a800; + run_1a800(); return; + case 0x2eb24: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x2eb44; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2eb44; + pc=0x21200; + run_21000(); return; + case 0x2eb44: + r5 = r29 + 24; + r6 = r0 + 24; + r4 = r29 + 120; + r31=0x2eb58; + pc=0x56fe0; + run_56800(); return; + case 0x2eb58: + r4 = r29 + 120; + r31=0x2eb64; + pc=0x42e00; + run_42800(); return; + case 0x2eb64: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2eb74; + return; + case 0x2eb74: + r4= page[(r29+128)>>>2]; + r31=0x2eb80; + pc=0x21c00; + run_21800(); return; + case 0x2eb80: + r31=0x2eb88; + pc=0x24000; + run_24000(); return; + case 0x2eb88: + pc=0x2ead4; + continue; + case 0x2eb90: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x2f41c; + run_2f000(); return; + } + case 0x2eba0: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x2f404; + run_2f000(); return; + } + r18 = r0 + 1; + r16 = r0 + r0; + case 0x2ebb4: + r4 = r29 + 120; + r31=0x2ebc0; + pc=0x29400; + run_29000(); return; + case 0x2ebc0: + r4 = r29 + 120; + r31=0x2ebcc; + pc=0x42c00; + run_42800(); return; + case 0x2ebcc: + r31=0x2ebd4; + pc=0x27c00; + run_27800(); return; + case 0x2ebd4: + if(r2 == r0) { + pc=0x2ed00; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 35; + if(r3 == r2) { + pc=0x2f4bc; + run_2f000(); return; + } + case 0x2ebec: + r4 = r29 + 16; + r31=0x2ebf8; + pc=0x29400; + run_29000(); return; + case 0x2ebf8: + r4 = r29 + 16; + r31=0x2ec04; + pc=0x42c00; + run_42800(); return; + case 0x2ec04: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2ec14; + return; + case 0x2ec14: + r4= page[(r29+24)>>>2]; + r31=0x2ec20; + pc=0x21c00; + run_21800(); return; + case 0x2ec20: + r4= page[(r29+128)>>>2]; + r31=0x2ec2c; + pc=0x21c00; + run_21800(); return; case 0x2ec2c: - /* Next insn is delay slot */ - pc=r31; + if(r16 == r0) { + pc=0x2eb80; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2ec48; + pc=0x1fc00; + run_1f800(); return; + case 0x2ec48: + r31=0x2ec50; + pc=0x24000; + run_24000(); return; + case 0x2ec50: + pc=0x2ead4; + continue; + case 0x2ec58: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2ec68; return; - case 0x2ec34: - r6 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r4 = r0 + 1; - if(r6 == r4) { - /* Next insn is delay slot */ - pc=0x2ec2c; - continue; - } - r4 = r5 + r0; - r6 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r5 = 7 << 16; - r7 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r5 = r5 + -652; - /* Next insn is delay slot */ - pc=0x3bc00; - run_3bc00(); return; - case 0x2ee00: - pc=0x2ee00; + case 0x2ec68: + r4 = r0 + 3; + r31=0x2ec74; + pc=0x29600; + run_29000(); return; + case 0x2ec74: + pc=0x2ead4; + continue; + case 0x2ec7c: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2ec8c; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2ee00() throws ExecutionException { /* 0x2ee00 - 0x2f000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2ee00: - r2 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; - r3 = r4 + r0; - r6 = readPages[(r2+24)>>>12][((r2+24)>>>2)&0x3ff]; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x2ee2c; + case 0x2ec8c: + r4 = r0 + 2; + r31=0x2ec98; + pc=0x29600; + run_29000(); return; + case 0x2ec98: + pc=0x2ead4; + continue; + case 0x2eca0: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2ecb0; + pc=0x1a800; + run_1a800(); return; + case 0x2ecb0: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x2ecd0; continue; } - r7 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r6 = r0 + 16; - r7 = r7 & 272; - if(r7 == r6) { - /* Next insn is delay slot */ - pc=0x2ee34; - continue; + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2ecd0; + pc=0x21200; + run_21000(); return; + case 0x2ecd0: + r4 = r29 + 120; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2ece4; + pc=0x56fe0; + run_56800(); return; + case 0x2ece4: + r4 = r29 + 120; + r31=0x2ecf0; + pc=0x42e00; + run_42800(); return; + case 0x2ecf0: + r31=0x2ecf8; + pc=0x27c00; + run_27800(); return; + case 0x2ecf8: + if(r2 != r0) { + pc=0x2f010; + run_2f000(); return; } - case 0x2ee2c: - /* Next insn is delay slot */ - pc=r31; + case 0x2ed00: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2ed14; + pc=0x1fc00; + run_1f800(); return; + case 0x2ed14: + pc=0x2ead4; + continue; + case 0x2ed1c: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2ed2c; return; - case 0x2ee34: - r6 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r4 = r0 + 1; - if(r6 == r4) { - /* Next insn is delay slot */ - pc=0x2ee2c; - continue; + case 0x2ed2c: + r4 = r0 + 2; + r31=0x2ed38; + pc=0x29800; + run_29800(); return; + case 0x2ed38: + pc=0x2ead4; + continue; + case 0x2ed40: + r2 = r0 + 248; + if(r17 == r2) { + pc=0x2f048; + run_2f000(); return; } - r4 = r5 + r0; - r6 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r5 = 7 << 16; - r7 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r5 = r5 + -652; - /* Next insn is delay slot */ - pc=0x3bc00; - run_3bc00(); return; + case 0x2ed4c: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2ed5c; + return; + case 0x2ed5c: + r31=0x2ed64; + pc=0x24000; + run_24000(); return; + case 0x2ed64: + pc=0x2ead4; + continue; + case 0x2ed6c: + r4 = r17 + r0; + r31=0x2ed78; + pc=0x29e00; + run_29800(); return; + case 0x2ed78: + pc=0x2ead4; + continue; + case 0x2ed80: + r31=0x2ed88; + pc=0x27e00; + run_27800(); return; + case 0x2ed88: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r5 = r0 + 32; + r19 = r2 + r0; + if(r3 == r5) { + pc=0x2f430; + run_2f000(); return; + } + case 0x2ed9c: + r5 = r0 + 35; + if(r3 == r5) { + pc=0x2f168; + run_2f000(); return; + } + r2 = r0 + 91; + if(r3 == r2) { + pc=0x2f0ec; + run_2f000(); return; + } + if(r3 == r0) { + pc=0x2f0b0; + run_2f000(); return; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x2edd0; + pc=0x1a800; + run_1a800(); return; + case 0x2edd0: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2ede4; + pc=0x56fe0; + run_56800(); return; + case 0x2ede4: + r4 = r18 + r0; + r31=0x2edf0; + pc=0x42e00; + run_42800(); return; + case 0x2edf0: + r20= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; + r20 = r20 << 2; + if(r2 != r0) { + pc=0x2f574; + run_2f000(); return; + } + case 0x2ee08: + r31=0x2ee10; + pc=0x29200; + run_29000(); return; + case 0x2ee10: + r2 = r2 << 7; + r20 = r2 | r20; + case 0x2ee18: + r31=0x2ee20; + pc=0x24000; + run_24000(); return; + case 0x2ee20: + r2 = r0 + 2; + if(r20 == r2) { + pc=0x2f1ac; + run_2f000(); return; + } + r2 = (r20&0xffffffffL) < (3&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2f080; + run_2f000(); return; + } + r2 = r0 + 256; + if(r20 == r2) { + pc=0x2f3dc; + run_2f000(); return; + } + r2 = r0 + 384; + if(r20 != r2) { + pc=0x2f094; + run_2f000(); return; + } + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8736; + case 0x2ee5c: + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r4 = r19 + r0; + r5 = r18 + r0; + r31=0x2ee74; + pc=0x29a00; + run_29800(); return; + case 0x2ee74: + pc=0x2ead4; + continue; + case 0x2ee7c: + r31=0x2ee84; + pc=0x27e00; + run_27800(); return; + case 0x2ee84: + page[(r29+144)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x2f3f0; + run_2f000(); return; + } + case 0x2ee98: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x2f2c8; + run_2f000(); return; + } + r3 = r0 + 91; + if(r2 == r3) { + pc=0x2f348; + run_2f000(); return; + } + if(r2 == r0) { + pc=0x2f2b8; + run_2f000(); return; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x2eecc; + pc=0x1a800; + run_1a800(); return; + case 0x2eecc: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2eee0; + pc=0x56fe0; + run_56800(); return; + case 0x2eee0: + r4 = r18 + r0; + r31=0x2eeec; + pc=0x42e00; + run_42800(); return; + case 0x2eeec: + r19= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r19 = ((r0 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; + r19 = r19 << 2; + if(r2 != r0) { + pc=0x2f604; + run_2f000(); return; + } + case 0x2ef04: + r31=0x2ef0c; + pc=0x29200; + run_29000(); return; + case 0x2ef0c: + r2 = r2 << 7; + r19 = r2 | r19; + case 0x2ef14: + r31=0x2ef1c; + pc=0x24000; + run_24000(); return; + case 0x2ef1c: + r2 = r0 + 256; + if(r19 == r2) { + pc=0x2f5f0; + run_2f000(); return; + } + r2 = (r19&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2f444; + run_2f000(); return; + } + r2 = r0 + 392; + if(r19 == r2) { + pc=0x2f640; + run_2f000(); return; + } + r2 = (r19&0xffffffffL) < (393&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2f650; + run_2f000(); return; + } + r2 = r0 + 516; + if(r19 == r2) { + pc=0x2f50c; + run_2f000(); return; + } + r2 = r0 + 520; + if(r19 == r2) { + pc=0x2f4d0; + run_2f000(); return; + } + r2 = r0 + 404; + if(r19 != r2) { + pc=0x2f094; + run_2f000(); return; + } + r2 = 6 << 16; + r2 = r2 + 9360; + case 0x2ef78: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x2ef90; + pc=0x29a00; + run_29800(); return; + case 0x2ef90: + pc=0x2ead4; + continue; + case 0x2ef98: + r5 = 6 << 16; + r4 = r29 + 16; + r5 = r5 + 6828; + r6 = r17 + r0; + r31=0x2efb0; + pc=0x50c00; + run_50800(); return; + case 0x2efb0: + r4 = r0 + -2; + r5 = r29 + 16; + r31=0x2efc0; + pc=0x1fc00; + run_1f800(); return; + case 0x2efc0: + pc=0x2ead4; + continue; + case 0x2efc8: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x2efd8; + return; + case 0x2efd8: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x2efe8; + return; + case 0x2efe8: + r2= page[(r29+148)>>>2]; + pc=0x2ea8c; + continue; + case 0x2eff4: + r4 = 6 << 16; + r4 = r4 + 6908; + r5 = r17 + r0; case 0x2f000: pc=0x2f000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_2f000() throws ExecutionException { /* 0x2f000 - 0x2f200 */ + private final void run_2f000() throws ExecutionException { /* 0x2f000 - 0x2f800 */ int addr, tmp; for(;;) { switch(pc) { case 0x2f000: - r2 = readPages[(r28+-30740)>>>12][((r28+-30740)>>>2)&0x3ff]; - r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r18 = r4 + r0; - r17 = r5 + r0; - r16 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; + r31=0x2f008; + pc=0x21400; + run_21000(); return; + case 0x2f008: + pc=0x2ead4; + run_2e800(); return; + case 0x2f010: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2f020; + return; + case 0x2f020: + r4= page[(r29+128)>>>2]; + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x2f034; + return; + case 0x2f034: + r4 = r0 + 3; + r31=0x2f040; + pc=0x29800; + run_29800(); return; + case 0x2f040: + pc=0x2ead4; + run_2e800(); return; + case 0x2f048: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 16; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2f03c; + pc=0x2ed4c; + run_2e800(); return; + } + r4 = 6 << 16; + r4 = r4 + 6768; + r31=0x2f078; + pc=0x21200; + run_21000(); return; + case 0x2f078: + pc=0x2ed4c; + run_2e800(); return; + case 0x2f080: + if(r20 == r0) { + pc=0x2f154; continue; } - r3 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; r2 = r0 + 1; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x2f200; - run_2f200(); return; - } - case 0x2f03c: - r5 = 7 << 16; - r6 = readPages[(r18+12)>>>12][((r18+12)>>>2)&0x3ff]; - r4 = r17 + r0; - r5 = r5 + -628; - /* Next insn is delay slot */ - r31=0x2f054; - pc=0x3bc00; - run_3bc00(); return; - case 0x2f054: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r0 + 4; - r2 = r2 & 7; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x2f1dc; - continue; - } - r3 = r0 + 6; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x2f1dc; - continue; - } - r3 = r0 + 2; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x2f13c; - continue; - } - r4 = 7 << 16; - r4 = r4 + -608; - r5 = r0 + 1; - r6 = r0 + 3; - r7 = r17 + r0; - /* Next insn is delay slot */ - r31=0x2f09c; - pc=0x3dc00; - run_3dc00(); return; - case 0x2f09c: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r2 & 16; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2f16c; + if(r20 == r2) { + pc=0x2f0b8; continue; } + case 0x2f094: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 8592; + r31=0x2f0a8; + pc=0x1fc00; + run_1f800(); return; + case 0x2f0a8: + pc=0x2ead4; + run_2e800(); return; case 0x2f0b0: - r2 = r2 & 256; - r4 = r17 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2f1c0; - continue; - } - r5 = 7 << 16; - r7 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r6 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r5 = r5 + -604; - /* Next insn is delay slot */ - r31=0x2f0d8; - pc=0x3bc00; - run_3bc00(); return; - case 0x2f0d8: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = r2 & 32; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2f19c; + r31=0x2f0b8; + pc=0x24000; + run_24000(); return; + case 0x2f0b8: + r2 = 6 << 16; + r2 = r2 + 9072; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 == r0) { + pc=0x2f094; continue; } + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x2f0e4; + return; + case 0x2f0e4: + pc=0x2ead4; + run_2e800(); return; case 0x2f0ec: - r2 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2f118; - continue; - } - r4 = 7 << 16; - r4 = r4 + -580; - r5 = r0 + 1; - r6 = r0 + 9; - r7 = r17 + r0; - /* Next insn is delay slot */ - r31=0x2f118; - pc=0x3dc00; - run_3dc00(); return; - case 0x2f118: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r5 = r17 + r0; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r4 = r0 + 10; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x3c000; - run_3c000(); return; - case 0x2f13c: - r4 = 7 << 16; - r4 = r4 + -624; - r5 = r0 + 1; - r6 = r0 + 5; - r7 = r17 + r0; - /* Next insn is delay slot */ - r31=0x2f158; - pc=0x3dc00; - run_3dc00(); return; - case 0x2f158: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r2 & 16; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x2f0b0; - continue; - } - case 0x2f16c: - r4 = 7 << 16; - r4 = r4 + -592; - r5 = r0 + 1; - r6 = r0 + 2; - r7 = r17 + r0; - /* Next insn is delay slot */ - r31=0x2f188; - pc=0x3dc00; - run_3dc00(); return; - case 0x2f188: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = r2 & 32; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2f0ec; - continue; - } - case 0x2f19c: - r4 = 7 << 16; - r4 = r4 + -588; - r5 = r0 + 1; - r6 = r0 + 4; - r7 = r17 + r0; - /* Next insn is delay slot */ - r31=0x2f1b8; - pc=0x3dc00; - run_3dc00(); return; - case 0x2f1b8: - /* Next insn is delay slot */ - pc=0x2f0ec; - continue; - case 0x2f1c0: - r5 = 7 << 16; - r6 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r5 = r5 + -596; - /* Next insn is delay slot */ - r31=0x2f1d4; - pc=0x3bc00; - run_3bc00(); return; - case 0x2f1d4: - /* Next insn is delay slot */ - pc=0x2f0d8; - continue; - case 0x2f1dc: - r4 = 7 << 16; - r4 = r4 + -616; - r5 = r0 + 1; - r6 = r0 + 5; - r7 = r17 + r0; - /* Next insn is delay slot */ - r31=0x2f1f8; - pc=0x3dc00; - run_3dc00(); return; - case 0x2f1f8: - /* Next insn is delay slot */ - pc=0x2f09c; - continue; - case 0x2f200: - pc=0x2f200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2f200() throws ExecutionException { /* 0x2f200 - 0x2f400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2f200: - r4 = 7 << 16; - r4 = r4 + -636; - r5 = r0 + 1; - r6 = r0 + 5; - r7 = r17 + r0; - /* Next insn is delay slot */ - r31=0x2f21c; - pc=0x3dc00; - run_3dc00(); return; - case 0x2f21c: - /* Next insn is delay slot */ - pc=0x2f03c; - run_2f000(); return; - case 0x2f400: - pc=0x2f400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2f400() throws ExecutionException { /* 0x2f400 - 0x2f600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2f400: - r29 = r29 + -40; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r16; - r16 = r5 + r0; - r5 = 7 << 16; - r6 = r4 + r0; - r5 = r5 + 16944; + r31=0x2f0f4; + pc=0x23000; + run_23000(); return; + case 0x2f0f4: + r18 = r29 + 120; r4 = r29 + 16; - r7 = r0 + 1; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x2f42c; - pc=0x31200; - run_31200(); return; - case 0x2f42c: + r5 = r0 + r0; + r31=0x2f108; + pc=0x1a800; + run_1a800(); return; + case 0x2f108: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2f11c; + pc=0x56fe0; + run_56800(); return; + case 0x2f11c: + r4 = r18 + r0; + r31=0x2f128; + pc=0x42e00; + run_42800(); return; + case 0x2f128: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x2f5b0; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2f14c; + pc=0x1fc00; + run_1f800(); return; + case 0x2f14c: + r31=0x2f154; + pc=0x24000; + run_24000(); return; + case 0x2f154: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8928; + pc=0x2ee5c; + run_2e800(); return; + case 0x2f168: + r31=0x2f170; + pc=0x23000; + run_23000(); return; + case 0x2f170: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2f184; + pc=0x1a800; + run_1a800(); return; + case 0x2f184: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2f198; + pc=0x56fe0; + run_56800(); return; + case 0x2f198: + r4 = r18 + r0; + r31=0x2f1a4; + pc=0x42c00; + run_42800(); return; + case 0x2f1a4: + r31=0x2f1ac; + pc=0x24000; + run_24000(); return; + case 0x2f1ac: + r2 = 6 << 16; + r2 = r2 + 9024; + r17 = r17 + r2; + r5 = r16 & 768; + r2 = r0 + 256; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r17 = tmp; + if(r5 == r2) { + pc=0x2f6d8; + continue; + } + r2 = (r5&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2f488; + pc=0x2f6a4; continue; } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r16 = r16 & 7; - r2 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x2f474; - continue; - } - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r3 = r3 & 7; - if(r3 == r16) { - /* Next insn is delay slot */ - pc=0x2f474; - continue; - } - r4 = 7 << 16; - r4 = r4 + -568; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x2f470; - pc=0x1b000; - run_1b000(); return; - case 0x2f470: - r2 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - case 0x2f474: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r16 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2f488: - r4 = r0 + 32; - /* Next insn is delay slot */ - r31=0x2f494; - pc=0x1b400; - run_1b400(); return; - case 0x2f494: - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r16; - r16 = r16 & 256; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x2f4d4; - continue; - } - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - case 0x2f4ac: - r3 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - writePages[(r2+28)>>>12][((r2+28)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - writePages[(r2+24)>>>12][((r2+24)>>>2)&0x3ff] = r0; - r16 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r2; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2f4d4: - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x2f4ac; - continue; - case 0x2f600: - pc=0x2f600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2f600() throws ExecutionException { /* 0x2f600 - 0x2f800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2f600: - r29 = r29 + -40; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r16 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - r2 = r16 & 16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - r17 = r4 + r0; - r18 = r5 + r0; - r19 = r6 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2f63c; - continue; - } - if(r6 == r0) { - /* Next insn is delay slot */ + r2 = r0 + 512; + if(r5 == r2) { pc=0x2f6e8; continue; } - case 0x2f63c: - r4 = r17 + r0; - r5 = r18 + r0; - r6 = r0 + 24; - /* Next insn is delay slot */ - r31=0x2f650; - pc=0x48fdc; - run_48e00(); return; - case 0x2f650: - r2 = readPages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff]; - case 0x2f654: - r4 = r16 & 40; - r3 = r0 + 32; - if(r4 == r3) { - /* Next insn is delay slot */ - pc=0x2f6a8; + r2 = r0 + 768; + if(r5 != r2) { + pc=0x2f6b8; + continue; + } + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+40)>>>2]; + case 0x2f1fc: + r3= page[(r16+31424)>>>2]; + r3= page[(r3+4)>>>2]; + r3 = r3 & 2; + if(r3 == r0) { + pc=0x2f234; continue; } if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x2f6bc; + pc=0x2f22c; continue; } - case 0x2f66c: - r3 = r16 & 55; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2f74c; + r19 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + r2 = r0 + 2; + r19 = r2 - r19; + case 0x2f22c: + r2 = r17 << 8; + r17 = r2 | r17; + case 0x2f234: + r4 = r19 + r0; + r5 = r18 + r0; + r6 = r17 + r0; + r31=0x2f248; + pc=0x29a00; + run_29800(); return; + case 0x2f248: + r2= page[(r16+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 4; + if(r2 == r0) { + pc=0x2ead4; + run_2e800(); return; + } + r3= page[(r29+120)>>>2]; + r2 = r0 + 1; + if(r3 != r2) { + pc=0x2ead4; + run_2e800(); return; + } + r2= page[(r29+128)>>>2]; + if(r2 == r0) { + pc=0x2ead4; + run_2e800(); return; + } + r2 = r0 + 139; + if(r17 == r2) { + pc=0x2f71c; continue; } + r2 = r0 + 171; + if(r17 != r2) { + pc=0x2ead4; + run_2e800(); return; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6720; + r31=0x2f2b0; + pc=0x1fc00; + run_1f800(); return; + case 0x2f2b0: + pc=0x2ead4; + run_2e800(); return; + case 0x2f2b8: + r31=0x2f2c0; + pc=0x24000; + run_24000(); return; + case 0x2f2c0: + pc=0x2f094; + continue; + case 0x2f2c8: + r31=0x2f2d0; + pc=0x23000; + run_23000(); return; + case 0x2f2d0: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2f2e4; + pc=0x1a800; + run_1a800(); return; + case 0x2f2e4: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2f2f8; + pc=0x56fe0; + run_56800(); return; + case 0x2f2f8: + r4 = r18 + r0; + r31=0x2f304; + pc=0x42c00; + run_42800(); return; + case 0x2f304: + r31=0x2f30c; + pc=0x24000; + run_24000(); return; + case 0x2f30c: + r2 = 6 << 16; + r2 = r2 + 10240; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r5 = tmp; + r4 = r29 + 144; + r6 = r16 & 768; + r31=0x2f32c; + pc=0x28e00; + run_28800(); return; + case 0x2f32c: + r4= page[(r29+144)>>>2]; + r5 = r18 + r0; + r6 = r2 + r0; + r31=0x2f340; + pc=0x29a00; + run_29800(); return; + case 0x2f340: + pc=0x2ead4; + run_2e800(); return; + case 0x2f348: + r31=0x2f350; + pc=0x23000; + run_23000(); return; + case 0x2f350: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2f364; + pc=0x1a800; + run_1a800(); return; + case 0x2f364: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2f378; + pc=0x56fe0; + run_56800(); return; + case 0x2f378: + r4 = r18 + r0; + r31=0x2f384; + pc=0x42e00; + run_42800(); return; + case 0x2f384: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x2f5d0; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2f3a8; + pc=0x1fc00; + run_1f800(); return; + case 0x2f3a8: + r31=0x2f3b0; + pc=0x24000; + run_24000(); return; + case 0x2f3b0: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 10008; + case 0x2f3bc: + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + r6= page[(r2+0)>>>2]; + r5 = r18 + r0; + r31=0x2f3d4; + pc=0x29a00; + run_29800(); return; + case 0x2f3d4: + pc=0x2ead4; + run_2e800(); return; + case 0x2f3dc: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8832; + pc=0x2ee5c; + run_2e800(); return; + case 0x2f3f0: + r31=0x2f3f8; + pc=0x23000; + run_23000(); return; + case 0x2f3f8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2ee98; + run_2e800(); return; + case 0x2f404: + r31=0x2f40c; + pc=0x23000; + run_23000(); return; + case 0x2f40c: + r18 = r0 + r0; + r16 = r0 + 1; + pc=0x2ebb4; + run_2e800(); return; + case 0x2f41c: + r31=0x2f424; + pc=0x23000; + run_23000(); return; + case 0x2f424: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2eba0; + run_2e800(); return; + case 0x2f430: + r31=0x2f438; + pc=0x23000; + run_23000(); return; + case 0x2f438: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + pc=0x2ed9c; + run_2e800(); return; + case 0x2f444: + r2 = r0 + 4; + if(r19 == r2) { + pc=0x2f564; + continue; + } + r2 = (r19&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2f738; + continue; + } + r2 = r0 + 36; + if(r19 == r2) { + pc=0x2f554; + continue; + } + r2 = r0 + 128; + if(r19 == r2) { + pc=0x2f544; + continue; + } + r2 = r0 + 8; + if(r19 != r2) { + pc=0x2f094; + continue; + } + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x2f49c; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x2ef78; + run_2e800(); return; + case 0x2f49c: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x2f4ac; + return; + case 0x2f4ac: + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x2ef78; + run_2e800(); return; + case 0x2f4bc: + r31=0x2f4c4; + pc=0x23000; + run_23000(); return; + case 0x2f4c4: + r16 = r18 + r0; + pc=0x2ebec; + run_2e800(); return; + case 0x2f4d0: + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x2f4ec; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x2ef78; + run_2e800(); return; + case 0x2f4ec: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x2f4fc; + return; + case 0x2f4fc: + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x2ef78; + run_2e800(); return; + case 0x2f50c: + r2 = 6 << 16; + r2 = r2 + 9180; + case 0x2f514: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x2f52c; + pc=0x29a00; + run_29800(); return; + case 0x2f52c: + r4= page[(r29+120)>>>2]; + r5 = r29 + 128; + r31=0x2f53c; + pc=0x29000; + run_29000(); return; + case 0x2f53c: + pc=0x2ead4; + run_2e800(); return; + case 0x2f544: + r2 = 6 << 16; + r2 = r2 + 9420; + pc=0x2ef78; + run_2e800(); return; + case 0x2f554: + r2 = 6 << 16; + r2 = r2 + 9600; + pc=0x2ef78; + run_2e800(); return; + case 0x2f564: + r2 = 6 << 16; + r2 = r2 + 9480; + pc=0x2f514; + continue; + case 0x2f574: + r31=0x2f57c; + pc=0x29200; + run_29000(); return; + case 0x2f57c: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r20 = r20 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x2f6fc; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2f5a8; + pc=0x1fc00; + run_1f800(); return; + case 0x2f5a8: + pc=0x2ee08; + run_2e800(); return; + case 0x2f5b0: + r31=0x2f5b8; + pc=0x23000; + run_23000(); return; + case 0x2f5b8: + r31=0x2f5c0; + pc=0x29200; + run_29000(); return; + case 0x2f5c0: + r2 = r2 << 7; + r20 = r2 | 8; + pc=0x2ee18; + run_2e800(); return; + case 0x2f5d0: + r31=0x2f5d8; + pc=0x23000; + run_23000(); return; + case 0x2f5d8: + r31=0x2f5e0; + pc=0x29200; + run_29000(); return; + case 0x2f5e0: + r2 = r2 << 7; + r19 = r2 | 8; + pc=0x2ef14; + run_2e800(); return; + case 0x2f5f0: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 9776; + pc=0x2f3bc; + continue; + case 0x2f604: + r31=0x2f60c; + pc=0x29200; + run_29000(); return; + case 0x2f60c: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r19 = r19 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x2f70c; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2f638; + pc=0x1fc00; + run_1f800(); return; + case 0x2f638: + pc=0x2ef04; + run_2e800(); return; + case 0x2f640: + r2 = 6 << 16; + r2 = r2 + 9240; + pc=0x2ef78; + run_2e800(); return; + case 0x2f650: + r2 = r0 + 384; + if(r19 == r2) { + pc=0x2f678; + continue; + } + r2 = r0 + 388; + if(r19 != r2) { + pc=0x2f094; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9540; + pc=0x2f514; + continue; case 0x2f678: - r3 = r0 + -8; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r2 = r2 & r3; - r2 = r2 | r16; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r2; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2f6a8: - r3 = r0 + -9; - r2 = r2 & r3; - writePages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff] = r2; - if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x2f66c; + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 9660; + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r5 = r18 + r0; + r31=0x2f69c; + pc=0x29a00; + run_29800(); return; + case 0x2f69c: + pc=0x2ead4; + run_2e800(); return; + case 0x2f6a4: + if(r5 != r0) { + pc=0x2f6b8; continue; } - case 0x2f6bc: - r16 = r16 & 32; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r2 = r2 | r16; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r2; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; + r16 = 6 << 16; + pc=0x2f234; + continue; + case 0x2f6b8: + r4 = 6 << 16; + r4 = r4 + 6300; + r31=0x2f6c8; + pc=0x21400; + run_21000(); return; + case 0x2f6c8: + r16 = 6 << 16; + r2 = r0 + r0; + pc=0x2f1fc; + continue; + case 0x2f6d8: + r17 = r17 << 8; + r16 = 6 << 16; + pc=0x2f234; + continue; case 0x2f6e8: - r2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r3 = r2 ^ r16; - r3 = r3 & 256; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x2f730; - continue; - } - r3 = r16 & 256; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2f75c; - continue; - } - f2 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - f0 = readPages[(r5+12)>>>12][((r5+12)>>>2)&0x3ff]; - f3 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - f1 = readPages[(r5+8)>>>12][((r5+8)>>>2)&0x3ff]; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x2f654; - continue; - } + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+36)>>>2]; + pc=0x2f1fc; + continue; + case 0x2f6fc: + r31=0x2f704; + pc=0x23000; + run_23000(); return; + case 0x2f704: + pc=0x2ee08; + run_2e800(); return; + case 0x2f70c: + r31=0x2f714; + pc=0x23000; + run_23000(); return; + case 0x2f714: + pc=0x2ef04; + run_2e800(); return; + case 0x2f71c: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6672; + r31=0x2f730; + pc=0x1fc00; + run_1f800(); return; case 0x2f730: - r4 = 7 << 16; - r4 = r4 + -544; - /* Next insn is delay slot */ - r31=0x2f740; - pc=0x1b000; - run_1b000(); return; - case 0x2f740: - r2 = readPages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x2f654; - continue; - case 0x2f74c: - r3 = r2 & 7; - r16 = r3 | r16; - /* Next insn is delay slot */ - pc=0x2f678; - continue; - case 0x2f75c: - r4 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r3 = readPages[(r5+8)>>>12][((r5+8)>>>2)&0x3ff]; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x2f730; + pc=0x2ead4; + run_2e800(); return; + case 0x2f738: + if(r19 == r0) { + pc=0x2f3b0; continue; } - /* Next insn is delay slot */ - pc=0x2f654; + r2 = r0 + 2; + if(r19 != r2) { + pc=0x2f094; + continue; + } + pc=0x2f30c; continue; case 0x2f800: pc=0x2f800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_2f800() throws ExecutionException { /* 0x2f800 - 0x2fa00 */ + private final void run_2f800() throws ExecutionException { /* 0x2f800 - 0x30000 */ int addr, tmp; for(;;) { switch(pc) { case 0x2f800: - r29 = r29 + -88; - r2 = r4 + r0; - writePages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff] = r18; - r18 = r5 + r0; - r5 = 7 << 16; - writePages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff] = r19; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r17; - r19 = r7 + r0; - r17 = r6 + r0; - r4 = r29 + 16; - r5 = r5 + 16944; - r6 = r2 + r0; - r7 = r0 + 1; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r31; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x2f844; - pc=0x31200; - run_31200(); return; - case 0x2f844: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2f9cc; + r4 = r4 + -3; + r4 = (r4&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; + if(r4 != r0) { + pc=0x2f81c; continue; } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r17 = r17 & 7; - r16 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x2f884; - continue; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = r2 & 7; - if(r2 == r17) { - /* Next insn is delay slot */ - pc=0x2f884; - continue; - } - r4 = 7 << 16; - r4 = r4 + -568; - /* Next insn is delay slot */ - r31=0x2f884; - pc=0x1b000; - run_1b000(); return; - case 0x2f884: - r18 = r18 & 1; - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x2f8a0; - continue; - } - r2 = readPages[(r28+-32332)>>>12][((r28+-32332)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2f9b4; - continue; - } - case 0x2f8a0: - r4 = r29 + 40; - /* Next insn is delay slot */ - r31=0x2f8ac; - pc=0x28000; - run_28000(); return; - case 0x2f8ac: - r17 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r18 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r2 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r3 = r17 & 16; - r18 = r18 & 16; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r4 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2f938; - continue; - } - if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x2f988; - continue; - } - r3 = r17 & 256; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x2fa34; - run_2fa00(); return; - } - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2fa24; - run_2fa00(); return; - } - f2 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - f0 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f3 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - f1 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x2fa34; - run_2fa00(); return; - } - case 0x2f910: - r31 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r18 = r18 | r17; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r18; - r19 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r18 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - r17 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r16 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r29 = r29 + 88; - /* Next insn is delay slot */ + r2 = r0 + r0; pc=r31; return; - case 0x2f938: - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r4; - r5 = r29 + 16; - r4 = r16 + r0; - r6 = r0 + 24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r18; - /* Next insn is delay slot */ - r31=0x2f954; - pc=0x48fdc; - run_48e00(); return; - case 0x2f954: - if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x2f910; - continue; - } - r17 = r17 & 32; - r18 = r18 | r17; - case 0x2f964: - r31 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r18; - r19 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r18 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - r17 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r16 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r29 = r29 + 88; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2f988: - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r4; - r5 = r29 + 16; - r4 = r16 + r0; - r6 = r0 + 24; - r17 = r17 & 32; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r18; - /* Next insn is delay slot */ - r31=0x2f9a8; - pc=0x48fdc; - run_48e00(); return; - case 0x2f9a8: - r18 = r18 | r17; - /* Next insn is delay slot */ - pc=0x2f964; - continue; - case 0x2f9b4: - r4 = 7 << 16; - r4 = r4 + -520; - /* Next insn is delay slot */ - r31=0x2f9c4; - pc=0x1ae00; - run_1ae00(); return; - case 0x2f9c4: - /* Next insn is delay slot */ - pc=0x2f8a0; - continue; - case 0x2f9cc: - r4 = r0 + 32; - /* Next insn is delay slot */ - r31=0x2f9d8; - pc=0x1b400; - run_1b400(); return; - case 0x2f9d8: - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r17; - r17 = r17 & 256; - r16 = r2 + r0; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x2fa14; - run_2fa00(); return; - } - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - case 0x2f9f4: - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r0; - writePages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff] = r2; - case 0x2fa00: - pc=0x2fa00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2fa00() throws ExecutionException { /* 0x2fa00 - 0x2fc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2fa00: - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - pc=0x2f884; - run_2f800(); return; - case 0x2fa14: - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x2f9f4; - run_2f800(); return; - case 0x2fa24: - r3 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x2f910; - run_2f800(); return; - } - case 0x2fa34: - r4 = 7 << 16; - r4 = r4 + -544; - /* Next insn is delay slot */ - r31=0x2fa44; - pc=0x1b000; - run_1b000(); return; - case 0x2fa44: - /* Next insn is delay slot */ - pc=0x2f910; - run_2f800(); return; - case 0x2fc00: - pc=0x2fc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2fc00() throws ExecutionException { /* 0x2fc00 - 0x2fe00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2fc00: - r29 = r29 + -88; - writePages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff] = r19; - writePages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff] = r18; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r17; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = r16; - r19 = r5 + r0; - r16 = r4 + r0; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x2fc28; - pc=0x20200; - run_20200(); return; - case 0x2fc28: - addr=r28+-30588; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r18 = r2 + r0; - r17 = r29 + 16; - r5 = 7 << 16; - r2 = r0 + 61; - r4 = r17 + r0; - r5 = r5 + 16944; - r6 = r16 + r0; - r7 = r0 + 1; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x2fd6c; - continue; - } - /* Next insn is delay slot */ - r31=0x2fc5c; - pc=0x31200; - run_31200(); return; - case 0x2fc5c: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2fe80; - run_2fe00(); return; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r18 = r18 & 7; - r16 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x2fc9c; - continue; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = r2 & 7; - if(r2 == r18) { - /* Next insn is delay slot */ - pc=0x2fc9c; - continue; - } - r4 = 7 << 16; - r4 = r4 + -568; - /* Next insn is delay slot */ - r31=0x2fc9c; - pc=0x1b000; - run_1b000(); return; - case 0x2fc9c: - r19 = r19 & 1; - if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x2fcb8; - continue; - } - case 0x2fca8: - r2 = readPages[(r28+-32332)>>>12][((r28+-32332)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2fed0; - run_2fe00(); return; - } - case 0x2fcb8: - r4 = r29 + 40; - /* Next insn is delay slot */ - r31=0x2fcc4; - pc=0x28000; - run_28000(); return; - case 0x2fcc4: - r18 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r2 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r3 = r18 & 16; - r19 = r19 & 16; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r4 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2fd48; - continue; - } - case 0x2fce8: - r3 = r18 & 256; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x2fe68; - run_2fe00(); return; - } - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2fe58; - run_2fe00(); return; - } - f2 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - f0 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f3 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - f1 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x2fe68; - run_2fe00(); return; - } - case 0x2fd20: - r31 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r18 = r19 | r18; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r18; - r19 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r18 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - r17 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r16 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r29 = r29 + 88; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x2fd48: - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r4; - r5 = r17 + r0; - r4 = r16 + r0; - r6 = r0 + 24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r19; - /* Next insn is delay slot */ - r31=0x2fd64; - pc=0x48fdc; - run_48e00(); return; - case 0x2fd64: - /* Next insn is delay slot */ - pc=0x2fd20; - continue; - case 0x2fd6c: - /* Next insn is delay slot */ - r31=0x2fd74; - pc=0x31200; - run_31200(); return; - case 0x2fd74: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x2ff28; - run_2fe00(); return; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r18 = r18 & 7; - r16 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x2fdb4; - continue; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = r2 & 7; - if(r2 == r18) { - /* Next insn is delay slot */ - pc=0x2fdb4; - continue; - } - r4 = 7 << 16; - r4 = r4 + -568; - /* Next insn is delay slot */ - r31=0x2fdb4; - pc=0x1b000; - run_1b000(); return; - case 0x2fdb4: - /* Next insn is delay slot */ - r31=0x2fdbc; - pc=0x1c000; - run_1c000(); return; - case 0x2fdbc: - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x2fdc8; - pc=0x16400; - run_16400(); return; - case 0x2fdc8: - /* Next insn is delay slot */ - r31=0x2fdd0; - pc=0x31a00; - run_31a00(); return; - case 0x2fdd0: + case 0x2f81c: + r29 = r29 + -176; + r5 = 6 << 16; + page[(r29+152)>>>2] = r16; + r16 = 6 << 16; + r4 = r16 + 22536; + r5 = r5 + 17104; + page[(r29+172)>>>2] = r31; + page[(r29+168)>>>2] = r20; + page[(r29+164)>>>2] = r19; + page[(r29+160)>>>2] = r18; + page[(r29+156)>>>2] = r17; + r31=0x2f850; + pc=0x1cc00; + run_1c800(); return; + case 0x2f850: + r4 = 6 << 16; + r4 = r4 + 20376; + r5 = r29 + 148; + r6 = r16 + 22536; + r31=0x2f868; + pc=0x42400; + run_42000(); return; + case 0x2f868: if(r2 == r0) { - /* Next insn is delay slot */ + pc=0x2f8bc; + continue; + } + r16= page[(r29+148)>>>2]; + r2 = r16 & 1024; + r17 = r16 & 255; + if(r2 != r0) { pc=0x2fde0; continue; } - r2 = r0 + 1; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; - case 0x2fde0: - r18 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = r18 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x2ff70; - run_2fe00(); return; + r2 = r16 + r0; + case 0x2f88c: + r2 = r2 >> 12; + r3 = (r2&0xffffffffL) < (11&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x2fe0c; + continue; } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r3 = r2 ^ r18; - case 0x2fe00: - pc=0x2fe00; + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 8336; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_2fe00() throws ExecutionException { /* 0x2fe00 - 0x30000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x2fe00: - r3 = r3 & 256; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x2fe3c; + case 0x2f8bc: + r4 = 6 << 16; + r4 = r4 + 21396; + r31=0x2f8cc; + pc=0x2a200; + run_2a000(); return; + case 0x2f8cc: + if(r2 == r0) { + pc=0x2f8fc; continue; } - r3 = r18 & 256; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2fff8; - continue; - } - f2 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - f0 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f3 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - f1 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x2ff88; - continue; - } - case 0x2fe3c: - r4 = 7 << 16; - r4 = r4 + -544; - /* Next insn is delay slot */ - r31=0x2fe4c; - pc=0x1b000; - run_1b000(); return; - case 0x2fe4c: - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x2ff88; - continue; - case 0x2fe58: - r3 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x2fd20; - run_2fc00(); return; - } - case 0x2fe68: - r4 = 7 << 16; - r4 = r4 + -544; - /* Next insn is delay slot */ - r31=0x2fe78; - pc=0x1b000; - run_1b000(); return; - case 0x2fe78: - /* Next insn is delay slot */ - pc=0x2fd20; - run_2fc00(); return; - case 0x2fe80: - r4 = r0 + 32; - /* Next insn is delay slot */ - r31=0x2fe8c; - pc=0x1b400; - run_1b400(); return; - case 0x2fe8c: - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r18; - r18 = r18 & 256; - r16 = r2 + r0; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x2ff18; - continue; - } - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - case 0x2fea8: - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - r19 = r19 & 1; - writePages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff] = r2; - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r0; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r16; - if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x2fca8; - run_2fc00(); return; - } - /* Next insn is delay slot */ - pc=0x2fcb8; - run_2fc00(); return; - case 0x2fed0: - r4 = 7 << 16; - r4 = r4 + -520; - /* Next insn is delay slot */ - r31=0x2fee0; - pc=0x1ae00; - run_1ae00(); return; - case 0x2fee0: - r4 = r29 + 40; - /* Next insn is delay slot */ - r31=0x2feec; - pc=0x28000; - run_28000(); return; - case 0x2feec: - r18 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r2 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r3 = r18 & 16; - r19 = r19 & 16; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r4 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x2fd48; - run_2fc00(); return; - } - /* Next insn is delay slot */ - pc=0x2fce8; - run_2fc00(); return; - case 0x2ff18: - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x2fea8; - continue; - case 0x2ff28: - r4 = r0 + 32; - /* Next insn is delay slot */ - r31=0x2ff34; - pc=0x1b400; - run_1b400(); return; - case 0x2ff34: - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r18; - r18 = r18 & 256; - r16 = r2 + r0; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x30014; - run_30000(); return; - } - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - case 0x2ff50: - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r0; - writePages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff] = r2; - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - pc=0x2fdb4; - run_2fc00(); return; - case 0x2ff70: - r4 = r16 + r0; - r5 = r17 + r0; - r6 = r0 + 24; - /* Next insn is delay slot */ - r31=0x2ff84; - pc=0x48fdc; - run_48e00(); return; - case 0x2ff84: - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - case 0x2ff88: - r4 = r18 & 40; - r3 = r0 + 32; - if(r4 == r3) { - /* Next insn is delay slot */ - pc=0x2ffe4; - continue; - } - case 0x2ff98: - r3 = r18 & 55; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x2ffac; - continue; - } - r3 = r2 & 7; - r18 = r3 | r18; - case 0x2ffac: - r3 = r0 + -8; - r2 = r2 & r3; - r18 = r2 | r18; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r18; - /* Next insn is delay slot */ - r31=0x2ffc4; - pc=0x1ce00; - run_1ce00(); return; - case 0x2ffc4: - r31 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r19 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r18 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - r17 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r16 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r29 = r29 + 88; - /* Next insn is delay slot */ + case 0x2f8d4: + r2 = r0 + 1; + case 0x2f8d8: + r31= page[(r29+172)>>>2]; + r20= page[(r29+168)>>>2]; + r19= page[(r29+164)>>>2]; + r18= page[(r29+160)>>>2]; + r17= page[(r29+156)>>>2]; + r16= page[(r29+152)>>>2]; + r29 = r29 + 176; pc=r31; return; - case 0x2ffe4: - r3 = r0 + -9; - r2 = r2 & r3; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x2ff98; + case 0x2f8fc: + r4 = 6 << 16; + r4 = r4 + 19716; + r31=0x2f90c; + pc=0x2a200; + run_2a000(); return; + case 0x2f90c: + if(r2 != r0) { + pc=0x2f8d4; + continue; + } + r4 = 6 << 16; + r4 = r4 + 19656; + r31=0x2f924; + pc=0x2a200; + run_2a000(); return; + case 0x2f924: + pc=0x2f8d8; continue; - case 0x2fff8: - r4 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r3 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + case 0x2f92c: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2f93c; + pc=0x1a800; + run_1a800(); return; + case 0x2f93c: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x2f95c; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2f95c; + pc=0x21200; + run_21000(); return; + case 0x2f95c: + r5 = r29 + 24; + r6 = r0 + 24; + r4 = r29 + 120; + r31=0x2f970; + pc=0x56fe0; + run_56800(); return; + case 0x2f970: + r4 = r29 + 120; + r31=0x2f97c; + pc=0x42e00; + run_42800(); return; + case 0x2f97c: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2f98c; + return; + case 0x2f98c: + r4= page[(r29+128)>>>2]; + r31=0x2f998; + pc=0x21c00; + run_21800(); return; + case 0x2f998: + r31=0x2f9a0; + pc=0x24000; + run_24000(); return; + case 0x2f9a0: + pc=0x2f8d4; + continue; + case 0x2f9a8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x30234; + run_30000(); return; + } + case 0x2f9b8: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x3021c; + run_30000(); return; + } + r18 = r0 + 1; + r16 = r0 + r0; + case 0x2f9cc: + r4 = r29 + 120; + r31=0x2f9d8; + pc=0x29400; + run_29000(); return; + case 0x2f9d8: + r4 = r29 + 120; + r31=0x2f9e4; + pc=0x42c00; + run_42800(); return; + case 0x2f9e4: + r31=0x2f9ec; + pc=0x27c00; + run_27800(); return; + case 0x2f9ec: + if(r2 == r0) { + pc=0x2fb18; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 35; + if(r3 == r2) { + pc=0x302d4; + run_30000(); return; + } + case 0x2fa04: + r4 = r29 + 16; + r31=0x2fa10; + pc=0x29400; + run_29000(); return; + case 0x2fa10: + r4 = r29 + 16; + r31=0x2fa1c; + pc=0x42c00; + run_42800(); return; + case 0x2fa1c: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2fa2c; + return; + case 0x2fa2c: + r4= page[(r29+24)>>>2]; + r31=0x2fa38; + pc=0x21c00; + run_21800(); return; + case 0x2fa38: + r4= page[(r29+128)>>>2]; + r31=0x2fa44; + pc=0x21c00; + run_21800(); return; + case 0x2fa44: + if(r16 == r0) { + pc=0x2f998; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2fa60; + pc=0x1fc00; + run_1f800(); return; + case 0x2fa60: + r31=0x2fa68; + pc=0x24000; + run_24000(); return; + case 0x2fa68: + pc=0x2f8d4; + continue; + case 0x2fa70: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2fa80; + return; + case 0x2fa80: + r4 = r0 + 3; + r31=0x2fa8c; + pc=0x29600; + run_29000(); return; + case 0x2fa8c: + pc=0x2f8d4; + continue; + case 0x2fa94: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2faa4; + return; + case 0x2faa4: + r4 = r0 + 2; + r31=0x2fab0; + pc=0x29600; + run_29000(); return; + case 0x2fab0: + pc=0x2f8d4; + continue; + case 0x2fab8: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2fac8; + pc=0x1a800; + run_1a800(); return; + case 0x2fac8: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x2fae8; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x2fae8; + pc=0x21200; + run_21000(); return; + case 0x2fae8: + r4 = r29 + 120; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2fafc; + pc=0x56fe0; + run_56800(); return; + case 0x2fafc: + r4 = r29 + 120; + r31=0x2fb08; + pc=0x42e00; + run_42800(); return; + case 0x2fb08: + r31=0x2fb10; + pc=0x27c00; + run_27800(); return; + case 0x2fb10: + if(r2 != r0) { + pc=0x2fe28; + continue; + } + case 0x2fb18: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2fb2c; + pc=0x1fc00; + run_1f800(); return; + case 0x2fb2c: + pc=0x2f8d4; + continue; + case 0x2fb34: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2fb44; + return; + case 0x2fb44: + r4 = r0 + 2; + r31=0x2fb50; + pc=0x29800; + run_29800(); return; + case 0x2fb50: + pc=0x2f8d4; + continue; + case 0x2fb58: + r2 = r0 + 248; + if(r17 == r2) { + pc=0x2fe60; + continue; + } + case 0x2fb64: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2fb74; + return; + case 0x2fb74: + r31=0x2fb7c; + pc=0x24000; + run_24000(); return; + case 0x2fb7c: + pc=0x2f8d4; + continue; + case 0x2fb84: + r4 = r17 + r0; + r31=0x2fb90; + pc=0x29e00; + run_29800(); return; + case 0x2fb90: + pc=0x2f8d4; + continue; + case 0x2fb98: + r31=0x2fba0; + pc=0x27e00; + run_27800(); return; + case 0x2fba0: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r5 = r0 + 32; + r19 = r2 + r0; + if(r3 == r5) { + pc=0x30248; + run_30000(); return; + } + case 0x2fbb4: + r5 = r0 + 35; + if(r3 == r5) { + pc=0x2ff80; + continue; + } + r2 = r0 + 91; + if(r3 == r2) { + pc=0x2ff04; + continue; + } + if(r3 == r0) { + pc=0x2fec8; + continue; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x2fbe8; + pc=0x1a800; + run_1a800(); return; + case 0x2fbe8: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2fbfc; + pc=0x56fe0; + run_56800(); return; + case 0x2fbfc: + r4 = r18 + r0; + r31=0x2fc08; + pc=0x42e00; + run_42800(); return; + case 0x2fc08: + r20= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; + r20 = r20 << 2; + if(r2 != r0) { + pc=0x3038c; + run_30000(); return; + } + case 0x2fc20: + r31=0x2fc28; + pc=0x29200; + run_29000(); return; + case 0x2fc28: + r2 = r2 << 7; + r20 = r2 | r20; + case 0x2fc30: + r31=0x2fc38; + pc=0x24000; + run_24000(); return; + case 0x2fc38: + r2 = r0 + 2; + if(r20 == r2) { + pc=0x2ffc4; + continue; + } + r2 = (r20&0xffffffffL) < (3&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x2fe98; + continue; + } + r2 = r0 + 256; + if(r20 == r2) { + pc=0x301f4; + run_30000(); return; + } + r2 = r0 + 384; + if(r20 != r2) { + pc=0x2feac; + continue; + } + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8736; + case 0x2fc74: + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r4 = r19 + r0; + r5 = r18 + r0; + r31=0x2fc8c; + pc=0x29a00; + run_29800(); return; + case 0x2fc8c: + pc=0x2f8d4; + continue; + case 0x2fc94: + r31=0x2fc9c; + pc=0x27e00; + run_27800(); return; + case 0x2fc9c: + page[(r29+144)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x30208; + run_30000(); return; + } + case 0x2fcb0: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x300e0; + run_30000(); return; + } + r3 = r0 + 91; + if(r2 == r3) { + pc=0x30160; + run_30000(); return; + } + if(r2 == r0) { + pc=0x300d0; + run_30000(); return; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x2fce4; + pc=0x1a800; + run_1a800(); return; + case 0x2fce4: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2fcf8; + pc=0x56fe0; + run_56800(); return; + case 0x2fcf8: + r4 = r18 + r0; + r31=0x2fd04; + pc=0x42e00; + run_42800(); return; + case 0x2fd04: + r19= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r19 = ((r0 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; + r19 = r19 << 2; + if(r2 != r0) { + pc=0x3041c; + run_30000(); return; + } + case 0x2fd1c: + r31=0x2fd24; + pc=0x29200; + run_29000(); return; + case 0x2fd24: + r2 = r2 << 7; + r19 = r2 | r19; + case 0x2fd2c: + r31=0x2fd34; + pc=0x24000; + run_24000(); return; + case 0x2fd34: + r2 = r0 + 256; + if(r19 == r2) { + pc=0x30408; + run_30000(); return; + } + r2 = (r19&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x3025c; + run_30000(); return; + } + r2 = r0 + 392; + if(r19 == r2) { + pc=0x30458; + run_30000(); return; + } + r2 = (r19&0xffffffffL) < (393&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x30468; + run_30000(); return; + } + r2 = r0 + 516; + if(r19 == r2) { + pc=0x30324; + run_30000(); return; + } + r2 = r0 + 520; + if(r19 == r2) { + pc=0x302e8; + run_30000(); return; + } + r2 = r0 + 404; + if(r19 != r2) { + pc=0x2feac; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9360; + case 0x2fd90: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x2fda8; + pc=0x29a00; + run_29800(); return; + case 0x2fda8: + pc=0x2f8d4; + continue; + case 0x2fdb0: + r5 = 6 << 16; + r4 = r29 + 16; + r5 = r5 + 6828; + r6 = r17 + r0; + r31=0x2fdc8; + pc=0x50c00; + run_50800(); return; + case 0x2fdc8: + r4 = r0 + -2; + r5 = r29 + 16; + r31=0x2fdd8; + pc=0x1fc00; + run_1f800(); return; + case 0x2fdd8: + pc=0x2f8d4; + continue; + case 0x2fde0: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x2fdf0; + return; + case 0x2fdf0: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x2fe00; + return; + case 0x2fe00: + r2= page[(r29+148)>>>2]; + pc=0x2f88c; + continue; + case 0x2fe0c: + r4 = 6 << 16; + r4 = r4 + 6908; + r5 = r17 + r0; + r31=0x2fe20; + pc=0x21400; + run_21000(); return; + case 0x2fe20: + pc=0x2f8d4; + continue; + case 0x2fe28: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x2fe38; + return; + case 0x2fe38: + r4= page[(r29+128)>>>2]; + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x2fe4c; + return; + case 0x2fe4c: + r4 = r0 + 3; + r31=0x2fe58; + pc=0x29800; + run_29800(); return; + case 0x2fe58: + pc=0x2f8d4; + continue; + case 0x2fe60: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 16; + if(r2 == r0) { + pc=0x2fb64; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6768; + r31=0x2fe90; + pc=0x21200; + run_21000(); return; + case 0x2fe90: + pc=0x2fb64; + continue; + case 0x2fe98: + if(r20 == r0) { + pc=0x2ff6c; + continue; + } + r2 = r0 + 1; + if(r20 == r2) { + pc=0x2fed0; + continue; + } + case 0x2feac: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 8592; + r31=0x2fec0; + pc=0x1fc00; + run_1f800(); return; + case 0x2fec0: + pc=0x2f8d4; + continue; + case 0x2fec8: + r31=0x2fed0; + pc=0x24000; + run_24000(); return; + case 0x2fed0: + r2 = 6 << 16; + r2 = r2 + 9072; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 == r0) { + pc=0x2feac; + continue; + } + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x2fefc; + return; + case 0x2fefc: + pc=0x2f8d4; + continue; + case 0x2ff04: + r31=0x2ff0c; + pc=0x23000; + run_23000(); return; + case 0x2ff0c: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2ff20; + pc=0x1a800; + run_1a800(); return; + case 0x2ff20: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2ff34; + pc=0x56fe0; + run_56800(); return; + case 0x2ff34: + r4 = r18 + r0; + r31=0x2ff40; + pc=0x42e00; + run_42800(); return; + case 0x2ff40: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x303c8; + run_30000(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x2ff64; + pc=0x1fc00; + run_1f800(); return; + case 0x2ff64: + r31=0x2ff6c; + pc=0x24000; + run_24000(); return; + case 0x2ff6c: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8928; + pc=0x2fc74; + continue; + case 0x2ff80: + r31=0x2ff88; + pc=0x23000; + run_23000(); return; + case 0x2ff88: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x2ff9c; + pc=0x1a800; + run_1a800(); return; + case 0x2ff9c: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x2ffb0; + pc=0x56fe0; + run_56800(); return; + case 0x2ffb0: + r4 = r18 + r0; + r31=0x2ffbc; + pc=0x42c00; + run_42800(); return; + case 0x2ffbc: + r31=0x2ffc4; + pc=0x24000; + run_24000(); return; + case 0x2ffc4: + r2 = 6 << 16; + r2 = r2 + 9024; + r17 = r17 + r2; + r5 = r16 & 768; + r2 = r0 + 256; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r17 = tmp; + if(r5 == r2) { + pc=0x304f0; + run_30000(); return; + } + r2 = (r5&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x304bc; + run_30000(); return; + } + r2 = r0 + 512; + if(r5 == r2) { + pc=0x30500; + run_30000(); return; + } + r2 = r0 + 768; case 0x30000: pc=0x30000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_30000() throws ExecutionException { /* 0x30000 - 0x30200 */ + private final void run_30000() throws ExecutionException { /* 0x30000 - 0x30800 */ int addr, tmp; for(;;) { switch(pc) { case 0x30000: - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x2fe3c; - run_2fe00(); return; - } - /* Next insn is delay slot */ - pc=0x2ff88; - run_2fe00(); return; - case 0x30014: - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x2ff50; - run_2fe00(); return; - case 0x30200: - pc=0x30200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_30200() throws ExecutionException { /* 0x30200 - 0x30400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x30200: - r29 = r29 + -32; - r5 = 7 << 16; - r5 = r5 + 16944; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - r6 = r0 + r0; - r16 = r4 + r0; - r7 = r0 + 1; - r4 = r29 + 16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x3022c; - pc=0x31200; - run_31200(); return; - case 0x3022c: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x30268; + if(r5 != r2) { + pc=0x304d0; continue; } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r16; - r3 = r3 & 32; - r3 = r3 | 80; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r29 = r29 + 32; - /* Next insn is delay slot */ + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+40)>>>2]; + case 0x30014: + r3= page[(r16+31424)>>>2]; + r3= page[(r3+4)>>>2]; + r3 = r3 & 2; + if(r3 == r0) { + pc=0x3004c; + continue; + } + if(r19 != r0) { + pc=0x30044; + continue; + } + r19 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + r2 = r0 + 2; + r19 = r2 - r19; + case 0x30044: + r2 = r17 << 8; + r17 = r2 | r17; + case 0x3004c: + r4 = r19 + r0; + r5 = r18 + r0; + r6 = r17 + r0; + r31=0x30060; + pc=0x29a00; + run_29800(); return; + case 0x30060: + r2= page[(r16+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 4; + if(r2 == r0) { + pc=0x2f8d4; + run_2f800(); return; + } + r3= page[(r29+120)>>>2]; + r2 = r0 + 1; + if(r3 != r2) { + pc=0x2f8d4; + run_2f800(); return; + } + r2= page[(r29+128)>>>2]; + if(r2 == r0) { + pc=0x2f8d4; + run_2f800(); return; + } + r2 = r0 + 139; + if(r17 == r2) { + pc=0x30534; + continue; + } + r2 = r0 + 171; + if(r17 != r2) { + pc=0x2f8d4; + run_2f800(); return; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6720; + r31=0x300c8; + pc=0x1fc00; + run_1f800(); return; + case 0x300c8: + pc=0x2f8d4; + run_2f800(); return; + case 0x300d0: + r31=0x300d8; + pc=0x24000; + run_24000(); return; + case 0x300d8: + pc=0x2feac; + run_2f800(); return; + case 0x300e0: + r31=0x300e8; + pc=0x23000; + run_23000(); return; + case 0x300e8: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x300fc; + pc=0x1a800; + run_1a800(); return; + case 0x300fc: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x30110; + pc=0x56fe0; + run_56800(); return; + case 0x30110: + r4 = r18 + r0; + r31=0x3011c; + pc=0x42c00; + run_42800(); return; + case 0x3011c: + r31=0x30124; + pc=0x24000; + run_24000(); return; + case 0x30124: + r2 = 6 << 16; + r2 = r2 + 10240; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r5 = tmp; + r4 = r29 + 144; + r6 = r16 & 768; + r31=0x30144; + pc=0x28e00; + run_28800(); return; + case 0x30144: + r4= page[(r29+144)>>>2]; + r5 = r18 + r0; + r6 = r2 + r0; + r31=0x30158; + pc=0x29a00; + run_29800(); return; + case 0x30158: + pc=0x2f8d4; + run_2f800(); return; + case 0x30160: + r31=0x30168; + pc=0x23000; + run_23000(); return; + case 0x30168: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x3017c; + pc=0x1a800; + run_1a800(); return; + case 0x3017c: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x30190; + pc=0x56fe0; + run_56800(); return; + case 0x30190: + r4 = r18 + r0; + r31=0x3019c; + pc=0x42e00; + run_42800(); return; + case 0x3019c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x303e8; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x301c0; + pc=0x1fc00; + run_1f800(); return; + case 0x301c0: + r31=0x301c8; + pc=0x24000; + run_24000(); return; + case 0x301c8: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 10008; + case 0x301d4: + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + r6= page[(r2+0)>>>2]; + r5 = r18 + r0; + r31=0x301ec; + pc=0x29a00; + run_29800(); return; + case 0x301ec: + pc=0x2f8d4; + run_2f800(); return; + case 0x301f4: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8832; + pc=0x2fc74; + run_2f800(); return; + case 0x30208: + r31=0x30210; + pc=0x23000; + run_23000(); return; + case 0x30210: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2fcb0; + run_2f800(); return; + case 0x3021c: + r31=0x30224; + pc=0x23000; + run_23000(); return; + case 0x30224: + r18 = r0 + r0; + r16 = r0 + 1; + pc=0x2f9cc; + run_2f800(); return; + case 0x30234: + r31=0x3023c; + pc=0x23000; + run_23000(); return; + case 0x3023c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x2f9b8; + run_2f800(); return; + case 0x30248: + r31=0x30250; + pc=0x23000; + run_23000(); return; + case 0x30250: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + pc=0x2fbb4; + run_2f800(); return; + case 0x3025c: + r2 = r0 + 4; + if(r19 == r2) { + pc=0x3037c; + continue; + } + r2 = (r19&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x30550; + continue; + } + r2 = r0 + 36; + if(r19 == r2) { + pc=0x3036c; + continue; + } + r2 = r0 + 128; + if(r19 == r2) { + pc=0x3035c; + continue; + } + r2 = r0 + 8; + if(r19 != r2) { + pc=0x2feac; + run_2f800(); return; + } + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x302b4; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x2fd90; + run_2f800(); return; + case 0x302b4: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x302c4; + return; + case 0x302c4: + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x2fd90; + run_2f800(); return; + case 0x302d4: + r31=0x302dc; + pc=0x23000; + run_23000(); return; + case 0x302dc: + r16 = r18 + r0; + pc=0x2fa04; + run_2f800(); return; + case 0x302e8: + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x30304; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x2fd90; + run_2f800(); return; + case 0x30304: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x30314; + return; + case 0x30314: + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x2fd90; + run_2f800(); return; + case 0x30324: + r2 = 6 << 16; + r2 = r2 + 9180; + case 0x3032c: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x30344; + pc=0x29a00; + run_29800(); return; + case 0x30344: + r4= page[(r29+120)>>>2]; + r5 = r29 + 128; + r31=0x30354; + pc=0x29000; + run_29000(); return; + case 0x30354: + pc=0x2f8d4; + run_2f800(); return; + case 0x3035c: + r2 = 6 << 16; + r2 = r2 + 9420; + pc=0x2fd90; + run_2f800(); return; + case 0x3036c: + r2 = 6 << 16; + r2 = r2 + 9600; + pc=0x2fd90; + run_2f800(); return; + case 0x3037c: + r2 = 6 << 16; + r2 = r2 + 9480; + pc=0x3032c; + continue; + case 0x3038c: + r31=0x30394; + pc=0x29200; + run_29000(); return; + case 0x30394: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r20 = r20 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x30514; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x303c0; + pc=0x1fc00; + run_1f800(); return; + case 0x303c0: + pc=0x2fc20; + run_2f800(); return; + case 0x303c8: + r31=0x303d0; + pc=0x23000; + run_23000(); return; + case 0x303d0: + r31=0x303d8; + pc=0x29200; + run_29000(); return; + case 0x303d8: + r2 = r2 << 7; + r20 = r2 | 8; + pc=0x2fc30; + run_2f800(); return; + case 0x303e8: + r31=0x303f0; + pc=0x23000; + run_23000(); return; + case 0x303f0: + r31=0x303f8; + pc=0x29200; + run_29000(); return; + case 0x303f8: + r2 = r2 << 7; + r19 = r2 | 8; + pc=0x2fd2c; + run_2f800(); return; + case 0x30408: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 9776; + pc=0x301d4; + continue; + case 0x3041c: + r31=0x30424; + pc=0x29200; + run_29000(); return; + case 0x30424: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r19 = r19 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x30524; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x30450; + pc=0x1fc00; + run_1f800(); return; + case 0x30450: + pc=0x2fd1c; + run_2f800(); return; + case 0x30458: + r2 = 6 << 16; + r2 = r2 + 9240; + pc=0x2fd90; + run_2f800(); return; + case 0x30468: + r2 = r0 + 384; + if(r19 == r2) { + pc=0x30490; + continue; + } + r2 = r0 + 388; + if(r19 != r2) { + pc=0x2feac; + run_2f800(); return; + } + r2 = 6 << 16; + r2 = r2 + 9540; + pc=0x3032c; + continue; + case 0x30490: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 9660; + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r5 = r18 + r0; + r31=0x304b4; + pc=0x29a00; + run_29800(); return; + case 0x304b4: + pc=0x2f8d4; + run_2f800(); return; + case 0x304bc: + if(r5 != r0) { + pc=0x304d0; + continue; + } + r16 = 6 << 16; + pc=0x3004c; + continue; + case 0x304d0: + r4 = 6 << 16; + r4 = r4 + 6300; + r31=0x304e0; + pc=0x21400; + run_21000(); return; + case 0x304e0: + r16 = 6 << 16; + r2 = r0 + r0; + pc=0x30014; + continue; + case 0x304f0: + r17 = r17 << 8; + r16 = 6 << 16; + pc=0x3004c; + continue; + case 0x30500: + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+36)>>>2]; + pc=0x30014; + continue; + case 0x30514: + r31=0x3051c; + pc=0x23000; + run_23000(); return; + case 0x3051c: + pc=0x2fc20; + run_2f800(); return; + case 0x30524: + r31=0x3052c; + pc=0x23000; + run_23000(); return; + case 0x3052c: + pc=0x2fd1c; + run_2f800(); return; + case 0x30534: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6672; + r31=0x30548; + pc=0x1fc00; + run_1f800(); return; + case 0x30548: + pc=0x2f8d4; + run_2f800(); return; + case 0x30550: + if(r19 == r0) { + pc=0x301c8; + continue; + } + r2 = r0 + 2; + if(r19 != r2) { + pc=0x2feac; + run_2f800(); return; + } + pc=0x30124; + continue; + case 0x30600: + r4 = r4 + -3; + r4 = (r4&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; + if(r4 != r0) { + pc=0x3061c; + continue; + } + r2 = r0 + r0; pc=r31; return; - case 0x30268: - r4 = r0 + 32; - /* Next insn is delay slot */ - r31=0x30274; - pc=0x1b400; - run_1b400(); return; - case 0x30274: - r3 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - writePages[(r2+28)>>>12][((r2+28)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r0; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - writePages[(r2+24)>>>12][((r2+24)>>>2)&0x3ff] = r0; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = r2; - r3 = r0 + 80; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r16; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ + case 0x3061c: + r29 = r29 + -176; + r5 = 6 << 16; + page[(r29+152)>>>2] = r16; + r16 = 6 << 16; + r4 = r16 + 22536; + r5 = r5 + 17104; + page[(r29+172)>>>2] = r31; + page[(r29+168)>>>2] = r20; + page[(r29+164)>>>2] = r19; + page[(r29+160)>>>2] = r18; + page[(r29+156)>>>2] = r17; + r31=0x30650; + pc=0x1cc00; + run_1c800(); return; + case 0x30650: + r4 = 6 << 16; + r4 = r4 + 17896; + r5 = r29 + 148; + r6 = r16 + 22536; + r31=0x30668; + pc=0x42400; + run_42000(); return; + case 0x30668: + if(r2 == r0) { + pc=0x306bc; + continue; + } + r16= page[(r29+148)>>>2]; + r2 = r16 & 1024; + r17 = r16 & 255; + if(r2 != r0) { + pc=0x30bf8; + run_30800(); return; + } + r2 = r16 + r0; + case 0x3068c: + r2 = r2 >> 12; + r3 = (r2&0xffffffffL) < (11&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x30c24; + run_30800(); return; + } + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 8380; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; + return; + case 0x306bc: + r4 = 6 << 16; + r4 = r4 + 20376; + r31=0x306cc; + pc=0x2a200; + run_2a000(); return; + case 0x306cc: + if(r2 == r0) { + pc=0x306fc; + continue; + } + case 0x306d4: + r2 = r0 + 1; + case 0x306d8: + r31= page[(r29+172)>>>2]; + r20= page[(r29+168)>>>2]; + r19= page[(r29+164)>>>2]; + r18= page[(r29+160)>>>2]; + r17= page[(r29+156)>>>2]; + r16= page[(r29+152)>>>2]; + r29 = r29 + 176; pc=r31; return; - case 0x30400: - pc=0x30400; + case 0x306fc: + r4 = 6 << 16; + r4 = r4 + 21396; + r31=0x3070c; + pc=0x2a200; + run_2a000(); return; + case 0x3070c: + if(r2 != r0) { + pc=0x306d4; + continue; + } + r4 = 6 << 16; + r4 = r4 + 19716; + r31=0x30724; + pc=0x2a200; + run_2a000(); return; + case 0x30724: + if(r2 != r0) { + pc=0x306d4; + continue; + } + r4 = 6 << 16; + r4 = r4 + 17856; + r31=0x3073c; + pc=0x2a200; + run_2a000(); return; + case 0x3073c: + pc=0x306d8; + continue; + case 0x30744: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x30754; + pc=0x1a800; + run_1a800(); return; + case 0x30754: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x30774; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x30774; + pc=0x21200; + run_21000(); return; + case 0x30774: + r5 = r29 + 24; + r6 = r0 + 24; + r4 = r29 + 120; + r31=0x30788; + pc=0x56fe0; + run_56800(); return; + case 0x30788: + r4 = r29 + 120; + r31=0x30794; + pc=0x42e00; + run_42800(); return; + case 0x30794: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x307a4; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_30400() throws ExecutionException { /* 0x30400 - 0x30600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x30400: - r7 = r4 + r0; - r6 = 3 << 16; - r4 = 7 << 16; - r4 = r4 + 16944; - r5 = r0 + r0; - r6 = r6 + -4096; - /* Next insn is delay slot */ - pc=0x31800; - run_31800(); return; - case 0x30600: - pc=0x30600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_30600() throws ExecutionException { /* 0x30600 - 0x30800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x30600: - r29 = r29 + -32; - r6 = 3 << 16; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r17 = 7 << 16; - r16 = r4 + r0; - r7 = r16 + r0; - r4 = r17 + 16944; - r6 = r6 + -4608; - r5 = r0 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x30634; - pc=0x31800; - run_31800(); return; - case 0x30634: - r5 = r16 + r0; - r4 = r0 + 10; - /* Next insn is delay slot */ - r31=0x30644; - pc=0x3c000; - run_3c000(); return; - case 0x30644: - r6 = 3 << 16; - r7 = r16 + r0; - r4 = r17 + 16944; - r6 = r6 + -5120; - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x30660; - pc=0x31800; - run_31800(); return; - case 0x30660: - r5 = r16 + r0; - r4 = r0 + 10; - /* Next insn is delay slot */ - r31=0x30670; - pc=0x3c000; - run_3c000(); return; - case 0x30670: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r4 = r17 + 16944; - r6 = 3 << 16; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r7 = r16 + r0; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r5 = r0 + r0; - r6 = r6 + -5632; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x31800; - run_31800(); return; + case 0x307a4: + r4= page[(r29+128)>>>2]; + r31=0x307b0; + pc=0x21c00; + run_21800(); return; + case 0x307b0: + r31=0x307b8; + pc=0x24000; + run_24000(); return; + case 0x307b8: + pc=0x306d4; + continue; + case 0x307c0: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x3104c; + run_31000(); return; + } + case 0x307d0: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x31034; + run_31000(); return; + } + r18 = r0 + 1; + r16 = r0 + r0; + case 0x307e4: + r4 = r29 + 120; + r31=0x307f0; + pc=0x29400; + run_29000(); return; + case 0x307f0: + r4 = r29 + 120; + r31=0x307fc; + pc=0x42c00; + run_42800(); return; + case 0x307fc: + r31=0x30804; + pc=0x27c00; + run_27800(); return; case 0x30800: pc=0x30800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_30800() throws ExecutionException { /* 0x30800 - 0x30a00 */ + private final void run_30800() throws ExecutionException { /* 0x30800 - 0x31000 */ int addr, tmp; for(;;) { switch(pc) { case 0x30800: - r29 = r29 + -40; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - r17 = r4 + r0; - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r5 = r0 + r0; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x30828; - pc=0x17c00; - run_17c00(); return; - case 0x30828: - r2 = readPages[(r28+-32228)>>>12][((r28+-32228)>>>2)&0x3ff]; - r5 = 7 << 16; - r6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r29 + 16; - r5 = r5 + 16944; - r7 = r0 + 1; - /* Next insn is delay slot */ - r31=0x30848; - pc=0x31200; - run_31200(); return; - case 0x30848: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3095c; - continue; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r18 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - r3 = readPages[(r18+28)>>>12][((r18+28)>>>2)&0x3ff]; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x30994; - continue; - } - writePages[(r18+28)>>>12][((r18+28)>>>2)&0x3ff] = r2; - writePages[(r18+8)>>>12][((r18+8)>>>2)&0x3ff] = r0; - r16 = r0 + r0; - case 0x3087c: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r3 = r3 + -1; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x308cc; - continue; - case 0x3089c: - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r6 = r3 + 1; - r3 = r5 + r3; - r5 = r16 & 15; - r5 = r5 + 97; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r6; - r16 = r16 >>> 4; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x3091c; - continue; - } - case 0x308c8: - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - case 0x308cc: - r5 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - if(r5 != r3) { - /* Next insn is delay slot */ - pc=0x3089c; - continue; - } - /* Next insn is delay slot */ - r31=0x308e4; - pc=0x17800; - run_17800(); return; - case 0x308e4: - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r3 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - r5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r6 = r3 + 1; - r3 = r5 + r3; - r5 = r16 & 15; - r5 = r5 + 97; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r6; - r16 = r16 >>> 4; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x308c8; - continue; - } - case 0x3091c: - r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x30928; - pc=0x17c00; - run_17c00(); return; - case 0x30928: - if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x30940; - continue; - } - r2 = readPages[(r18+8)>>>12][((r18+8)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r18+8)>>>12][((r18+8)>>>2)&0x3ff] = r2; - case 0x30940: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x3095c: - r4 = r0 + 32; - /* Next insn is delay slot */ - r31=0x30968; - pc=0x1b400; - run_1b400(); return; - case 0x30968: - r18 = r2 + r0; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r0; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; - writePages[(r2+24)>>>12][((r2+24)>>>2)&0x3ff] = r0; - r2 = readPages[(r28+-30584)>>>12][((r28+-30584)>>>2)&0x3ff]; - writePages[(r18+28)>>>12][((r18+28)>>>2)&0x3ff] = r2; - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r18; - case 0x30994: - r16 = readPages[(r18+8)>>>12][((r18+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x3087c; - continue; - case 0x30a00: - pc=0x30a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_30a00() throws ExecutionException { /* 0x30a00 - 0x30c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x30a00: - r2 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r5 = r2 + 1; - r2 = r0 + r0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x30a40; - continue; - } - case 0x30a1c: - r6 = r2 >>> 25; - r2 = r2 << 7; - r2 = r2 | r6; - r5 = r5 + 1; - r2 = r3 ^ r2; - addr=r5+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x30a1c; - continue; - } - case 0x30a40: - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x30c00: - pc=0x30c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_30c00() throws ExecutionException { /* 0x30c00 - 0x30e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x30c00: - r2 = readPages[(r5+12)>>>12][((r5+12)>>>2)&0x3ff]; - r3 = r0 + r0; - r6 = r2 + 1; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; + case 0x30804: if(r2 == r0) { - /* Next insn is delay slot */ + pc=0x30930; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 35; + if(r3 == r2) { + pc=0x310ec; + run_31000(); return; + } + case 0x3081c: + r4 = r29 + 16; + r31=0x30828; + pc=0x29400; + run_29000(); return; + case 0x30828: + r4 = r29 + 16; + r31=0x30834; + pc=0x42c00; + run_42800(); return; + case 0x30834: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x30844; + return; + case 0x30844: + r4= page[(r29+24)>>>2]; + r31=0x30850; + pc=0x21c00; + run_21800(); return; + case 0x30850: + r4= page[(r29+128)>>>2]; + r31=0x3085c; + pc=0x21c00; + run_21800(); return; + case 0x3085c: + if(r16 == r0) { + pc=0x307b0; + run_30000(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x30878; + pc=0x1fc00; + run_1f800(); return; + case 0x30878: + r31=0x30880; + pc=0x24000; + run_24000(); return; + case 0x30880: + pc=0x306d4; + run_30000(); return; + case 0x30888: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x30898; + return; + case 0x30898: + r4 = r0 + 3; + r31=0x308a4; + pc=0x29600; + run_29000(); return; + case 0x308a4: + pc=0x306d4; + run_30000(); return; + case 0x308ac: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x308bc; + return; + case 0x308bc: + r4 = r0 + 2; + r31=0x308c8; + pc=0x29600; + run_29000(); return; + case 0x308c8: + pc=0x306d4; + run_30000(); return; + case 0x308d0: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x308e0; + pc=0x1a800; + run_1a800(); return; + case 0x308e0: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x30900; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x30900; + pc=0x21200; + run_21000(); return; + case 0x30900: + r4 = r29 + 120; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x30914; + pc=0x56fe0; + run_56800(); return; + case 0x30914: + r4 = r29 + 120; + r31=0x30920; + pc=0x42e00; + run_42800(); return; + case 0x30920: + r31=0x30928; + pc=0x27c00; + run_27800(); return; + case 0x30928: + if(r2 != r0) { pc=0x30c40; continue; } - case 0x30c1c: - r7 = r3 >>> 25; - r3 = r3 << 7; - r3 = r3 | r7; - r6 = r6 + 1; - r3 = r2 ^ r3; - addr=r6+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x30c1c; - continue; - } - case 0x30c40: - writePages[(r5+8)>>>12][((r5+8)>>>2)&0x3ff] = r3; - case 0x30c44: - r2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x30c7c; - continue; - } - case 0x30c54: - r4 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r4 = ((r4 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x30c88; - continue; - } - r4 = r2 + r0; - r2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x30c54; - continue; - } - case 0x30c7c: - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=r31; + case 0x30930: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x30944; + pc=0x1fc00; + run_1f800(); return; + case 0x30944: + pc=0x306d4; + run_30000(); return; + case 0x3094c: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x3095c; return; - case 0x30c88: - r4 = r2 + 4; - /* Next insn is delay slot */ - pc=0x30c44; - continue; - case 0x30e00: - pc=0x30e00; + case 0x3095c: + r4 = r0 + 2; + r31=0x30968; + pc=0x29800; + run_29800(); return; + case 0x30968: + pc=0x306d4; + run_30000(); return; + case 0x30970: + r2 = r0 + 248; + if(r17 == r2) { + pc=0x30c78; + continue; + } + case 0x3097c: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x3098c; return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_30e00() throws ExecutionException { /* 0x30e00 - 0x31000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x30e00: - r2 = readPages[(r5+8)>>>12][((r5+8)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x30ec0; - continue; - } - case 0x30e10: - r8 = r5 + 20; - r2 = readPages[(r8+-8)>>>12][((r8+-8)>>>2)&0x3ff]; - r3 = r0 + r0; - r6 = r2 + 1; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + case 0x3098c: + r31=0x30994; + pc=0x24000; + run_24000(); return; + case 0x30994: + pc=0x306d4; + run_30000(); return; + case 0x3099c: + r4 = r17 + r0; + r31=0x309a8; + pc=0x29e00; + run_29800(); return; + case 0x309a8: + pc=0x306d4; + run_30000(); return; + case 0x309b0: + r31=0x309b8; + pc=0x27e00; + run_27800(); return; + case 0x309b8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x30e54; - continue; - } - case 0x30e30: - r7 = r3 >>> 25; - r3 = r3 << 7; - r3 = r3 | r7; - r6 = r6 + 1; - r3 = r2 ^ r3; - addr=r6+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x30e30; - continue; - } - case 0x30e54: - writePages[(r8+-12)>>>12][((r8+-12)>>>2)&0x3ff] = r3; - r6 = r4 + r0; - case 0x30e5c: - r2 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x30e94; - continue; - } - case 0x30e6c: - r6 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - r6 = ((r6 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x30eb4; - continue; - } - r6 = r2 + r0; - r2 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x30e6c; - continue; - } - case 0x30e94: - writePages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff] = r5; - r2 = readPages[(r8+8)>>>12][((r8+8)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x30ec4; - continue; - } - r5 = r8 + r0; - /* Next insn is delay slot */ - pc=0x30e10; - continue; - case 0x30eb4: - r6 = r2 + 4; - /* Next insn is delay slot */ - pc=0x30e5c; - continue; - case 0x30ec0: - r8 = r5 + r0; - case 0x30ec4: - r2 = readPages[(r8+12)>>>12][((r8+12)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - r5 = r2 + 1; - r2 = r0 + r0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x30f04; + r5 = r0 + 32; + r19 = r2 + r0; + if(r3 == r5) { + pc=0x31060; + run_31000(); return; + } + case 0x309cc: + r5 = r0 + 35; + if(r3 == r5) { + pc=0x30d98; continue; } - case 0x30ee0: - r6 = r2 >>> 25; + r2 = r0 + 91; + if(r3 == r2) { + pc=0x30d1c; + continue; + } + if(r3 == r0) { + pc=0x30ce0; + continue; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x30a00; + pc=0x1a800; + run_1a800(); return; + case 0x30a00: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x30a14; + pc=0x56fe0; + run_56800(); return; + case 0x30a14: + r4 = r18 + r0; + r31=0x30a20; + pc=0x42e00; + run_42800(); return; + case 0x30a20: + r20= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; + r20 = r20 << 2; + if(r2 != r0) { + pc=0x311a4; + run_31000(); return; + } + case 0x30a38: + r31=0x30a40; + pc=0x29200; + run_29000(); return; + case 0x30a40: r2 = r2 << 7; - r2 = r2 | r6; - r5 = r5 + 1; - r2 = r3 ^ r2; - addr=r5+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + r20 = r2 | r20; + case 0x30a48: + r31=0x30a50; + pc=0x24000; + run_24000(); return; + case 0x30a50: + r2 = r0 + 2; + if(r20 == r2) { + pc=0x30ddc; + continue; + } + r2 = (r20&0xffffffffL) < (3&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x30cb0; + continue; + } + r2 = r0 + 256; + if(r20 == r2) { + pc=0x3100c; + run_31000(); return; + } + r2 = r0 + 384; + if(r20 != r2) { + pc=0x30cc4; + continue; + } + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8736; + case 0x30a8c: + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r4 = r19 + r0; + r5 = r18 + r0; + r31=0x30aa4; + pc=0x29a00; + run_29800(); return; + case 0x30aa4: + pc=0x306d4; + run_30000(); return; + case 0x30aac: + r31=0x30ab4; + pc=0x27e00; + run_27800(); return; + case 0x30ab4: + page[(r29+144)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x30ee0; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x31020; + run_31000(); return; + } + case 0x30ac8: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x30ef8; continue; } - case 0x30f04: - writePages[(r8+8)>>>12][((r8+8)>>>2)&0x3ff] = r2; - case 0x30f08: - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x30f40; + r3 = r0 + 91; + if(r2 == r3) { + pc=0x30f78; continue; } - case 0x30f18: - r4 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r4 = ((r4 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x30f4c; + if(r2 == r0) { + pc=0x30ee8; continue; } - r4 = r3 + r0; - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x30f18; + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x30afc; + pc=0x1a800; + run_1a800(); return; + case 0x30afc: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x30b10; + pc=0x56fe0; + run_56800(); return; + case 0x30b10: + r4 = r18 + r0; + r31=0x30b1c; + pc=0x42e00; + run_42800(); return; + case 0x30b1c: + r19= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r19 = ((r0 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; + r19 = r19 << 2; + if(r2 != r0) { + pc=0x31234; + run_31000(); return; + } + case 0x30b34: + r31=0x30b3c; + pc=0x29200; + run_29000(); return; + case 0x30b3c: + r2 = r2 << 7; + r19 = r2 | r19; + case 0x30b44: + r31=0x30b4c; + pc=0x24000; + run_24000(); return; + case 0x30b4c: + r2 = r0 + 256; + if(r19 == r2) { + pc=0x31220; + run_31000(); return; + } + r2 = (r19&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x31074; + run_31000(); return; + } + r2 = r0 + 392; + if(r19 == r2) { + pc=0x31270; + run_31000(); return; + } + r2 = (r19&0xffffffffL) < (393&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x31280; + run_31000(); return; + } + r2 = r0 + 516; + if(r19 == r2) { + pc=0x3113c; + run_31000(); return; + } + r2 = r0 + 520; + if(r19 == r2) { + pc=0x31100; + run_31000(); return; + } + r2 = r0 + 404; + if(r19 != r2) { + pc=0x30cc4; continue; } - case 0x30f40: - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r8; - /* Next insn is delay slot */ - pc=r31; + r2 = 6 << 16; + r2 = r2 + 9360; + case 0x30ba8: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x30bc0; + pc=0x29a00; + run_29800(); return; + case 0x30bc0: + pc=0x306d4; + run_30000(); return; + case 0x30bc8: + r5 = 6 << 16; + r4 = r29 + 16; + r5 = r5 + 6828; + r6 = r17 + r0; + r31=0x30be0; + pc=0x50c00; + run_50800(); return; + case 0x30be0: + r4 = r0 + -2; + r5 = r29 + 16; + r31=0x30bf0; + pc=0x1fc00; + run_1f800(); return; + case 0x30bf0: + pc=0x306d4; + run_30000(); return; + case 0x30bf8: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x30c08; return; - case 0x30f4c: - r4 = r3 + 4; - /* Next insn is delay slot */ - pc=0x30f08; + case 0x30c08: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x30c18; + return; + case 0x30c18: + r2= page[(r29+148)>>>2]; + pc=0x3068c; + run_30000(); return; + case 0x30c24: + r4 = 6 << 16; + r4 = r4 + 6908; + r5 = r17 + r0; + r31=0x30c38; + pc=0x21400; + run_21000(); return; + case 0x30c38: + pc=0x306d4; + run_30000(); return; + case 0x30c40: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x30c50; + return; + case 0x30c50: + r4= page[(r29+128)>>>2]; + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x30c64; + return; + case 0x30c64: + r4 = r0 + 3; + r31=0x30c70; + pc=0x29800; + run_29800(); return; + case 0x30c70: + pc=0x306d4; + run_30000(); return; + case 0x30c78: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 16; + if(r2 == r0) { + pc=0x3097c; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6768; + r31=0x30ca8; + pc=0x21200; + run_21000(); return; + case 0x30ca8: + pc=0x3097c; continue; + case 0x30cb0: + if(r20 == r0) { + pc=0x30d84; + continue; + } + r2 = r0 + 1; + if(r20 == r2) { + pc=0x30ce8; + continue; + } + case 0x30cc4: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 8592; + r31=0x30cd8; + pc=0x1fc00; + run_1f800(); return; + case 0x30cd8: + pc=0x306d4; + run_30000(); return; + case 0x30ce0: + r31=0x30ce8; + pc=0x24000; + run_24000(); return; + case 0x30ce8: + r2 = 6 << 16; + r2 = r2 + 9072; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 == r0) { + pc=0x30cc4; + continue; + } + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x30d14; + return; + case 0x30d14: + pc=0x306d4; + run_30000(); return; + case 0x30d1c: + r31=0x30d24; + pc=0x23000; + run_23000(); return; + case 0x30d24: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x30d38; + pc=0x1a800; + run_1a800(); return; + case 0x30d38: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x30d4c; + pc=0x56fe0; + run_56800(); return; + case 0x30d4c: + r4 = r18 + r0; + r31=0x30d58; + pc=0x42e00; + run_42800(); return; + case 0x30d58: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x311e0; + run_31000(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x30d7c; + pc=0x1fc00; + run_1f800(); return; + case 0x30d7c: + r31=0x30d84; + pc=0x24000; + run_24000(); return; + case 0x30d84: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8928; + pc=0x30a8c; + continue; + case 0x30d98: + r31=0x30da0; + pc=0x23000; + run_23000(); return; + case 0x30da0: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x30db4; + pc=0x1a800; + run_1a800(); return; + case 0x30db4: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x30dc8; + pc=0x56fe0; + run_56800(); return; + case 0x30dc8: + r4 = r18 + r0; + r31=0x30dd4; + pc=0x42c00; + run_42800(); return; + case 0x30dd4: + r31=0x30ddc; + pc=0x24000; + run_24000(); return; + case 0x30ddc: + r2 = 6 << 16; + r2 = r2 + 9024; + r17 = r17 + r2; + r5 = r16 & 768; + r2 = r0 + 256; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r17 = tmp; + if(r5 == r2) { + pc=0x31308; + run_31000(); return; + } + r2 = (r5&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x312d4; + run_31000(); return; + } + r2 = r0 + 512; + if(r5 == r2) { + pc=0x31318; + run_31000(); return; + } + r2 = r0 + 768; + if(r5 != r2) { + pc=0x312e8; + run_31000(); return; + } + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+40)>>>2]; + case 0x30e2c: + r3= page[(r16+31424)>>>2]; + r3= page[(r3+4)>>>2]; + r3 = r3 & 2; + if(r3 == r0) { + pc=0x30e64; + continue; + } + if(r19 != r0) { + pc=0x30e5c; + continue; + } + r19 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + r2 = r0 + 2; + r19 = r2 - r19; + case 0x30e5c: + r2 = r17 << 8; + r17 = r2 | r17; + case 0x30e64: + r4 = r19 + r0; + r5 = r18 + r0; + r6 = r17 + r0; + r31=0x30e78; + pc=0x29a00; + run_29800(); return; + case 0x30e78: + r2= page[(r16+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 4; + if(r2 == r0) { + pc=0x306d4; + run_30000(); return; + } + r3= page[(r29+120)>>>2]; + r2 = r0 + 1; + if(r3 != r2) { + pc=0x306d4; + run_30000(); return; + } + r2= page[(r29+128)>>>2]; + if(r2 == r0) { + pc=0x306d4; + run_30000(); return; + } + r2 = r0 + 139; + if(r17 == r2) { + pc=0x3134c; + run_31000(); return; + } + r2 = r0 + 171; + if(r17 != r2) { + pc=0x306d4; + run_30000(); return; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6720; + r31=0x30ee0; + pc=0x1fc00; + run_1f800(); return; + case 0x30ee0: + pc=0x306d4; + run_30000(); return; + case 0x30ee8: + r31=0x30ef0; + pc=0x24000; + run_24000(); return; + case 0x30ef0: + pc=0x30cc4; + continue; + case 0x30ef8: + r31=0x30f00; + pc=0x23000; + run_23000(); return; + case 0x30f00: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x30f14; + pc=0x1a800; + run_1a800(); return; + case 0x30f14: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x30f28; + pc=0x56fe0; + run_56800(); return; + case 0x30f28: + r4 = r18 + r0; + r31=0x30f34; + pc=0x42c00; + run_42800(); return; + case 0x30f34: + r31=0x30f3c; + pc=0x24000; + run_24000(); return; + case 0x30f3c: + r2 = 6 << 16; + r2 = r2 + 10240; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r5 = tmp; + r4 = r29 + 144; + r6 = r16 & 768; + r31=0x30f5c; + pc=0x28e00; + run_28800(); return; + case 0x30f5c: + r4= page[(r29+144)>>>2]; + r5 = r18 + r0; + r6 = r2 + r0; + r31=0x30f70; + pc=0x29a00; + run_29800(); return; + case 0x30f70: + pc=0x306d4; + run_30000(); return; + case 0x30f78: + r31=0x30f80; + pc=0x23000; + run_23000(); return; + case 0x30f80: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x30f94; + pc=0x1a800; + run_1a800(); return; + case 0x30f94: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x30fa8; + pc=0x56fe0; + run_56800(); return; + case 0x30fa8: + r4 = r18 + r0; + r31=0x30fb4; + pc=0x42e00; + run_42800(); return; + case 0x30fb4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x31200; + run_31000(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x30fd8; + pc=0x1fc00; + run_1f800(); return; + case 0x30fd8: + r31=0x30fe0; + pc=0x24000; + run_24000(); return; + case 0x30fe0: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 10008; + case 0x30fec: + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + r6= page[(r2+0)>>>2]; + r5 = r18 + r0; + r31=0x31004; + pc=0x29a00; + run_29800(); return; case 0x31000: pc=0x31000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_31000() throws ExecutionException { /* 0x31000 - 0x31200 */ + private final void run_31000() throws ExecutionException { /* 0x31000 - 0x31800 */ int addr, tmp; for(;;) { switch(pc) { case 0x31000: - r9 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - r8 = r0 + r0; - addr=r9+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + case 0x31004: + pc=0x306d4; + run_30000(); return; + case 0x3100c: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8832; + pc=0x30a8c; + run_30800(); return; + case 0x31020: + r31=0x31028; + pc=0x23000; + run_23000(); return; + case 0x31028: + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; - r3 = r9 + 1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3103c; - continue; - } - case 0x31018: - r6 = r8 >>> 25; - r8 = r8 << 7; - r8 = r8 | r6; - r3 = r3 + 1; - r8 = r2 ^ r8; - addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x31018; - continue; - } + pc=0x30ac8; + run_30800(); return; + case 0x31034: + r31=0x3103c; + pc=0x23000; + run_23000(); return; case 0x3103c: - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x31068; - continue; - } - case 0x31044: - r2 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r3 = ((r2 & 0xffffffffL) < (r8 & 0xffffffffL)) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x31074; - continue; - } - r4 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x31044; - continue; - } + r18 = r0 + r0; + r16 = r0 + 1; + pc=0x307e4; + run_30000(); return; + case 0x3104c: + r31=0x31054; + pc=0x23000; + run_23000(); return; + case 0x31054: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x307d0; + run_30000(); return; + case 0x31060: + r31=0x31068; + pc=0x23000; + run_23000(); return; case 0x31068: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + pc=0x309cc; + run_30800(); return; case 0x31074: - if(r2 == r8) { - /* Next insn is delay slot */ - pc=0x31088; + r2 = r0 + 4; + if(r19 == r2) { + pc=0x31194; continue; } - case 0x3107c: - r4 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x3103c; - continue; - case 0x31088: - r3 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - r2 = r9 + r0; - /* Next insn is delay slot */ - pc=0x310a0; - continue; - case 0x31098: - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x310c4; + r2 = (r19&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x31368; continue; } - case 0x310a0: - r2 = r2 + 1; - r3 = r3 + 1; - addr=r2+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + r2 = r0 + 36; + if(r19 == r2) { + pc=0x31184; + continue; + } + r2 = r0 + 128; + if(r19 == r2) { + pc=0x31174; + continue; + } + r2 = r0 + 8; + if(r19 != r2) { + pc=0x30cc4; + run_30800(); return; + } + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x310cc; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x30ba8; + run_30800(); return; + case 0x310cc: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x310dc; + return; + case 0x310dc: + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x30ba8; + run_30800(); return; + case 0x310ec: + r31=0x310f4; + pc=0x23000; + run_23000(); return; + case 0x310f4: + r16 = r18 + r0; + pc=0x3081c; + run_30800(); return; + case 0x31100: + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x3111c; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x30ba8; + run_30800(); return; + case 0x3111c: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x3112c; + return; + case 0x3112c: + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x30ba8; + run_30800(); return; + case 0x3113c: + r2 = 6 << 16; + r2 = r2 + 9180; + case 0x31144: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r7 = tmp; - addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ r6 = tmp; - if(r6 == r7) { - /* Next insn is delay slot */ - pc=0x31098; + r5 = r18 + r0; + r31=0x3115c; + pc=0x29a00; + run_29800(); return; + case 0x3115c: + r4= page[(r29+120)>>>2]; + r5 = r29 + 128; + r31=0x3116c; + pc=0x29000; + run_29000(); return; + case 0x3116c: + pc=0x306d4; + run_30000(); return; + case 0x31174: + r2 = 6 << 16; + r2 = r2 + 9420; + pc=0x30ba8; + run_30800(); return; + case 0x31184: + r2 = 6 << 16; + r2 = r2 + 9600; + pc=0x30ba8; + run_30800(); return; + case 0x31194: + r2 = 6 << 16; + r2 = r2 + 9480; + pc=0x31144; + continue; + case 0x311a4: + r31=0x311ac; + pc=0x29200; + run_29000(); return; + case 0x311ac: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r20 = r20 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x3132c; continue; } - /* Next insn is delay slot */ - pc=0x3107c; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x311d8; + pc=0x1fc00; + run_1f800(); return; + case 0x311d8: + pc=0x30a38; + run_30800(); return; + case 0x311e0: + r31=0x311e8; + pc=0x23000; + run_23000(); return; + case 0x311e8: + r31=0x311f0; + pc=0x29200; + run_29000(); return; + case 0x311f0: + r2 = r2 << 7; + r20 = r2 | 8; + pc=0x30a48; + run_30800(); return; + case 0x31200: + r31=0x31208; + pc=0x23000; + run_23000(); return; + case 0x31208: + r31=0x31210; + pc=0x29200; + run_29000(); return; + case 0x31210: + r2 = r2 << 7; + r19 = r2 | 8; + pc=0x30b44; + run_30800(); return; + case 0x31220: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 9776; + pc=0x30fec; + run_30800(); return; + case 0x31234: + r31=0x3123c; + pc=0x29200; + run_29000(); return; + case 0x3123c: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r19 = r19 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x3133c; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x31268; + pc=0x1fc00; + run_1f800(); return; + case 0x31268: + pc=0x30b34; + run_30800(); return; + case 0x31270: + r2 = 6 << 16; + r2 = r2 + 9240; + pc=0x30ba8; + run_30800(); return; + case 0x31280: + r2 = r0 + 384; + if(r19 == r2) { + pc=0x312a8; + continue; + } + r2 = r0 + 388; + if(r19 != r2) { + pc=0x30cc4; + run_30800(); return; + } + r2 = 6 << 16; + r2 = r2 + 9540; + pc=0x31144; continue; - case 0x310c4: - r2 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; - writePages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff] = r2; - r2 = r0 + 1; - /* Next insn is delay slot */ + case 0x312a8: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 9660; + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r5 = r18 + r0; + r31=0x312cc; + pc=0x29a00; + run_29800(); return; + case 0x312cc: + pc=0x306d4; + run_30000(); return; + case 0x312d4: + if(r5 != r0) { + pc=0x312e8; + continue; + } + r16 = 6 << 16; + pc=0x30e64; + run_30800(); return; + case 0x312e8: + r4 = 6 << 16; + r4 = r4 + 6300; + r31=0x312f8; + pc=0x21400; + run_21000(); return; + case 0x312f8: + r16 = 6 << 16; + r2 = r0 + r0; + pc=0x30e2c; + run_30800(); return; + case 0x31308: + r17 = r17 << 8; + r16 = 6 << 16; + pc=0x30e64; + run_30800(); return; + case 0x31318: + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+36)>>>2]; + pc=0x30e2c; + run_30800(); return; + case 0x3132c: + r31=0x31334; + pc=0x23000; + run_23000(); return; + case 0x31334: + pc=0x30a38; + run_30800(); return; + case 0x3133c: + r31=0x31344; + pc=0x23000; + run_23000(); return; + case 0x31344: + pc=0x30b34; + run_30800(); return; + case 0x3134c: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6672; + r31=0x31360; + pc=0x1fc00; + run_1f800(); return; + case 0x31360: + pc=0x306d4; + run_30000(); return; + case 0x31368: + if(r19 == r0) { + pc=0x30fe0; + run_30800(); return; + } + r2 = r0 + 2; + if(r19 != r2) { + pc=0x30cc4; + run_30800(); return; + } + pc=0x30f3c; + run_30800(); return; + case 0x31400: + r4 = r4 + -3; + r4 = (r4&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; + if(r4 != r0) { + pc=0x3141c; + continue; + } + r2 = r0 + r0; pc=r31; return; - case 0x31200: - pc=0x31200; + case 0x3141c: + r29 = r29 + -176; + r5 = 6 << 16; + page[(r29+152)>>>2] = r16; + r16 = 6 << 16; + r4 = r16 + 22536; + r5 = r5 + 17104; + page[(r29+172)>>>2] = r31; + page[(r29+168)>>>2] = r20; + page[(r29+164)>>>2] = r19; + page[(r29+160)>>>2] = r18; + page[(r29+156)>>>2] = r17; + r31=0x31450; + pc=0x1cc00; + run_1c800(); return; + case 0x31450: + r4 = 6 << 16; + r4 = r4 + 17896; + r5 = r29 + 148; + r6 = r16 + 22536; + r31=0x31468; + pc=0x42400; + run_42000(); return; + case 0x31468: + if(r2 == r0) { + pc=0x314bc; + continue; + } + r16= page[(r29+148)>>>2]; + r2 = r16 & 1024; + r17 = r16 & 255; + if(r2 != r0) { + pc=0x319f8; + run_31800(); return; + } + r2 = r16 + r0; + case 0x3148c: + r2 = r2 >> 12; + r3 = (r2&0xffffffffL) < (11&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x31a24; + run_31800(); return; + } + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 8424; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; + return; + case 0x314bc: + r4 = 6 << 16; + r4 = r4 + 20376; + r31=0x314cc; + pc=0x2a200; + run_2a000(); return; + case 0x314cc: + if(r2 == r0) { + pc=0x314fc; + continue; + } + case 0x314d4: + r2 = r0 + 1; + case 0x314d8: + r31= page[(r29+172)>>>2]; + r20= page[(r29+168)>>>2]; + r19= page[(r29+164)>>>2]; + r18= page[(r29+160)>>>2]; + r17= page[(r29+156)>>>2]; + r16= page[(r29+152)>>>2]; + r29 = r29 + 176; + pc=r31; + return; + case 0x314fc: + r4 = 6 << 16; + r4 = r4 + 21396; + r31=0x3150c; + pc=0x2a200; + run_2a000(); return; + case 0x3150c: + if(r2 != r0) { + pc=0x314d4; + continue; + } + r4 = 6 << 16; + r4 = r4 + 19716; + r31=0x31524; + pc=0x2a200; + run_2a000(); return; + case 0x31524: + if(r2 != r0) { + pc=0x314d4; + continue; + } + r4 = 6 << 16; + r4 = r4 + 17796; + r31=0x3153c; + pc=0x2a200; + run_2a000(); return; + case 0x3153c: + pc=0x314d8; + continue; + case 0x31544: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x31554; + pc=0x1a800; + run_1a800(); return; + case 0x31554: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x31574; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x31574; + pc=0x21200; + run_21000(); return; + case 0x31574: + r5 = r29 + 24; + r6 = r0 + 24; + r4 = r29 + 120; + r31=0x31588; + pc=0x56fe0; + run_56800(); return; + case 0x31588: + r4 = r29 + 120; + r31=0x31594; + pc=0x42e00; + run_42800(); return; + case 0x31594: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x315a4; + return; + case 0x315a4: + r4= page[(r29+128)>>>2]; + r31=0x315b0; + pc=0x21c00; + run_21800(); return; + case 0x315b0: + r31=0x315b8; + pc=0x24000; + run_24000(); return; + case 0x315b8: + pc=0x314d4; + continue; + case 0x315c0: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x31e4c; + run_31800(); return; + } + case 0x315d0: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x31e34; + run_31800(); return; + } + r18 = r0 + 1; + r16 = r0 + r0; + case 0x315e4: + r4 = r29 + 120; + r31=0x315f0; + pc=0x29400; + run_29000(); return; + case 0x315f0: + r4 = r29 + 120; + r31=0x315fc; + pc=0x42c00; + run_42800(); return; + case 0x315fc: + r31=0x31604; + pc=0x27c00; + run_27800(); return; + case 0x31604: + if(r2 == r0) { + pc=0x31730; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 35; + if(r3 == r2) { + pc=0x31eec; + run_31800(); return; + } + case 0x3161c: + r4 = r29 + 16; + r31=0x31628; + pc=0x29400; + run_29000(); return; + case 0x31628: + r4 = r29 + 16; + r31=0x31634; + pc=0x42c00; + run_42800(); return; + case 0x31634: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x31644; + return; + case 0x31644: + r4= page[(r29+24)>>>2]; + r31=0x31650; + pc=0x21c00; + run_21800(); return; + case 0x31650: + r4= page[(r29+128)>>>2]; + r31=0x3165c; + pc=0x21c00; + run_21800(); return; + case 0x3165c: + if(r16 == r0) { + pc=0x315b0; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x31678; + pc=0x1fc00; + run_1f800(); return; + case 0x31678: + r31=0x31680; + pc=0x24000; + run_24000(); return; + case 0x31680: + pc=0x314d4; + continue; + case 0x31688: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x31698; + return; + case 0x31698: + r4 = r0 + 3; + r31=0x316a4; + pc=0x29600; + run_29000(); return; + case 0x316a4: + pc=0x314d4; + continue; + case 0x316ac: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x316bc; + return; + case 0x316bc: + r4 = r0 + 2; + r31=0x316c8; + pc=0x29600; + run_29000(); return; + case 0x316c8: + pc=0x314d4; + continue; + case 0x316d0: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x316e0; + pc=0x1a800; + run_1a800(); return; + case 0x316e0: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x31700; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x31700; + pc=0x21200; + run_21000(); return; + case 0x31700: + r4 = r29 + 120; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x31714; + pc=0x56fe0; + run_56800(); return; + case 0x31714: + r4 = r29 + 120; + r31=0x31720; + pc=0x42e00; + run_42800(); return; + case 0x31720: + r31=0x31728; + pc=0x27c00; + run_27800(); return; + case 0x31728: + if(r2 != r0) { + pc=0x31a40; + run_31800(); return; + } + case 0x31730: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x31744; + pc=0x1fc00; + run_1f800(); return; + case 0x31744: + pc=0x314d4; + continue; + case 0x3174c: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x3175c; + return; + case 0x3175c: + r4 = r0 + 2; + r31=0x31768; + pc=0x29800; + run_29800(); return; + case 0x31768: + pc=0x314d4; + continue; + case 0x31770: + r2 = r0 + 248; + if(r17 == r2) { + pc=0x31a78; + run_31800(); return; + } + case 0x3177c: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x3178c; + return; + case 0x3178c: + r31=0x31794; + pc=0x24000; + run_24000(); return; + case 0x31794: + pc=0x314d4; + continue; + case 0x3179c: + r4 = r17 + r0; + r31=0x317a8; + pc=0x29e00; + run_29800(); return; + case 0x317a8: + pc=0x314d4; + continue; + case 0x317b0: + r31=0x317b8; + pc=0x27e00; + run_27800(); return; + case 0x317b8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r5 = r0 + 32; + r19 = r2 + r0; + if(r3 == r5) { + pc=0x31e60; + run_31800(); return; + } + case 0x317cc: + r5 = r0 + 35; + if(r3 == r5) { + pc=0x31b98; + run_31800(); return; + } + r2 = r0 + 91; + if(r3 == r2) { + pc=0x31b1c; + run_31800(); return; + } + if(r3 == r0) { + pc=0x31ae0; + run_31800(); return; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x31800; + pc=0x1a800; + run_1a800(); return; + case 0x31800: + pc=0x31800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_31200() throws ExecutionException { /* 0x31200 - 0x31400 */ + private final void run_31800() throws ExecutionException { /* 0x31800 - 0x32000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x31200: - r2 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - r29 = r29 + -48; - r10 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r19; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r18; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r17; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r16; - addr=r10+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + case 0x31800: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x31814; + pc=0x56fe0; + run_56800(); return; + case 0x31814: + r4 = r18 + r0; + r31=0x31820; + pc=0x42e00; + run_42800(); return; + case 0x31820: + r20= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; + r20 = r20 << 2; + if(r2 != r0) { + pc=0x31fa4; + continue; + } + case 0x31838: + r31=0x31840; + pc=0x29200; + run_29000(); return; + case 0x31840: + r2 = r2 << 7; + r20 = r2 | r20; + case 0x31848: + r31=0x31850; + pc=0x24000; + run_24000(); return; + case 0x31850: + r2 = r0 + 2; + if(r20 == r2) { + pc=0x31bdc; + continue; + } + r2 = (r20&0xffffffffL) < (3&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x31ab0; + continue; + } + r2 = r0 + 256; + if(r20 == r2) { + pc=0x31e0c; + continue; + } + r2 = r0 + 384; + if(r20 != r2) { + pc=0x31ac4; + continue; + } + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8736; + case 0x3188c: + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r4 = r19 + r0; + r5 = r18 + r0; + r31=0x318a4; + pc=0x29a00; + run_29800(); return; + case 0x318a4: + pc=0x314d4; + run_31000(); return; + case 0x318ac: + r31=0x318b4; + pc=0x27e00; + run_27800(); return; + case 0x318b4: + page[(r29+144)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x31e20; + continue; + } + case 0x318c8: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x31cf8; + continue; + } + r3 = r0 + 91; + if(r2 == r3) { + pc=0x31d78; + continue; + } + if(r2 == r0) { + pc=0x31ce8; + continue; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x318fc; + pc=0x1a800; + run_1a800(); return; + case 0x318fc: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x31910; + pc=0x56fe0; + run_56800(); return; + case 0x31910: + r4 = r18 + r0; + r31=0x3191c; + pc=0x42e00; + run_42800(); return; + case 0x3191c: + r19= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r19 = ((r0 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; + r19 = r19 << 2; + if(r2 != r0) { + pc=0x32034; + run_32000(); return; + } + case 0x31934: + r31=0x3193c; + pc=0x29200; + run_29000(); return; + case 0x3193c: + r2 = r2 << 7; + r19 = r2 | r19; + case 0x31944: + r31=0x3194c; + pc=0x24000; + run_24000(); return; + case 0x3194c: + r2 = r0 + 256; + if(r19 == r2) { + pc=0x32020; + run_32000(); return; + } + r2 = (r19&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x31e74; + continue; + } + r2 = r0 + 392; + if(r19 == r2) { + pc=0x32070; + run_32000(); return; + } + r2 = (r19&0xffffffffL) < (393&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x32080; + run_32000(); return; + } + r2 = r0 + 516; + if(r19 == r2) { + pc=0x31f3c; + continue; + } + r2 = r0 + 520; + if(r19 == r2) { + pc=0x31f00; + continue; + } + r2 = r0 + 404; + if(r19 != r2) { + pc=0x31ac4; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9360; + case 0x319a8: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x319c0; + pc=0x29a00; + run_29800(); return; + case 0x319c0: + pc=0x314d4; + run_31000(); return; + case 0x319c8: + r5 = 6 << 16; + r4 = r29 + 16; + r5 = r5 + 6828; + r6 = r17 + r0; + r31=0x319e0; + pc=0x50c00; + run_50800(); return; + case 0x319e0: + r4 = r0 + -2; + r5 = r29 + 16; + r31=0x319f0; + pc=0x1fc00; + run_1f800(); return; + case 0x319f0: + pc=0x314d4; + run_31000(); return; + case 0x319f8: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x31a08; + return; + case 0x31a08: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x31a18; + return; + case 0x31a18: + r2= page[(r29+148)>>>2]; + pc=0x3148c; + run_31000(); return; + case 0x31a24: + r4 = 6 << 16; + r4 = r4 + 6908; + r5 = r17 + r0; + r31=0x31a38; + pc=0x21400; + run_21000(); return; + case 0x31a38: + pc=0x314d4; + run_31000(); return; + case 0x31a40: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x31a50; + return; + case 0x31a50: + r4= page[(r29+128)>>>2]; + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x31a64; + return; + case 0x31a64: + r4 = r0 + 3; + r31=0x31a70; + pc=0x29800; + run_29800(); return; + case 0x31a70: + pc=0x314d4; + run_31000(); return; + case 0x31a78: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 16; + if(r2 == r0) { + pc=0x3177c; + run_31000(); return; + } + r4 = 6 << 16; + r4 = r4 + 6768; + r31=0x31aa8; + pc=0x21200; + run_21000(); return; + case 0x31aa8: + pc=0x3177c; + run_31000(); return; + case 0x31ab0: + if(r20 == r0) { + pc=0x31b84; + continue; + } + r2 = r0 + 1; + if(r20 == r2) { + pc=0x31ae8; + continue; + } + case 0x31ac4: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 8592; + r31=0x31ad8; + pc=0x1fc00; + run_1f800(); return; + case 0x31ad8: + pc=0x314d4; + run_31000(); return; + case 0x31ae0: + r31=0x31ae8; + pc=0x24000; + run_24000(); return; + case 0x31ae8: + r2 = 6 << 16; + r2 = r2 + 9072; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 == r0) { + pc=0x31ac4; + continue; + } + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x31b14; + return; + case 0x31b14: + pc=0x314d4; + run_31000(); return; + case 0x31b1c: + r31=0x31b24; + pc=0x23000; + run_23000(); return; + case 0x31b24: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x31b38; + pc=0x1a800; + run_1a800(); return; + case 0x31b38: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x31b4c; + pc=0x56fe0; + run_56800(); return; + case 0x31b4c: + r4 = r18 + r0; + r31=0x31b58; + pc=0x42e00; + run_42800(); return; + case 0x31b58: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x31fe0; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x31b7c; + pc=0x1fc00; + run_1f800(); return; + case 0x31b7c: + r31=0x31b84; + pc=0x24000; + run_24000(); return; + case 0x31b84: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8928; + pc=0x3188c; + continue; + case 0x31b98: + r31=0x31ba0; + pc=0x23000; + run_23000(); return; + case 0x31ba0: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x31bb4; + pc=0x1a800; + run_1a800(); return; + case 0x31bb4: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x31bc8; + pc=0x56fe0; + run_56800(); return; + case 0x31bc8: + r4 = r18 + r0; + r31=0x31bd4; + pc=0x42c00; + run_42800(); return; + case 0x31bd4: + r31=0x31bdc; + pc=0x24000; + run_24000(); return; + case 0x31bdc: + r2 = 6 << 16; + r2 = r2 + 9024; + r17 = r17 + r2; + r5 = r16 & 768; + r2 = r0 + 256; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r17 = tmp; + if(r5 == r2) { + pc=0x32108; + run_32000(); return; + } + r2 = (r5&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x320d4; + run_32000(); return; + } + r2 = r0 + 512; + if(r5 == r2) { + pc=0x32118; + run_32000(); return; + } + r2 = r0 + 768; + if(r5 != r2) { + pc=0x320e8; + run_32000(); return; + } + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+40)>>>2]; + case 0x31c2c: + r3= page[(r16+31424)>>>2]; + r3= page[(r3+4)>>>2]; + r3 = r3 & 2; + if(r3 == r0) { + pc=0x31c64; + continue; + } + if(r19 != r0) { + pc=0x31c5c; + continue; + } + r19 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + r2 = r0 + 2; + r19 = r2 - r19; + case 0x31c5c: + r2 = r17 << 8; + r17 = r2 | r17; + case 0x31c64: + r4 = r19 + r0; + r5 = r18 + r0; + r6 = r17 + r0; + r31=0x31c78; + pc=0x29a00; + run_29800(); return; + case 0x31c78: + r2= page[(r16+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 4; + if(r2 == r0) { + pc=0x314d4; + run_31000(); return; + } + r3= page[(r29+120)>>>2]; + r2 = r0 + 1; + if(r3 != r2) { + pc=0x314d4; + run_31000(); return; + } + r2= page[(r29+128)>>>2]; + if(r2 == r0) { + pc=0x314d4; + run_31000(); return; + } + r2 = r0 + 139; + if(r17 == r2) { + pc=0x3214c; + run_32000(); return; + } + r2 = r0 + 171; + if(r17 != r2) { + pc=0x314d4; + run_31000(); return; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6720; + r31=0x31ce0; + pc=0x1fc00; + run_1f800(); return; + case 0x31ce0: + pc=0x314d4; + run_31000(); return; + case 0x31ce8: + r31=0x31cf0; + pc=0x24000; + run_24000(); return; + case 0x31cf0: + pc=0x31ac4; + continue; + case 0x31cf8: + r31=0x31d00; + pc=0x23000; + run_23000(); return; + case 0x31d00: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x31d14; + pc=0x1a800; + run_1a800(); return; + case 0x31d14: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x31d28; + pc=0x56fe0; + run_56800(); return; + case 0x31d28: + r4 = r18 + r0; + r31=0x31d34; + pc=0x42c00; + run_42800(); return; + case 0x31d34: + r31=0x31d3c; + pc=0x24000; + run_24000(); return; + case 0x31d3c: + r2 = 6 << 16; + r2 = r2 + 10240; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r5 = tmp; + r4 = r29 + 144; + r6 = r16 & 768; + r31=0x31d5c; + pc=0x28e00; + run_28800(); return; + case 0x31d5c: + r4= page[(r29+144)>>>2]; + r5 = r18 + r0; + r6 = r2 + r0; + r31=0x31d70; + pc=0x29a00; + run_29800(); return; + case 0x31d70: + pc=0x314d4; + run_31000(); return; + case 0x31d78: + r31=0x31d80; + pc=0x23000; + run_23000(); return; + case 0x31d80: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x31d94; + pc=0x1a800; + run_1a800(); return; + case 0x31d94: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x31da8; + pc=0x56fe0; + run_56800(); return; + case 0x31da8: + r4 = r18 + r0; + r31=0x31db4; + pc=0x42e00; + run_42800(); return; + case 0x31db4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x32000; + run_32000(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x31dd8; + pc=0x1fc00; + run_1f800(); return; + case 0x31dd8: + r31=0x31de0; + pc=0x24000; + run_24000(); return; + case 0x31de0: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 10008; + case 0x31dec: + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + r6= page[(r2+0)>>>2]; + r5 = r18 + r0; + r31=0x31e04; + pc=0x29a00; + run_29800(); return; + case 0x31e04: + pc=0x314d4; + run_31000(); return; + case 0x31e0c: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8832; + pc=0x3188c; + continue; + case 0x31e20: + r31=0x31e28; + pc=0x23000; + run_23000(); return; + case 0x31e28: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x318c8; + continue; + case 0x31e34: + r31=0x31e3c; + pc=0x23000; + run_23000(); return; + case 0x31e3c: + r18 = r0 + r0; + r16 = r0 + 1; + pc=0x315e4; + run_31000(); return; + case 0x31e4c: + r31=0x31e54; + pc=0x23000; + run_23000(); return; + case 0x31e54: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x315d0; + run_31000(); return; + case 0x31e60: + r31=0x31e68; + pc=0x23000; + run_23000(); return; + case 0x31e68: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + pc=0x317cc; + run_31000(); return; + case 0x31e74: + r2 = r0 + 4; + if(r19 == r2) { + pc=0x31f94; + continue; + } + r2 = (r19&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x32168; + run_32000(); return; + } + r2 = r0 + 36; + if(r19 == r2) { + pc=0x31f84; + continue; + } + r2 = r0 + 128; + if(r19 == r2) { + pc=0x31f74; + continue; + } + r2 = r0 + 8; + if(r19 != r2) { + pc=0x31ac4; + continue; + } + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x31ecc; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x319a8; + continue; + case 0x31ecc: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x31edc; + return; + case 0x31edc: + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x319a8; + continue; + case 0x31eec: + r31=0x31ef4; + pc=0x23000; + run_23000(); return; + case 0x31ef4: + r16 = r18 + r0; + pc=0x3161c; + run_31000(); return; + case 0x31f00: + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x31f1c; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x319a8; + continue; + case 0x31f1c: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x31f2c; + return; + case 0x31f2c: + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x319a8; + continue; + case 0x31f3c: + r2 = 6 << 16; + r2 = r2 + 9180; + case 0x31f44: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x31f5c; + pc=0x29a00; + run_29800(); return; + case 0x31f5c: + r4= page[(r29+120)>>>2]; + r5 = r29 + 128; + r31=0x31f6c; + pc=0x29000; + run_29000(); return; + case 0x31f6c: + pc=0x314d4; + run_31000(); return; + case 0x31f74: + r2 = 6 << 16; + r2 = r2 + 9420; + pc=0x319a8; + continue; + case 0x31f84: + r2 = 6 << 16; + r2 = r2 + 9600; + pc=0x319a8; + continue; + case 0x31f94: + r2 = 6 << 16; + r2 = r2 + 9480; + pc=0x31f44; + continue; + case 0x31fa4: + r31=0x31fac; + pc=0x29200; + run_29000(); return; + case 0x31fac: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r20 = r20 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x3212c; + run_32000(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x31fd8; + pc=0x1fc00; + run_1f800(); return; + case 0x31fd8: + pc=0x31838; + continue; + case 0x31fe0: + r31=0x31fe8; + pc=0x23000; + run_23000(); return; + case 0x31fe8: + r31=0x31ff0; + pc=0x29200; + run_29000(); return; + case 0x31ff0: + r2 = r2 << 7; + r20 = r2 | 8; + pc=0x31848; + continue; + case 0x32000: + pc=0x32000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_32000() throws ExecutionException { /* 0x32000 - 0x32800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x32000: + r31=0x32008; + pc=0x23000; + run_23000(); return; + case 0x32008: + r31=0x32010; + pc=0x29200; + run_29000(); return; + case 0x32010: + r2 = r2 << 7; + r19 = r2 | 8; + pc=0x31944; + run_31800(); return; + case 0x32020: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 9776; + pc=0x31dec; + run_31800(); return; + case 0x32034: + r31=0x3203c; + pc=0x29200; + run_29000(); return; + case 0x3203c: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r19 = r19 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x3213c; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x32068; + pc=0x1fc00; + run_1f800(); return; + case 0x32068: + pc=0x31934; + run_31800(); return; + case 0x32070: + r2 = 6 << 16; + r2 = r2 + 9240; + pc=0x319a8; + run_31800(); return; + case 0x32080: + r2 = r0 + 384; + if(r19 == r2) { + pc=0x320a8; + continue; + } + r2 = r0 + 388; + if(r19 != r2) { + pc=0x31ac4; + run_31800(); return; + } + r2 = 6 << 16; + r2 = r2 + 9540; + pc=0x31f44; + run_31800(); return; + case 0x320a8: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 9660; + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r5 = r18 + r0; + r31=0x320cc; + pc=0x29a00; + run_29800(); return; + case 0x320cc: + pc=0x314d4; + run_31000(); return; + case 0x320d4: + if(r5 != r0) { + pc=0x320e8; + continue; + } + r16 = 6 << 16; + pc=0x31c64; + run_31800(); return; + case 0x320e8: + r4 = 6 << 16; + r4 = r4 + 6300; + r31=0x320f8; + pc=0x21400; + run_21000(); return; + case 0x320f8: + r16 = 6 << 16; + r2 = r0 + r0; + pc=0x31c2c; + run_31800(); return; + case 0x32108: + r17 = r17 << 8; + r16 = 6 << 16; + pc=0x31c64; + run_31800(); return; + case 0x32118: + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+36)>>>2]; + pc=0x31c2c; + run_31800(); return; + case 0x3212c: + r31=0x32134; + pc=0x23000; + run_23000(); return; + case 0x32134: + pc=0x31838; + run_31800(); return; + case 0x3213c: + r31=0x32144; + pc=0x23000; + run_23000(); return; + case 0x32144: + pc=0x31934; + run_31800(); return; + case 0x3214c: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6672; + r31=0x32160; + pc=0x1fc00; + run_1f800(); return; + case 0x32160: + pc=0x314d4; + run_31000(); return; + case 0x32168: + if(r19 == r0) { + pc=0x31de0; + run_31800(); return; + } + r2 = r0 + 2; + if(r19 != r2) { + pc=0x31ac4; + run_31800(); return; + } + pc=0x31d3c; + run_31800(); return; + case 0x32200: + r4 = r4 + -3; + r4 = (r4&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; + if(r4 != r0) { + pc=0x3221c; + continue; + } + r2 = r0 + r0; + pc=r31; + return; + case 0x3221c: + r29 = r29 + -176; + r5 = 6 << 16; + page[(r29+152)>>>2] = r16; + r16 = 6 << 16; + r4 = r16 + 22536; + r5 = r5 + 17104; + page[(r29+172)>>>2] = r31; + page[(r29+168)>>>2] = r20; + page[(r29+164)>>>2] = r19; + page[(r29+160)>>>2] = r18; + page[(r29+156)>>>2] = r17; + r31=0x32250; + pc=0x1cc00; + run_1c800(); return; + case 0x32250: + r4 = 6 << 16; + r4 = r4 + 17276; + r5 = r29 + 148; + r6 = r16 + 22536; + r31=0x32268; + pc=0x42400; + run_42000(); return; + case 0x32268: + if(r2 == r0) { + pc=0x322bc; + continue; + } + r16= page[(r29+148)>>>2]; + r2 = r16 & 1024; + r17 = r16 & 255; + if(r2 != r0) { + pc=0x32810; + run_32800(); return; + } + r2 = r16 + r0; + case 0x3228c: + r2 = r2 >> 12; + r3 = (r2&0xffffffffL) < (11&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x3283c; + run_32800(); return; + } + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 8468; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; + return; + case 0x322bc: + r4 = 6 << 16; + r4 = r4 + 17896; + r31=0x322cc; + pc=0x2a200; + run_2a000(); return; + case 0x322cc: + if(r2 == r0) { + pc=0x322fc; + continue; + } + case 0x322d4: + r2 = r0 + 1; + case 0x322d8: + r31= page[(r29+172)>>>2]; + r20= page[(r29+168)>>>2]; + r19= page[(r29+164)>>>2]; + r18= page[(r29+160)>>>2]; + r17= page[(r29+156)>>>2]; + r16= page[(r29+152)>>>2]; + r29 = r29 + 176; + pc=r31; + return; + case 0x322fc: + r4 = 6 << 16; + r4 = r4 + 20376; + r31=0x3230c; + pc=0x2a200; + run_2a000(); return; + case 0x3230c: + if(r2 != r0) { + pc=0x322d4; + continue; + } + r4 = 6 << 16; + r4 = r4 + 21396; + r31=0x32324; + pc=0x2a200; + run_2a000(); return; + case 0x32324: + if(r2 != r0) { + pc=0x322d4; + continue; + } + r4 = 6 << 16; + r4 = r4 + 19716; + r31=0x3233c; + pc=0x2a200; + run_2a000(); return; + case 0x3233c: + if(r2 != r0) { + pc=0x322d4; + continue; + } + r4 = 6 << 16; + r4 = r4 + 17796; + r31=0x32354; + pc=0x2a200; + run_2a000(); return; + case 0x32354: + pc=0x322d8; + continue; + case 0x3235c: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x3236c; + pc=0x1a800; + run_1a800(); return; + case 0x3236c: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x3238c; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x3238c; + pc=0x21200; + run_21000(); return; + case 0x3238c: + r5 = r29 + 24; + r6 = r0 + 24; + r4 = r29 + 120; + r31=0x323a0; + pc=0x56fe0; + run_56800(); return; + case 0x323a0: + r4 = r29 + 120; + r31=0x323ac; + pc=0x42e00; + run_42800(); return; + case 0x323ac: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x323bc; + return; + case 0x323bc: + r4= page[(r29+128)>>>2]; + r31=0x323c8; + pc=0x21c00; + run_21800(); return; + case 0x323c8: + r31=0x323d0; + pc=0x24000; + run_24000(); return; + case 0x323d0: + pc=0x322d4; + continue; + case 0x323d8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x32c64; + run_32800(); return; + } + case 0x323e8: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x32c4c; + run_32800(); return; + } + r18 = r0 + 1; + r16 = r0 + r0; + case 0x323fc: + r4 = r29 + 120; + r31=0x32408; + pc=0x29400; + run_29000(); return; + case 0x32408: + r4 = r29 + 120; + r31=0x32414; + pc=0x42c00; + run_42800(); return; + case 0x32414: + r31=0x3241c; + pc=0x27c00; + run_27800(); return; + case 0x3241c: + if(r2 == r0) { + pc=0x32548; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 35; + if(r3 == r2) { + pc=0x32d04; + run_32800(); return; + } + case 0x32434: + r4 = r29 + 16; + r31=0x32440; + pc=0x29400; + run_29000(); return; + case 0x32440: + r4 = r29 + 16; + r31=0x3244c; + pc=0x42c00; + run_42800(); return; + case 0x3244c: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x3245c; + return; + case 0x3245c: + r4= page[(r29+24)>>>2]; + r31=0x32468; + pc=0x21c00; + run_21800(); return; + case 0x32468: + r4= page[(r29+128)>>>2]; + r31=0x32474; + pc=0x21c00; + run_21800(); return; + case 0x32474: + if(r16 == r0) { + pc=0x323c8; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x32490; + pc=0x1fc00; + run_1f800(); return; + case 0x32490: + r31=0x32498; + pc=0x24000; + run_24000(); return; + case 0x32498: + pc=0x322d4; + continue; + case 0x324a0: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x324b0; + return; + case 0x324b0: + r4 = r0 + 3; + r31=0x324bc; + pc=0x29600; + run_29000(); return; + case 0x324bc: + pc=0x322d4; + continue; + case 0x324c4: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x324d4; + return; + case 0x324d4: + r4 = r0 + 2; + r31=0x324e0; + pc=0x29600; + run_29000(); return; + case 0x324e0: + pc=0x322d4; + continue; + case 0x324e8: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x324f8; + pc=0x1a800; + run_1a800(); return; + case 0x324f8: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x32518; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x32518; + pc=0x21200; + run_21000(); return; + case 0x32518: + r4 = r29 + 120; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x3252c; + pc=0x56fe0; + run_56800(); return; + case 0x3252c: + r4 = r29 + 120; + r31=0x32538; + pc=0x42e00; + run_42800(); return; + case 0x32538: + r31=0x32540; + pc=0x27c00; + run_27800(); return; + case 0x32540: + if(r2 != r0) { + pc=0x32858; + run_32800(); return; + } + case 0x32548: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x3255c; + pc=0x1fc00; + run_1f800(); return; + case 0x3255c: + pc=0x322d4; + continue; + case 0x32564: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x32574; + return; + case 0x32574: + r4 = r0 + 2; + r31=0x32580; + pc=0x29800; + run_29800(); return; + case 0x32580: + pc=0x322d4; + continue; + case 0x32588: + r2 = r0 + 248; + if(r17 == r2) { + pc=0x32890; + run_32800(); return; + } + case 0x32594: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x325a4; + return; + case 0x325a4: + r31=0x325ac; + pc=0x24000; + run_24000(); return; + case 0x325ac: + pc=0x322d4; + continue; + case 0x325b4: + r4 = r17 + r0; + r31=0x325c0; + pc=0x29e00; + run_29800(); return; + case 0x325c0: + pc=0x322d4; + continue; + case 0x325c8: + r31=0x325d0; + pc=0x27e00; + run_27800(); return; + case 0x325d0: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r5 = r0 + 32; + r19 = r2 + r0; + if(r3 == r5) { + pc=0x32c78; + run_32800(); return; + } + case 0x325e4: + r5 = r0 + 35; + if(r3 == r5) { + pc=0x329b0; + run_32800(); return; + } + r2 = r0 + 91; + if(r3 == r2) { + pc=0x32934; + run_32800(); return; + } + if(r3 == r0) { + pc=0x328f8; + run_32800(); return; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x32618; + pc=0x1a800; + run_1a800(); return; + case 0x32618: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x3262c; + pc=0x56fe0; + run_56800(); return; + case 0x3262c: + r4 = r18 + r0; + r31=0x32638; + pc=0x42e00; + run_42800(); return; + case 0x32638: + r20= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; + r20 = r20 << 2; + if(r2 != r0) { + pc=0x32dbc; + run_32800(); return; + } + case 0x32650: + r31=0x32658; + pc=0x29200; + run_29000(); return; + case 0x32658: + r2 = r2 << 7; + r20 = r2 | r20; + case 0x32660: + r31=0x32668; + pc=0x24000; + run_24000(); return; + case 0x32668: + r2 = r0 + 2; + if(r20 == r2) { + pc=0x329f4; + run_32800(); return; + } + r2 = (r20&0xffffffffL) < (3&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x328c8; + run_32800(); return; + } + r2 = r0 + 256; + if(r20 == r2) { + pc=0x32c24; + run_32800(); return; + } + r2 = r0 + 384; + if(r20 != r2) { + pc=0x328dc; + run_32800(); return; + } + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8736; + case 0x326a4: + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r4 = r19 + r0; + r5 = r18 + r0; + r31=0x326bc; + pc=0x29a00; + run_29800(); return; + case 0x326bc: + pc=0x322d4; + continue; + case 0x326c4: + r31=0x326cc; + pc=0x27e00; + run_27800(); return; + case 0x326cc: + page[(r29+144)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x32c38; + run_32800(); return; + } + case 0x326e0: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x32b10; + run_32800(); return; + } + r3 = r0 + 91; + if(r2 == r3) { + pc=0x32b90; + run_32800(); return; + } + if(r2 == r0) { + pc=0x32b00; + run_32800(); return; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x32714; + pc=0x1a800; + run_1a800(); return; + case 0x32714: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x32728; + pc=0x56fe0; + run_56800(); return; + case 0x32728: + r4 = r18 + r0; + r31=0x32734; + pc=0x42e00; + run_42800(); return; + case 0x32734: + r19= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r19 = ((r0 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; + r19 = r19 << 2; + if(r2 != r0) { + pc=0x32e4c; + run_32800(); return; + } + case 0x3274c: + r31=0x32754; + pc=0x29200; + run_29000(); return; + case 0x32754: + r2 = r2 << 7; + r19 = r2 | r19; + case 0x3275c: + r31=0x32764; + pc=0x24000; + run_24000(); return; + case 0x32764: + r2 = r0 + 256; + if(r19 == r2) { + pc=0x32e38; + run_32800(); return; + } + r2 = (r19&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x32c8c; + run_32800(); return; + } + r2 = r0 + 392; + if(r19 == r2) { + pc=0x32e88; + run_32800(); return; + } + r2 = (r19&0xffffffffL) < (393&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x32e98; + run_32800(); return; + } + r2 = r0 + 516; + if(r19 == r2) { + pc=0x32d54; + run_32800(); return; + } + r2 = r0 + 520; + if(r19 == r2) { + pc=0x32d18; + run_32800(); return; + } + r2 = r0 + 404; + if(r19 != r2) { + pc=0x328dc; + run_32800(); return; + } + r2 = 6 << 16; + r2 = r2 + 9360; + case 0x327c0: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x327d8; + pc=0x29a00; + run_29800(); return; + case 0x327d8: + pc=0x322d4; + continue; + case 0x327e0: + r5 = 6 << 16; + r4 = r29 + 16; + r5 = r5 + 6828; + r6 = r17 + r0; + r31=0x327f8; + pc=0x50c00; + run_50800(); return; + case 0x327f8: + r4 = r0 + -2; + r5 = r29 + 16; + case 0x32800: + pc=0x32800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_32800() throws ExecutionException { /* 0x32800 - 0x33000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x32800: + r31=0x32808; + pc=0x1fc00; + run_1f800(); return; + case 0x32808: + pc=0x322d4; + run_32000(); return; + case 0x32810: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x32820; + return; + case 0x32820: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x32830; + return; + case 0x32830: + r2= page[(r29+148)>>>2]; + pc=0x3228c; + run_32000(); return; + case 0x3283c: + r4 = 6 << 16; + r4 = r4 + 6908; + r5 = r17 + r0; + r31=0x32850; + pc=0x21400; + run_21000(); return; + case 0x32850: + pc=0x322d4; + run_32000(); return; + case 0x32858: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x32868; + return; + case 0x32868: + r4= page[(r29+128)>>>2]; + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x3287c; + return; + case 0x3287c: + r4 = r0 + 3; + r31=0x32888; + pc=0x29800; + run_29800(); return; + case 0x32888: + pc=0x322d4; + run_32000(); return; + case 0x32890: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 16; + if(r2 == r0) { + pc=0x32594; + run_32000(); return; + } + r4 = 6 << 16; + r4 = r4 + 6768; + r31=0x328c0; + pc=0x21200; + run_21000(); return; + case 0x328c0: + pc=0x32594; + run_32000(); return; + case 0x328c8: + if(r20 == r0) { + pc=0x3299c; + continue; + } + r2 = r0 + 1; + if(r20 == r2) { + pc=0x32900; + continue; + } + case 0x328dc: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 8592; + r31=0x328f0; + pc=0x1fc00; + run_1f800(); return; + case 0x328f0: + pc=0x322d4; + run_32000(); return; + case 0x328f8: + r31=0x32900; + pc=0x24000; + run_24000(); return; + case 0x32900: + r2 = 6 << 16; + r2 = r2 + 9072; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 == r0) { + pc=0x328dc; + continue; + } + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x3292c; + return; + case 0x3292c: + pc=0x322d4; + run_32000(); return; + case 0x32934: + r31=0x3293c; + pc=0x23000; + run_23000(); return; + case 0x3293c: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x32950; + pc=0x1a800; + run_1a800(); return; + case 0x32950: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x32964; + pc=0x56fe0; + run_56800(); return; + case 0x32964: + r4 = r18 + r0; + r31=0x32970; + pc=0x42e00; + run_42800(); return; + case 0x32970: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x32df8; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x32994; + pc=0x1fc00; + run_1f800(); return; + case 0x32994: + r31=0x3299c; + pc=0x24000; + run_24000(); return; + case 0x3299c: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8928; + pc=0x326a4; + run_32000(); return; + case 0x329b0: + r31=0x329b8; + pc=0x23000; + run_23000(); return; + case 0x329b8: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x329cc; + pc=0x1a800; + run_1a800(); return; + case 0x329cc: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x329e0; + pc=0x56fe0; + run_56800(); return; + case 0x329e0: + r4 = r18 + r0; + r31=0x329ec; + pc=0x42c00; + run_42800(); return; + case 0x329ec: + r31=0x329f4; + pc=0x24000; + run_24000(); return; + case 0x329f4: + r2 = 6 << 16; + r2 = r2 + 9024; + r17 = r17 + r2; + r5 = r16 & 768; + r2 = r0 + 256; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r17 = tmp; + if(r5 == r2) { + pc=0x32f20; + continue; + } + r2 = (r5&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x32eec; + continue; + } + r2 = r0 + 512; + if(r5 == r2) { + pc=0x32f30; + continue; + } + r2 = r0 + 768; + if(r5 != r2) { + pc=0x32f00; + continue; + } + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+40)>>>2]; + case 0x32a44: + r3= page[(r16+31424)>>>2]; + r3= page[(r3+4)>>>2]; + r3 = r3 & 2; + if(r3 == r0) { + pc=0x32a7c; + continue; + } + if(r19 != r0) { + pc=0x32a74; + continue; + } + r19 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + r2 = r0 + 2; + r19 = r2 - r19; + case 0x32a74: + r2 = r17 << 8; + r17 = r2 | r17; + case 0x32a7c: + r4 = r19 + r0; + r5 = r18 + r0; + r6 = r17 + r0; + r31=0x32a90; + pc=0x29a00; + run_29800(); return; + case 0x32a90: + r2= page[(r16+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 4; + if(r2 == r0) { + pc=0x322d4; + run_32000(); return; + } + r3= page[(r29+120)>>>2]; + r2 = r0 + 1; + if(r3 != r2) { + pc=0x322d4; + run_32000(); return; + } + r2= page[(r29+128)>>>2]; + if(r2 == r0) { + pc=0x322d4; + run_32000(); return; + } + r2 = r0 + 139; + if(r17 == r2) { + pc=0x32f64; + continue; + } + r2 = r0 + 171; + if(r17 != r2) { + pc=0x322d4; + run_32000(); return; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6720; + r31=0x32af8; + pc=0x1fc00; + run_1f800(); return; + case 0x32af8: + pc=0x322d4; + run_32000(); return; + case 0x32b00: + r31=0x32b08; + pc=0x24000; + run_24000(); return; + case 0x32b08: + pc=0x328dc; + continue; + case 0x32b10: + r31=0x32b18; + pc=0x23000; + run_23000(); return; + case 0x32b18: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x32b2c; + pc=0x1a800; + run_1a800(); return; + case 0x32b2c: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x32b40; + pc=0x56fe0; + run_56800(); return; + case 0x32b40: + r4 = r18 + r0; + r31=0x32b4c; + pc=0x42c00; + run_42800(); return; + case 0x32b4c: + r31=0x32b54; + pc=0x24000; + run_24000(); return; + case 0x32b54: + r2 = 6 << 16; + r2 = r2 + 10240; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r5 = tmp; + r4 = r29 + 144; + r6 = r16 & 768; + r31=0x32b74; + pc=0x28e00; + run_28800(); return; + case 0x32b74: + r4= page[(r29+144)>>>2]; + r5 = r18 + r0; + r6 = r2 + r0; + r31=0x32b88; + pc=0x29a00; + run_29800(); return; + case 0x32b88: + pc=0x322d4; + run_32000(); return; + case 0x32b90: + r31=0x32b98; + pc=0x23000; + run_23000(); return; + case 0x32b98: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x32bac; + pc=0x1a800; + run_1a800(); return; + case 0x32bac: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x32bc0; + pc=0x56fe0; + run_56800(); return; + case 0x32bc0: + r4 = r18 + r0; + r31=0x32bcc; + pc=0x42e00; + run_42800(); return; + case 0x32bcc: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x32e18; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x32bf0; + pc=0x1fc00; + run_1f800(); return; + case 0x32bf0: + r31=0x32bf8; + pc=0x24000; + run_24000(); return; + case 0x32bf8: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 10008; + case 0x32c04: + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + r6= page[(r2+0)>>>2]; + r5 = r18 + r0; + r31=0x32c1c; + pc=0x29a00; + run_29800(); return; + case 0x32c1c: + pc=0x322d4; + run_32000(); return; + case 0x32c24: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8832; + pc=0x326a4; + run_32000(); return; + case 0x32c38: + r31=0x32c40; + pc=0x23000; + run_23000(); return; + case 0x32c40: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x326e0; + run_32000(); return; + case 0x32c4c: + r31=0x32c54; + pc=0x23000; + run_23000(); return; + case 0x32c54: + r18 = r0 + r0; + r16 = r0 + 1; + pc=0x323fc; + run_32000(); return; + case 0x32c64: + r31=0x32c6c; + pc=0x23000; + run_23000(); return; + case 0x32c6c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x323e8; + run_32000(); return; + case 0x32c78: + r31=0x32c80; + pc=0x23000; + run_23000(); return; + case 0x32c80: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + pc=0x325e4; + run_32000(); return; + case 0x32c8c: + r2 = r0 + 4; + if(r19 == r2) { + pc=0x32dac; + continue; + } + r2 = (r19&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x32f80; + continue; + } + r2 = r0 + 36; + if(r19 == r2) { + pc=0x32d9c; + continue; + } + r2 = r0 + 128; + if(r19 == r2) { + pc=0x32d8c; + continue; + } + r2 = r0 + 8; + if(r19 != r2) { + pc=0x328dc; + continue; + } + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x32ce4; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x327c0; + run_32000(); return; + case 0x32ce4: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x32cf4; + return; + case 0x32cf4: + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x327c0; + run_32000(); return; + case 0x32d04: + r31=0x32d0c; + pc=0x23000; + run_23000(); return; + case 0x32d0c: + r16 = r18 + r0; + pc=0x32434; + run_32000(); return; + case 0x32d18: + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x32d34; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x327c0; + run_32000(); return; + case 0x32d34: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x32d44; + return; + case 0x32d44: + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x327c0; + run_32000(); return; + case 0x32d54: + r2 = 6 << 16; + r2 = r2 + 9180; + case 0x32d5c: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x32d74; + pc=0x29a00; + run_29800(); return; + case 0x32d74: + r4= page[(r29+120)>>>2]; + r5 = r29 + 128; + r31=0x32d84; + pc=0x29000; + run_29000(); return; + case 0x32d84: + pc=0x322d4; + run_32000(); return; + case 0x32d8c: + r2 = 6 << 16; + r2 = r2 + 9420; + pc=0x327c0; + run_32000(); return; + case 0x32d9c: + r2 = 6 << 16; + r2 = r2 + 9600; + pc=0x327c0; + run_32000(); return; + case 0x32dac: + r2 = 6 << 16; + r2 = r2 + 9480; + pc=0x32d5c; + continue; + case 0x32dbc: + r31=0x32dc4; + pc=0x29200; + run_29000(); return; + case 0x32dc4: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r20 = r20 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x32f44; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x32df0; + pc=0x1fc00; + run_1f800(); return; + case 0x32df0: + pc=0x32650; + run_32000(); return; + case 0x32df8: + r31=0x32e00; + pc=0x23000; + run_23000(); return; + case 0x32e00: + r31=0x32e08; + pc=0x29200; + run_29000(); return; + case 0x32e08: + r2 = r2 << 7; + r20 = r2 | 8; + pc=0x32660; + run_32000(); return; + case 0x32e18: + r31=0x32e20; + pc=0x23000; + run_23000(); return; + case 0x32e20: + r31=0x32e28; + pc=0x29200; + run_29000(); return; + case 0x32e28: + r2 = r2 << 7; + r19 = r2 | 8; + pc=0x3275c; + run_32000(); return; + case 0x32e38: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 9776; + pc=0x32c04; + continue; + case 0x32e4c: + r31=0x32e54; + pc=0x29200; + run_29000(); return; + case 0x32e54: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r19 = r19 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x32f54; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x32e80; + pc=0x1fc00; + run_1f800(); return; + case 0x32e80: + pc=0x3274c; + run_32000(); return; + case 0x32e88: + r2 = 6 << 16; + r2 = r2 + 9240; + pc=0x327c0; + run_32000(); return; + case 0x32e98: + r2 = r0 + 384; + if(r19 == r2) { + pc=0x32ec0; + continue; + } + r2 = r0 + 388; + if(r19 != r2) { + pc=0x328dc; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9540; + pc=0x32d5c; + continue; + case 0x32ec0: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 9660; + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r5 = r18 + r0; + r31=0x32ee4; + pc=0x29a00; + run_29800(); return; + case 0x32ee4: + pc=0x322d4; + run_32000(); return; + case 0x32eec: + if(r5 != r0) { + pc=0x32f00; + continue; + } + r16 = 6 << 16; + pc=0x32a7c; + continue; + case 0x32f00: + r4 = 6 << 16; + r4 = r4 + 6300; + r31=0x32f10; + pc=0x21400; + run_21000(); return; + case 0x32f10: + r16 = 6 << 16; + r2 = r0 + r0; + pc=0x32a44; + continue; + case 0x32f20: + r17 = r17 << 8; + r16 = 6 << 16; + pc=0x32a7c; + continue; + case 0x32f30: + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+36)>>>2]; + pc=0x32a44; + continue; + case 0x32f44: + r31=0x32f4c; + pc=0x23000; + run_23000(); return; + case 0x32f4c: + pc=0x32650; + run_32000(); return; + case 0x32f54: + r31=0x32f5c; + pc=0x23000; + run_23000(); return; + case 0x32f5c: + pc=0x3274c; + run_32000(); return; + case 0x32f64: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6672; + r31=0x32f78; + pc=0x1fc00; + run_1f800(); return; + case 0x32f78: + pc=0x322d4; + run_32000(); return; + case 0x32f80: + if(r19 == r0) { + pc=0x32bf8; + continue; + } + r2 = r0 + 2; + if(r19 != r2) { + pc=0x328dc; + continue; + } + pc=0x32b54; + continue; + case 0x33000: + pc=0x33000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_33000() throws ExecutionException { /* 0x33000 - 0x33800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x33000: + r2 = r0 + 3; + if(r4 == r2) { + pc=0x33018; + continue; + } + r2 = r0 + r0; + pc=r31; + return; + case 0x33018: + r29 = r29 + -176; + r5 = 6 << 16; + page[(r29+152)>>>2] = r16; + r16 = 6 << 16; + r4 = r16 + 22536; + r5 = r5 + 17104; + page[(r29+172)>>>2] = r31; + page[(r29+168)>>>2] = r20; + page[(r29+164)>>>2] = r19; + page[(r29+160)>>>2] = r18; + page[(r29+156)>>>2] = r17; + r31=0x3304c; + pc=0x1cc00; + run_1c800(); return; + case 0x3304c: + r4 = 6 << 16; + r4 = r4 + 18816; + r5 = r29 + 148; + r6 = r16 + 22536; + r31=0x33064; + pc=0x42400; + run_42000(); return; + case 0x33064: + if(r2 == r0) { + pc=0x330b8; + continue; + } + r16= page[(r29+148)>>>2]; + r2 = r16 & 1024; + r17 = r16 & 255; + if(r2 != r0) { + pc=0x335dc; + continue; + } + r2 = r16 + r0; + case 0x33088: + r2 = r2 >> 12; + r3 = (r2&0xffffffffL) < (11&0xffffffffL) ? 1 : 0; + if(r3 == r0) { + pc=0x33608; + continue; + } + r3 = 6 << 16; + r2 = r2 << 2; + r3 = r3 + 8512; + r2 = r3 + r2; + r2= page[(r2+0)>>>2]; + pc=r2; + return; + case 0x330b8: + r4 = 6 << 16; + r4 = r4 + 20376; + r31=0x330c8; + pc=0x2a200; + run_2a000(); return; + case 0x330c8: + if(r2 == r0) { + pc=0x330f8; + continue; + } + case 0x330d0: + r2 = r0 + 1; + case 0x330d4: + r31= page[(r29+172)>>>2]; + r20= page[(r29+168)>>>2]; + r19= page[(r29+164)>>>2]; + r18= page[(r29+160)>>>2]; + r17= page[(r29+156)>>>2]; + r16= page[(r29+152)>>>2]; + r29 = r29 + 176; + pc=r31; + return; + case 0x330f8: + r4 = 6 << 16; + r4 = r4 + 21396; + r31=0x33108; + pc=0x2a200; + run_2a000(); return; + case 0x33108: + if(r2 != r0) { + pc=0x330d0; + continue; + } + r4 = 6 << 16; + r4 = r4 + 19656; + r31=0x33120; + pc=0x2a200; + run_2a000(); return; + case 0x33120: + pc=0x330d4; + continue; + case 0x33128: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x33138; + pc=0x1a800; + run_1a800(); return; + case 0x33138: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x33158; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x33158; + pc=0x21200; + run_21000(); return; + case 0x33158: + r5 = r29 + 24; + r6 = r0 + 24; + r4 = r29 + 120; + r31=0x3316c; + pc=0x56fe0; + run_56800(); return; + case 0x3316c: + r4 = r29 + 120; + r31=0x33178; + pc=0x42e00; + run_42800(); return; + case 0x33178: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x33188; + return; + case 0x33188: + r4= page[(r29+128)>>>2]; + r31=0x33194; + pc=0x21c00; + run_21800(); return; + case 0x33194: + r31=0x3319c; + pc=0x24000; + run_24000(); return; + case 0x3319c: + pc=0x330d0; + continue; + case 0x331a4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x33a30; + run_33800(); return; + } + case 0x331b4: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x33a18; + run_33800(); return; + } + r18 = r0 + 1; + r16 = r0 + r0; + case 0x331c8: + r4 = r29 + 120; + r31=0x331d4; + pc=0x29400; + run_29000(); return; + case 0x331d4: + r4 = r29 + 120; + r31=0x331e0; + pc=0x42c00; + run_42800(); return; + case 0x331e0: + r31=0x331e8; + pc=0x27c00; + run_27800(); return; + case 0x331e8: + if(r2 == r0) { + pc=0x33314; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 35; + if(r3 == r2) { + pc=0x33ad0; + run_33800(); return; + } + case 0x33200: + r4 = r29 + 16; + r31=0x3320c; + pc=0x29400; + run_29000(); return; + case 0x3320c: + r4 = r29 + 16; + r31=0x33218; + pc=0x42c00; + run_42800(); return; + case 0x33218: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x33228; + return; + case 0x33228: + r4= page[(r29+24)>>>2]; + r31=0x33234; + pc=0x21c00; + run_21800(); return; + case 0x33234: + r4= page[(r29+128)>>>2]; + r31=0x33240; + pc=0x21c00; + run_21800(); return; + case 0x33240: + if(r16 == r0) { + pc=0x33194; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x3325c; + pc=0x1fc00; + run_1f800(); return; + case 0x3325c: + r31=0x33264; + pc=0x24000; + run_24000(); return; + case 0x33264: + pc=0x330d0; + continue; + case 0x3326c: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x3327c; + return; + case 0x3327c: + r4 = r0 + 3; + r31=0x33288; + pc=0x29600; + run_29000(); return; + case 0x33288: + pc=0x330d0; + continue; + case 0x33290: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x332a0; + return; + case 0x332a0: + r4 = r0 + 2; + r31=0x332ac; + pc=0x29600; + run_29000(); return; + case 0x332ac: + pc=0x330d0; + continue; + case 0x332b4: + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x332c4; + pc=0x1a800; + run_1a800(); return; + case 0x332c4: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x332e4; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6372; + r31=0x332e4; + pc=0x21200; + run_21000(); return; + case 0x332e4: + r4 = r29 + 120; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x332f8; + pc=0x56fe0; + run_56800(); return; + case 0x332f8: + r4 = r29 + 120; + r31=0x33304; + pc=0x42e00; + run_42800(); return; + case 0x33304: + r31=0x3330c; + pc=0x27c00; + run_27800(); return; + case 0x3330c: + if(r2 != r0) { + pc=0x33624; + continue; + } + case 0x33314: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x33328; + pc=0x1fc00; + run_1f800(); return; + case 0x33328: + pc=0x330d0; + continue; + case 0x33330: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x33340; + return; + case 0x33340: + r4 = r0 + 2; + r31=0x3334c; + pc=0x29800; + run_29800(); return; + case 0x3334c: + pc=0x330d0; + continue; + case 0x33354: + r2 = r0 + 248; + if(r17 == r2) { + pc=0x3365c; + continue; + } + case 0x33360: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x33370; + return; + case 0x33370: + r31=0x33378; + pc=0x24000; + run_24000(); return; + case 0x33378: + pc=0x330d0; + continue; + case 0x33380: + r4 = r17 + r0; + r31=0x3338c; + pc=0x29e00; + run_29800(); return; + case 0x3338c: + pc=0x330d0; + continue; + case 0x33394: + r31=0x3339c; + pc=0x27e00; + run_27800(); return; + case 0x3339c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r5 = r0 + 32; + r19 = r2 + r0; + if(r3 == r5) { + pc=0x33a44; + run_33800(); return; + } + case 0x333b0: + r5 = r0 + 35; + if(r3 == r5) { + pc=0x3377c; + continue; + } + r2 = r0 + 91; + if(r3 == r2) { + pc=0x33700; + continue; + } + if(r3 == r0) { + pc=0x336c4; + continue; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x333e4; + pc=0x1a800; + run_1a800(); return; + case 0x333e4: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x333f8; + pc=0x56fe0; + run_56800(); return; + case 0x333f8: + r4 = r18 + r0; + r31=0x33404; + pc=0x42e00; + run_42800(); return; + case 0x33404: + r20= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r20 = ((r0 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; + r20 = r20 << 2; + if(r2 != r0) { + pc=0x33b88; + run_33800(); return; + } + case 0x3341c: + r31=0x33424; + pc=0x29200; + run_29000(); return; + case 0x33424: + r2 = r2 << 7; + r20 = r2 | r20; + case 0x3342c: + r31=0x33434; + pc=0x24000; + run_24000(); return; + case 0x33434: + r2 = r0 + 2; + if(r20 == r2) { + pc=0x337c0; + continue; + } + r2 = (r20&0xffffffffL) < (3&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x33694; + continue; + } + r2 = r0 + 256; + if(r20 == r2) { + pc=0x339f0; + run_33800(); return; + } + r2 = r0 + 384; + if(r20 != r2) { + pc=0x336a8; + continue; + } + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8736; + case 0x33470: + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r4 = r19 + r0; + r5 = r18 + r0; + r31=0x33488; + pc=0x29a00; + run_29800(); return; + case 0x33488: + pc=0x330d0; + continue; + case 0x33490: + r31=0x33498; + pc=0x27e00; + run_27800(); return; + case 0x33498: + page[(r29+144)>>>2] = r2; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x33a04; + run_33800(); return; + } + case 0x334ac: + r3 = r0 + 35; + if(r2 == r3) { + pc=0x338dc; + run_33800(); return; + } + r3 = r0 + 91; + if(r2 == r3) { + pc=0x3395c; + run_33800(); return; + } + if(r2 == r0) { + pc=0x338cc; + run_33800(); return; + } + r4 = r29 + 16; + r5 = r0 + 1; + r18 = r29 + 120; + r31=0x334e0; + pc=0x1a800; + run_1a800(); return; + case 0x334e0: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x334f4; + pc=0x56fe0; + run_56800(); return; + case 0x334f4: + r4 = r18 + r0; + r31=0x33500; + pc=0x42e00; + run_42800(); return; + case 0x33500: + r19= page[(r29+56)>>>2]; + r2= page[(r29+52)>>>2]; + r19 = ((r0 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; + r19 = r19 << 2; + if(r2 != r0) { + pc=0x33c18; + run_33800(); return; + } + case 0x33518: + r31=0x33520; + pc=0x29200; + run_29000(); return; + case 0x33520: + r2 = r2 << 7; + r19 = r2 | r19; + case 0x33528: + r31=0x33530; + pc=0x24000; + run_24000(); return; + case 0x33530: + r2 = r0 + 256; + if(r19 == r2) { + pc=0x33c04; + run_33800(); return; + } + r2 = (r19&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x33a58; + run_33800(); return; + } + r2 = r0 + 392; + if(r19 == r2) { + pc=0x33c54; + run_33800(); return; + } + r2 = (r19&0xffffffffL) < (393&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x33c64; + run_33800(); return; + } + r2 = r0 + 516; + if(r19 == r2) { + pc=0x33b20; + run_33800(); return; + } + r2 = r0 + 520; + if(r19 == r2) { + pc=0x33ae4; + run_33800(); return; + } + r2 = r0 + 404; + if(r19 != r2) { + pc=0x336a8; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9360; + case 0x3358c: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x335a4; + pc=0x29a00; + run_29800(); return; + case 0x335a4: + pc=0x330d0; + continue; + case 0x335ac: + r5 = 6 << 16; + r4 = r29 + 16; + r5 = r5 + 6828; + r6 = r17 + r0; + r31=0x335c4; + pc=0x50c00; + run_50800(); return; + case 0x335c4: + r4 = r0 + -2; + r5 = r29 + 16; + r31=0x335d4; + pc=0x1fc00; + run_1f800(); return; + case 0x335d4: + pc=0x330d0; + continue; + case 0x335dc: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x335ec; + return; + case 0x335ec: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 66; + pc=r2; + r31=0x335fc; + return; + case 0x335fc: + r2= page[(r29+148)>>>2]; + pc=0x33088; + continue; + case 0x33608: + r4 = 6 << 16; + r4 = r4 + 6908; + r5 = r17 + r0; + r31=0x3361c; + pc=0x21400; + run_21000(); return; + case 0x3361c: + pc=0x330d0; + continue; + case 0x33624: + r2= page[(r28+-31264)>>>2]; + r4 = r17 + r0; + pc=r2; + r31=0x33634; + return; + case 0x33634: + r4= page[(r29+128)>>>2]; + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x33648; + return; + case 0x33648: + r4 = r0 + 3; + r31=0x33654; + pc=0x29800; + run_29800(); return; + case 0x33654: + pc=0x330d0; + continue; + case 0x3365c: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 16; + if(r2 == r0) { + pc=0x33360; + continue; + } + r4 = 6 << 16; + r4 = r4 + 6768; + r31=0x3368c; + pc=0x21200; + run_21000(); return; + case 0x3368c: + pc=0x33360; + continue; + case 0x33694: + if(r20 == r0) { + pc=0x33768; + continue; + } + r2 = r0 + 1; + if(r20 == r2) { + pc=0x336cc; + continue; + } + case 0x336a8: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 8592; + r31=0x336bc; + pc=0x1fc00; + run_1f800(); return; + case 0x336bc: + pc=0x330d0; + continue; + case 0x336c4: + r31=0x336cc; + pc=0x24000; + run_24000(); return; + case 0x336cc: + r2 = 6 << 16; + r2 = r2 + 9072; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 == r0) { + pc=0x336a8; + continue; + } + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x336f8; + return; + case 0x336f8: + pc=0x330d0; + continue; + case 0x33700: + r31=0x33708; + pc=0x23000; + run_23000(); return; + case 0x33708: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x3371c; + pc=0x1a800; + run_1a800(); return; + case 0x3371c: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x33730; + pc=0x56fe0; + run_56800(); return; + case 0x33730: + r4 = r18 + r0; + r31=0x3373c; + pc=0x42e00; + run_42800(); return; + case 0x3373c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x33bc4; + run_33800(); return; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x33760; + pc=0x1fc00; + run_1f800(); return; + case 0x33760: + r31=0x33768; + pc=0x24000; + run_24000(); return; + case 0x33768: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8928; + pc=0x33470; + continue; + case 0x3377c: + r31=0x33784; + pc=0x23000; + run_23000(); return; + case 0x33784: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x33798; + pc=0x1a800; + run_1a800(); return; + case 0x33798: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x337ac; + pc=0x56fe0; + run_56800(); return; + case 0x337ac: + r4 = r18 + r0; + r31=0x337b8; + pc=0x42c00; + run_42800(); return; + case 0x337b8: + r31=0x337c0; + pc=0x24000; + run_24000(); return; + case 0x337c0: + r2 = 6 << 16; + r2 = r2 + 9024; + r17 = r17 + r2; + r5 = r16 & 768; + r2 = r0 + 256; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r17 = tmp; + if(r5 == r2) { + pc=0x33cec; + run_33800(); return; + } + r2 = (r5&0xffffffffL) < (257&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x33cb8; + run_33800(); return; + } + r2 = r0 + 512; + if(r5 == r2) { + pc=0x33cfc; + run_33800(); return; + } + r2 = r0 + 768; + if(r5 != r2) { + pc=0x33ccc; + run_33800(); return; + } + case 0x33800: + pc=0x33800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_33800() throws ExecutionException { /* 0x33800 - 0x34000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x33800: + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+40)>>>2]; + case 0x33810: + r3= page[(r16+31424)>>>2]; + r3= page[(r3+4)>>>2]; + r3 = r3 & 2; + if(r3 == r0) { + pc=0x33848; + continue; + } + if(r19 != r0) { + pc=0x33840; + continue; + } + r19 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + r2 = r0 + 2; + r19 = r2 - r19; + case 0x33840: + r2 = r17 << 8; + r17 = r2 | r17; + case 0x33848: + r4 = r19 + r0; + r5 = r18 + r0; + r6 = r17 + r0; + r31=0x3385c; + pc=0x29a00; + run_29800(); return; + case 0x3385c: + r2= page[(r16+31424)>>>2]; + r2= page[(r2+4)>>>2]; + r2 = r2 & 4; + if(r2 == r0) { + pc=0x330d0; + run_33000(); return; + } + r3= page[(r29+120)>>>2]; + r2 = r0 + 1; + if(r3 != r2) { + pc=0x330d0; + run_33000(); return; + } + r2= page[(r29+128)>>>2]; + if(r2 == r0) { + pc=0x330d0; + run_33000(); return; + } + r2 = r0 + 139; + if(r17 == r2) { + pc=0x33d4c; + continue; + } + r2 = r0 + 171; + if(r17 != r2) { + pc=0x330d0; + run_33000(); return; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6720; + r31=0x338c4; + pc=0x1fc00; + run_1f800(); return; + case 0x338c4: + pc=0x330d0; + run_33000(); return; + case 0x338cc: + r31=0x338d4; + pc=0x24000; + run_24000(); return; + case 0x338d4: + pc=0x336a8; + run_33000(); return; + case 0x338dc: + r31=0x338e4; + pc=0x23000; + run_23000(); return; + case 0x338e4: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x338f8; + pc=0x1a800; + run_1a800(); return; + case 0x338f8: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x3390c; + pc=0x56fe0; + run_56800(); return; + case 0x3390c: + r4 = r18 + r0; + r31=0x33918; + pc=0x42c00; + run_42800(); return; + case 0x33918: + r31=0x33920; + pc=0x24000; + run_24000(); return; + case 0x33920: + r2 = 6 << 16; + r2 = r2 + 10240; + r17 = r17 + r2; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r5 = tmp; + r4 = r29 + 144; + r6 = r16 & 768; + r31=0x33940; + pc=0x28e00; + run_28800(); return; + case 0x33940: + r4= page[(r29+144)>>>2]; + r5 = r18 + r0; + r6 = r2 + r0; + r31=0x33954; + pc=0x29a00; + run_29800(); return; + case 0x33954: + pc=0x330d0; + run_33000(); return; + case 0x3395c: + r31=0x33964; + pc=0x23000; + run_23000(); return; + case 0x33964: + r18 = r29 + 120; + r4 = r29 + 16; + r5 = r0 + r0; + r31=0x33978; + pc=0x1a800; + run_1a800(); return; + case 0x33978: + r4 = r18 + r0; + r5 = r29 + 24; + r6 = r0 + 24; + r31=0x3398c; + pc=0x56fe0; + run_56800(); return; + case 0x3398c: + r4 = r18 + r0; + r31=0x33998; + pc=0x42e00; + run_42800(); return; + case 0x33998: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 93; + if(r3 == r2) { + pc=0x33be4; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x339bc; + pc=0x1fc00; + run_1f800(); return; + case 0x339bc: + r31=0x339c4; + pc=0x24000; + run_24000(); return; + case 0x339c4: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 10008; + case 0x339d0: + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + r6= page[(r2+0)>>>2]; + r5 = r18 + r0; + r31=0x339e8; + pc=0x29a00; + run_29800(); return; + case 0x339e8: + pc=0x330d0; + run_33000(); return; + case 0x339f0: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 8832; + pc=0x33470; + run_33000(); return; + case 0x33a04: + r31=0x33a0c; + pc=0x23000; + run_23000(); return; + case 0x33a0c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x334ac; + run_33000(); return; + case 0x33a18: + r31=0x33a20; + pc=0x23000; + run_23000(); return; + case 0x33a20: + r18 = r0 + r0; + r16 = r0 + 1; + pc=0x331c8; + run_33000(); return; + case 0x33a30: + r31=0x33a38; + pc=0x23000; + run_23000(); return; + case 0x33a38: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x331b4; + run_33000(); return; + case 0x33a44: + r31=0x33a4c; + pc=0x23000; + run_23000(); return; + case 0x33a4c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + pc=0x333b0; + run_33000(); return; + case 0x33a58: + r2 = r0 + 4; + if(r19 == r2) { + pc=0x33b78; + continue; + } + r2 = (r19&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x33d30; + continue; + } + r2 = r0 + 36; + if(r19 == r2) { + pc=0x33b68; + continue; + } + r2 = r0 + 128; + if(r19 == r2) { + pc=0x33b58; + continue; + } + r2 = r0 + 8; + if(r19 != r2) { + pc=0x336a8; + run_33000(); return; + } + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x33ab0; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x3358c; + run_33000(); return; + case 0x33ab0: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x33ac0; + return; + case 0x33ac0: + r2 = 6 << 16; + r2 = r2 + 9300; + pc=0x3358c; + run_33000(); return; + case 0x33ad0: + r31=0x33ad8; + pc=0x23000; + run_23000(); return; + case 0x33ad8: + r16 = r18 + r0; + pc=0x33200; + run_33000(); return; + case 0x33ae4: + r16 = r16 & 2048; + if(r16 != r0) { + pc=0x33b00; + continue; + } + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x3358c; + run_33000(); return; + case 0x33b00: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + 234; + pc=r2; + r31=0x33b10; + return; + case 0x33b10: + r2 = 6 << 16; + r2 = r2 + 9120; + pc=0x3358c; + run_33000(); return; + case 0x33b20: + r2 = 6 << 16; + r2 = r2 + 9180; + case 0x33b28: + r17 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r17+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r6 = tmp; + r5 = r18 + r0; + r31=0x33b40; + pc=0x29a00; + run_29800(); return; + case 0x33b40: + r4= page[(r29+120)>>>2]; + r5 = r29 + 128; + r31=0x33b50; + pc=0x29000; + run_29000(); return; + case 0x33b50: + pc=0x330d0; + run_33000(); return; + case 0x33b58: + r2 = 6 << 16; + r2 = r2 + 9420; + pc=0x3358c; + run_33000(); return; + case 0x33b68: + r2 = 6 << 16; + r2 = r2 + 9600; + pc=0x3358c; + run_33000(); return; + case 0x33b78: + r2 = 6 << 16; + r2 = r2 + 9480; + pc=0x33b28; + continue; + case 0x33b88: + r31=0x33b90; + pc=0x29200; + run_29000(); return; + case 0x33b90: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r20 = r20 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x33d10; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x33bbc; + pc=0x1fc00; + run_1f800(); return; + case 0x33bbc: + pc=0x3341c; + run_33000(); return; + case 0x33bc4: + r31=0x33bcc; + pc=0x23000; + run_23000(); return; + case 0x33bcc: + r31=0x33bd4; + pc=0x29200; + run_29000(); return; + case 0x33bd4: + r2 = r2 << 7; + r20 = r2 | 8; + pc=0x3342c; + run_33000(); return; + case 0x33be4: + r31=0x33bec; + pc=0x23000; + run_23000(); return; + case 0x33bec: + r31=0x33bf4; + pc=0x29200; + run_29000(); return; + case 0x33bf4: + r2 = r2 << 7; + r19 = r2 | 8; + pc=0x33528; + run_33000(); return; + case 0x33c04: + r2 = 6 << 16; + r17 = r17 << 2; + r2 = r2 + 9776; + pc=0x339d0; + continue; + case 0x33c18: + r31=0x33c20; + pc=0x29200; + run_29000(); return; + case 0x33c20: + r2 = r2 << 4; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r19 = r19 | r2; + r2 = r0 + 41; + if(r3 == r2) { + pc=0x33d20; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x33c4c; + pc=0x1fc00; + run_1f800(); return; + case 0x33c4c: + pc=0x33518; + run_33000(); return; + case 0x33c54: + r2 = 6 << 16; + r2 = r2 + 9240; + pc=0x3358c; + run_33000(); return; + case 0x33c64: + r2 = r0 + 384; + if(r19 == r2) { + pc=0x33c8c; + continue; + } + r2 = r0 + 388; + if(r19 != r2) { + pc=0x336a8; + run_33000(); return; + } + r2 = 6 << 16; + r2 = r2 + 9540; + pc=0x33b28; + continue; + case 0x33c8c: + r2 = 6 << 16; + r17 = r17 << 1; + r2 = r2 + 9660; + r2 = r17 + r2; + r4= page[(r29+144)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r6 = tmp; + r5 = r18 + r0; + r31=0x33cb0; + pc=0x29a00; + run_29800(); return; + case 0x33cb0: + pc=0x330d0; + run_33000(); return; + case 0x33cb8: + if(r5 != r0) { + pc=0x33ccc; + continue; + } + r16 = 6 << 16; + pc=0x33848; + continue; + case 0x33ccc: + r4 = 6 << 16; + r4 = r4 + 6300; + r31=0x33cdc; + pc=0x21400; + run_21000(); return; + case 0x33cdc: + r16 = 6 << 16; + r2 = r0 + r0; + pc=0x33810; + continue; + case 0x33cec: + r17 = r17 << 8; + r16 = 6 << 16; + pc=0x33848; + continue; + case 0x33cfc: + r16 = 6 << 16; + r2 = r16 + 31424; + r2= page[(r2+36)>>>2]; + pc=0x33810; + continue; + case 0x33d10: + r31=0x33d18; + pc=0x23000; + run_23000(); return; + case 0x33d18: + pc=0x3341c; + run_33000(); return; + case 0x33d20: + r31=0x33d28; + pc=0x23000; + run_23000(); return; + case 0x33d28: + pc=0x33518; + run_33000(); return; + case 0x33d30: + if(r19 == r0) { + pc=0x339c4; + continue; + } + r2 = r0 + 2; + if(r19 != r2) { + pc=0x336a8; + run_33000(); return; + } + pc=0x33920; + continue; + case 0x33d4c: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 6672; + r31=0x33d60; + pc=0x1fc00; + run_1f800(); return; + case 0x33d60: + pc=0x330d0; + run_33000(); return; + case 0x33e00: + r29 = r29 + -40; + page[(r29+24)>>>2] = r18; + r18 = 6 << 16; + page[(r29+16)>>>2] = r16; + r16 = r18 + 30184; + page[(r29+20)>>>2] = r17; + r2= page[(r16+24)>>>2]; + r17= page[(r16+4)>>>2]; + page[(r29+28)>>>2] = r19; + r2 = r2 < r17 ? 1 : 0; + page[(r29+36)>>>2] = r31; + page[(r29+32)>>>2] = r20; + r19 = r4 + r0; + if(r2 != r0) { + pc=0x33f24; + continue; + } + r2 = r17 + r0; + case 0x33e40: + r3= page[(r16+8)>>>2]; + r3 = r2 < r3 ? 1 : 0; + if(r3 == r0) { + pc=0x33e58; + continue; + } + page[(r16+8)>>>2] = r2; + case 0x33e58: + r3= page[(r16+12)>>>2]; + r3 = r3 < r2 ? 1 : 0; + if(r3 == r0) { + pc=0x33e70; + continue; + } + page[(r16+12)>>>2] = r2; + case 0x33e70: + r3= page[(r28+-31340)>>>2]; + r5= page[(r3+0)>>>2]; + if(r5 == r0) { + pc=0x33f14; + continue; + } + r5= page[(r3+12)>>>2]; + if(r5 != r0) { + pc=0x33f08; + continue; + } + page[(r3+16)>>>2] = r2; + case 0x33e9c: + r4 = r19 << 24; + r6 = r5 + 1; + r4 = r4 >> 24; + page[(r3+12)>>>2] = r6; + r3 = r3 + r5; + addr=r3+1044; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x33eb4: + r3= page[(r18+30184)>>>2]; + r5 = r2 + 1; + r2 = r3 + r2; + addr=r16+48; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r3 = tmp; + page[(r16+4)>>>2] = r5; + r4 = r4 ^ r3; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2 = 6 << 16; + r2 = r2 + 31424; + r3= page[(r2+32)>>>2]; + r31= page[(r29+36)>>>2]; + r3 = r3 + 1; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + page[(r2+32)>>>2] = r3; + r29 = r29 + 40; + pc=r31; + return; + case 0x33f08: + r4 = (r5&0xffffffffL) < (9&0xffffffffL) ? 1 : 0; + if(r4 != r0) { + pc=0x33e9c; + continue; + } + case 0x33f14: + r4 = r19 << 24; + r4 = r4 >> 24; + pc=0x33eb4; + continue; + case 0x33f24: + r20 = 6 << 16; + r20 = r20 + 31340; + r2= page[(r20+60)>>>2]; + r2 = r17 < r2 ? 1 : 0; + if(r2 == r0) { + pc=0x33fd8; + continue; + } + case 0x33f40: + r2 = 6 << 16; + r2= page[(r2+31320)>>>2]; + if(r2 == r0) { + pc=0x33f60; + continue; + } + r2= page[(r16+4)>>>2]; + pc=0x33e40; + continue; + case 0x33f60: + r4= page[(r20+40)>>>2]; + r5 = 6 << 16; + r5 = r5 + 10324; + r31=0x33f74; + pc=0x1fc00; + run_1f800(); return; + case 0x33f74: + r4 = r17 + 1; + r3= page[(r16+32)>>>2]; + r17 = r17 + 2; + page[(r16+40)>>>2] = r17; + r2= page[(r3+8)>>>2]; + r5 = r4 < r2 ? 1 : 0; + if(r5 != r0) { + pc=0x33fb4; + continue; + } + case 0x33f98: + r3= page[(r3+0)>>>2]; + r2= page[(r3+8)>>>2]; + r5 = r4 < r2 ? 1 : 0; + if(r5 == r0) { + pc=0x33f98; + continue; + } + case 0x33fb4: + r4 = 6 << 16; + r4 = r4 + 30216; + if(r3 == r4) { + pc=0x33ff4; + continue; + } + r2 = r2 + -1; + page[(r16+24)>>>2] = r2; + case 0x33fcc: + r2= page[(r16+4)>>>2]; + pc=0x33e40; + continue; + case 0x33fd8: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 10300; + r31=0x33fec; + pc=0x1fc00; + run_1f800(); return; + case 0x33fec: + pc=0x33f40; + continue; + case 0x33ff4: + r2= page[(r20+60)>>>2]; + r2 = r2 + -1; + case 0x34000: + pc=0x34000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_34000() throws ExecutionException { /* 0x34000 - 0x34800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x34000: + page[(r16+24)>>>2] = r2; + pc=0x33fcc; + run_33800(); return; + case 0x34200: + r29 = r29 + -40; + r5 = 6 << 16; + r5 = r5 + 5060; + page[(r29+28)>>>2] = r19; + r19 = r4 + r0; + r4 = r0 + -2; + page[(r29+24)>>>2] = r18; + page[(r29+20)>>>2] = r17; + page[(r29+16)>>>2] = r16; + page[(r29+36)>>>2] = r31; + page[(r29+32)>>>2] = r20; + r18 = 6 << 16; + r31=0x34238; + pc=0x1fc00; + run_1f800(); return; + case 0x34238: + r2 = 3 << 16; + r2 = r2 + 15872; + r16 = r18 + 30184; + page[(r28+-31264)>>>2] = r2; + r17= page[(r16+4)>>>2]; + r2= page[(r16+24)>>>2]; + r2 = r2 < r17 ? 1 : 0; + if(r2 != r0) { + pc=0x34348; + continue; + } + r2 = r17 + r0; + case 0x34264: + r3= page[(r16+8)>>>2]; + r3 = r2 < r3 ? 1 : 0; + if(r3 == r0) { + pc=0x3427c; + continue; + } + page[(r16+8)>>>2] = r2; + case 0x3427c: + r3= page[(r16+12)>>>2]; + r3 = r3 < r2 ? 1 : 0; + if(r3 == r0) { + pc=0x34294; + continue; + } + page[(r16+12)>>>2] = r2; + case 0x34294: + r3= page[(r28+-31340)>>>2]; + r4= page[(r3+0)>>>2]; + if(r4 == r0) { + pc=0x34338; + continue; + } + r5= page[(r3+12)>>>2]; + if(r5 != r0) { + pc=0x3432c; + continue; + } + page[(r3+16)>>>2] = r2; + case 0x342c0: + r4 = r19 << 24; + r6 = r5 + 1; + r4 = r4 >> 24; + page[(r3+12)>>>2] = r6; + r3 = r3 + r5; + addr=r3+1044; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x342d8: + r3= page[(r18+30184)>>>2]; + r5 = r2 + 1; + r2 = r3 + r2; + addr=r16+48; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r3 = tmp; + page[(r16+4)>>>2] = r5; + r4 = r4 ^ r3; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2 = 6 << 16; + r2 = r2 + 31424; + r3= page[(r2+32)>>>2]; + r31= page[(r29+36)>>>2]; + r3 = r3 + 1; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + page[(r2+32)>>>2] = r3; + r29 = r29 + 40; + pc=r31; + return; + case 0x3432c: + r4 = (r5&0xffffffffL) < (9&0xffffffffL) ? 1 : 0; + if(r4 != r0) { + pc=0x342c0; + continue; + } + case 0x34338: + r4 = r19 << 24; + r4 = r4 >> 24; + pc=0x342d8; + continue; + case 0x34348: + r20 = 6 << 16; + r20 = r20 + 31340; + r2= page[(r20+60)>>>2]; + r2 = r17 < r2 ? 1 : 0; + if(r2 == r0) { + pc=0x343fc; + continue; + } + case 0x34364: + r2 = 6 << 16; + r2= page[(r2+31320)>>>2]; + if(r2 == r0) { + pc=0x34384; + continue; + } + r2= page[(r16+4)>>>2]; + pc=0x34264; + continue; + case 0x34384: + r4= page[(r20+40)>>>2]; + r5 = 6 << 16; + r5 = r5 + 10324; + r31=0x34398; + pc=0x1fc00; + run_1f800(); return; + case 0x34398: + r5 = r17 + 1; + r3= page[(r16+32)>>>2]; + r17 = r17 + 2; + page[(r16+40)>>>2] = r17; + r2= page[(r3+8)>>>2]; + r4 = r5 < r2 ? 1 : 0; + if(r4 != r0) { + pc=0x343d8; + continue; + } + case 0x343bc: + r3= page[(r3+0)>>>2]; + r2= page[(r3+8)>>>2]; + r4 = r5 < r2 ? 1 : 0; + if(r4 == r0) { + pc=0x343bc; + continue; + } + case 0x343d8: + r4 = 6 << 16; + r4 = r4 + 30216; + if(r3 == r4) { + pc=0x34418; + continue; + } + r2 = r2 + -1; + page[(r16+24)>>>2] = r2; + case 0x343f0: + r2= page[(r16+4)>>>2]; + pc=0x34264; + continue; + case 0x343fc: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 10300; + r31=0x34410; + pc=0x1fc00; + run_1f800(); return; + case 0x34410: + pc=0x34364; + continue; + case 0x34418: + r2= page[(r20+60)>>>2]; + r2 = r2 + -1; + page[(r16+24)>>>2] = r2; + pc=0x343f0; + continue; + case 0x34600: + r29 = r29 + -40; + page[(r29+28)>>>2] = r18; + page[(r29+36)>>>2] = r31; + page[(r29+32)>>>2] = r19; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + r18 = r4 + r0; + if(r4 <= 0) { + pc=0x346a0; + continue; + } + r2 = 3 << 16; + r3= page[(r28+-31264)>>>2]; + r2 = r2 + 16896; + if(r3 == r2) { + pc=0x347a0; + continue; + } + case 0x34638: + r16 = 6 << 16; + r16 = r16 + 30184; + r3= page[(r16+4)>>>2]; + r4= page[(r16+24)>>>2]; + r17 = r3 + r18; + r2 = r17 + -1; + r4 = r4 < r2 ? 1 : 0; + if(r4 != r0) { + pc=0x346cc; + continue; + } + case 0x3465c: + r4= page[(r16+8)>>>2]; + r4 = r3 < r4 ? 1 : 0; + if(r4 == r0) { + pc=0x34674; + continue; + } + page[(r16+8)>>>2] = r3; + case 0x34674: + r3= page[(r16+12)>>>2]; + r3 = r3 < r2 ? 1 : 0; + if(r3 != r0) { + pc=0x346c0; + continue; + } + case 0x34688: + r2 = 6 << 16; + r2 = r2 + 31424; + r3= page[(r2+32)>>>2]; + page[(r16+4)>>>2] = r17; + r18 = r3 + r18; + page[(r2+32)>>>2] = r18; + case 0x346a0: + r31= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 40; + pc=r31; + return; + case 0x346c0: + page[(r16+12)>>>2] = r2; + pc=0x34688; + continue; + case 0x346cc: + r19 = 6 << 16; + r19 = r19 + 31340; + r3= page[(r19+60)>>>2]; + r2 = r2 < r3 ? 1 : 0; + if(r2 == r0) { + pc=0x34784; + continue; + } + case 0x346e8: + r2 = 6 << 16; + r2= page[(r2+31320)>>>2]; + if(r2 == r0) { + pc=0x34714; + continue; + } + case 0x346fc: + r3= page[(r16+4)>>>2]; + r17 = r18 + r3; + r2 = r17 + -1; + pc=0x3465c; + continue; + case 0x34714: + r4= page[(r19+40)>>>2]; + r5 = 6 << 16; + r5 = r5 + 10324; + r31=0x34728; + pc=0x1fc00; + run_1f800(); return; + case 0x34728: + r3 = r17 + 1; + r2= page[(r16+32)>>>2]; + page[(r16+40)>>>2] = r3; + r3= page[(r2+8)>>>2]; + r4 = r17 < r3 ? 1 : 0; + if(r4 != r0) { + pc=0x34764; + continue; + } + case 0x34748: + r2= page[(r2+0)>>>2]; + r3= page[(r2+8)>>>2]; + r4 = r17 < r3 ? 1 : 0; + if(r4 == r0) { + pc=0x34748; + continue; + } + case 0x34764: + r4 = 6 << 16; + r4 = r4 + 30216; + if(r2 == r4) { + pc=0x347b8; + continue; + } + r3 = r3 + -1; + page[(r16+24)>>>2] = r3; + pc=0x346fc; + continue; + case 0x34784: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 10300; + r31=0x34798; + pc=0x1fc00; + run_1f800(); return; + case 0x34798: + pc=0x346e8; + continue; + case 0x347a0: + r4 = r0 + r0; + r31=0x347ac; + pc=0x34200; + continue; + case 0x347ac: + r18 = r18 + -1; + pc=0x34638; + continue; + case 0x347b8: + r2= page[(r19+60)>>>2]; + r3= page[(r16+4)>>>2]; + r2 = r2 + -1; + r17 = r18 + r3; + page[(r16+24)>>>2] = r2; + r2 = r17 + -1; + pc=0x3465c; + continue; + case 0x34800: + pc=0x34800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_34800() throws ExecutionException { /* 0x34800 - 0x35000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x34800: + r2 = 6 << 16; + r3 = r2 + 30184; + r6= page[(r3+16)>>>2]; + r29 = r29 + -24; + r5 = r4 << 24; + r5 = r5 >> 24; + page[(r29+20)>>>2] = r31; + page[(r29+16)>>>2] = r16; + if(r6 != r0) { + pc=0x3488c; + continue; + } + r4= page[(r2+30184)>>>2]; + r2 = 6 << 16; + r6= page[(r2+31400)>>>2]; + r16 = r0 + 1; + page[(r3+16)>>>2] = r16; + r31=0x34844; + pc=0x56ff0; + run_56800(); return; + case 0x34844: + r3 = 6 << 16; + r3 = r3 + 31320; + r2= page[(r3+4)>>>2]; + if(r2 != r0) { + pc=0x34874; + continue; + } + r31= page[(r29+20)>>>2]; + page[(r3+4)>>>2] = r16; + r16= page[(r29+16)>>>2]; + r29 = r29 + 24; + pc=r31; + return; + case 0x34874: + r31= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r2 = r0 + r0; + r29 = r29 + 24; + pc=r31; + return; + case 0x3488c: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 10372; + r31=0x348a0; + pc=0x1fc00; + run_1f800(); return; + case 0x348a0: + r31= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x34a00: + r2 = 3 << 16; + r3= page[(r28+-31264)>>>2]; + r2 = r2 + 16896; + if(r3 == r2) { + pc=0x34a34; + continue; + } + r2 = r0 + 1; + page[(r28+-31312)>>>2] = r2; + r2 = 6 << 16; + r2= page[(r2+30188)>>>2]; + page[(r28+-31316)>>>2] = r2; + pc=r31; + return; + case 0x34a34: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5060; + pc=0x1fc00; + run_1f800(); return; + case 0x34c00: + r2 = 3 << 16; + r3= page[(r28+-31264)>>>2]; + r2 = r2 + 16896; + if(r3 == r2) { + pc=0x34c34; + continue; + } + r2 = r0 + 1; + page[(r28+-31320)>>>2] = r2; + r2 = 6 << 16; + r2= page[(r2+30188)>>>2]; + page[(r28+-31324)>>>2] = r2; + pc=r31; + return; + case 0x34c34: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5060; + pc=0x1fc00; + run_1f800(); return; + case 0x34e00: + r29 = r29 + -32; + r4 = 6 << 16; + r6 = 6 << 16; + r4 = r4 + 22548; + r5 = r29 + 16; + r6 = r6 + 17104; + page[(r29+28)>>>2] = r31; + r31=0x34e24; + pc=0x42400; + run_42000(); return; + case 0x34e24: + if(r2 == r0) { + pc=0x34e48; + continue; + } + r2= page[(r29+16)>>>2]; + r31= page[(r29+28)>>>2]; + page[(r28+-31308)>>>2] = r2; + r2 = r0 + r0; + r29 = r29 + 32; + pc=r31; + return; + case 0x34e48: + r31= page[(r29+28)>>>2]; + r2 = r0 + 1; + r29 = r29 + 32; + pc=r31; + return; + case 0x35000: + pc=0x35000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_35000() throws ExecutionException { /* 0x35000 - 0x35800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x35000: + r2= page[(r28+-31308)>>>2]; + if(r2 != r0) { + pc=0x35024; + continue; + } + r2 = r0 + 2; + page[(r28+-31308)>>>2] = r2; + r2 = r0 + 1; + pc=r31; + return; + case 0x35024: + r2 = r0 + r0; + pc=r31; + return; + case 0x35200: + r2= page[(r28+-31404)>>>2]; + r29 = r29 + -24; + page[(r29+20)>>>2] = r31; + if(r2 == r0) { + pc=0x3523c; + continue; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 10400; + r31=0x35228; + pc=0x1fc00; + run_1f800(); return; + case 0x35228: + r31= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x3523c: + r4 = 6 << 16; + r4 = r4 + 17104; + r31=0x3524c; + pc=0x1c200; + run_1c000(); return; + case 0x3524c: + r31= page[(r29+20)>>>2]; + page[(r28+-31404)>>>2] = r2; + r2 = r0 + r0; + r29 = r29 + 24; + pc=r31; + return; + case 0x35400: + r29 = r29 + -32; + page[(r29+24)>>>2] = r17; + r17 = 6 << 16; + r17 = r17 + 31340; + r4= page[(r17+60)>>>2]; + page[(r29+20)>>>2] = r16; + page[(r29+28)>>>2] = r31; + r31=0x35424; + pc=0x20200; + run_20000(); return; + case 0x35424: + r5= page[(r17+64)>>>2]; + r16 = 6 << 16; + r3 = r0 + 256; + page[(r16+30184)>>>2] = r2; + if(r5 == r3) { + pc=0x35488; + continue; + } + r5 = r5 << 24; + r5 = r5 >> 24; + r3 = r0 + 1; + case 0x35448: + r6= page[(r17+60)>>>2]; + r16 = r16 + 30184; + r4 = r2 + r0; + page[(r16+16)>>>2] = r3; + r31=0x35460; + pc=0x56ff0; + run_56800(); return; + case 0x35460: + r31= page[(r29+28)>>>2]; + r2 = 6 << 16; + r2 = r2 + 30216; + r17= page[(r29+24)>>>2]; + page[(r16+32)>>>2] = r2; + page[(r16+36)>>>2] = r2; + r16= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x35488: + r5 = r0 + r0; + r3 = r0 + r0; + pc=0x35448; + continue; + case 0x35600: + r29 = r29 + -56; + page[(r29+40)>>>2] = r19; + r19 = 6 << 16; + r2 = r19 + 30184; + page[(r29+28)>>>2] = r16; + r3= page[(r2+12)>>>2]; + r16 = r4 + r0; + r4= page[(r2+8)>>>2]; + r2= page[(r28+-31312)>>>2]; + page[(r29+52)>>>2] = r31; + page[(r29+48)>>>2] = r21; + page[(r29+44)>>>2] = r20; + page[(r29+36)>>>2] = r18; + page[(r29+32)>>>2] = r17; + if(r2 == r0) { + pc=0x35644; + continue; + } + r4= page[(r28+-31316)>>>2]; + case 0x35644: + r2= page[(r28+-31320)>>>2]; + if(r2 != r0) { + pc=0x3588c; + run_35800(); return; + } + r2 = 6 << 16; + r2 = r2 + 31340; + r17= page[(r2+72)>>>2]; + r6 = r3 + 1; + r3 = r0 + -1; + if(r17 == r3) { + pc=0x358a8; + run_35800(); return; + } + case 0x35670: + r5= page[(r2+76)>>>2]; + r3 = r0 + -1; + if(r5 == r3) { + pc=0x358bc; + run_35800(); return; + } + case 0x35680: + r3 = r17 < r5 ? 1 : 0; + if(r3 == r0) { + pc=0x35764; + continue; + } + r2= page[(r2+4)>>>2]; + r18 = r5 - r17; + r21 = r17 + r0; + r20 = r18 + r0; + if(r2 != r0) { + pc=0x35780; + continue; + } + case 0x356a4: + r2= page[(r28+-31308)>>>2]; + r3 = r0 + 1; + if(r2 == r3) { + pc=0x357b4; + continue; + } + case 0x356b4: + r3 = r0 + 2; + if(r2 != r3) { + pc=0x35728; + continue; + } + r2= page[(r16+8)>>>2]; + r2 = r2 + -1; + page[(r16+8)>>>2] = r2; + if(r2 < 0) { + pc=0x35a60; + run_35800(); return; + } + r2= page[(r16+0)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2= page[(r16+0)>>>2]; + case 0x356ec: + r2 = r2 + 1; + page[(r16+0)>>>2] = r2; + case 0x356f4: + r2= page[(r16+8)>>>2]; + r2 = r2 + -1; + page[(r16+8)>>>2] = r2; + if(r2 < 0) { + pc=0x35a18; + run_35800(); return; + } + r2= page[(r16+0)>>>2]; + r17 = r17 >> 8; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2= page[(r16+0)>>>2]; + case 0x35720: + r2 = r2 + 1; + page[(r16+0)>>>2] = r2; + case 0x35728: + r4= page[(r19+30184)>>>2]; + r31= page[(r29+52)>>>2]; + r19= page[(r29+40)>>>2]; + r18= page[(r29+36)>>>2]; + r17= page[(r29+32)>>>2]; + r4 = r4 + r21; + r5 = r20 + r0; + r21= page[(r29+48)>>>2]; + r20= page[(r29+44)>>>2]; + r7 = r16 + r0; + r16= page[(r29+28)>>>2]; + r6 = r0 + 1; + r29 = r29 + 56; + pc=0x4d600; + run_4d000(); return; + case 0x35764: + r2= page[(r2+4)>>>2]; + r20 = r0 + r0; + r21 = r0 + r0; + r18 = r0 + r0; + r17 = r0 + r0; + if(r2 == r0) { + pc=0x356a4; + continue; + } + case 0x35780: + r2 = r17 + r18; + r4 = 6 << 16; + page[(r29+16)>>>2] = r2; + r4 = r4 + 10428; + r5 = r18 + r0; + r6 = r18 + r0; + r7 = r17 + r0; + r31=0x357a4; + pc=0x4f200; + run_4f000(); return; + case 0x357a4: + r2= page[(r28+-31308)>>>2]; + r3 = r0 + 1; + if(r2 != r3) { + pc=0x356b4; + continue; + } + case 0x357b4: + r2= page[(r16+8)>>>2]; + r2 = r2 + -1; + page[(r16+8)>>>2] = r2; + if(r2 < 0) { + pc=0x359c4; + run_35800(); return; + } + r2= page[(r16+0)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2= page[(r16+0)>>>2]; + case 0x357e0: + r2 = r2 + 1; + page[(r16+0)>>>2] = r2; + case 0x357e8: + r2= page[(r16+8)>>>2]; + r2 = r2 + -1; + page[(r16+8)>>>2] = r2; + if(r2 < 0) { + pc=0x35970; + run_35800(); return; + } + case 0x35800: + pc=0x35800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_35800() throws ExecutionException { /* 0x35800 - 0x36000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x35800: + r2= page[(r16+0)>>>2]; + r17 = r17 >> 8; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2= page[(r16+0)>>>2]; + case 0x35814: + r2 = r2 + 1; + page[(r16+0)>>>2] = r2; + case 0x3581c: + r2= page[(r16+8)>>>2]; + r2 = r2 + -1; + page[(r16+8)>>>2] = r2; + if(r2 < 0) { + pc=0x3591c; + continue; + } + r2= page[(r16+0)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2= page[(r16+0)>>>2]; + case 0x35848: + r2 = r2 + 1; + page[(r16+0)>>>2] = r2; + case 0x35850: + r2= page[(r16+8)>>>2]; + r2 = r2 + -1; + page[(r16+8)>>>2] = r2; + if(r2 < 0) { + pc=0x358c8; + continue; + } + r2= page[(r16+0)>>>2]; + r18 = r18 >> 8; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2= page[(r16+0)>>>2]; + r2 = r2 + 1; + page[(r16+0)>>>2] = r2; + pc=0x35728; + run_35000(); return; + case 0x3588c: + r2 = 6 << 16; + r2 = r2 + 31340; + r17= page[(r2+72)>>>2]; + r3 = r0 + -1; + r6= page[(r28+-31324)>>>2]; + if(r17 != r3) { + pc=0x35670; + run_35000(); return; + } + case 0x358a8: + r5= page[(r2+76)>>>2]; + r3 = r0 + -1; + r17 = r4 + r0; + if(r5 != r3) { + pc=0x35680; + run_35000(); return; + } + case 0x358bc: + r5 = r6 + r0; + pc=0x35680; + run_35000(); return; + case 0x358c8: + r3= page[(r16+24)>>>2]; + r2 = r2 < r3 ? 1 : 0; + if(r2 != r0) { + pc=0x35b24; + continue; + } + r2= page[(r16+0)>>>2]; + r18 = r18 >> 8; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2= page[(r16+0)>>>2]; + r3 = r0 + 10; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 != r3) { + pc=0x35720; + run_35000(); return; + } + case 0x35900: + r4= page[(r28+-31512)>>>2]; + r5 = r0 + 10; + r6 = r16 + r0; + r31=0x35914; + pc=0x56a00; + run_56800(); return; + case 0x35914: + pc=0x35728; + run_35000(); return; + case 0x3591c: + r3= page[(r16+24)>>>2]; + r2 = r2 < r3 ? 1 : 0; + if(r2 != r0) { + pc=0x35ad0; + continue; + } + r2= page[(r16+0)>>>2]; + r3 = r0 + 10; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2= page[(r16+0)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 != r3) { + pc=0x35848; + continue; + } + r4= page[(r28+-31512)>>>2]; + r5 = r0 + 10; + r6 = r16 + r0; + r31=0x35968; + pc=0x56a00; + run_56800(); return; + case 0x35968: + pc=0x35850; + continue; + case 0x35970: + r3= page[(r16+24)>>>2]; + r2 = r2 < r3 ? 1 : 0; + if(r2 != r0) { + pc=0x35ab4; + continue; + } + r2= page[(r16+0)>>>2]; + r17 = r17 >> 8; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2= page[(r16+0)>>>2]; + r3 = r0 + 10; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 != r3) { + pc=0x35814; + continue; + } + r4= page[(r28+-31512)>>>2]; + r5 = r0 + 10; + r6 = r16 + r0; + r31=0x359bc; + pc=0x56a00; + run_56800(); return; + case 0x359bc: + pc=0x3581c; + continue; + case 0x359c4: + r3= page[(r16+24)>>>2]; + r2 = r2 < r3 ? 1 : 0; + if(r2 != r0) { + pc=0x35aec; + continue; + } + r2= page[(r16+0)>>>2]; + r3 = r0 + 10; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2= page[(r16+0)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 != r3) { + pc=0x357e0; + run_35000(); return; + } + r4= page[(r28+-31512)>>>2]; + r5 = r0 + 10; + r6 = r16 + r0; + r31=0x35a10; + pc=0x56a00; + run_56800(); return; + case 0x35a10: + pc=0x357e8; + run_35000(); return; + case 0x35a18: + r3= page[(r16+24)>>>2]; + r2 = r2 < r3 ? 1 : 0; + if(r2 != r0) { + pc=0x35b40; + continue; + } + r2= page[(r16+0)>>>2]; + r17 = r17 >> 8; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2= page[(r16+0)>>>2]; + r3 = r0 + 10; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 == r3) { + pc=0x35900; + continue; + } + r2 = r2 + 1; + page[(r16+0)>>>2] = r2; + pc=0x35728; + run_35000(); return; + case 0x35a60: + r3= page[(r16+24)>>>2]; + r2 = r2 < r3 ? 1 : 0; + if(r2 != r0) { + pc=0x35b08; + continue; + } + r2= page[(r16+0)>>>2]; + r3 = r0 + 10; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2= page[(r16+0)>>>2]; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + if(r4 != r3) { + pc=0x356ec; + run_35000(); return; + } + r4= page[(r28+-31512)>>>2]; + r5 = r0 + 10; + r6 = r16 + r0; + r31=0x35aac; + pc=0x56a00; + run_56800(); return; + case 0x35aac: + pc=0x356f4; + run_35000(); return; + case 0x35ab4: + r4= page[(r28+-31512)>>>2]; + r5 = r17 >> 8; + r6 = r16 + r0; + r31=0x35ac8; + pc=0x56a00; + run_56800(); return; + case 0x35ac8: + pc=0x3581c; + continue; + case 0x35ad0: + r4= page[(r28+-31512)>>>2]; + r5 = r18 & 255; + r6 = r16 + r0; + r31=0x35ae4; + pc=0x56a00; + run_56800(); return; + case 0x35ae4: + pc=0x35850; + continue; + case 0x35aec: + r4= page[(r28+-31512)>>>2]; + r5 = r17 & 255; + r6 = r16 + r0; + r31=0x35b00; + pc=0x56a00; + run_56800(); return; + case 0x35b00: + pc=0x357e8; + run_35000(); return; + case 0x35b08: + r4= page[(r28+-31512)>>>2]; + r5 = r17 & 255; + r6 = r16 + r0; + r31=0x35b1c; + pc=0x56a00; + run_56800(); return; + case 0x35b1c: + pc=0x356f4; + run_35000(); return; + case 0x35b24: + r4= page[(r28+-31512)>>>2]; + r5 = r18 >> 8; + r6 = r16 + r0; + r31=0x35b38; + pc=0x56a00; + run_56800(); return; + case 0x35b38: + pc=0x35728; + run_35000(); return; + case 0x35b40: + r4= page[(r28+-31512)>>>2]; + r5 = r17 >> 8; + r6 = r16 + r0; + r31=0x35b54; + pc=0x56a00; + run_56800(); return; + case 0x35b54: + pc=0x35728; + run_35000(); return; + case 0x35c00: + r2 = 6 << 16; + r3= page[(r2+31400)>>>2]; + r4 = 3 << 16; + r4 = r4 + 16896; + r2 = 6 << 16; + r2 = r2 + 30184; + r3 = r3 + -1; + page[(r28+-31264)>>>2] = r4; + r4 = r0 + -1; + page[(r2+8)>>>2] = r3; + page[(r2+12)>>>2] = r0; + page[(r2+4)>>>2] = r0; + page[(r2+20)>>>2] = r4; + page[(r2+24)>>>2] = r3; + page[(r2+28)>>>2] = r0; + addr=r2+48; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r2 = 6 << 16; + r2 = r2 + 31424; + page[(r2+8)>>>2] = r0; + page[(r2+12)>>>2] = r0; + page[(r2+16)>>>2] = r0; + page[(r2+32)>>>2] = r0; + page[(r28+-31304)>>>2] = r0; + pc=r31; + return; + case 0x35e00: + r2 = 6 << 16; + r2= page[(r2+31320)>>>2]; + if(r2 != r0) { + pc=0x35e84; + continue; + } + r29 = r29 + -48; + page[(r29+32)>>>2] = r17; + r17 = 6 << 16; + r17 = r17 + 30184; + page[(r29+36)>>>2] = r18; + r18= page[(r17+20)>>>2]; + r2 = r0 + -1; + page[(r29+44)>>>2] = r31; + page[(r29+40)>>>2] = r19; + page[(r29+28)>>>2] = r16; + if(r18 == r2) { + pc=0x35e6c; + continue; + } + r2= page[(r17+28)>>>2]; + r2 = r2 & 2; + if(r2 != r0) { + pc=0x35e6c; + continue; + } + r19= page[(r17+4)>>>2]; + r19 = r19 - r18; + if(r19 != r0) { + pc=0x35e8c; + continue; + } + case 0x35e6c: + r31= page[(r29+44)>>>2]; + r19= page[(r29+40)>>>2]; + r18= page[(r29+36)>>>2]; + r17= page[(r29+32)>>>2]; + r16= page[(r29+28)>>>2]; + r29 = r29 + 48; + case 0x35e84: + pc=r31; + return; + case 0x35e8c: + r4 = r0 + 16; + r16= page[(r17+32)>>>2]; + r31=0x35e9c; + pc=0x20200; + run_20000(); return; + case 0x35e9c: + page[(r2+8)>>>2] = r18; + page[(r2+12)>>>2] = r19; + page[(r17+40)>>>2] = r18; + r3 = r19 + 1; + r6= page[(r2+8)>>>2]; + page[(r17+44)>>>2] = r3; + case 0x35eb4: + r3= page[(r16+8)>>>2]; + r4 = r3 < r6 ? 1 : 0; + if(r4 != r0) { + pc=0x35ee8; + continue; + } + if(r6 != r3) { + pc=0x35ef4; + continue; + } + r4= page[(r16+12)>>>2]; + r3= page[(r2+12)>>>2]; + r3 = r4 < r3 ? 1 : 0; + if(r3 == r0) { + pc=0x35ef4; + continue; + } + case 0x35ee8: + r16= page[(r16+0)>>>2]; + pc=0x35eb4; + continue; + case 0x35ef4: + r3= page[(r16+4)>>>2]; + page[(r2+0)>>>2] = r16; + page[(r2+4)>>>2] = r3; + page[(r16+4)>>>2] = r2; + r3= page[(r2+4)>>>2]; + page[(r3+0)>>>2] = r2; + r2 = 6 << 16; + r2= page[(r2+31344)>>>2]; + r2 = r2 < 2 ? 1 : 0; + if(r2 != r0) { + pc=0x35e6c; + continue; + } + r2= page[(r17+4)>>>2]; + r7= page[(r17+20)>>>2]; + r4 = 6 << 16; + page[(r29+16)>>>2] = r2; + r4 = r4 + 10488; + r5 = r19 + r0; + r6 = r19 + r0; + r31=0x35f4c; + pc=0x4f200; + run_4f000(); return; + case 0x35f4c: + pc=0x35e6c; + continue; + case 0x36000: + pc=0x36000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_36000() throws ExecutionException { /* 0x36000 - 0x36800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x36000: + r29 = r29 + -56; + page[(r29+36)>>>2] = r19; + r19 = 6 << 16; + r2= page[(r19+31320)>>>2]; + page[(r29+40)>>>2] = r20; + page[(r29+32)>>>2] = r18; + page[(r29+52)>>>2] = r31; + page[(r29+48)>>>2] = r22; + page[(r29+44)>>>2] = r21; + page[(r29+28)>>>2] = r17; + page[(r29+24)>>>2] = r16; + r20 = r4 + r0; + r18 = r5 + r0; + if(r2 != r0) { + pc=0x36134; + continue; + } + r17 = 6 << 16; + r17 = r17 + 30184; + r21= page[(r17+20)>>>2]; + r2 = r0 + -1; + if(r21 == r2) { + pc=0x36178; + continue; + } + r2= page[(r17+28)>>>2]; + r4= page[(r17+4)>>>2]; + r2 = r2 & 2; + if(r2 != r0) { + pc=0x36074; + continue; + } + r22 = r4 - r21; + if(r22 != r0) { + pc=0x36184; + continue; + } + case 0x36074: + r16 = 6 << 16; + r16 = r16 + 31340; + r2= page[(r16+60)>>>2]; + r20 = r20 + r4; + r2 = r2 + -1; + r4 = r20 & r2; + r2 = 3 << 16; + page[(r17+28)>>>2] = r18; + r2 = r2 + 15872; + r18 = r18 & 1; + page[(r17+4)>>>2] = r4; + page[(r17+20)>>>2] = r4; + page[(r28+-31264)>>>2] = r2; + if(r18 == r0) { + pc=0x36288; + continue; + } + case 0x360b0: + r2= page[(r17+32)>>>2]; + r7 = r4 + 1; + r5 = r4 + r0; + case 0x360bc: + page[(r17+40)>>>2] = r7; + r3= page[(r2+8)>>>2]; + r4 = r5 < r3 ? 1 : 0; + if(r4 != r0) { + pc=0x360f0; + continue; + } + case 0x360d4: + r2= page[(r2+0)>>>2]; + r3= page[(r2+8)>>>2]; + r4 = r5 < r3 ? 1 : 0; + if(r4 == r0) { + pc=0x360d4; + continue; + } + case 0x360f0: + r4 = 6 << 16; + r4 = r4 + 30216; + if(r2 == r4) { + pc=0x3633c; + continue; + } + r3 = r3 + -1; + page[(r17+24)>>>2] = r3; + case 0x36108: + r31= page[(r29+52)>>>2]; + r22= page[(r29+48)>>>2]; + r21= page[(r29+44)>>>2]; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r29 = r29 + 56; + pc=r31; + return; + case 0x36134: + r2 = 6 << 16; + r2 = r2 + 30184; + r3= page[(r2+4)>>>2]; + page[(r2+28)>>>2] = r5; + r20 = r4 + r3; + r3 = 6 << 16; + r3= page[(r3+31400)>>>2]; + r3 = r3 + -1; + r20 = r20 & r3; + page[(r2+4)>>>2] = r20; + page[(r2+20)>>>2] = r20; + r2 = 3 << 16; + r2 = r2 + 15872; + page[(r28+-31264)>>>2] = r2; + pc=0x36108; + continue; + case 0x36178: + r4= page[(r17+4)>>>2]; + pc=0x36074; + continue; + case 0x36184: + r4 = r0 + 16; + r16= page[(r17+32)>>>2]; + r31=0x36194; + pc=0x20200; + run_20000(); return; + case 0x36194: + page[(r2+8)>>>2] = r21; + page[(r2+12)>>>2] = r22; + page[(r17+40)>>>2] = r21; + r3 = r22 + 1; + r7= page[(r2+8)>>>2]; + page[(r17+44)>>>2] = r3; + case 0x361ac: + r3= page[(r16+8)>>>2]; + r6 = r3 < r7 ? 1 : 0; + if(r6 != r0) { + pc=0x361e0; + continue; + } + if(r3 != r7) { + pc=0x361ec; + continue; + } + r6= page[(r16+12)>>>2]; + r3= page[(r2+12)>>>2]; + r3 = r6 < r3 ? 1 : 0; + if(r3 == r0) { + pc=0x361ec; + continue; + } + case 0x361e0: + r16= page[(r16+0)>>>2]; + pc=0x361ac; + continue; + case 0x361ec: + r3= page[(r16+4)>>>2]; + page[(r2+0)>>>2] = r16; + page[(r2+4)>>>2] = r3; + page[(r16+4)>>>2] = r2; + r3= page[(r2+4)>>>2]; + r16 = 6 << 16; + r16 = r16 + 31340; + page[(r3+0)>>>2] = r2; + r2= page[(r16+4)>>>2]; + r2 = r2 < 2 ? 1 : 0; + if(r2 != r0) { + pc=0x36244; + continue; + } + r2= page[(r17+4)>>>2]; + r4 = 6 << 16; + r7= page[(r17+20)>>>2]; + page[(r29+16)>>>2] = r2; + r4 = r4 + 10488; + r5 = r22 + r0; + r6 = r22 + r0; + r31=0x36244; + pc=0x4f200; + run_4f000(); return; + case 0x36244: + r4= page[(r17+4)>>>2]; + r2= page[(r16+60)>>>2]; + r20 = r20 + r4; + r2 = r2 + -1; + r4 = r20 & r2; + r3= page[(r19+31320)>>>2]; + r2 = 3 << 16; + r2 = r2 + 15872; + page[(r17+4)>>>2] = r4; + page[(r17+20)>>>2] = r4; + page[(r17+28)>>>2] = r18; + page[(r28+-31264)>>>2] = r2; + if(r3 != r0) { + pc=0x36108; + continue; + } + r18 = r18 & 1; + if(r18 != r0) { + pc=0x360b0; + continue; + } + case 0x36288: + r2= page[(r17+32)>>>2]; + r7 = r4 + 1; + r3 = r0 + 1; + page[(r17+40)>>>2] = r7; + page[(r17+44)>>>2] = r3; + r3= page[(r2+8)>>>2]; + r5 = r4 < r3 ? 1 : 0; + if(r5 != r0) { + pc=0x36308; + continue; + } + r5= page[(r2+12)>>>2]; + r3 = r3 + r5; + r3 = r4 < r3 ? 1 : 0; + if(r3 != r0) { + pc=0x36314; + continue; + } + r3 = r2 + r0; + pc=0x362ec; + continue; + case 0x362d4: + r6= page[(r3+12)>>>2]; + r5 = r5 + r6; + r5 = r4 < r5 ? 1 : 0; + if(r5 != r0) { + pc=0x36314; + continue; + } + case 0x362ec: + r3= page[(r3+0)>>>2]; + r5= page[(r3+8)>>>2]; + r6 = r4 < r5 ? 1 : 0; + if(r6 == r0) { + pc=0x362d4; + continue; + } + case 0x36308: + r5 = r4 + r0; + pc=0x360bc; + continue; + case 0x36314: + r4= page[(r16+40)>>>2]; + r5 = 6 << 16; + r5 = r5 + 10552; + r31=0x36328; + pc=0x1fc00; + run_1f800(); return; + case 0x36328: + r5= page[(r17+20)>>>2]; + r2= page[(r17+32)>>>2]; + r7 = r5 + 1; + pc=0x360bc; + continue; + case 0x3633c: + r2= page[(r16+60)>>>2]; + r2 = r2 + -1; + page[(r17+24)>>>2] = r2; + pc=0x36108; + continue; + case 0x36400: + r2 = 6 << 16; + addr=r2+30232; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=r31; + return; + case 0x36600: + r2 = 6 << 16; + addr=r2+30232; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + pc=r31; + return; + case 0x36800: + pc=0x36800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_36800() throws ExecutionException { /* 0x36800 - 0x37000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x36800: + r2= page[(r28+-31304)>>>2]; + r29 = r29 + -32; + page[(r29+24)>>>2] = r18; + page[(r29+16)>>>2] = r16; + page[(r29+28)>>>2] = r31; + page[(r29+20)>>>2] = r17; + r16 = r4 + r0; + r18 = r5 + r0; + if(r2 == r0) { + pc=0x36850; + continue; + } + r17 = 6 << 16; + r17 = r17 + 31340; + r2= page[(r17+52)>>>2]; + r3 = (r2&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; + if(r3 != r0) { + pc=0x368ec; + continue; + } + r2 = (r2&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x36890; + continue; + } + case 0x36850: + r7 = 6 << 16; + r7 = r7 + 31424; + r4= page[(r7+16)>>>2]; + case 0x3685c: + page[(r7+16)>>>2] = r16; + r2 = r0 + 1; + r31= page[(r29+28)>>>2]; + r17= page[(r29+20)>>>2]; + r4 = r16 - r4; + r5 = r18 + r0; + r16= page[(r29+16)>>>2]; + r18= page[(r29+24)>>>2]; + page[(r7+8)>>>2] = r2; + page[(r7+24)>>>2] = r2; + r29 = r29 + 32; + pc=0x36000; + run_36000(); return; + case 0x36890: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 10672; + r31=0x368a4; + pc=0x1fc00; + run_1f800(); return; + case 0x368a4: + r2= page[(r28+-31304)>>>2]; + r7 = 6 << 16; + r7 = r7 + 31424; + if(r2 == r0) { + pc=0x36948; + continue; + } + r8= page[(r17+60)>>>2]; + r3= page[(r7+16)>>>2]; + r8 = r8 + -1; + case 0x368c4: + r6= page[(r2+4)>>>2]; + r2= page[(r2+0)>>>2]; + r3 = r3 - r6; + r3 = r8 & r3; + if(r2 != r0) { + pc=0x368c4; + continue; + } + page[(r28+-31304)>>>2] = r0; + r4 = r3 + r0; + pc=0x3685c; + continue; + case 0x368ec: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 10604; + r31=0x36900; + pc=0x1fc00; + run_1f800(); return; + case 0x36900: + r2= page[(r28+-31304)>>>2]; + r7 = 6 << 16; + r7 = r7 + 31424; + if(r2 == r0) { + pc=0x36948; + continue; + } + r5= page[(r17+60)>>>2]; + r3= page[(r7+16)>>>2]; + r5 = r5 + -1; + case 0x36920: + r4= page[(r2+4)>>>2]; + r2= page[(r2+0)>>>2]; + r3 = r3 - r4; + r3 = r5 & r3; + if(r2 != r0) { + pc=0x36920; + continue; + } + page[(r28+-31304)>>>2] = r0; + r4 = r3 + r0; + pc=0x3685c; + continue; + case 0x36948: + r4= page[(r7+16)>>>2]; + pc=0x3685c; + continue; + case 0x36a00: + r5 = 6 << 16; + r29 = r29 + -24; + r5 = r5 + 31432; + r6 = r0 + 24; + page[(r29+20)>>>2] = r31; + r31=0x36a1c; + pc=0x56fe0; + run_56800(); return; + case 0x36a1c: + r31= page[(r29+20)>>>2]; + r29 = r29 + 24; + pc=r31; + return; + case 0x36c00: + r2 = 6 << 16; + r2= page[(r2+31456)>>>2]; + pc=r31; + return; + case 0x36e00: + r2 = 6 << 16; + r2 = r2 + 31424; + r3 = 6 << 16; + r4= page[(r3+31400)>>>2]; + r5= page[(r2+16)>>>2]; + r3= page[(r2+32)>>>2]; + r4 = r4 + -1; + r3 = r5 + r3; + r3 = r4 & r3; + page[(r2+16)>>>2] = r3; + page[(r2+32)>>>2] = r0; + pc=r31; + return; + case 0x37000: + pc=0x37000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_37000() throws ExecutionException { /* 0x37000 - 0x37800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x37000: + r29 = r29 + -24; + page[(r29+16)>>>2] = r16; + r16 = r4 + r0; + r4 = r0 + 12; + page[(r29+20)>>>2] = r31; + r31=0x3701c; + pc=0x20200; + run_20000(); return; + case 0x3701c: + r3= page[(r28+-31304)>>>2]; + page[(r28+-31304)>>>2] = r2; + page[(r2+0)>>>2] = r3; + r3 = 6 << 16; + r3 = r3 + 31424; + r4= page[(r3+8)>>>2]; + page[(r2+8)>>>2] = r4; + r4= page[(r16+8)>>>2]; + r5= page[(r3+16)>>>2]; + r5 = r4 - r5; + page[(r2+4)>>>2] = r5; + page[(r3+16)>>>2] = r4; + r31= page[(r29+20)>>>2]; + r2 = r0 + 1; + r16= page[(r29+16)>>>2]; + page[(r3+8)>>>2] = r2; + r29 = r29 + 24; + pc=r31; + return; + case 0x37200: + r2= page[(r28+-31304)>>>2]; + if(r2 == r0) { + pc=0x37250; + continue; + } + r3 = 6 << 16; + r3 = r3 + 31424; + r4 = 6 << 16; + r5= page[(r4+31400)>>>2]; + r6= page[(r3+16)>>>2]; + r4= page[(r2+4)>>>2]; + r5 = r5 + -1; + r4 = r6 - r4; + r4 = r5 & r4; + page[(r3+16)>>>2] = r4; + r4= page[(r2+8)>>>2]; + r2= page[(r2+0)>>>2]; + page[(r3+8)>>>2] = r4; + page[(r28+-31304)>>>2] = r2; + case 0x37248: + pc=r31; + return; + case 0x37250: + r2 = 6 << 16; + r2= page[(r2+31392)>>>2]; + r2 = (r2&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x37248; + continue; + } + r4 = 6 << 16; + r4 = r4 + 10720; + r5 = r0 + r0; + pc=0x21400; + run_21000(); return; + case 0x37400: + r2= page[(r28+-31304)>>>2]; + if(r2 == r0) { + pc=0x37454; + continue; + } + r6 = 6 << 16; + r4 = 6 << 16; + r6 = r6 + 31424; + r5= page[(r4+31400)>>>2]; + r3= page[(r6+16)>>>2]; + r5 = r5 + -1; + case 0x37428: + r4= page[(r2+4)>>>2]; + r3 = r3 - r4; + r4= page[(r2+8)>>>2]; + r2= page[(r2+0)>>>2]; + r3 = r5 & r3; + if(r2 != r0) { + pc=0x37428; + continue; + } + page[(r6+16)>>>2] = r3; + page[(r6+8)>>>2] = r4; + page[(r28+-31304)>>>2] = r0; + case 0x37454: + pc=r31; + return; + case 0x37600: + r29 = r29 + -24; + r7 = r6 + -1; + page[(r29+20)>>>2] = r31; + if(r6 == r0) { + pc=0x37660; + continue; + } + if(r5 == r0) { + pc=0x37678; + continue; + } + r2 = 6 << 16; + r8= page[(r2+31400)>>>2]; + r3= page[(r4+8)>>>2]; + r8 = r8 + -1; + r2 = r0 + r0; + pc=0x37644; + continue; + case 0x37638: + r2 = r2 + 1; + if(r5 == r0) { + pc=0x37674; + continue; + } + case 0x37644: + r6= page[(r5+4)>>>2]; + r5= page[(r5+0)>>>2]; + r3 = r3 - r6; + r3 = r8 & r3; + if(r2 != r7) { + pc=0x37638; + continue; + } + page[(r4+8)>>>2] = r3; + case 0x37660: + r31= page[(r29+20)>>>2]; + r2 = r0 + r0; + r29 = r29 + 24; + pc=r31; + return; + case 0x37674: + page[(r4+8)>>>2] = r3; + case 0x37678: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 10752; + r31=0x3768c; + pc=0x1fc00; + run_1f800(); return; + case 0x3768c: + r31= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x37800: + pc=0x37800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_37800() throws ExecutionException { /* 0x37800 - 0x38000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x37800: + r2= page[(r28+-31304)>>>2]; + pc=r31; + return; + case 0x37a00: + r4 = 6 << 16; + r29 = r29 + -32; + r4 = r4 + 10848; + page[(r29+24)>>>2] = r17; + page[(r29+28)>>>2] = r31; + page[(r29+20)>>>2] = r16; + r31=0x37a20; + pc=0x4d800; + run_4d800(); return; + case 0x37a20: + r17 = r2 + r0; + if(r2 == r0) { + pc=0x37a7c; + continue; + } + r16 = 6 << 16; + r4 = r16 + 17104; + r31=0x37a3c; + pc=0x1be00; + run_1b800(); return; + case 0x37a3c: + r4 = r16 + 17104; + r5 = r17 + r0; + r31=0x37a4c; + pc=0x1c600; + run_1c000(); return; + case 0x37a4c: + r4 = r16 + 17104; + r5 = r0 + 47; + r31=0x37a5c; + pc=0x1c400; + run_1c000(); return; + case 0x37a5c: + r4 = r16 + 17104; + r5 = r0 + r0; + r31=0x37a6c; + pc=0x1c400; + run_1c000(); return; + case 0x37a6c: + r4 = r16 + 17104; + r31=0x37a78; + pc=0x1c200; + run_1c000(); return; + case 0x37a78: + page[(r28+-31300)>>>2] = r2; + case 0x37a7c: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x37c00: + r29 = r29 + -48; + page[(r29+40)>>>2] = r21; + page[(r29+36)>>>2] = r20; + page[(r29+32)>>>2] = r19; + page[(r29+28)>>>2] = r18; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + page[(r29+44)>>>2] = r31; + r21 = r0 + r0; + r16 = r0 + r0; + r18 = r0 + 1; + r19 = r0 + 9; + r20 = r0 + 32; + r17 = r0 + 2; + case 0x37c38: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r3 & 255; + r5 = r2 + -48; + r5 = r5 & 255; + r6 = (r5&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; + if(r6 != r0) { + pc=0x37cd8; + continue; + } + r4 = r2 + -97; + r4 = (r4&0xffffffffL) < (6&0xffffffffL) ? 1 : 0; + if(r4 != r0) { + pc=0x37d18; + continue; + } + r4 = r2 + -65; + r4 = (r4&0xffffffffL) < (6&0xffffffffL) ? 1 : 0; + if(r4 != r0) { + pc=0x37d44; + continue; + } + if(r16 == r18) { + pc=0x37d94; + continue; + } + if(r3 == r19) { + pc=0x37d70; + continue; + } + if(r3 == r20) { + pc=0x37d70; + continue; + } + if(r3 == r0) { + pc=0x37d88; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x37cac; + pc=0x1fc00; + run_1f800(); return; + case 0x37cac: + r2 = r0 + r0; + case 0x37cb0: + r31= page[(r29+44)>>>2]; + r21= page[(r29+40)>>>2]; + r20= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 48; + pc=r31; + return; + case 0x37cd8: + r21 = r21 << 4; + r21 = r21 | r5; + r16 = r16 + 1; + r21 = r21 & 255; + r31=0x37cf0; + pc=0x23000; + run_23000(); return; + case 0x37cf0: + if(r16 != r17) { + pc=0x37c38; + continue; + } + case 0x37cf8: + r2= page[(r28+-31264)>>>2]; + r4 = r21 + r0; + pc=r2; + r31=0x37d08; + return; + case 0x37d08: + r21 = r0 + r0; + r16 = r0 + r0; + pc=0x37c38; + continue; + case 0x37d18: + r21 = r21 << 4; + r2 = r2 + -87; + r21 = r21 | r2; + r16 = r16 + 1; + r21 = r21 & 255; + r31=0x37d34; + pc=0x23000; + run_23000(); return; + case 0x37d34: + if(r16 != r17) { + pc=0x37c38; + continue; + } + pc=0x37cf8; + continue; + case 0x37d44: + r21 = r21 << 4; + r2 = r2 + -55; + r21 = r21 | r2; + r16 = r16 + 1; + r21 = r21 & 255; + r31=0x37d60; + pc=0x23000; + run_23000(); return; + case 0x37d60: + if(r16 != r17) { + pc=0x37c38; + continue; + } + pc=0x37cf8; + continue; + case 0x37d70: + r31=0x37d78; + pc=0x23000; + run_23000(); return; + case 0x37d78: + if(r16 != r17) { + pc=0x37c38; + continue; + } + pc=0x37cf8; + continue; + case 0x37d88: + r2 = r0 + 3; + pc=0x37cb0; + continue; + case 0x37d94: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 10856; + r31=0x37da8; + pc=0x1fc00; + run_1f800(); return; + case 0x37da8: + r2 = r0 + r0; + pc=0x37cb0; + continue; + case 0x37e00: + r29 = r29 + -24; + page[(r29+20)>>>2] = r31; + r31=0x37e10; + pc=0x24000; + run_24000(); return; + case 0x37e10: + r2= page[(r28+-32692)>>>2]; + r31= page[(r29+20)>>>2]; + r3 = r0 + 9; + page[(r2+12)>>>2] = r3; + r2 = r0 + 3; + r29 = r29 + 24; + pc=r31; + return; + case 0x38000: + pc=0x38000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_38000() throws ExecutionException { /* 0x38000 - 0x38800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x38000: + r2 = 6 << 16; + r3= page[(r2+31416)>>>2]; + r29 = r29 + -24; + r2 = r0 + -1; + page[(r29+20)>>>2] = r31; + if(r3 != r2) { + pc=0x38054; + continue; + } + r2 = 6 << 16; + r2= page[(r2+31320)>>>2]; + r3= page[(r28+-32676)>>>2]; + if(r2 == r3) { + pc=0x38054; + continue; + } + page[(r28+-32676)>>>2] = r2; + r31=0x38040; + pc=0x34c00; + run_34800(); return; + case 0x38040: + r31= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x38054: + r4 = 6 << 16; + r4 = r4 + 10892; + r31=0x38064; + pc=0x21200; + run_21000(); return; + case 0x38064: + r31= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x38200: + r2 = 6 << 16; + r3= page[(r2+31412)>>>2]; + r29 = r29 + -24; + r2 = r0 + -1; + page[(r29+20)>>>2] = r31; + if(r3 != r2) { + pc=0x38254; + continue; + } + r2 = 6 << 16; + r2= page[(r2+31320)>>>2]; + r3= page[(r28+-32680)>>>2]; + if(r2 == r3) { + pc=0x38254; + continue; + } + page[(r28+-32680)>>>2] = r2; + r31=0x38240; + pc=0x34a00; + run_34800(); return; + case 0x38240: + r31= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x38254: + r4 = 6 << 16; + r4 = r4 + 10928; + r31=0x38264; + pc=0x21200; + run_21000(); return; + case 0x38264: + r31= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x38400: + r29 = r29 + -88; + page[(r29+60)>>>2] = r16; + r16 = 6 << 16; + page[(r29+80)>>>2] = r21; + r21 = r4 + r0; + r4 = r16 + 24068; + page[(r29+84)>>>2] = r31; + page[(r29+76)>>>2] = r20; + page[(r29+72)>>>2] = r19; + page[(r29+68)>>>2] = r18; + page[(r29+64)>>>2] = r17; + page[(r29+48)>>>2] = r5; + r31=0x38438; + pc=0x1be00; + run_1b800(); return; + case 0x38438: + r5= page[(r29+48)>>>2]; + r4 = r16 + 24068; + r20 = 6 << 16; + r31=0x3844c; + pc=0x1c600; + run_1c000(); return; + case 0x3844c: + r17 = r0 + 34; + r18 = 6 << 16; + r19 = r20 + 17104; + pc=0x38494; + continue; + case 0x38460: + r4 = r29 + 16; + r31=0x3846c; + pc=0x1aa00; + run_1a800(); return; + case 0x3846c: + r2= page[(r29+16)>>>2]; + r4 = r29 + 16; + r2= page[(r2+28)>>>2]; + r5 = r16 + 24068; + pc=r2; + r31=0x38484; + return; + case 0x38484: + r31=0x3848c; + pc=0x27c00; + run_27800(); return; + case 0x3848c: + if(r2 == r0) { + pc=0x38528; + continue; + } + case 0x38494: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r17) { + pc=0x38460; + continue; + } + r2 = r18 + 31340; + r2= page[(r2+52)>>>2]; + r2 = (r2&0xffffffffL) < (6&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x38460; + continue; + } + r4 = r19 + r0; + r31=0x384c8; + pc=0x1be00; + run_1b800(); return; + case 0x384c8: + r4 = r0 + 34; + r31=0x384d4; + pc=0x24800; + run_24800(); return; + case 0x384d4: + if(r2 != r0) { + pc=0x38574; + continue; + } + r31=0x384e4; + pc=0x23000; + run_23000(); return; + case 0x384e4: + r4 = r0 + r0; + r31=0x384f0; + pc=0x24c00; + run_24800(); return; + case 0x384f0: + if(r2 != r0) { + pc=0x38574; + continue; + } + r4 = r19 + r0; + r5 = r0 + r0; + r31=0x38508; + pc=0x1c400; + run_1c000(); return; + case 0x38508: + r5= page[(r20+17104)>>>2]; + r4 = r16 + 24068; + r31=0x38518; + pc=0x1c600; + run_1c000(); return; + case 0x38518: + r31=0x38520; + pc=0x27c00; + run_27800(); return; + case 0x38520: + if(r2 != r0) { + pc=0x38494; + continue; + } + case 0x38528: + r4 = r16 + 24068; + r5 = r0 + r0; + r31=0x38538; + pc=0x1c400; + run_1c000(); return; + case 0x38538: + r5= page[(r16+24068)>>>2]; + r4 = r21 + r0; + r31=0x38548; + pc=0x1fc00; + run_1f800(); return; + case 0x38548: + r2 = r0 + 1; + case 0x3854c: + r31= page[(r29+84)>>>2]; + r21= page[(r29+80)>>>2]; + r20= page[(r29+76)>>>2]; + r19= page[(r29+72)>>>2]; + r18= page[(r29+68)>>>2]; + r17= page[(r29+64)>>>2]; + r16= page[(r29+60)>>>2]; + r29 = r29 + 88; + pc=r31; + return; + case 0x38574: + r2 = r0 + r0; + pc=0x3854c; + continue; + case 0x38600: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 10968; + pc=0x38400; + continue; + case 0x38800: + pc=0x38800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_38800() throws ExecutionException { /* 0x38800 - 0x39000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x38800: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 10980; + pc=0x38400; + run_38000(); return; + case 0x38a00: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 10992; + pc=0x38400; + run_38000(); return; + case 0x38c00: + r5 = 6 << 16; + r4 = r0 + r0; + r5 = r5 + 11000; + pc=0x38400; + run_38000(); return; + case 0x38e00: + r29 = r29 + -24; + r4 = r0 + 1; + page[(r29+20)>>>2] = r31; + page[(r29+16)>>>2] = r16; + r31=0x38e18; + pc=0x1f400; + run_1f000(); return; + case 0x38e18: + r16 = r2 + r0; + r31=0x38e24; + pc=0x21000; + run_21000(); return; + case 0x38e24: + r4 = r16 + r0; + if(r2 != r0) { + pc=0x38e58; + continue; + } + r31=0x38e38; + pc=0x1f400; + run_1f000(); return; + case 0x38e38: + r31=0x38e40; + pc=0x1f800; + run_1f800(); return; + case 0x38e40: + r31= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r2 = r0 + 2; + r29 = r29 + 24; + pc=r31; + return; + case 0x38e58: + r31=0x38e60; + pc=0x1f400; + run_1f000(); return; + case 0x38e60: + r31= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x39000: + pc=0x39000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_39000() throws ExecutionException { /* 0x39000 - 0x39800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x39000: + r29 = r29 + -24; + r4 = r0 + 1; + page[(r29+20)>>>2] = r31; + page[(r29+16)>>>2] = r16; + r31=0x39018; + pc=0x1f200; + run_1f000(); return; + case 0x39018: + r16 = r2 + r0; + r31=0x39024; + pc=0x21000; + run_21000(); return; + case 0x39024: + r4 = r16 + r0; + if(r2 != r0) { + pc=0x39058; + continue; + } + r31=0x39038; + pc=0x1f200; + run_1f000(); return; + case 0x39038: + r31=0x39040; + pc=0x1f600; + run_1f000(); return; + case 0x39040: + r31= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r2 = r0 + 2; + r29 = r29 + 24; + pc=r31; + return; + case 0x39058: + r31=0x39060; + pc=0x1f200; + run_1f000(); return; + case 0x39060: + r31= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x39200: + r2 = 6 << 16; + r2= page[(r2+31320)>>>2]; + r29 = r29 + -24; + page[(r29+20)>>>2] = r31; + page[(r29+16)>>>2] = r16; + if(r2 == r0) { + pc=0x39274; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 123; + r16 = r0 + 123; + if(r3 == r2) { + pc=0x39248; + continue; + } + case 0x39230: + r31=0x39238; + pc=0x23000; + run_23000(); return; + case 0x39238: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r16) { + pc=0x39230; + continue; + } + case 0x39248: + r4 = r0 + r0; + r31=0x39254; + pc=0x24e00; + run_24800(); return; + case 0x39254: + r31=0x3925c; + pc=0x23000; + run_23000(); return; + case 0x3925c: + r31= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x39274: + r31=0x3927c; + pc=0x28400; + run_28000(); return; + case 0x3927c: + r31=0x39284; + pc=0x23000; + run_23000(); return; + case 0x39284: + r31= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x39400: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r29 = r29 + -56; + r2 = r0 + 32; + page[(r29+52)>>>2] = r31; + if(r3 == r2) { + pc=0x394ac; + continue; + } + case 0x39418: + r4 = r29 + 16; + r31=0x39424; + pc=0x1e800; + run_1e800(); return; + case 0x39424: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 123; + if(r3 == r2) { + pc=0x39448; + continue; + } + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5260; + r31=0x39448; + pc=0x1fc00; + run_1f800(); return; + case 0x39448: + r2= page[(r28+-32692)>>>2]; + r4 = r0 + 1; + r2= page[(r2+4)>>>2]; + page[(r29+28)>>>2] = r2; + r31=0x39464; + pc=0x24e00; + run_24800(); return; + case 0x39464: + r4 = r29 + 16; + page[(r29+32)>>>2] = r2; + page[(r29+44)>>>2] = r0; + r31=0x39478; + pc=0x1ea00; + run_1e800(); return; + case 0x39478: + r4= page[(r29+24)>>>2]; + r31=0x39484; + pc=0x4e000; + run_4e000(); return; + case 0x39484: + r4= page[(r29+32)>>>2]; + r31=0x39490; + pc=0x4e000; + run_4e000(); return; + case 0x39490: + r31=0x39498; + pc=0x23000; + run_23000(); return; + case 0x39498: + r31= page[(r29+52)>>>2]; + r2 = r0 + 1; + r29 = r29 + 56; + pc=r31; + return; + case 0x394ac: + r31=0x394b4; + pc=0x23000; + run_23000(); return; + case 0x394b4: + pc=0x39418; + continue; + case 0x39600: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r29 = r29 + -56; + r2 = r0 + 32; + page[(r29+52)>>>2] = r31; + if(r3 == r2) { + pc=0x396e4; + continue; + } + case 0x39618: + r4 = r29 + 16; + r5 = r0 + 123; + r31=0x39628; + pc=0x1e600; + run_1e000(); return; + case 0x39628: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 123; + if(r3 == r2) { + pc=0x3964c; + continue; + } + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5260; + r31=0x3964c; + pc=0x1fc00; + run_1f800(); return; + case 0x3964c: + r2= page[(r28+-32692)>>>2]; + r4 = r0 + 1; + r2= page[(r2+4)>>>2]; + page[(r29+28)>>>2] = r2; + r31=0x39668; + pc=0x24e00; + run_24800(); return; + case 0x39668: + page[(r29+32)>>>2] = r2; + r31=0x39674; + pc=0x23000; + run_23000(); return; + case 0x39674: + r3 = r0 + 32; + if(r2 == r3) { + pc=0x396d4; + continue; + } + case 0x39680: + r5 = r0 + r0; + r4 = r29 + 36; + r31=0x39690; + pc=0x1e600; + run_1e000(); return; + case 0x39690: + r4 = r29 + 16; + r31=0x3969c; + pc=0x1ea00; + run_1e800(); return; + case 0x3969c: + r4= page[(r29+24)>>>2]; + r31=0x396a8; + pc=0x4e000; + run_4e000(); return; + case 0x396a8: + r4= page[(r29+32)>>>2]; + r31=0x396b4; + pc=0x4e000; + run_4e000(); return; + case 0x396b4: + r4= page[(r29+44)>>>2]; + r31=0x396c0; + pc=0x4e000; + run_4e000(); return; + case 0x396c0: + r31= page[(r29+52)>>>2]; + r2 = r0 + 3; + r29 = r29 + 56; + pc=r31; + return; + case 0x396d4: + r31=0x396dc; + pc=0x23000; + run_23000(); return; + case 0x396dc: + pc=0x39680; + continue; + case 0x396e4: + r31=0x396ec; + pc=0x23000; + run_23000(); return; + case 0x396ec: + pc=0x39618; + continue; + case 0x39800: + pc=0x39800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_39800() throws ExecutionException { /* 0x39800 - 0x3a000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x39800: + r29 = r29 + -112; + r4 = r29 + 96; + r5 = r0 + r0; + page[(r29+108)>>>2] = r31; + page[(r29+104)>>>2] = r16; + r31=0x3981c; + pc=0x26200; + run_26000(); return; + case 0x3981c: + if(r2 == r0) { + pc=0x3983c; + continue; + } + r2 = r0 + r0; + case 0x39828: + r31= page[(r29+108)>>>2]; + r16= page[(r29+104)>>>2]; + r29 = r29 + 112; + pc=r31; + return; + case 0x3983c: + r31=0x39844; + pc=0x27e00; + run_27800(); return; + case 0x39844: + r4= page[(r29+96)>>>2]; + r16 = r2 + r0; + r31=0x39854; + pc=0x40c00; + run_40800(); return; + case 0x39854: + page[(r29+16)>>>2] = r2; + r31=0x39860; + pc=0x27c00; + run_27800(); return; + case 0x39860: + if(r2 != r0) { + pc=0x39988; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r3 = tmp; + r2 = r0 + 2; + r3 = r3 & 223; + r3 = r3 << 24; + page[(r29+20)>>>2] = r2; + r3 = r3 >> 24; + r2 = r0 + 73; + if(r3 != r2) { + pc=0x39968; + continue; + } + r31=0x39894; + pc=0x26e00; + run_26800(); return; + case 0x39894: + r2 = 6 << 16; + r5 = 6 << 16; + r4= page[(r2+17104)>>>2]; + r5 = r5 + 1688; + r31=0x398ac; + pc=0x51600; + run_51000(); return; + case 0x398ac: + if(r2 != r0) { + pc=0x39b24; + continue; + } + if(r16 != r0) { + pc=0x39a98; + continue; + } + r4 = r29 + 32; + r31=0x398c8; + pc=0x1aa00; + run_1a800(); return; + case 0x398c8: + r2= page[(r29+32)>>>2]; + r4 = r29 + 32; + r2= page[(r2+32)>>>2]; + pc=r2; + r31=0x398e0; + return; + case 0x398e0: + page[(r29+24)>>>2] = r2; + if(r2 < 0) { + pc=0x39b44; + continue; + } + case 0x398ec: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 123; + if(r3 == r2) { + pc=0x39910; + continue; + } + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5260; + r31=0x39910; + pc=0x1fc00; + run_1f800(); return; + case 0x39910: + r2= page[(r28+-32692)>>>2]; + r4 = r0 + 1; + r2= page[(r2+4)>>>2]; + page[(r29+64)>>>2] = r2; + r31=0x3992c; + pc=0x24e00; + run_24800(); return; + case 0x3992c: + r4 = r29 + 16; + page[(r29+68)>>>2] = r2; + r31=0x3993c; + pc=0x1e200; + run_1e000(); return; + case 0x3993c: + r4= page[(r29+68)>>>2]; + r31=0x39948; + pc=0x4e000; + run_4e000(); return; + case 0x39948: + r31=0x39950; + pc=0x23000; + run_23000(); return; + case 0x39950: + r31= page[(r29+108)>>>2]; + r16= page[(r29+104)>>>2]; + r2 = r0 + 1; + r29 = r29 + 112; + pc=r31; + return; + case 0x39968: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x3997c; + pc=0x1fc00; + run_1f800(); return; + case 0x3997c: + r2 = r0 + r0; + pc=0x39828; + continue; + case 0x39988: + r4 = r29 + 72; + page[(r29+40)>>>2] = r16; + r31=0x39998; + pc=0x1a400; + run_1a000(); return; + case 0x39998: + r2= page[(r29+88)>>>2]; + page[(r29+44)>>>2] = r2; + r31=0x399ac; + pc=0x27c00; + run_27800(); return; + case 0x399ac: + if(r2 == r0) { + pc=0x39a54; + continue; + } + r16 = 6 << 16; + r2 = r0 + 1; + r16 = r16 + 31340; + page[(r29+20)>>>2] = r2; + r2= page[(r16+52)>>>2]; + r2 = (r2&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x39ad4; + continue; + } + case 0x399d8: + r2= page[(r29+80)>>>2]; + r4 = r29 + 72; + page[(r29+32)>>>2] = r2; + r31=0x399ec; + pc=0x1a400; + run_1a000(); return; + case 0x399ec: + r2= page[(r16+12)>>>2]; + if(r2 == r0) { + pc=0x39a20; + continue; + } + r2= page[(r29+44)>>>2]; + r3= page[(r29+88)>>>2]; + if(r3 == r2) { + pc=0x39a20; + continue; + } + r4 = 6 << 16; + r4 = r4 + 11036; + r31=0x39a20; + pc=0x21200; + run_21000(); return; + case 0x39a20: + r3= page[(r29+32)>>>2]; + r2= page[(r29+80)>>>2]; + r4 = r2 < r3 ? 1 : 0; + if(r4 != r0) { + pc=0x39ab8; + continue; + } + r2 = r2 + 1; + r3 = r2 - r3; + r2 = r0 + 1; + page[(r29+24)>>>2] = r3; + page[(r29+36)>>>2] = r2; + pc=0x398ec; + continue; + case 0x39a54: + r2 = 6 << 16; + r2= page[(r2+31392)>>>2]; + page[(r29+20)>>>2] = r0; + r2 = (r2&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x39aec; + continue; + } + case 0x39a6c: + r2= page[(r29+80)>>>2]; + if(r2 < 0) { + pc=0x39b04; + continue; + } + r3 = r2 + r0; + case 0x39a80: + r2 = r0 + 1; + page[(r29+32)>>>2] = r2; + page[(r29+24)>>>2] = r3; + page[(r29+36)>>>2] = r2; + pc=0x398ec; + continue; + case 0x39a98: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 11216; + r31=0x39aac; + pc=0x1fc00; + run_1f800(); return; + case 0x39aac: + r2 = r0 + r0; + pc=0x39828; + continue; + case 0x39ab8: + r3 = r3 + 1; + r2 = r3 - r2; + page[(r29+24)>>>2] = r2; + r2 = r0 + -1; + page[(r29+36)>>>2] = r2; + pc=0x398ec; + continue; + case 0x39ad4: + r4 = 6 << 16; + r4 = r4 + 11008; + r31=0x39ae4; + pc=0x21200; + run_21000(); return; + case 0x39ae4: + pc=0x399d8; + continue; + case 0x39aec: + r4 = 6 << 16; + r4 = r4 + 11104; + r31=0x39afc; + pc=0x21200; + run_21000(); return; + case 0x39afc: + pc=0x39a6c; + continue; + case 0x39b04: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 11132; + r31=0x39b18; + pc=0x1fc00; + run_1f800(); return; + case 0x39b18: + r3= page[(r29+80)>>>2]; + pc=0x39a80; + continue; + case 0x39b24: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 11156; + r31=0x39b38; + pc=0x1fc00; + run_1f800(); return; + case 0x39b38: + r2 = r0 + r0; + pc=0x39828; + continue; + case 0x39b44: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 11304; + r31=0x39b58; + pc=0x1fc00; + run_1f800(); return; + case 0x39b58: + r2 = r0 + r0; + pc=0x39828; + continue; + case 0x39c00: + r29 = r29 + -80; + page[(r29+68)>>>2] = r22; + page[(r29+60)>>>2] = r20; + page[(r29+52)>>>2] = r18; + r22 = 6 << 16; + r20 = 6 << 16; + r18 = 6 << 16; + page[(r29+64)>>>2] = r21; + page[(r29+56)>>>2] = r19; + page[(r29+48)>>>2] = r17; + page[(r29+44)>>>2] = r16; + page[(r29+76)>>>2] = r31; + page[(r29+72)>>>2] = r23; + r16 = r4 + r0; + r19 = r0 + 1; + r22 = r22 + 5260; + r20 = r20 + 11336; + r21 = 6 << 16; + r17 = 6 << 16; + r18 = r18 + 11396; + case 0x39c50: + r2 = r0 + 1; + if(r16 == r2) { + pc=0x39dc4; + continue; + } + case 0x39c5c: + if(r16 == r0) { + pc=0x39eac; + continue; + } + r2 = r0 + 2; + if(r16 == r2) { + pc=0x39e98; + continue; + } + r2 = r0 + 3; + if(r16 != r2) { + pc=0x39e7c; + continue; + } + r23 = r0 + 1; + case 0x39c80: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 32; + if(r3 == r2) { + pc=0x39de0; + continue; + } + case 0x39c90: + r2 = r0 + 123; + if(r23 == r0) { + pc=0x39df8; + continue; + } + case 0x39c9c: + if(r19 == r0) { + pc=0x39df8; + continue; + } + if(r3 != r2) { + pc=0x39f74; + continue; + } + r31=0x39cb4; + pc=0x20800; + run_20800(); return; + case 0x39cb4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 125; + if(r3 == r2) { + pc=0x39efc; + continue; + } + r4 = r0 + -3; + r5 = r21 + 5208; + r31=0x39cd4; + pc=0x1fc00; + run_1f800(); return; + case 0x39cd4: + r19 = r0 + r0; + case 0x39cd8: + r31=0x39ce0; + pc=0x23000; + run_23000(); return; + case 0x39ce0: + r3 = r0 + 32; + if(r2 == r3) { + pc=0x39e20; + continue; + } + case 0x39cec: + r2 = r0 + 3; + if(r16 == r2) { + pc=0x39e34; + continue; + } + case 0x39cf8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 == r0) { + pc=0x39f68; + continue; + } + r31=0x39d10; + pc=0x26e00; + run_26800(); return; + case 0x39d10: + if(r2 == r0) { + pc=0x39f34; + continue; + } + r4= page[(r17+17104)>>>2]; + r5 = r18 + r0; + r31=0x39d28; + pc=0x51600; + run_51000(); return; + case 0x39d28: + if(r2 != r0) { + pc=0x39f20; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x39ee8; + continue; + } + case 0x39d40: + r3 = r0 + 123; + if(r2 == r3) { + pc=0x39e64; + continue; + } + r31=0x39d54; + pc=0x26e00; + run_26800(); return; + case 0x39d54: + if(r2 == r0) { + pc=0x39f34; + continue; + } + r16= page[(r17+17104)>>>2]; + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + 11440; + r31=0x39d74; + pc=0x51600; + run_51000(); return; + case 0x39d74: + if(r2 == r0) { + pc=0x39e70; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + 11444; + r31=0x39d90; + pc=0x51600; + run_51000(); return; + case 0x39d90: + if(r2 == r0) { + pc=0x39f08; + continue; + } + r5 = 6 << 16; + r4 = r16 + r0; + r5 = r5 + 11452; + r31=0x39dac; + pc=0x51600; + run_51000(); return; + case 0x39dac: + if(r2 != r0) { + pc=0x39f80; + continue; + } + r16 = r0 + 2; + r2 = r0 + 1; + if(r16 != r2) { + pc=0x39c5c; + continue; + } + case 0x39dc4: + r31=0x39dcc; + pc=0x1e000; + run_1e000(); return; + case 0x39dcc: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r23 = r2 + r0; + r2 = r0 + 32; + if(r3 != r2) { + pc=0x39c90; + continue; + } + case 0x39de0: + r31=0x39de8; + pc=0x23000; + run_23000(); return; + case 0x39de8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 123; + if(r23 != r0) { + pc=0x39c9c; + continue; + } + case 0x39df8: + if(r3 != r2) { + pc=0x39f34; + continue; + } + r4 = r0 + r0; + r31=0x39e0c; + pc=0x24e00; + run_24800(); return; + case 0x39e0c: + r31=0x39e14; + pc=0x23000; + run_23000(); return; + case 0x39e14: + r3 = r0 + 32; + if(r2 != r3) { + pc=0x39cec; + continue; + } + case 0x39e20: + r31=0x39e28; + pc=0x23000; + run_23000(); return; + case 0x39e28: + r2 = r0 + 3; + if(r16 != r2) { + pc=0x39cf8; + continue; + } + case 0x39e34: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 == r0) { + pc=0x39f34; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 11352; + r31=0x39e58; + pc=0x1fc00; + run_1f800(); return; + case 0x39e58: + r2 = r0 + r0; + pc=0x39f38; + continue; + case 0x39e64: + r16 = r0 + 3; + pc=0x39c50; + continue; + case 0x39e70: + r16 = r0 + r0; + pc=0x39c50; + continue; + case 0x39e7c: + r4 = r20 + r0; + r5 = r16 + r0; + r31=0x39e8c; + pc=0x21400; + run_21000(); return; + case 0x39e8c: + r23 = r0 + 1; + pc=0x39c80; + continue; + case 0x39e98: + r31=0x39ea0; + pc=0x1e000; + run_1e000(); return; + case 0x39ea0: + r23 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + pc=0x39c80; + continue; + case 0x39eac: + r4 = r29 + 16; + r31=0x39eb8; + pc=0x1a400; + run_1a000(); return; + case 0x39eb8: + r23= page[(r29+24)>>>2]; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 123; + r23 = ((r0 & 0xffffffffL) < (r23 & 0xffffffffL)) ? 1 : 0; + if(r3 == r2) { + pc=0x39f14; + continue; + } + r4 = r0 + -3; + r5 = r22 + r0; + r31=0x39ee0; + pc=0x1fc00; + run_1f800(); return; + case 0x39ee0: + pc=0x39c80; + continue; + case 0x39ee8: + r31=0x39ef0; + pc=0x23000; + run_23000(); return; + case 0x39ef0: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x39d40; + continue; + case 0x39efc: + r19 = r0 + r0; + pc=0x39cd8; + continue; + case 0x39f08: + r16 = r0 + 1; + pc=0x39c50; + continue; + case 0x39f14: + r3 = r0 + 123; + pc=0x39c90; + continue; + case 0x39f20: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 11404; + r31=0x39f34; + pc=0x1fc00; + run_1f800(); return; + case 0x39f34: + r2 = r0 + r0; + case 0x39f38: + r31= page[(r29+76)>>>2]; + r23= page[(r29+72)>>>2]; + r22= page[(r29+68)>>>2]; + r21= page[(r29+64)>>>2]; + r20= page[(r29+60)>>>2]; + r19= page[(r29+56)>>>2]; + r18= page[(r29+52)>>>2]; + r17= page[(r29+48)>>>2]; + r16= page[(r29+44)>>>2]; + r29 = r29 + 80; + pc=r31; + return; + case 0x39f68: + r2 = r0 + 3; + pc=0x39f38; + continue; + case 0x39f74: + r2 = r0 + 2; + pc=0x39f38; + continue; + case 0x39f80: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 11460; + r31=0x39f94; + pc=0x1fc00; + run_1f800(); return; + case 0x39f94: + r2 = r0 + r0; + pc=0x39f38; + continue; + case 0x3a000: + pc=0x3a000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_3a000() throws ExecutionException { /* 0x3a000 - 0x3a800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x3a000: + r4 = r0 + 2; + pc=0x39c00; + run_39800(); return; + case 0x3a200: + r4 = r0 + 1; + pc=0x39c00; + run_39800(); return; + case 0x3a400: + r4 = r0 + r0; + pc=0x39c00; + run_39800(); return; + case 0x3a600: + r29 = r29 + -48; + page[(r29+40)>>>2] = r16; + r16= page[(r28+-32672)>>>2]; + r4 = r29 + 16; + r5 = r16 + r0; + r6 = r0 + 20; + page[(r29+44)>>>2] = r31; + r31=0x3a624; + pc=0x56fe0; + run_56800(); return; + case 0x3a624: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r3 = tmp; + r2 = 6 << 16; + r2 = r2 + 4764; + r2 = r3 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + r2 = r2 & 64; + if(r2 != r0) { + pc=0x3a6e4; + continue; + } + r6 = 6 << 16; + r4 = r16 + r0; + r7 = r0 + r0; + r6 = r6 + 17196; + case 0x3a658: + r5 = 6 << 16; + r5 = r5 + 11508; + r31=0x3a668; + pc=0x3fa00; + run_3f800(); return; + case 0x3a668: + r31=0x3a670; + pc=0x21000; + run_21000(); return; + case 0x3a670: + if(r2 != r0) { + pc=0x3a6ac; + continue; + } + r4 = r29 + 16; + r31=0x3a684; + pc=0x3fe00; + run_3f800(); return; + case 0x3a684: + r2= page[(r28+-32672)>>>2]; + r31= page[(r29+44)>>>2]; + r3 = 6 << 16; + r3 = r3 + 11516; + page[(r2+8)>>>2] = r3; + r16= page[(r29+40)>>>2]; + r2 = r0 + 1; + r29 = r29 + 48; + pc=r31; + return; + case 0x3a6ac: + r4= page[(r28+-32672)>>>2]; + r31=0x3a6b8; + pc=0x3fe00; + run_3f800(); return; + case 0x3a6b8: + r4= page[(r28+-32672)>>>2]; + r5 = r29 + 16; + r6 = r0 + 20; + r31=0x3a6cc; + pc=0x56fe0; + run_56800(); return; + case 0x3a6cc: + r31= page[(r29+44)>>>2]; + r16= page[(r29+40)>>>2]; + r2 = r0 + 1; + r29 = r29 + 48; + pc=r31; + return; + case 0x3a6e4: + r31=0x3a6ec; + pc=0x26600; + run_26000(); return; + case 0x3a6ec: + r4 = 6 << 16; + r4 = r4 + 17104; + r31=0x3a6fc; + pc=0x1c200; + run_1c000(); return; + case 0x3a6fc: + r6 = r2 + r0; + r4= page[(r28+-32672)>>>2]; + r7 = r0 + 1; + pc=0x3a658; + continue; + case 0x3a800: + pc=0x3a800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_3a800() throws ExecutionException { /* 0x3a800 - 0x3b000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x3a800: + r2 = 6 << 16; + r29 = r29 + -32; + r4 = r2 + 31460; + r5 = r0 + 1; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + r17= page[(r2+31460)>>>2]; + r16 = r2 + r0; + r31=0x3a82c; + pc=0x1b800; + run_1b800(); return; + case 0x3a82c: + r31=0x3a834; + pc=0x21000; + run_21000(); return; + case 0x3a834: + if(r2 == r0) { + pc=0x3a84c; + continue; + } + r4 = r16 + 31460; + r5 = r17 + r0; + r31=0x3a84c; + pc=0x1b800; + run_1b800(); return; + case 0x3a84c: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 32; + pc=r31; + return; + case 0x3aa00: + r29 = r29 + -32; + page[(r29+20)>>>2] = r16; + r16 = 6 << 16; + page[(r29+24)>>>2] = r17; + page[(r29+28)>>>2] = r31; + r17= page[(r16+31424)>>>2]; + r31=0x3aa20; + pc=0x26e00; + run_26800(); return; + case 0x3aa20: + if(r2 != r0) { + pc=0x3aa58; + continue; + } + case 0x3aa28: + r31=0x3aa30; + pc=0x21000; + run_21000(); return; + case 0x3aa30: + if(r2 == r0) { + pc=0x3aa3c; + continue; + } + page[(r16+31424)>>>2] = r17; + case 0x3aa3c: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 32; + pc=r31; + return; + case 0x3aa58: + r31=0x3aa60; + pc=0x1b600; + run_1b000(); return; + case 0x3aa60: + if(r2 == r0) { + pc=0x3aa74; + continue; + } + page[(r16+31424)>>>2] = r2; + pc=0x3aa28; + continue; + case 0x3aa74: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 11524; + r31=0x3aa88; + pc=0x1fc00; + run_1f800(); return; + case 0x3aa88: + pc=0x3aa28; + continue; + case 0x3ac00: + r29 = r29 + -56; + r4 = r29 + 16; + page[(r29+52)>>>2] = r31; + page[(r29+40)>>>2] = r0; + r31=0x3ac18; + pc=0x1a400; + run_1a000(); return; + case 0x3ac18: + r31=0x3ac20; + pc=0x27c00; + run_27800(); return; + case 0x3ac20: + if(r2 == r0) { + pc=0x3ac3c; + continue; + } + pc=0x3ac68; + continue; + case 0x3ac30: + r4= page[(r29+40)>>>2]; + r31=0x3ac3c; + pc=0x21c00; + run_21800(); return; + case 0x3ac3c: + r2= page[(r29+24)>>>2]; + r3 = r2 + -1; + page[(r29+24)>>>2] = r3; + if(r2 != r0) { + pc=0x3ac30; + continue; + } + r31= page[(r29+52)>>>2]; + r2 = r0 + 1; + r29 = r29 + 56; + pc=r31; + return; + case 0x3ac68: + r4 = r29 + 40; + r31=0x3ac74; + pc=0x1a200; + run_1a000(); return; + case 0x3ac74: + pc=0x3ac3c; + continue; + case 0x3ae00: + r29 = r29 + -96; + r2 = r0 + -1; + r4 = r29 + 72; + page[(r29+92)>>>2] = r31; + page[(r29+88)>>>2] = r18; + page[(r29+84)>>>2] = r17; + page[(r29+80)>>>2] = r16; + page[(r29+56)>>>2] = r2; + page[(r29+32)>>>2] = r0; + r31=0x3ae2c; + pc=0x27800; + run_27800(); return; + case 0x3ae2c: + if(r2 == r0) { + pc=0x3ae54; + continue; + } + case 0x3ae34: + r31= page[(r29+92)>>>2]; + r18= page[(r29+88)>>>2]; + r17= page[(r29+84)>>>2]; + r16= page[(r29+80)>>>2]; + r2 = r0 + r0; + r29 = r29 + 96; + pc=r31; + return; + case 0x3ae54: + r4= page[(r29+72)>>>2]; + r31=0x3ae60; + pc=0x28200; + run_28000(); return; + case 0x3ae60: + r16 = r2 + r0; + if(r2 == r0) { + pc=0x3ae34; + continue; + } + r31=0x3ae74; + pc=0x27c00; + run_27800(); return; + case 0x3ae74: + if(r2 == r0) { + pc=0x3aeb4; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 44; + if(r2 == r3) { + pc=0x3ae94; + continue; + } + if(r2 != r0) { + pc=0x3b094; + run_3b000(); return; + } + case 0x3ae94: + r31=0x3ae9c; + pc=0x27c00; + run_27800(); return; + case 0x3ae9c: + if(r2 == r0) { + pc=0x3aeb4; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r0) { + pc=0x3b080; + run_3b000(); return; + } + case 0x3aeb4: + r4= page[(r29+56)>>>2]; + r17 = 6 << 16; + if(r4 < 0) { + pc=0x3aee8; + continue; + } + r2 = r17 + 31320; + r3= page[(r2+4)>>>2]; + if(r3 != r0) { + pc=0x3afdc; + continue; + } + r2= page[(r2+8)>>>2]; + if(r2 != r0) { + pc=0x3afdc; + continue; + } + case 0x3aee8: + r5= page[(r29+32)>>>2]; + r4 = r16 + r0; + r6 = r0 + r0; + r31=0x3aefc; + pc=0x4ce00; + run_4c800(); return; + case 0x3aefc: + r2= page[(r29+56)>>>2]; + if(r2 == r0) { + pc=0x3afe4; + continue; + } + r18 = r0 + -1; + pc=0x3af54; + continue; + case 0x3af18: + r2= page[(r16+0)>>>2]; + r3 = r2 + 1; + page[(r16+0)>>>2] = r3; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + case 0x3af2c: + r2= page[(r28+-31264)>>>2]; + pc=r2; + r31=0x3af3c; + return; + case 0x3af3c: + r2= page[(r29+56)>>>2]; + r2 = r2 + -1; + page[(r29+56)>>>2] = r2; + if(r2 == r0) { + pc=0x3afe4; + continue; + } + case 0x3af54: + r2= page[(r16+4)>>>2]; + r2 = r2 + -1; + page[(r16+4)>>>2] = r2; + if(r2 >= 0) { + pc=0x3af18; + continue; + } + r4= page[(r28+-31512)>>>2]; + r5 = r16 + r0; + r31=0x3af7c; + pc=0x50a00; + run_50800(); return; + case 0x3af7c: + r4 = r2 + r0; + if(r2 != r18) { + pc=0x3af2c; + continue; + } + r2= page[(r29+56)>>>2]; + if(r2 <= 0) { + pc=0x3afe4; + continue; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 11544; + r31=0x3afac; + pc=0x1fc00; + run_1f800(); return; + case 0x3afac: + r2= page[(r28+-31264)>>>2]; + r4 = r0 + r0; + pc=r2; + r31=0x3afbc; + return; + case 0x3afbc: + r2= page[(r29+56)>>>2]; + r2 = r2 + -1; + page[(r29+56)>>>2] = r2; + if(r2 != r0) { + pc=0x3afac; + continue; + } + pc=0x3afe4; + continue; + case 0x3afdc: + r31=0x3afe4; + pc=0x34600; + run_34000(); return; + case 0x3afe4: + r4 = r16 + r0; + r31=0x3aff0; + pc=0x49e00; + run_49800(); return; + case 0x3aff0: + r2= page[(r17+31320)>>>2]; + if(r2 != r0) { + pc=0x3b060; + run_3b000(); return; + } + case 0x3b000: + pc=0x3b000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_3b000() throws ExecutionException { /* 0x3b000 - 0x3b800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x3b000: + r2 = 6 << 16; + r2= page[(r2+31344)>>>2]; + r2 = r2 < 2 ? 1 : 0; + if(r2 != r0) { + pc=0x3b060; + continue; + } + r31=0x3b020; + pc=0x36c00; + run_36800(); return; + case 0x3b020: + r7= page[(r29+32)>>>2]; + r4 = 6 << 16; + page[(r29+16)>>>2] = r7; + r4 = r4 + 11568; + r5 = r2 + r0; + r6 = r2 + r0; + r31=0x3b040; + pc=0x4f200; + run_4f000(); return; + case 0x3b040: + r31= page[(r29+92)>>>2]; + r18= page[(r29+88)>>>2]; + r17= page[(r29+84)>>>2]; + r16= page[(r29+80)>>>2]; + r2 = r0 + 1; + r29 = r29 + 96; + pc=r31; + return; + case 0x3b060: + r31= page[(r29+92)>>>2]; + r18= page[(r29+88)>>>2]; + r17= page[(r29+84)>>>2]; + r16= page[(r29+80)>>>2]; + r2 = r0 + 1; + r29 = r29 + 96; + pc=r31; + return; + case 0x3b080: + r4 = r29 + 24; + r31=0x3b08c; + pc=0x1a400; + run_1a000(); return; + case 0x3b08c: + pc=0x3aeb4; + run_3a800(); return; + case 0x3b094: + r4 = r29 + 48; + r31=0x3b0a0; + pc=0x1a400; + run_1a000(); return; + case 0x3b0a0: + r2= page[(r29+56)>>>2]; + if(r2 >= 0) { + pc=0x3ae94; + run_3a800(); return; + } + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5276; + r31=0x3b0c4; + pc=0x1fc00; + run_1f800(); return; + case 0x3b0c4: + pc=0x3ae94; + run_3a800(); return; + case 0x3b200: + r2 = 2 << 16; + r29 = r29 + -96; + r2 = r2 + 7168; + page[(r29+68)>>>2] = r17; + page[(r29+48)>>>2] = r2; + r17 = 6 << 16; + r2 = r0 + 1; + page[(r29+84)>>>2] = r21; + page[(r29+80)>>>2] = r20; + page[(r29+76)>>>2] = r19; + page[(r29+72)>>>2] = r18; + r21= page[(r28+-31272)>>>2]; + page[(r29+92)>>>2] = r31; + page[(r29+88)>>>2] = r22; + page[(r29+64)>>>2] = r16; + r18 = r5 + r0; + page[(r29+52)>>>2] = r2; + addr=r29+56; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + page[(r28+-31272)>>>2] = r4; + r19 = 6 << 16; + r20 = r17 + r0; + pc=0x3b288; + continue; + case 0x3b25c: + r4 = r29 + 16; + r31=0x3b268; + pc=0x1aa00; + run_1a800(); return; + case 0x3b268: + r4 = r29 + 16; + r5 = r29 + 48; + r31=0x3b278; + pc=0x21800; + run_21800(); return; + case 0x3b278: + r31=0x3b280; + pc=0x27c00; + run_27800(); return; + case 0x3b280: + if(r2 == r0) { + pc=0x3b354; + continue; + } + case 0x3b288: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 34; + if(r3 != r2) { + pc=0x3b25c; + continue; + } + r2 = r19 + 31340; + r2= page[(r2+52)>>>2]; + r2 = (r2&0xffffffffL) < (6&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x3b25c; + continue; + } + r4 = r17 + 17104; + r31=0x3b2bc; + pc=0x1be00; + run_1b800(); return; + case 0x3b2bc: + r4 = r0 + 34; + r31=0x3b2c8; + pc=0x24800; + run_24800(); return; + case 0x3b2c8: + if(r2 != r0) { + pc=0x3b388; + continue; + } + r31=0x3b2d8; + pc=0x23000; + run_23000(); return; + case 0x3b2d8: + r4 = r0 + r0; + r31=0x3b2e4; + pc=0x24c00; + run_24800(); return; + case 0x3b2e4: + if(r2 != r0) { + pc=0x3b388; + continue; + } + r22 = r20 + 17104; + r2= page[(r22+4)>>>2]; + if(r2 == r0) { + pc=0x3b278; + continue; + } + r2 = r0 + r0; + r16 = r0 + r0; + case 0x3b308: + r3= page[(r17+17104)>>>2]; + r16 = r16 + 1; + r2 = r3 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r31=0x3b320; + pc=0x1d600; + run_1d000(); return; + case 0x3b320: + r2 = r2 ^ r18; + r4 = r2 & 255; + r31=0x3b330; + pc=0x21c00; + run_21800(); return; + case 0x3b330: + r3= page[(r22+4)>>>2]; + r2 = r16 + r0; + r3 = ((r16 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; + if(r3 != r0) { + pc=0x3b308; + continue; + } + r31=0x3b34c; + pc=0x27c00; + run_27800(); return; + case 0x3b34c: + if(r2 != r0) { + pc=0x3b288; + continue; + } + case 0x3b354: + page[(r28+-31272)>>>2] = r21; + r2 = r0 + 1; + case 0x3b35c: + r31= page[(r29+92)>>>2]; + r22= page[(r29+88)>>>2]; + r21= page[(r29+84)>>>2]; + r20= page[(r29+80)>>>2]; + r19= page[(r29+76)>>>2]; + r18= page[(r29+72)>>>2]; + r17= page[(r29+68)>>>2]; + r16= page[(r29+64)>>>2]; + r29 = r29 + 96; + pc=r31; + return; + case 0x3b388: + r2 = r0 + r0; + pc=0x3b35c; + continue; + case 0x3b400: + r4 = 6 << 16; + r4 = r4 + 26364; + r5 = r0 + r0; + pc=0x3b200; + continue; + case 0x3b600: + r4 = 6 << 16; + r4 = r4 + 26368; + r5 = r0 + r0; + pc=0x3b200; + continue; + case 0x3b800: + pc=0x3b800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_3b800() throws ExecutionException { /* 0x3b800 - 0x3c000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x3b800: + r4 = 6 << 16; + r4 = r4 + 26372; + r5 = r0 + r0; + pc=0x3b200; + run_3b000(); return; + case 0x3ba00: + r4= page[(r28+-31272)>>>2]; + r5 = r0 + r0; + pc=0x3b200; + run_3b000(); return; + case 0x3bc00: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r29 = r29 + -72; + r2= page[(r2+4)>>>2]; + page[(r29+68)>>>2] = r31; + r2 = r2 & 8; + if(r2 != r0) { + pc=0x3bc74; + continue; + } + r2 = 2 << 16; + r2 = r2 + 10240; + case 0x3bc28: + page[(r29+48)>>>2] = r2; + page[(r29+52)>>>2] = r0; + addr=r29+56; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x3bc34: + r4 = r29 + 16; + r31=0x3bc40; + pc=0x1aa00; + run_1a800(); return; + case 0x3bc40: + r4 = r29 + 16; + r5 = r29 + 48; + r31=0x3bc50; + pc=0x21800; + run_21800(); return; + case 0x3bc50: + r31=0x3bc58; + pc=0x27c00; + run_27800(); return; + case 0x3bc58: + if(r2 != r0) { + pc=0x3bc34; + continue; + } + r31= page[(r29+68)>>>2]; + r2 = r0 + 1; + r29 = r29 + 72; + pc=r31; + return; + case 0x3bc74: + r2 = 2 << 16; + r2 = r2 + 9728; + pc=0x3bc28; + continue; + case 0x3be00: + r29 = r29 + -296; + page[(r29+288)>>>2] = r19; + page[(r29+284)>>>2] = r18; + page[(r29+280)>>>2] = r17; + page[(r29+276)>>>2] = r16; + page[(r29+292)>>>2] = r31; + r16 = r4 + r0; + r18= page[(r28+-32696)>>>2]; + r19= page[(r28+-31272)>>>2]; + r17 = r29 + 16; + if(r4 == r0) { + pc=0x3be4c; + continue; + } + r4 = r17 + r0; + r5 = r16 + r0; + r31=0x3be40; + pc=0x1da00; + run_1d800(); return; + case 0x3be40: + r4 = r16 + r0; + r31=0x3be4c; + pc=0x49e00; + run_49800(); return; + case 0x3be4c: + r2 = 6 << 16; + r2 = r2 + 26360; + page[(r28+-31272)>>>2] = r2; + page[(r28+-32696)>>>2] = r17; + r31=0x3be64; + pc=0x21000; + run_21000(); return; + case 0x3be64: + if(r2 != r0) { + pc=0x3bea8; + continue; + } + r4 = r18 + r0; + r5 = r17 + r0; + r6 = r0 + 256; + r31=0x3be80; + pc=0x56fe0; + run_56800(); return; + case 0x3be80: + r31= page[(r29+292)>>>2]; + r19= page[(r29+288)>>>2]; + r17= page[(r29+280)>>>2]; + r16= page[(r29+276)>>>2]; + page[(r28+-32696)>>>2] = r18; + r2 = r0 + 1; + r18= page[(r29+284)>>>2]; + r29 = r29 + 296; + pc=r31; + return; + case 0x3bea8: + r31= page[(r29+292)>>>2]; + r17= page[(r29+280)>>>2]; + r16= page[(r29+276)>>>2]; + page[(r28+-31272)>>>2] = r19; + page[(r28+-32696)>>>2] = r18; + r19= page[(r29+288)>>>2]; + r18= page[(r29+284)>>>2]; + r2 = r0 + 1; + r29 = r29 + 296; + pc=r31; + return; + case 0x3c000: + pc=0x3c000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_3c000() throws ExecutionException { /* 0x3c000 - 0x3c800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x3c000: + r29 = r29 + -32; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r16; + r31=0x3c014; + pc=0x36400; + run_36000(); return; + case 0x3c014: + r4 = r29 + 16; + r16 = r2 + r0; + r31=0x3c024; + pc=0x1a200; + run_1a000(); return; + case 0x3c024: + r3= page[(r29+16)>>>2]; + r2 = r3 + 128; + r2 = (r2&0xffffffffL) < (384&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x3c08c; + continue; + } + r4 = r3 << 24; + r4 = r4 >> 24; + case 0x3c044: + r4 = r4 ^ r16; + r4 = r4 << 24; + r4 = r4 >> 24; + r31=0x3c058; + pc=0x36600; + run_36000(); return; + case 0x3c058: + r31=0x3c060; + pc=0x21000; + run_21000(); return; + case 0x3c060: + if(r2 == r0) { + pc=0x3c074; + continue; + } + r4 = r16 + r0; + r31=0x3c074; + pc=0x36600; + run_36000(); return; + case 0x3c074: + r31= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r2 = r0 + 1; + r29 = r29 + 32; + pc=r31; + return; + case 0x3c08c: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5152; + r31=0x3c0a0; + pc=0x1fc00; + run_1f800(); return; + case 0x3c0a0: + page[(r29+16)>>>2] = r0; + r4 = r0 + r0; + pc=0x3c044; + continue; + case 0x3c200: + r29 = r29 + -48; + r4 = r29 + 16; + page[(r29+44)>>>2] = r31; + r31=0x3c214; + pc=0x1a400; + run_1a000(); return; + case 0x3c214: + r4 = r29 + 16; + r31=0x3c220; + pc=0x37000; + run_37000(); return; + case 0x3c220: + r31=0x3c228; + pc=0x21000; + run_21000(); return; + case 0x3c228: + if(r2 != r0) { + pc=0x3c278; + continue; + } + r2 = 6 << 16; + r2= page[(r2+31392)>>>2]; + if(r2 == r0) { + pc=0x3c264; + continue; + } + r2 = (r2&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x3c294; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 11692; + r31=0x3c264; + pc=0x1fc00; + run_1f800(); return; + case 0x3c264: + r31= page[(r29+44)>>>2]; + r2 = r0 + 1; + r29 = r29 + 48; + pc=r31; + return; + case 0x3c278: + r31=0x3c280; + pc=0x37200; + run_37000(); return; + case 0x3c280: + r31= page[(r29+44)>>>2]; + r2 = r0 + 1; + r29 = r29 + 48; + pc=r31; + return; + case 0x3c294: + r4 = 6 << 16; + r4 = r4 + 11628; + r31=0x3c2a4; + pc=0x21200; + run_21000(); return; + case 0x3c2a4: + r31= page[(r29+44)>>>2]; + r2 = r0 + 1; + r29 = r29 + 48; + pc=r31; + return; + case 0x3c400: + r2 = 6 << 16; + r2= page[(r2+31392)>>>2]; + r29 = r29 + -24; + r2 = (r2&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; + page[(r29+20)>>>2] = r31; + if(r2 == r0) { + pc=0x3c44c; + continue; + } + r2 = 6 << 16; + r4 = 6 << 16; + r2 = r2 + 26368; + r4 = r4 + 11800; + page[(r28+-31272)>>>2] = r2; + r31=0x3c438; + pc=0x21200; + run_21000(); return; + case 0x3c438: + r31= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x3c44c: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 11756; + r31=0x3c460; + pc=0x1fc00; + run_1f800(); return; + case 0x3c460: + r31= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x3c600: + r29 = r29 + -48; + r4 = r29 + 16; + page[(r29+44)>>>2] = r31; + r31=0x3c614; + pc=0x1a400; + run_1a000(); return; + case 0x3c614: + r31=0x3c61c; + pc=0x27c00; + run_27800(); return; + case 0x3c61c: + if(r2 == r0) { + pc=0x3c674; + continue; + } + r2 = 6 << 16; + r4= page[(r29+24)>>>2]; + r2= page[(r2+31396)>>>2]; + r2 = r2 < r4 ? 1 : 0; + if(r2 == r0) { + pc=0x3c654; + continue; + } + r31= page[(r29+44)>>>2]; + r2 = r0 + r0; + r29 = r29 + 48; + pc=r31; + return; + case 0x3c654: + r5 = 6 << 16; + r5 = r5 + 11884; + r31=0x3c664; + pc=0x38400; + run_38000(); return; + case 0x3c664: + r31= page[(r29+44)>>>2]; + r29 = r29 + 48; + pc=r31; + return; + case 0x3c674: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 11848; + r31=0x3c688; + pc=0x1fc00; + run_1f800(); return; + case 0x3c688: + r31= page[(r29+44)>>>2]; + r2 = r0 + r0; + r29 = r29 + 48; + pc=r31; + return; + case 0x3c800: + pc=0x3c800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_3c800() throws ExecutionException { /* 0x3c800 - 0x3d000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x3c800: + r2= page[(r28+-32768)>>>2]; + r29 = r29 + -64; + r2 = r2 + -1; + page[(r29+56)>>>2] = r30; + page[(r29+60)>>>2] = r31; + page[(r29+52)>>>2] = r19; + page[(r29+48)>>>2] = r18; + page[(r29+44)>>>2] = r17; + page[(r29+40)>>>2] = r16; + r30 = r29 + r0; + page[(r28+-32768)>>>2] = r2; + if(r2 < 0) { + pc=0x3c92c; + continue; + } + case 0x3c834: + r4 = r30 + 36; + r31=0x3c840; + pc=0x27800; + run_27800(); return; + case 0x3c840: + if(r2 == r0) { + pc=0x3c874; + continue; + } + r29 = r30 + r0; + r31= page[(r29+60)>>>2]; + r30= page[(r29+56)>>>2]; + r19= page[(r29+52)>>>2]; + r18= page[(r29+48)>>>2]; + r17= page[(r29+44)>>>2]; + r16= page[(r29+40)>>>2]; + r2 = r0 + r0; + r29 = r29 + 64; + pc=r31; + return; + case 0x3c874: + r4= page[(r30+36)>>>2]; + r31=0x3c880; + pc=0x28200; + run_28000(); return; + case 0x3c880: + r16 = r2 + r0; + if(r2 == r0) { + pc=0x3c8f0; + continue; + } + r2 = 6 << 16; + r3 = r2 + 17104; + r3= page[(r3+4)>>>2]; + r17 = r29 + r0; + r3 = r3 + 7; + r3 = r3 >>> 3; + r3 = r3 << 3; + r29 = r29 - r3; + r3 = r29 + 16; + r5= page[(r2+17104)>>>2]; + r4 = r3 + r0; + r31=0x3c8c0; + pc=0x51800; + run_51800(); return; + case 0x3c8c0: + r3 = r2 + r0; + r19= page[(r28+-32692)>>>2]; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r18 = tmp; + r2 = r30 + 16; + r4 = r16 + r0; + r5 = r3 + r0; + page[(r28+-32692)>>>2] = r2; + r31=0x3c8e4; + pc=0x1ee00; + run_1e800(); return; + case 0x3c8e4: + page[(r28+-32692)>>>2] = r19; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r29 = r17 + r0; + case 0x3c8f0: + r2= page[(r28+-32768)>>>2]; + r2 = r2 + 1; + page[(r28+-32768)>>>2] = r2; + r29 = r30 + r0; + r31= page[(r29+60)>>>2]; + r30= page[(r29+56)>>>2]; + r19= page[(r29+52)>>>2]; + r18= page[(r29+48)>>>2]; + r17= page[(r29+44)>>>2]; + r16= page[(r29+40)>>>2]; + r2 = r0 + 1; + r29 = r29 + 64; + pc=r31; + return; + case 0x3c92c: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 11896; + r31=0x3c940; + pc=0x1fc00; + run_1f800(); return; + case 0x3c940: + pc=0x3c834; + continue; + case 0x3ca00: + r29 = r29 + -24; + page[(r29+20)>>>2] = r31; + r31=0x3ca10; + pc=0x27a00; + run_27800(); return; + case 0x3ca10: + if(r2 != r0) { + pc=0x3ca64; + continue; + } + r2 = 6 << 16; + r2= page[(r2+31320)>>>2]; + if(r2 != r0) { + pc=0x3ca64; + continue; + } + r2= page[(r28+-31396)>>>2]; + if(r2 == r0) { + pc=0x3ca78; + continue; + } + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 11936; + r31=0x3ca50; + pc=0x1fc00; + run_1f800(); return; + case 0x3ca50: + r31= page[(r29+20)>>>2]; + r2 = r0 + r0; + r29 = r29 + 24; + pc=r31; + return; + case 0x3ca64: + r2 = r0 + r0; + case 0x3ca68: + r31= page[(r29+20)>>>2]; + r29 = r29 + 24; + pc=r31; + return; + case 0x3ca78: + r4 = 6 << 16; + r4 = r4 + 17104; + r31=0x3ca88; + pc=0x1c200; + run_1c000(); return; + case 0x3ca88: + page[(r28+-31396)>>>2] = r2; + r2 = r0 + 1; + pc=0x3ca68; + continue; + case 0x3cc00: + r29 = r29 + -32; + r4 = r29 + 16; + r5 = r0 + r0; + page[(r29+28)>>>2] = r31; + r31=0x3cc18; + pc=0x26200; + run_26000(); return; + case 0x3cc18: + if(r2 == r0) { + pc=0x3cc34; + continue; + } + r31= page[(r29+28)>>>2]; + r2 = r0 + r0; + r29 = r29 + 32; + pc=r31; + return; + case 0x3cc34: + r31=0x3cc3c; + pc=0x27e00; + run_27800(); return; + case 0x3cc3c: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r4 = tmp; + r3 = r0 + 61; + if(r4 == r3) { + pc=0x3cc74; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x3cc60; + pc=0x1fc00; + run_1f800(); return; + case 0x3cc60: + r31= page[(r29+28)>>>2]; + r2 = r0 + r0; + r29 = r29 + 32; + pc=r31; + return; + case 0x3cc74: + r4= page[(r29+16)>>>2]; + r5 = r2 + r0; + r6 = r0 + 3; + r31=0x3cc88; + pc=0x1fa00; + run_1f800(); return; + case 0x3cc88: + r31= page[(r29+28)>>>2]; + r2 = r0 + 1; + r29 = r29 + 32; + pc=r31; + return; + case 0x3ce00: + r29 = r29 + -104; + r4 = r29 + 64; + page[(r29+100)>>>2] = r31; + r31=0x3ce14; + pc=0x1a400; + run_1a000(); return; + case 0x3ce14: + r31=0x3ce1c; + pc=0x27c00; + run_27800(); return; + case 0x3ce1c: + if(r2 == r0) { + pc=0x3cec4; + continue; + } + r4 = r29 + 40; + r31=0x3ce30; + pc=0x1a400; + run_1a000(); return; + case 0x3ce30: + r31=0x3ce38; + pc=0x27c00; + run_27800(); return; + case 0x3ce38: + if(r2 != r0) { + pc=0x3cef4; + continue; + } + case 0x3ce40: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r4 = r29 + 16; + addr=r2+8; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + page[(r29+88)>>>2] = r2; + r31=0x3ce60; + pc=0x36a00; + run_36800(); return; + case 0x3ce60: + r2= page[(r29+16)>>>2]; + if(r2 != r0) { + pc=0x3ce84; + continue; + } + pc=0x3cf1c; + continue; + case 0x3ce78: + r4= page[(r29+88)>>>2]; + r31=0x3ce84; + pc=0x21c00; + run_21800(); return; + case 0x3ce84: + r2= page[(r29+24)>>>2]; + r3 = r2 + 1; + page[(r29+24)>>>2] = r3; + r3= page[(r29+72)>>>2]; + r2 = r2 & r3; + r3= page[(r29+48)>>>2]; + if(r2 != r3) { + pc=0x3ce78; + continue; + } + r31= page[(r29+100)>>>2]; + r2 = r0 + 1; + r29 = r29 + 104; + pc=r31; + return; + case 0x3cec4: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x3ced8; + pc=0x1fc00; + run_1f800(); return; + case 0x3ced8: + r4 = r29 + 40; + r31=0x3cee4; + pc=0x1a400; + run_1a000(); return; + case 0x3cee4: + r31=0x3ceec; + pc=0x27c00; + run_27800(); return; + case 0x3ceec: + if(r2 == r0) { + pc=0x3ce40; + continue; + } + case 0x3cef4: + r4 = r29 + 88; + r31=0x3cf00; + pc=0x1a200; + run_1a000(); return; + case 0x3cf00: + r4 = r29 + 16; + r31=0x3cf0c; + pc=0x36a00; + run_36800(); return; + case 0x3cf0c: + r2= page[(r29+16)>>>2]; + if(r2 != r0) { + pc=0x3ce84; + continue; + } + case 0x3cf1c: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5060; + r31=0x3cf30; + pc=0x1fc00; + run_1f800(); return; + case 0x3cf30: + r31= page[(r29+100)>>>2]; + r2 = r0 + r0; + r29 = r29 + 104; + pc=r31; + return; + case 0x3d000: + pc=0x3d000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_3d000() throws ExecutionException { /* 0x3d000 - 0x3d800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x3d000: + r29 = r29 + -48; + r4 = r29 + 16; + page[(r29+44)>>>2] = r31; + r31=0x3d014; + pc=0x1a400; + run_1a000(); return; + case 0x3d014: + r4= page[(r29+24)>>>2]; + if(r4 < 0) { + pc=0x3d040; + continue; + } + r31=0x3d02c; + pc=0x34600; + run_34000(); return; + case 0x3d02c: + r31= page[(r29+44)>>>2]; + r2 = r0 + 1; + r29 = r29 + 48; + pc=r31; + return; + case 0x3d040: + r5 = 6 << 16; + r4 = r0 + -3; + r5 = r5 + 5276; + r31=0x3d054; + pc=0x1fc00; + run_1f800(); return; + case 0x3d054: + r31= page[(r29+44)>>>2]; + r2 = r0 + 1; + r29 = r29 + 48; + pc=r31; + return; + case 0x3d200: + r29 = r29 + -32; + r4 = r29 + 16; + page[(r29+28)>>>2] = r31; + r31=0x3d214; + pc=0x1a200; + run_1a000(); return; + case 0x3d214: + r31=0x3d21c; + pc=0x27c00; + run_27800(); return; + case 0x3d21c: + if(r2 == r0) { + pc=0x3d248; + continue; + } + addr=r29+19; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r5 = tmp; + r4 = 6 << 16; + r4 = r4 + 26364; + r31=0x3d238; + pc=0x3b200; + run_3b000(); return; + case 0x3d238: + r31= page[(r29+28)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x3d248: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x3d25c; + pc=0x1fc00; + run_1f800(); return; + case 0x3d25c: + r31= page[(r29+28)>>>2]; + r2 = r0 + r0; + r29 = r29 + 32; + pc=r31; + return; + case 0x3d400: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r29 = r29 + -288; + r3 = r0 + 60; + page[(r29+284)>>>2] = r31; + page[(r29+280)>>>2] = r17; + page[(r29+276)>>>2] = r16; + if(r2 == r3) { + pc=0x3d480; + continue; + } + r3 = r0 + 34; + if(r2 == r3) { + pc=0x3d480; + continue; + } + r16= page[(r28+-32696)>>>2]; + r17= page[(r28+-31272)>>>2]; + r31=0x3d43c; + pc=0x26e00; + run_26800(); return; + case 0x3d43c: + if(r2 != r0) { + pc=0x3d4e0; + continue; + } + case 0x3d444: + r2 = r29 + 16; + page[(r28+-32696)>>>2] = r2; + r31=0x3d454; + pc=0x21000; + run_21000(); return; + case 0x3d454: + if(r2 == r0) { + pc=0x3d460; + continue; + } + page[(r28+-31272)>>>2] = r17; + case 0x3d460: + r31= page[(r29+284)>>>2]; + r17= page[(r29+280)>>>2]; + page[(r28+-32696)>>>2] = r16; + r2 = r0 + 1; + r16= page[(r29+276)>>>2]; + r29 = r29 + 288; + pc=r31; + return; + case 0x3d480: + r4 = r29 + 16; + r31=0x3d48c; + pc=0x27800; + run_27800(); return; + case 0x3d48c: + if(r2 == r0) { + pc=0x3d4b0; + continue; + } + r31= page[(r29+284)>>>2]; + r17= page[(r29+280)>>>2]; + r16= page[(r29+276)>>>2]; + r2 = r0 + r0; + r29 = r29 + 288; + pc=r31; + return; + case 0x3d4b0: + r4= page[(r29+16)>>>2]; + r31=0x3d4bc; + pc=0x28200; + run_28000(); return; + case 0x3d4bc: + r4 = r2 + r0; + r31=0x3d4c8; + pc=0x3be00; + run_3b800(); return; + case 0x3d4c8: + r31= page[(r29+284)>>>2]; + r17= page[(r29+280)>>>2]; + r16= page[(r29+276)>>>2]; + r29 = r29 + 288; + pc=r31; + return; + case 0x3d4e0: + r31=0x3d4e8; + pc=0x1dc00; + run_1d800(); return; + case 0x3d4e8: + if(r2 == r0) { + pc=0x3d444; + continue; + } + page[(r28+-31272)>>>2] = r2; + pc=0x3d444; + continue; + case 0x3d600: + r29 = r29 + -24; + page[(r29+20)>>>2] = r31; + r31=0x3d610; + pc=0x27a00; + run_27800(); return; + case 0x3d610: + if(r2 != r0) { + pc=0x3d62c; + continue; + } + r2 = 6 << 16; + r2= page[(r2+31320)>>>2]; + if(r2 == r0) { + pc=0x3d640; + continue; + } + case 0x3d62c: + r2 = r0 + r0; + case 0x3d630: + r31= page[(r29+20)>>>2]; + r29 = r29 + 24; + pc=r31; + return; + case 0x3d640: + r31=0x3d648; + pc=0x35200; + run_35000(); return; + case 0x3d648: + if(r2 != r0) { + pc=0x3d62c; + continue; + } + r31=0x3d658; + pc=0x27c00; + run_27800(); return; + case 0x3d658: + if(r2 != r0) { + pc=0x3d690; + continue; + } + r31=0x3d668; + pc=0x35000; + run_35000(); return; + case 0x3d668: + if(r2 == r0) { + pc=0x3d684; + continue; + } + r2 = 6 << 16; + r2= page[(r2+31392)>>>2]; + if(r2 != r0) { + pc=0x3d6cc; + continue; + } + case 0x3d684: + r2 = r0 + 1; + pc=0x3d630; + continue; + case 0x3d690: + r31=0x3d698; + pc=0x26e00; + run_26800(); return; + case 0x3d698: + if(r2 == r0) { + pc=0x3d62c; + continue; + } + r31=0x3d6a8; + pc=0x34e00; + run_34800(); return; + case 0x3d6a8: + if(r2 == r0) { + pc=0x3d684; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 12040; + r31=0x3d6c4; + pc=0x1fc00; + run_1f800(); return; + case 0x3d6c4: + pc=0x3d62c; + continue; + case 0x3d6cc: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 11976; + r31=0x3d6e0; + pc=0x1fc00; + run_1f800(); return; + case 0x3d6e0: + r2 = r0 + 1; + pc=0x3d630; + continue; + case 0x3d800: + pc=0x3d800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_3d800() throws ExecutionException { /* 0x3d800 - 0x3e000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x3d800: + r2 = 6 << 16; + r2= page[(r2+31320)>>>2]; + if(r2 == r0) { + pc=0x3d820; + continue; + } + r2 = r0 + r0; + pc=r31; + return; + case 0x3d820: + r29 = r29 + -48; + r4 = r29 + 16; + page[(r29+44)>>>2] = r31; + r31=0x3d834; + pc=0x1a400; + run_1a000(); return; + case 0x3d834: + r4= page[(r29+24)>>>2]; + r2 = r4 + 128; + r2 = (r2&0xffffffffL) < (384&0xffffffffL) ? 1 : 0; + if(r2 == r0) { + pc=0x3d870; + continue; + } + r4 = r4 << 24; + r4 = r4 >> 24; + r31=0x3d85c; + pc=0x34800; + run_34800(); return; + case 0x3d85c: + r31= page[(r29+44)>>>2]; + r2 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + r29 = r29 + 48; + pc=r31; + return; + case 0x3d870: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5152; + r31=0x3d884; + pc=0x1fc00; + run_1f800(); return; + case 0x3d884: + r4= page[(r29+24)>>>2]; + r4 = r4 << 24; + r4 = r4 >> 24; + r31=0x3d89c; + pc=0x34800; + run_34800(); return; + case 0x3d89c: + r31= page[(r29+44)>>>2]; + r2 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; + r29 = r29 + 48; + pc=r31; + return; + case 0x3da00: + r2 = 6 << 16; + r2= page[(r2+31392)>>>2]; + r29 = r29 + -24; + page[(r29+20)>>>2] = r31; + if(r2 == r0) { + pc=0x3da38; + continue; + } + r2 = (r2&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x3da54; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 11692; + r31=0x3da38; + pc=0x1fc00; + run_1f800(); return; + case 0x3da38: + r31=0x3da40; + pc=0x37400; + run_37000(); return; + case 0x3da40: + r31= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x3da54: + r4 = 6 << 16; + r4 = r4 + 11628; + r31=0x3da64; + pc=0x21200; + run_21000(); return; + case 0x3da64: + r31=0x3da6c; + pc=0x37400; + run_37000(); return; + case 0x3da6c: + r31= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 24; + pc=r31; + return; + case 0x3dc00: + r2 = 6 << 16; + r29 = r29 + -32; + r4 = r2 + 31464; + r5 = r0 + r0; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + r17= page[(r2+31464)>>>2]; + r16 = r2 + r0; + r31=0x3dc2c; + pc=0x1b800; + run_1b800(); return; + case 0x3dc2c: + r31=0x3dc34; + pc=0x21000; + run_21000(); return; + case 0x3dc34: + if(r2 == r0) { + pc=0x3dc4c; + continue; + } + r4 = r16 + 31464; + r5 = r17 + r0; + r31=0x3dc4c; + pc=0x1b800; + run_1b800(); return; + case 0x3dc4c: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 32; + pc=r31; + return; + case 0x3de00: + r2 = 6 << 16; + r29 = r29 + -32; + r4 = r2 + 31464; + r5 = r0 + 1; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + r17= page[(r2+31464)>>>2]; + r16 = r2 + r0; + r31=0x3de2c; + pc=0x1b800; + run_1b800(); return; + case 0x3de2c: + r31=0x3de34; + pc=0x21000; + run_21000(); return; + case 0x3de34: + if(r2 == r0) { + pc=0x3de4c; + continue; + } + r4 = r16 + 31464; + r5 = r17 + r0; + r31=0x3de4c; + pc=0x1b800; + run_1b800(); return; + case 0x3de4c: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 32; + pc=r31; + return; + case 0x3e000: + pc=0x3e000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_3e000() throws ExecutionException { /* 0x3e000 - 0x3e800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x3e000: + r2 = 6 << 16; + r29 = r29 + -32; + r4 = r2 + 31460; + r5 = r0 + r0; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + r17= page[(r2+31460)>>>2]; + r16 = r2 + r0; + r31=0x3e02c; + pc=0x1b800; + run_1b800(); return; + case 0x3e02c: + r31=0x3e034; + pc=0x21000; + run_21000(); return; + case 0x3e034: + if(r2 == r0) { + pc=0x3e04c; + continue; + } + r4 = r16 + 31460; + r5 = r17 + r0; + r31=0x3e04c; + pc=0x1b800; + run_1b800(); return; + case 0x3e04c: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r2 = r0 + 1; + r29 = r29 + 32; + pc=r31; + return; + case 0x3e200: + r2 = 6 << 16; + r2= page[(r2+31392)>>>2]; + r29 = r29 + -48; + r2 = (r2&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; + page[(r29+44)>>>2] = r31; + page[(r29+40)>>>2] = r16; + if(r2 == r0) { + pc=0x3e2d0; + continue; + } + r4 = 6 << 16; + r4 = r4 + 12116; + r31=0x3e230; + pc=0x21200; + run_21000(); return; + case 0x3e230: + r16= page[(r28+-32672)>>>2]; + r4 = r29 + 16; + r5 = r16 + r0; + r6 = r0 + 20; + r31=0x3e248; + pc=0x56fe0; + run_56800(); return; + case 0x3e248: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r3 = tmp; + r2 = 6 << 16; + r2 = r2 + 4764; + r2 = r3 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + r2 = r2 & 64; + if(r2 != r0) { + pc=0x3e324; + continue; + } + r6 = 6 << 16; + r4 = r16 + r0; + r7 = r0 + r0; + r6 = r6 + 17196; + case 0x3e27c: + r5 = 6 << 16; + r5 = r5 + 11508; + r31=0x3e28c; + pc=0x3fa00; + run_3f800(); return; + case 0x3e28c: + r31=0x3e294; + pc=0x21000; + run_21000(); return; + case 0x3e294: + if(r2 != r0) { + pc=0x3e2ec; + continue; + } + r4 = r29 + 16; + r31=0x3e2a8; + pc=0x3fe00; + run_3f800(); return; + case 0x3e2a8: + r2= page[(r28+-32672)>>>2]; + r31= page[(r29+44)>>>2]; + r3 = 6 << 16; + r3 = r3 + 11516; + page[(r2+8)>>>2] = r3; + r16= page[(r29+40)>>>2]; + r2 = r0 + 1; + r29 = r29 + 48; + pc=r31; + return; + case 0x3e2d0: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 12064; + r31=0x3e2e4; + pc=0x1fc00; + run_1f800(); return; + case 0x3e2e4: + pc=0x3e230; + continue; + case 0x3e2ec: + r4= page[(r28+-32672)>>>2]; + r31=0x3e2f8; + pc=0x3fe00; + run_3f800(); return; + case 0x3e2f8: + r4= page[(r28+-32672)>>>2]; + r5 = r29 + 16; + r6 = r0 + 20; + r31=0x3e30c; + pc=0x56fe0; + run_56800(); return; + case 0x3e30c: + r31= page[(r29+44)>>>2]; + r16= page[(r29+40)>>>2]; + r2 = r0 + 1; + r29 = r29 + 48; + pc=r31; + return; + case 0x3e324: + r31=0x3e32c; + pc=0x26600; + run_26000(); return; + case 0x3e32c: + r4 = 6 << 16; + r4 = r4 + 17104; + r31=0x3e33c; + pc=0x1c200; + run_1c000(); return; + case 0x3e33c: + r6 = r2 + r0; + r4= page[(r28+-32672)>>>2]; + r7 = r0 + 1; + pc=0x3e27c; + continue; + case 0x3e400: + r2 = 2 << 16; + r29 = r29 + -72; + r2 = r2 + 10240; + page[(r29+68)>>>2] = r31; + page[(r29+48)>>>2] = r2; + page[(r29+52)>>>2] = r0; + addr=r29+56; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x3e41c: + r4 = r29 + 16; + r31=0x3e428; + pc=0x1aa00; + run_1a800(); return; + case 0x3e428: + r4 = r29 + 16; + r5 = r29 + 48; + r31=0x3e438; + pc=0x21800; + run_21800(); return; + case 0x3e438: + r31=0x3e440; + pc=0x27c00; + run_27800(); return; + case 0x3e440: + if(r2 != r0) { + pc=0x3e41c; + continue; + } + r31= page[(r29+68)>>>2]; + r2 = r0 + 1; + r29 = r29 + 72; + pc=r31; + return; + case 0x3e600: + r2 = 2 << 16; + r29 = r29 + -72; + r2 = r2 + 9728; + page[(r29+68)>>>2] = r31; + page[(r29+48)>>>2] = r2; + page[(r29+52)>>>2] = r0; + addr=r29+56; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x3e61c: + r4 = r29 + 16; + r31=0x3e628; + pc=0x1aa00; + run_1a800(); return; + case 0x3e628: + r4 = r29 + 16; + r5 = r29 + 48; + r31=0x3e638; + pc=0x21800; + run_21800(); return; + case 0x3e638: + r31=0x3e640; + pc=0x27c00; + run_27800(); return; + case 0x3e640: + if(r2 != r0) { + pc=0x3e61c; + continue; + } + r31= page[(r29+68)>>>2]; + r2 = r0 + 1; + r29 = r29 + 72; + pc=r31; + return; + case 0x3e800: + pc=0x3e800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_3e800() throws ExecutionException { /* 0x3e800 - 0x3f000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x3e800: + r2 = 2 << 16; + r29 = r29 + -72; + r2 = r2 + 9216; + page[(r29+68)>>>2] = r31; + page[(r29+48)>>>2] = r2; + page[(r29+52)>>>2] = r0; + addr=r29+56; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x3e81c: + r4 = r29 + 16; + r31=0x3e828; + pc=0x1aa00; + run_1a800(); return; + case 0x3e828: + r4 = r29 + 16; + r5 = r29 + 48; + r31=0x3e838; + pc=0x21800; + run_21800(); return; + case 0x3e838: + r31=0x3e840; + pc=0x27c00; + run_27800(); return; + case 0x3e840: + if(r2 != r0) { + pc=0x3e81c; + continue; + } + r31= page[(r29+68)>>>2]; + r2 = r0 + 1; + r29 = r29 + 72; + pc=r31; + return; + case 0x3ea00: + r2 = 2 << 16; + r29 = r29 + -72; + r2 = r2 + 8704; + page[(r29+68)>>>2] = r31; + page[(r29+48)>>>2] = r2; + page[(r29+52)>>>2] = r0; + addr=r29+56; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x3ea1c: + r4 = r29 + 16; + r31=0x3ea28; + pc=0x1aa00; + run_1a800(); return; + case 0x3ea28: + r4 = r29 + 16; + r5 = r29 + 48; + r31=0x3ea38; + pc=0x21800; + run_21800(); return; + case 0x3ea38: + r31=0x3ea40; + pc=0x27c00; + run_27800(); return; + case 0x3ea40: + if(r2 != r0) { + pc=0x3ea1c; + continue; + } + r31= page[(r29+68)>>>2]; + r2 = r0 + 1; + r29 = r29 + 72; + pc=r31; + return; + case 0x3ec00: + r2 = 2 << 16; + r29 = r29 + -72; + r2 = r2 + 8192; + page[(r29+68)>>>2] = r31; + page[(r29+48)>>>2] = r2; + page[(r29+52)>>>2] = r0; + addr=r29+56; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x3ec1c: + r4 = r29 + 16; + r31=0x3ec28; + pc=0x1aa00; + run_1a800(); return; + case 0x3ec28: + r4 = r29 + 16; + r5 = r29 + 48; + r31=0x3ec38; + pc=0x21800; + run_21800(); return; + case 0x3ec38: + r31=0x3ec40; + pc=0x27c00; + run_27800(); return; + case 0x3ec40: + if(r2 != r0) { + pc=0x3ec1c; + continue; + } + r31= page[(r29+68)>>>2]; + r2 = r0 + 1; + r29 = r29 + 72; + pc=r31; + return; + case 0x3ee00: + r2 = 2 << 16; + r29 = r29 + -72; + r2 = r2 + 7680; + page[(r29+68)>>>2] = r31; + page[(r29+48)>>>2] = r2; + page[(r29+52)>>>2] = r0; + addr=r29+56; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x3ee1c: + r4 = r29 + 16; + r31=0x3ee28; + pc=0x1aa00; + run_1a800(); return; + case 0x3ee28: + r4 = r29 + 16; + r5 = r29 + 48; + r31=0x3ee38; + pc=0x21800; + run_21800(); return; + case 0x3ee38: + r31=0x3ee40; + pc=0x27c00; + run_27800(); return; + case 0x3ee40: + if(r2 != r0) { + pc=0x3ee1c; + continue; + } + r31= page[(r29+68)>>>2]; + r2 = r0 + 1; + r29 = r29 + 72; + pc=r31; + return; + case 0x3f000: + pc=0x3f000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_3f000() throws ExecutionException { /* 0x3f000 - 0x3f800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x3f000: + r2 = 2 << 16; + r29 = r29 + -72; + r2 = r2 + 7168; + page[(r29+68)>>>2] = r31; + page[(r29+48)>>>2] = r2; + page[(r29+52)>>>2] = r0; + addr=r29+56; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x3f01c: + r4 = r29 + 16; + r31=0x3f028; + pc=0x1aa00; + run_1a800(); return; + case 0x3f028: + r4 = r29 + 16; + r5 = r29 + 48; + r31=0x3f038; + pc=0x21800; + run_21800(); return; + case 0x3f038: + r31=0x3f040; + pc=0x27c00; + run_27800(); return; + case 0x3f040: + if(r2 != r0) { + pc=0x3f01c; + continue; + } + r31= page[(r29+68)>>>2]; + r2 = r0 + 1; + r29 = r29 + 72; + pc=r31; + return; + case 0x3f200: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r29 = r29 + -72; + r2= page[(r2+4)>>>2]; + page[(r29+68)>>>2] = r31; + r2 = r2 & 8; + if(r2 != r0) { + pc=0x3f274; + continue; + } + r2 = 2 << 16; + r2 = r2 + 9216; + case 0x3f228: + page[(r29+48)>>>2] = r2; + page[(r29+52)>>>2] = r0; + addr=r29+56; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x3f234: + r4 = r29 + 16; + r31=0x3f240; + pc=0x1aa00; + run_1a800(); return; + case 0x3f240: + r4 = r29 + 16; + r5 = r29 + 48; + r31=0x3f250; + pc=0x21800; + run_21800(); return; + case 0x3f250: + r31=0x3f258; + pc=0x27c00; + run_27800(); return; + case 0x3f258: + if(r2 != r0) { + pc=0x3f234; + continue; + } + r31= page[(r29+68)>>>2]; + r2 = r0 + 1; + r29 = r29 + 72; + pc=r31; + return; + case 0x3f274: + r2 = 2 << 16; + r2 = r2 + 8704; + pc=0x3f228; + continue; + case 0x3f400: + r2 = 6 << 16; + r2= page[(r2+31424)>>>2]; + r29 = r29 + -72; + r2= page[(r2+4)>>>2]; + page[(r29+68)>>>2] = r31; + r2 = r2 & 8; + if(r2 != r0) { + pc=0x3f474; + continue; + } + r2 = 2 << 16; + r2 = r2 + 8192; + case 0x3f428: + page[(r29+48)>>>2] = r2; + page[(r29+52)>>>2] = r0; + addr=r29+56; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + case 0x3f434: + r4 = r29 + 16; + r31=0x3f440; + pc=0x1aa00; + run_1a800(); return; + case 0x3f440: + r4 = r29 + 16; + r5 = r29 + 48; + r31=0x3f450; + pc=0x21800; + run_21800(); return; + case 0x3f450: + r31=0x3f458; + pc=0x27c00; + run_27800(); return; + case 0x3f458: + if(r2 != r0) { + pc=0x3f434; + continue; + } + r31= page[(r29+68)>>>2]; + r2 = r0 + 1; + r29 = r29 + 72; + pc=r31; + return; + case 0x3f474: + r2 = 2 << 16; + r2 = r2 + 7680; + pc=0x3f428; + continue; + case 0x3f600: + r29 = r29 + -64; + page[(r29+60)>>>2] = r31; + page[(r29+56)>>>2] = r20; + page[(r29+52)>>>2] = r19; + page[(r29+48)>>>2] = r18; + page[(r29+44)>>>2] = r17; + page[(r29+40)>>>2] = r16; + r31=0x3f624; + pc=0x23000; + run_23000(); return; + case 0x3f624: + r3 = r0 + 32; + if(r2 == r3) { + pc=0x3f75c; + continue; + } + case 0x3f630: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 61; + if(r3 == r2) { + pc=0x3f680; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5020; + r31=0x3f654; + pc=0x1fc00; + run_1f800(); return; + case 0x3f654: + r31=0x3f65c; + pc=0x23800; + run_23800(); return; + case 0x3f65c: + r31= page[(r29+60)>>>2]; + r20= page[(r29+56)>>>2]; + r19= page[(r29+52)>>>2]; + r18= page[(r29+48)>>>2]; + r17= page[(r29+44)>>>2]; + r16= page[(r29+40)>>>2]; + r29 = r29 + 64; + pc=r31; + return; + case 0x3f680: + r31=0x3f688; + pc=0x23000; + run_23000(); return; + case 0x3f688: + r18 = 6 << 16; + r4 = r29 + 16; + r20 = 6 << 16; + r31=0x3f69c; + pc=0x1a400; + run_1a000(); return; + case 0x3f69c: + r17 = r0 + r0; + r19 = 6 << 16; + r18 = r18 + 12172; + r20 = r20 + 12180; + case 0x3f6ac: + r31=0x3f6b4; + pc=0x27c00; + run_27800(); return; + case 0x3f6b4: + if(r2 == r0) { + pc=0x3f6fc; + continue; + } + case 0x3f6bc: + r31=0x3f6c4; + pc=0x26e00; + run_26800(); return; + case 0x3f6c4: + if(r2 == r0) { + pc=0x3f654; + continue; + } + r16= page[(r19+17104)>>>2]; + r5 = r18 + r0; + r4 = r16 + r0; + r31=0x3f6e0; + pc=0x51600; + run_51000(); return; + case 0x3f6e0: + if(r2 != r0) { + pc=0x3f738; + continue; + } + r17 = r17 | 1; + r31=0x3f6f4; + pc=0x27c00; + run_27800(); return; + case 0x3f6f4: + if(r2 != r0) { + pc=0x3f6bc; + continue; + } + case 0x3f6fc: + r4= page[(r29+24)>>>2]; + r5 = r17 + r0; + r31=0x3f70c; + pc=0x36800; + run_36800(); return; + case 0x3f70c: + r31=0x3f714; + pc=0x24000; + run_24000(); return; + case 0x3f714: + r31= page[(r29+60)>>>2]; + r20= page[(r29+56)>>>2]; + r19= page[(r29+52)>>>2]; + r18= page[(r29+48)>>>2]; + r17= page[(r29+44)>>>2]; + r16= page[(r29+40)>>>2]; + r29 = r29 + 64; + pc=r31; + return; + case 0x3f738: + r4 = r16 + r0; + r5 = r20 + r0; + r31=0x3f748; + pc=0x51600; + run_51000(); return; + case 0x3f748: + if(r2 != r0) { + pc=0x3f76c; + continue; + } + r17 = r17 | 2; + pc=0x3f6ac; + continue; + case 0x3f75c: + r31=0x3f764; + pc=0x23000; + run_23000(); return; + case 0x3f764: + pc=0x3f630; + continue; + case 0x3f76c: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 12192; + r31=0x3f780; + pc=0x1fc00; + run_1f800(); return; + case 0x3f780: + pc=0x3f654; + continue; + case 0x3f800: + pc=0x3f800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_3f800() throws ExecutionException { /* 0x3f800 - 0x40000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x3f800: + r29 = r29 + -32; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r16; + r31=0x3f814; + pc=0x23000; + run_23000(); return; + case 0x3f814: + r31=0x3f81c; + pc=0x26e00; + run_26800(); return; + case 0x3f81c: + if(r2 != r0) { + pc=0x3f840; + continue; + } + case 0x3f824: + r31=0x3f82c; + pc=0x23800; + run_23800(); return; + case 0x3f82c: + r31= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x3f840: + r4 = 6 << 16; + r6 = 6 << 16; + r4 = r4 + 22628; + r5 = r29 + 16; + r6 = r6 + 17104; + r31=0x3f85c; + pc=0x42400; + run_42000(); return; + case 0x3f85c: + if(r2 == r0) { + pc=0x3f8bc; + continue; + } + r16= page[(r29+16)>>>2]; + if(r16 == r0) { + pc=0x3f8bc; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 32; + if(r3 == r2) { + pc=0x3f8d8; + continue; + } + case 0x3f884: + pc=r16; + r31=0x3f88c; + return; + case 0x3f88c: + if(r2 == r0) { + pc=0x3f824; + continue; + } + r3 = r0 + 1; + if(r2 != r3) { + pc=0x3f82c; + continue; + } + r31=0x3f8a8; + pc=0x24000; + run_24000(); return; + case 0x3f8a8: + r31= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x3f8bc: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 12576; + r31=0x3f8d0; + pc=0x1fc00; + run_1f800(); return; + case 0x3f8d0: + pc=0x3f824; + continue; + case 0x3f8d8: + r31=0x3f8e0; + pc=0x23000; + run_23000(); return; + case 0x3f8e0: + pc=0x3f884; + continue; + case 0x3fa00: + r2= page[(r28+-31292)>>>2]; + r2 = r2 + 2; + page[(r4+0)>>>2] = r2; + page[(r28+-31292)>>>2] = r2; + r2= page[(r28+-32672)>>>2]; + page[(r28+-32672)>>>2] = r4; + r2= page[(r2+4)>>>2]; + page[(r4+8)>>>2] = r5; + page[(r4+4)>>>2] = r2; + page[(r4+12)>>>2] = r6; + page[(r4+16)>>>2] = r7; + pc=r31; + return; + case 0x3fc00: + r2= page[(r28+-31296)>>>2]; + r2 = r2 + 2; + page[(r28+-31296)>>>2] = r2; + page[(r4+4)>>>2] = r2; + pc=r31; + return; + case 0x3fe00: + r2= page[(r4+16)>>>2]; + if(r2 != r0) { + pc=0x3fe18; + continue; + } + pc=r31; + return; + case 0x3fe18: + r4= page[(r4+12)>>>2]; + pc=0x4e000; + run_4e000(); return; + case 0x40000: + pc=0x40000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_40000() throws ExecutionException { /* 0x40000 - 0x40800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x40000: + r3 = r0 + 2; + r2 = 6 << 16; + page[(r2+30236)>>>2] = r3; + page[(r28+-31292)>>>2] = r3; + r3 = 6 << 16; + r2 = r2 + 30236; + r3 = r3 + 11516; + page[(r2+8)>>>2] = r3; + r3 = 6 << 16; + r3 = r3 + 17196; + page[(r2+12)>>>2] = r3; + r3 = r0 + 1; + page[(r2+16)>>>2] = r0; + page[(r28+-32672)>>>2] = r2; + page[(r28+-31296)>>>2] = r3; + page[(r2+4)>>>2] = r3; + pc=r31; + return; + case 0x40200: + r2= page[(r4+16)>>>2]; + r6 = 6 << 16; + r7= page[(r2+0)>>>2]; + r6 = r6 + 15440; + r3 = r4 + r0; + if(r7 == r6) { + pc=0x40224; + continue; + } + case 0x4021c: + pc=r31; + return; + case 0x40224: + r4= page[(r2+8)>>>2]; + r6 = r0 + 1; + if(r4 != r6) { + pc=0x4021c; + continue; + } + r6= page[(r2+24)>>>2]; + if(r6 != r4) { + pc=0x4021c; + continue; + } + r4 = r5 + r0; + r6= page[(r2+16)>>>2]; + r5 = 6 << 16; + r7= page[(r3+12)>>>2]; + r5 = r5 + 12616; + pc=0x4b800; + run_4b800(); return; + case 0x40400: + r2= page[(r4+16)>>>2]; + r3 = r4 + r0; + r6= page[(r2+36)>>>2]; + if(r6 == r0) { + pc=0x4042c; + continue; + } + r6 = 6 << 16; + r7= page[(r2+0)>>>2]; + r6 = r6 + 15440; + if(r7 == r6) { + pc=0x40434; + continue; + } + case 0x4042c: + pc=r31; + return; + case 0x40434: + r4= page[(r2+8)>>>2]; + r6 = r0 + 1; + if(r4 != r6) { + pc=0x4042c; + continue; + } + r6= page[(r2+24)>>>2]; + if(r6 == r4) { + pc=0x4042c; + continue; + } + r4 = r5 + r0; + r6= page[(r2+16)>>>2]; + r5 = 6 << 16; + r7= page[(r3+12)>>>2]; + r5 = r5 + 12616; + pc=0x4b800; + run_4b800(); return; + case 0x40600: + r2= page[(r4+16)>>>2]; + r3 = r4 + r0; + r6= page[(r2+36)>>>2]; + if(r6 != r0) { + pc=0x4062c; + continue; + } + r6 = 6 << 16; + r7= page[(r2+0)>>>2]; + r6 = r6 + 15440; + if(r7 == r6) { + pc=0x40634; + continue; + } + case 0x4062c: + pc=r31; + return; + case 0x40634: + r4= page[(r2+8)>>>2]; + r6 = r0 + 1; + if(r4 != r6) { + pc=0x4062c; + continue; + } + r6= page[(r2+24)>>>2]; + if(r6 == r4) { + pc=0x4062c; + continue; + } + r4 = r5 + r0; + r6= page[(r2+16)>>>2]; + r5 = 6 << 16; + r7= page[(r3+12)>>>2]; + r5 = r5 + 12616; + pc=0x4b800; + run_4b800(); return; + case 0x40800: + pc=0x40800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_40800() throws ExecutionException { /* 0x40800 - 0x41000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x40800: + r29 = r29 + -32; + page[(r29+16)>>>2] = r16; + r16= page[(r4+16)>>>2]; + r2 = 6 << 16; + r3= page[(r16+0)>>>2]; + r2 = r2 + 15440; + page[(r29+20)>>>2] = r17; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r18; + r17 = r4 + r0; + if(r3 == r2) { + pc=0x4084c; + continue; + } + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x4084c: + r2 = 6 << 16; + r2= page[(r2+31352)>>>2]; + r18 = r5 + r0; + if(r2 == r0) { + pc=0x40870; + continue; + } + r3= page[(r16+24)>>>2]; + r2 = r0 + 1; + if(r3 == r2) { + pc=0x40a04; + continue; + } + case 0x40870: + r5 = 6 << 16; + r6= page[(r17+12)>>>2]; + r4 = r18 + r0; + r5 = r5 + 12640; + r31=0x40888; + pc=0x4b800; + run_4b800(); return; + case 0x40888: + r2= page[(r16+12)>>>2]; + r3 = r0 + 4; + r2 = r2 & 7; + if(r2 == r3) { + pc=0x40950; + continue; + } + r3 = r0 + 6; + if(r2 == r3) { + pc=0x40950; + continue; + } + r3 = r0 + 2; + if(r2 == r3) { + pc=0x40974; + continue; + } + r4 = 6 << 16; + r4 = r4 + 12660; + r5 = r0 + 1; + r6 = r0 + 3; + r7 = r18 + r0; + r31=0x408d0; + pc=0x4d600; + run_4d000(); return; + case 0x408d0: + r5= page[(r16+8)>>>2]; + if(r5 == r0) { + pc=0x40998; + continue; + } + r2 = r0 + 1; + if(r5 == r2) { + pc=0x40a4c; + continue; + } + r2 = r0 + 2; + if(r5 == r2) { + pc=0x40a28; + continue; + } + r4 = 6 << 16; + r4 = r4 + 12680; + r31=0x40908; + pc=0x21400; + run_21000(); return; + case 0x40908: + r2= page[(r16+12)>>>2]; + r2 = r2 & 16; + if(r2 != r0) { + pc=0x409e0; + continue; + } + case 0x4091c: + r2= page[(r16+36)>>>2]; + if(r2 == r0) { + pc=0x409bc; + continue; + } + case 0x4092c: + r31= page[(r29+28)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + r5 = r18 + r0; + r18= page[(r29+24)>>>2]; + r4 = r0 + 10; + r29 = r29 + 32; + pc=0x4ba00; + run_4b800(); return; + case 0x40950: + r4 = 6 << 16; + r4 = r4 + 12652; + r5 = r0 + 1; + r6 = r0 + 5; + r7 = r18 + r0; + r31=0x4096c; + pc=0x4d600; + run_4d000(); return; + case 0x4096c: + pc=0x408d0; + continue; + case 0x40974: + r4 = 6 << 16; + r4 = r4 + 12644; + r5 = r0 + 1; + r6 = r0 + 5; + r7 = r18 + r0; + r31=0x40990; + pc=0x4d600; + run_4d000(); return; + case 0x40990: + pc=0x408d0; + continue; + case 0x40998: + r4 = 6 << 16; + r4 = r4 + 12664; + r5 = r0 + 1; + r6 = r0 + 2; + r7 = r18 + r0; + r31=0x409b4; + pc=0x4d600; + run_4d000(); return; + case 0x409b4: + pc=0x40908; + continue; + case 0x409bc: + r4 = 6 << 16; + r4 = r4 + 12708; + r5 = r0 + 1; + r6 = r0 + 9; + r7 = r18 + r0; + r31=0x409d8; + pc=0x4d600; + run_4d000(); return; + case 0x409d8: + pc=0x4092c; + continue; + case 0x409e0: + r4 = 6 << 16; + r4 = r4 + 12700; + r5 = r0 + 1; + r6 = r0 + 4; + r7 = r18 + r0; + r31=0x409fc; + pc=0x4d600; + run_4d000(); return; + case 0x409fc: + pc=0x4091c; + continue; + case 0x40a04: + r4 = 6 << 16; + r4 = r4 + 12632; + r5 = r0 + 1; + r6 = r0 + 5; + r7 = r18 + r0; + r31=0x40a20; + pc=0x4d600; + run_4d000(); return; + case 0x40a20: + pc=0x40870; + continue; + case 0x40a28: + r5 = 6 << 16; + r7= page[(r16+20)>>>2]; + r6= page[(r16+16)>>>2]; + r4 = r18 + r0; + r5 = r5 + 12672; + r31=0x40a44; + pc=0x4b800; + run_4b800(); return; + case 0x40a44: + pc=0x40908; + continue; + case 0x40a4c: + r5 = 6 << 16; + r6= page[(r16+16)>>>2]; + r4 = r18 + r0; + r5 = r5 + 12668; + r31=0x40a64; + pc=0x4b800; + run_4b800(); return; + case 0x40a64: + pc=0x40908; + continue; + case 0x40c00: + r29 = r29 + -32; + r5 = 6 << 16; + r6 = r4 + r0; + r5 = r5 + 30256; + r4 = r29 + 16; + r7 = r0 + 1; + page[(r29+28)>>>2] = r31; + r31=0x40c24; + pc=0x42800; + run_42800(); return; + case 0x40c24: + if(r2 != r0) { + pc=0x40c44; + continue; + } + r2= page[(r29+16)>>>2]; + r31= page[(r29+28)>>>2]; + r2= page[(r2+16)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x40c44: + r4 = r0 + 48; + r31=0x40c50; + pc=0x20200; + run_20000(); return; + case 0x40c50: + r3= page[(r29+16)>>>2]; + r31= page[(r29+28)>>>2]; + page[(r3+16)>>>2] = r2; + r3 = 6 << 16; + r3= page[(r3+31320)>>>2]; + page[(r2+0)>>>2] = r0; + page[(r2+32)>>>2] = r3; + page[(r2+36)>>>2] = r0; + page[(r2+40)>>>2] = r0; + page[(r2+44)>>>2] = r0; + r29 = r29 + 32; + pc=r31; + return; + case 0x40e00: + r2= page[(r4+0)>>>2]; + r29 = r29 + -32; + page[(r29+20)>>>2] = r16; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r17; + r16 = r4 + r0; + if(r2 == r0) { + pc=0x40e80; + continue; + } + r3= page[(r5+0)>>>2]; + r17 = r5 + r0; + if(r2 == r3) { + pc=0x40ea4; + continue; + } + r6 = r6 & 2; + if(r6 != r0) { + pc=0x40e50; + continue; + } + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 5036; + r31=0x40e50; + pc=0x1fc00; + run_1f800(); return; + case 0x40e50: + r4 = r16 + r0; + r5 = r17 + r0; + r6 = r0 + 32; + r31=0x40e64; + pc=0x56fe0; + run_56800(); return; + case 0x40e64: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + page[(r16+36)>>>2] = r0; + r16= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x40e80: + r6 = r0 + 32; + r31=0x40e8c; + pc=0x56fe0; + run_56800(); return; + case 0x40e8c: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x40ea4: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r25= page[(r2+12)>>>2]; + r6 = r6 & 1; + r29 = r29 + 32; + pc=r25; + return; + case 0x41000: + pc=0x41000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_41000() throws ExecutionException { /* 0x41000 - 0x41800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x41000: + r29 = r29 + -32; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + page[(r29+28)>>>2] = r31; + r16 = r4 + r0; + r17 = r5 + r0; + if(r5 == r0) { + pc=0x410d8; + continue; + } + case 0x41020: + r2= page[(r16+0)>>>2]; + if(r2 == r0) { + pc=0x410f0; + continue; + } + case 0x41030: + r3 = 6 << 16; + r3 = r3 + 15440; + if(r2 == r3) { + pc=0x41064; + continue; + } + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 12752; + r29 = r29 + 32; + pc=0x1fc00; + run_1f800(); return; + case 0x41064: + r2= page[(r16+36)>>>2]; + if(r2 == r0) { + pc=0x410ac; + continue; + } + r2= page[(r16+12)>>>2]; + r2 = r2 & 7; + if(r2 == r17) { + pc=0x410c0; + continue; + } + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 12796; + r29 = r29 + 32; + pc=0x1fc00; + run_1f800(); return; + case 0x410ac: + r3= page[(r16+12)>>>2]; + r2 = r0 + -8; + r2 = r3 & r2; + r17 = r17 | r2; + page[(r16+12)>>>2] = r17; + case 0x410c0: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + r29 = r29 + 32; + pc=r31; + return; + case 0x410d8: + r4 = 6 << 16; + r4 = r4 + 12720; + r31=0x410e8; + pc=0x21400; + run_21000(); return; + case 0x410e8: + pc=0x41020; + continue; + case 0x410f0: + r4 = 6 << 16; + r4 = r4 + 12736; + r5 = r0 + r0; + r31=0x41104; + pc=0x21400; + run_21000(); return; + case 0x41104: + r2= page[(r16+0)>>>2]; + pc=0x41030; + continue; + case 0x41200: + r29 = r29 + -32; + r5 = 6 << 16; + r5 = r5 + 30256; + page[(r29+24)>>>2] = r16; + r6 = r0 + r0; + r16 = r4 + r0; + r7 = r0 + 1; + r4 = r29 + 16; + page[(r29+28)>>>2] = r31; + r31=0x4122c; + pc=0x42800; + run_42800(); return; + case 0x4122c: + if(r2 != r0) { + pc=0x4126c; + continue; + } + r2= page[(r29+16)>>>2]; + r3 = 6 << 16; + r2= page[(r2+16)>>>2]; + r3 = r3 + 15440; + r31= page[(r29+28)>>>2]; + page[(r2+0)>>>2] = r3; + r3 = r0 + 1; + page[(r2+16)>>>2] = r16; + page[(r2+8)>>>2] = r3; + r16= page[(r29+24)>>>2]; + page[(r2+12)>>>2] = r0; + r29 = r29 + 32; + pc=r31; + return; + case 0x4126c: + r4 = r0 + 48; + r31=0x41278; + pc=0x20200; + run_20000(); return; + case 0x41278: + r3= page[(r29+16)>>>2]; + r31= page[(r29+28)>>>2]; + page[(r3+16)>>>2] = r2; + r3 = 6 << 16; + r3= page[(r3+31320)>>>2]; + page[(r2+0)>>>2] = r0; + page[(r2+32)>>>2] = r3; + r3 = 6 << 16; + r3 = r3 + 15440; + page[(r2+0)>>>2] = r3; + r3 = r0 + 1; + page[(r2+16)>>>2] = r16; + page[(r2+36)>>>2] = r0; + r16= page[(r29+24)>>>2]; + page[(r2+40)>>>2] = r0; + page[(r2+44)>>>2] = r0; + page[(r2+8)>>>2] = r3; + page[(r2+12)>>>2] = r0; + r29 = r29 + 32; + pc=r31; + return; + case 0x41400: + r7 = r4 + r0; + r6 = 4 << 16; + r4 = 6 << 16; + r4 = r4 + 30256; + r5 = r0 + r0; + r6 = r6 + 2048; + pc=0x42a00; + run_42800(); return; + case 0x41600: + r29 = r29 + -32; + r6 = 4 << 16; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + r17 = 6 << 16; + r16 = r4 + r0; + r7 = r16 + r0; + r4 = r17 + 30256; + r6 = r6 + 1536; + r5 = r0 + r0; + page[(r29+28)>>>2] = r31; + r31=0x41634; + pc=0x42a00; + run_42800(); return; + case 0x41634: + r5 = r16 + r0; + r4 = r0 + 10; + r31=0x41644; + pc=0x4ba00; + run_4b800(); return; + case 0x41644: + r6 = 4 << 16; + r7 = r16 + r0; + r4 = r17 + 30256; + r6 = r6 + 1024; + r5 = r0 + r0; + r31=0x41660; + pc=0x42a00; + run_42800(); return; + case 0x41660: + r5 = r16 + r0; + r4 = r0 + 10; + r31=0x41670; + pc=0x4ba00; + run_4b800(); return; + case 0x41670: + r31= page[(r29+28)>>>2]; + r4 = r17 + 30256; + r6 = 4 << 16; + r17= page[(r29+24)>>>2]; + r7 = r16 + r0; + r16= page[(r29+20)>>>2]; + r5 = r0 + r0; + r6 = r6 + 512; + r29 = r29 + 32; + pc=0x42a00; + run_42800(); return; + case 0x41800: + pc=0x41800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_41800() throws ExecutionException { /* 0x41800 - 0x42000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x41800: + r29 = r29 + -56; + page[(r29+44)>>>2] = r20; + r20 = 6 << 16; + page[(r29+36)>>>2] = r18; + r5 = r0 + r0; + r18 = r4 + r0; + r4 = r20 + 17104; + page[(r29+52)>>>2] = r31; + page[(r29+48)>>>2] = r21; + page[(r29+40)>>>2] = r19; + page[(r29+32)>>>2] = r17; + page[(r29+28)>>>2] = r16; + r31=0x41838; + pc=0x1c400; + run_1c000(); return; + case 0x41838: + r2= page[(r28+-32672)>>>2]; + r5 = 6 << 16; + r6= page[(r2+0)>>>2]; + r4 = r29 + 16; + r5 = r5 + 30256; + r7 = r0 + 1; + r31=0x41858; + pc=0x42800; + run_42800(); return; + case 0x41858: + if(r2 != r0) { + pc=0x419b4; + continue; + } + r2= page[(r29+16)>>>2]; + r21= page[(r2+16)>>>2]; + r2= page[(r21+0)>>>2]; + if(r2 == r0) { + pc=0x41a14; + continue; + } + r3 = 6 << 16; + r3 = r3 + 15440; + if(r2 == r3) { + pc=0x418a4; + continue; + } + r4 = 6 << 16; + r4 = r4 + 12820; + r5 = r0 + r0; + r31=0x418a4; + pc=0x21400; + run_21000(); return; + case 0x418a4: + r2 = 6 << 16; + case 0x418a8: + r2= page[(r2+31320)>>>2]; + r3= page[(r21+32)>>>2]; + if(r3 == r2) { + pc=0x419a8; + continue; + } + page[(r21+32)>>>2] = r2; + page[(r21+16)>>>2] = r0; + r16 = r0 + r0; + case 0x418c8: + r17 = r20 + 17104; + r3= page[(r17+4)>>>2]; + r19 = r17 + r0; + r3 = r3 + -1; + page[(r17+4)>>>2] = r3; + pc=0x41910; + continue; + case 0x418e4: + r5= page[(r20+17104)>>>2]; + r6 = r3 + 1; + r3 = r5 + r3; + r5 = r16 & 15; + r5 = r5 + 97; + r16 = r16 >>> 4; + page[(r17+4)>>>2] = r6; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + if(r16 == r0) { + pc=0x41958; + continue; + } + case 0x4190c: + r3= page[(r19+4)>>>2]; + case 0x41910: + r5= page[(r17+8)>>>2]; + if(r5 != r3) { + pc=0x418e4; + continue; + } + r4 = r19 + r0; + r31=0x4192c; + pc=0x1c000; + run_1c000(); return; + case 0x4192c: + r3= page[(r19+4)>>>2]; + r5= page[(r20+17104)>>>2]; + r6 = r3 + 1; + r3 = r5 + r3; + r5 = r16 & 15; + r5 = r5 + 97; + r16 = r16 >>> 4; + page[(r17+4)>>>2] = r6; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + if(r16 != r0) { + pc=0x4190c; + continue; + } + case 0x41958: + r4 = r19 + r0; + r5 = r0 + r0; + r31=0x41968; + pc=0x1c400; + run_1c000(); return; + case 0x41968: + if(r18 == r0) { + pc=0x41980; + continue; + } + r2= page[(r21+16)>>>2]; + r2 = r2 + 1; + page[(r21+16)>>>2] = r2; + case 0x41980: + r31= page[(r29+52)>>>2]; + r21= page[(r29+48)>>>2]; + r20= page[(r29+44)>>>2]; + r19= page[(r29+40)>>>2]; + r18= page[(r29+36)>>>2]; + r17= page[(r29+32)>>>2]; + r16= page[(r29+28)>>>2]; + r29 = r29 + 56; + pc=r31; + return; + case 0x419a8: + r16= page[(r21+16)>>>2]; + pc=0x418c8; + continue; + case 0x419b4: + r4 = r0 + 48; + r31=0x419c0; + pc=0x20200; + run_20000(); return; + case 0x419c0: + r21 = r2 + r0; + r2= page[(r29+16)>>>2]; + page[(r2+16)>>>2] = r21; + r2 = 6 << 16; + r3= page[(r2+31320)>>>2]; + page[(r21+0)>>>2] = r0; + page[(r21+32)>>>2] = r3; + page[(r21+36)>>>2] = r0; + page[(r21+40)>>>2] = r0; + page[(r21+44)>>>2] = r0; + case 0x419ec: + r3 = 6 << 16; + r3 = r3 + 15440; + page[(r21+0)>>>2] = r3; + r3 = r0 + 1; + page[(r21+8)>>>2] = r3; + page[(r21+12)>>>2] = r0; + page[(r21+24)>>>2] = r0; + page[(r21+16)>>>2] = r0; + pc=0x418a8; + continue; + case 0x41a14: + r2 = 6 << 16; + pc=0x419ec; + continue; + case 0x41c00: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r5 = tmp; + r29 = r29 + -64; + r2 = r0 + 63; + page[(r29+60)>>>2] = r31; + page[(r29+56)>>>2] = r23; + page[(r29+52)>>>2] = r22; + page[(r29+48)>>>2] = r21; + page[(r29+44)>>>2] = r20; + page[(r29+40)>>>2] = r19; + page[(r29+36)>>>2] = r18; + page[(r29+32)>>>2] = r17; + page[(r29+28)>>>2] = r16; + if(r5 == r2) { + pc=0x41c48; + continue; + } + r4 = 6 << 16; + r4 = r4 + 12848; + r31=0x41c48; + pc=0x21400; + run_21000(); return; + case 0x41c48: + r18 = 6 << 16; + r4 = r18 + 24100; + r23 = 6 << 16; + r31=0x41c5c; + pc=0x1be00; + run_1b800(); return; + case 0x41c5c: + r5= page[(r23+17104)>>>2]; + r4 = r18 + 24100; + r31=0x41c6c; + pc=0x1c600; + run_1c000(); return; + case 0x41c6c: + r21 = 6 << 16; + r22 = 6 << 16; + r16 = r18 + 24100; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r20 = 6 << 16; + r21 = r21 + 15440; + r22 = r22 + 15360; + r19 = r16 + r0; + case 0x41c8c: + r4 = r0 + 63; + if(r2 != r4) { + pc=0x41f08; + continue; + } + r31=0x41ca0; + pc=0x23000; + run_23000(); return; + case 0x41ca0: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r2 = r0 + 40; + if(r3 == r2) { + pc=0x41ea0; + continue; + } + r4 = r29 + 20; + r5 = r0 + r0; + r17 = r0 + r0; + r31=0x41cc4; + pc=0x26200; + run_26000(); return; + case 0x41cc4: + if(r2 != r0) { + pc=0x41ec4; + continue; + } + case 0x41ccc: + r6= page[(r29+20)>>>2]; + r4 = r29 + 16; + r5 = r20 + 30256; + r7 = r0 + 1; + r31=0x41ce4; + pc=0x42800; + run_42800(); return; + case 0x41ce4: + if(r2 != r0) { + pc=0x41df8; + continue; + } + r2= page[(r29+16)>>>2]; + r4 = r0 + 1; + r2= page[(r2+16)>>>2]; + r3= page[(r2+0)>>>2]; + page[(r2+36)>>>2] = r4; + if(r3 == r21) { + pc=0x41e78; + continue; + } + if(r3 != r22) { + pc=0x41e30; + continue; + } + r2= page[(r2+8)>>>2]; + r4 = r18 + 24100; + r6= page[(r2+0)>>>2]; + r5 = r2 + 8; + r31=0x41d2c; + pc=0x1c800; + run_1c800(); return; + case 0x41d2c: + if(r17 == r0) { + pc=0x41d58; + continue; + } + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 32; + if(r2 == r3) { + pc=0x41ed0; + continue; + } + r3 = r0 + 41; + if(r2 != r3) { + pc=0x41ee8; + continue; + } + case 0x41d50: + r31=0x41d58; + pc=0x23000; + run_23000(); return; + case 0x41d58: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r3 = tmp; + r17 = 6 << 16; + r2 = r3 & 255; + r17 = r17 + 4764; + r2 = r17 + r2; + addr=r2+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r4 = tmp; + r2 = r3 + r0; + r4 = r4 & 64; + if(r4 != r0) { + pc=0x41dc8; + continue; + } + pc=0x41c8c; + continue; + case 0x41d88: + r4= page[(r18+24100)>>>2]; + r5 = r3 + 1; + r3 = r4 + r3; + page[(r16+4)>>>2] = r5; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + r31=0x41da4; + pc=0x23000; + run_23000(); return; + case 0x41da4: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r2 & 255; + r3 = r17 + r3; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r3 = tmp; + r3 = r3 & 64; + if(r3 == r0) { + pc=0x41c8c; + continue; + } + case 0x41dc8: + r3= page[(r16+4)>>>2]; + r4= page[(r16+8)>>>2]; + if(r3 != r4) { + pc=0x41d88; + continue; + } + r4 = r19 + r0; + r31=0x41de8; + pc=0x1c000; + run_1c000(); return; + case 0x41de8: + r3= page[(r19+4)>>>2]; + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + pc=0x41d88; + continue; + case 0x41df8: + r4 = r0 + 48; + r31=0x41e04; + pc=0x20200; + run_20000(); return; + case 0x41e04: + r3= page[(r29+16)>>>2]; + page[(r3+16)>>>2] = r2; + r3 = 6 << 16; + r3= page[(r3+31320)>>>2]; + page[(r2+0)>>>2] = r0; + page[(r2+32)>>>2] = r3; + r3 = r0 + 1; + page[(r2+40)>>>2] = r0; + page[(r2+44)>>>2] = r0; + page[(r2+36)>>>2] = r3; + case 0x41e30: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 12928; + r31=0x41e44; + pc=0x1fc00; + run_1f800(); return; + case 0x41e44: + r2 = r0 + 1; + case 0x41e48: + r31= page[(r29+60)>>>2]; + r23= page[(r29+56)>>>2]; + r22= page[(r29+52)>>>2]; + r21= page[(r29+48)>>>2]; + r20= page[(r29+44)>>>2]; + r19= page[(r29+40)>>>2]; + r18= page[(r29+36)>>>2]; + r17= page[(r29+32)>>>2]; + r16= page[(r29+28)>>>2]; + r29 = r29 + 64; + pc=r31; + return; + case 0x41e78: + r3= page[(r2+8)>>>2]; + if(r3 != r4) { + pc=0x41f50; + continue; + } + r5= page[(r2+16)>>>2]; + r4 = r18 + 24100; + r31=0x41e98; + pc=0x1ca00; + run_1c800(); return; + case 0x41e98: + pc=0x41d2c; + continue; + case 0x41ea0: + r31=0x41ea8; + pc=0x23000; + run_23000(); return; + case 0x41ea8: + r4 = r29 + 20; + r5 = r0 + r0; + r17 = r0 + 1; + r31=0x41ebc; + pc=0x26200; + run_26000(); return; + case 0x41ebc: + if(r2 == r0) { + pc=0x41ccc; + continue; + } + case 0x41ec4: + r2 = r0 + 1; + pc=0x41e48; + continue; + case 0x41ed0: + r31=0x41ed8; + pc=0x23000; + run_23000(); return; + case 0x41ed8: + addr=r28+-31268; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r0 + 41; + if(r2 == r3) { + pc=0x41d50; + continue; + } + case 0x41ee8: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 12992; + r31=0x41efc; + pc=0x1fc00; + run_1f800(); return; + case 0x41efc: + r2 = r0 + 1; + pc=0x41e48; + continue; + case 0x41f08: + r5 = r0 + r0; + r4 = r18 + 24100; + r31=0x41f18; + pc=0x1c400; + run_1c000(); return; + case 0x41f18: + r4 = r23 + 17104; + r31=0x41f24; + pc=0x1be00; + run_1b800(); return; + case 0x41f24: + r5= page[(r18+24100)>>>2]; + r4 = r23 + 17104; + r31=0x41f34; + pc=0x1c600; + run_1c000(); return; + case 0x41f34: + r4 = r23 + 17104; + r5 = r0 + r0; + r31=0x41f44; + pc=0x1c400; + run_1c000(); return; + case 0x41f44: + r2 = r0 + r0; + pc=0x41e48; + continue; + case 0x41f50: + r5 = 6 << 16; + r4 = r0 + -2; + r5 = r5 + 12864; + r31=0x41f64; + pc=0x1fc00; + run_1f800(); return; + case 0x41f64: + r2 = r0 + 1; + pc=0x41e48; + continue; + case 0x42000: + pc=0x42000; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_42000() throws ExecutionException { /* 0x42000 - 0x42800 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x42000: + r29 = r29 + -64; + r3 = r4 + r0; + page[(r29+56)>>>2] = r30; + page[(r29+28)>>>2] = r17; + page[(r29+24)>>>2] = r16; + page[(r29+60)>>>2] = r31; + page[(r29+52)>>>2] = r23; + page[(r29+48)>>>2] = r22; + page[(r29+44)>>>2] = r21; + page[(r29+40)>>>2] = r20; + page[(r29+36)>>>2] = r19; + page[(r29+32)>>>2] = r18; + page[(r29+64)>>>2] = r4; + r30 = r5 + r0; + r17 = r6 + r0; + r16 = r7 + r0; + case 0x42040: + r2= page[(r3+20)>>>2]; + if(r2 != r30) { + pc=0x42060; + continue; + } + r4 = r3 + r0; + r5 = r16 + r0; + pc=r17; + r31=0x42060; + return; + case 0x42060: + r2= page[(r29+64)>>>2]; + r2= page[(r2+0)>>>2]; + page[(r29+16)>>>2] = r2; + if(r2 == r0) { + pc=0x4229c; + continue; + } + case 0x4207c: + r3= page[(r29+16)>>>2]; + r2= page[(r3+20)>>>2]; + if(r30 != r2) { + pc=0x420a4; + continue; + } + r4 = r3 + r0; + r5 = r16 + r0; + pc=r17; + r31=0x420a4; + return; + case 0x420a4: + r2= page[(r29+16)>>>2]; + r2= page[(r2+0)>>>2]; + page[(r29+20)>>>2] = r2; + if(r2 == r0) { + pc=0x42280; + continue; + } + case 0x420c0: + r3= page[(r29+20)>>>2]; + r2= page[(r3+20)>>>2]; + if(r30 != r2) { + pc=0x420e8; + continue; + } + r4 = r3 + r0; + r5 = r16 + r0; + pc=r17; + r31=0x420e8; + return; + case 0x420e8: + r2= page[(r29+20)>>>2]; + r22= page[(r2+0)>>>2]; + if(r22 == r0) { + pc=0x42264; + continue; + } + case 0x42100: + r2= page[(r22+20)>>>2]; + if(r30 != r2) { + pc=0x42120; + continue; + } + r4 = r22 + r0; + r5 = r16 + r0; + pc=r17; + r31=0x42120; + return; + case 0x42120: + r23= page[(r22+0)>>>2]; + if(r23 == r0) { + pc=0x42254; + continue; + } + case 0x42130: + r2= page[(r23+20)>>>2]; + if(r30 == r2) { + pc=0x42334; + continue; + } + case 0x42140: + r20= page[(r23+0)>>>2]; + if(r20 == r0) { + pc=0x42244; + continue; + } + case 0x42150: + r2= page[(r20+20)>>>2]; + if(r30 == r2) { + pc=0x4231c; + continue; + } + case 0x42160: + r19= page[(r20+0)>>>2]; + if(r19 == r0) { + pc=0x42234; + continue; + } + case 0x42170: + r2= page[(r19+20)>>>2]; + if(r30 == r2) { + pc=0x42304; + continue; + } + case 0x42180: + r18= page[(r19+0)>>>2]; + if(r18 == r0) { + pc=0x42224; + continue; + } + case 0x42190: + r2= page[(r18+20)>>>2]; + if(r30 == r2) { + pc=0x422ec; + continue; + } + case 0x421a0: + r21= page[(r18+0)>>>2]; + if(r21 != r0) { + pc=0x421ec; + continue; + } + pc=0x42214; + continue; + case 0x421b8: + r4= page[(r21+0)>>>2]; + if(r4 == r0) { + pc=0x421dc; + continue; + } + r5 = r30 + r0; + r6 = r17 + r0; + r7 = r16 + r0; + r31=0x421dc; + pc=0x42000; + continue; + case 0x421dc: + r21= page[(r21+4)>>>2]; + if(r21 == r0) { + pc=0x42214; + continue; + } + case 0x421ec: + r3= page[(r21+20)>>>2]; + if(r30 != r3) { + pc=0x421b8; + continue; + } + r4 = r21 + r0; + r5 = r16 + r0; + pc=r17; + r31=0x4220c; + return; + case 0x4220c: + pc=0x421b8; + continue; + case 0x42214: + r18= page[(r18+4)>>>2]; + if(r18 != r0) { + pc=0x42190; + continue; + } + case 0x42224: + r19= page[(r19+4)>>>2]; + if(r19 != r0) { + pc=0x42170; + continue; + } + case 0x42234: + r20= page[(r20+4)>>>2]; + if(r20 != r0) { + pc=0x42150; + continue; + } + case 0x42244: + r23= page[(r23+4)>>>2]; + if(r23 != r0) { + pc=0x42130; + continue; + } + case 0x42254: + r22= page[(r22+4)>>>2]; + if(r22 != r0) { + pc=0x42100; + continue; + } + case 0x42264: + r3= page[(r29+20)>>>2]; + r3= page[(r3+4)>>>2]; + page[(r29+20)>>>2] = r3; + if(r3 != r0) { + pc=0x420c0; + continue; + } + case 0x42280: + r3= page[(r29+16)>>>2]; + r3= page[(r3+4)>>>2]; + page[(r29+16)>>>2] = r3; + if(r3 != r0) { + pc=0x4207c; + continue; + } + case 0x4229c: + r3= page[(r29+64)>>>2]; + r3= page[(r3+4)>>>2]; + page[(r29+64)>>>2] = r3; + if(r3 != r0) { + pc=0x42040; + continue; + } + r31= page[(r29+60)>>>2]; + r30= page[(r29+56)>>>2]; + r23= page[(r29+52)>>>2]; + r22= page[(r29+48)>>>2]; + r21= page[(r29+44)>>>2]; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + r29 = r29 + 64; + pc=r31; + return; + case 0x422ec: + r4 = r18 + r0; + r5 = r16 + r0; + pc=r17; + r31=0x422fc; + return; + case 0x422fc: + pc=0x421a0; + continue; + case 0x42304: + r4 = r19 + r0; + r5 = r16 + r0; + pc=r17; + r31=0x42314; + return; + case 0x42314: + pc=0x42180; + continue; + case 0x4231c: + r4 = r20 + r0; + r5 = r16 + r0; + pc=r17; + r31=0x4232c; + return; + case 0x4232c: + pc=0x42160; + continue; + case 0x42334: + r4 = r23 + r0; + r5 = r16 + r0; + pc=r17; + r31=0x42344; + return; + case 0x42344: + pc=0x42140; + continue; + case 0x42400: + r2= page[(r4+0)>>>2]; + r7 = r2 + r0; + if(r2 == r0) { + pc=0x424f0; + continue; + } + case 0x42414: + r9= page[(r6+0)>>>2]; + r8 = r0 + r0; + addr=r9+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + r3 = r9 + 1; + if(r2 == r0) { + pc=0x42450; + continue; + } + case 0x4242c: + r4 = r8 >>> 25; + r8 = r8 << 7; + r8 = r8 | r4; + r3 = r3 + 1; + r8 = r2 ^ r8; + addr=r3+-1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r2 = tmp; + if(r2 != r0) { + pc=0x4242c; + continue; + } + case 0x42450: + if(r7 == r0) { + pc=0x4247c; + continue; + } + case 0x42458: + r2= page[(r7+8)>>>2]; + r3 = ((r2 & 0xffffffffL) < (r8 & 0xffffffffL)) ? 1 : 0; + if(r3 == r0) { + pc=0x42488; + continue; + } + r7= page[(r7+0)>>>2]; + if(r7 != r0) { + pc=0x42458; + continue; + } + case 0x4247c: + r2 = r0 + r0; + pc=r31; + return; + case 0x42488: + if(r2 == r8) { + pc=0x4249c; + continue; + } + case 0x42490: + r7= page[(r7+4)>>>2]; + pc=0x42450; + continue; + case 0x4249c: + r3= page[(r7+12)>>>2]; + r2 = r9 + r0; + pc=0x424b4; + continue; + case 0x424ac: + if(r4 == r0) { + pc=0x424d8; + continue; + } + case 0x424b4: + r2 = r2 + 1; + r3 = r3 + 1; + addr=r2+-1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r6 = tmp; + addr=r3+-1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r4 = tmp; + if(r4 == r6) { + pc=0x424ac; + continue; + } + pc=0x42490; + continue; + case 0x424d8: + r2= page[(r7+16)>>>2]; + page[(r5+0)>>>2] = r2; + r2 = r0 + 1; + pc=r31; + return; + case 0x424f0: + r3= page[(r4+28)>>>2]; + r12 = r4 + r0; + r11 = r4 + 20; + if(r3 == r0) { + pc=0x42648; + continue; + } + case 0x42504: + r10 = r11 + 20; + r3= page[(r10+-8)>>>2]; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r7 = tmp; + r8 = r3 + 1; + r3 = r0 + r0; + if(r7 == r0) { + pc=0x42548; + continue; + } + case 0x42524: + r9 = r3 >>> 25; + r3 = r3 << 7; + r3 = r3 | r9; + r8 = r8 + 1; + r3 = r7 ^ r3; + addr=r8+-1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r7 = tmp; + if(r7 != r0) { + pc=0x42524; + continue; + } + case 0x42548: + page[(r10+-12)>>>2] = r3; + r7 = r4 + r0; + if(r2 == r0) { + pc=0x42580; + continue; + } + case 0x42558: + r7= page[(r2+8)>>>2]; + r7 = ((r7 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; + if(r7 == r0) { + pc=0x425a4; + continue; + } + r7 = r2 + r0; + r2= page[(r7+0)>>>2]; + case 0x42578: + if(r2 != r0) { + pc=0x42558; + continue; + } + case 0x42580: + page[(r7+0)>>>2] = r11; + r2= page[(r10+8)>>>2]; + if(r2 == r0) { + pc=0x425b4; + continue; + } + r2= page[(r4+0)>>>2]; + r11 = r10 + r0; + pc=0x42504; + continue; + case 0x425a4: + r7 = r2 + 4; + r2= page[(r7+0)>>>2]; + pc=0x42578; + continue; + case 0x425b4: + r2= page[(r4+0)>>>2]; + case 0x425b8: + r3= page[(r10+12)>>>2]; + addr=r3+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r7 = tmp; + r8 = r3 + 1; + r3 = r0 + r0; + if(r7 == r0) { + pc=0x425f8; + continue; + } + case 0x425d4: + r9 = r3 >>> 25; + r3 = r3 << 7; + r3 = r3 | r9; + r8 = r8 + 1; + r3 = r7 ^ r3; + addr=r8+-1; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; + r7 = tmp; + if(r7 != r0) { + pc=0x425d4; + continue; + } + case 0x425f8: + page[(r10+8)>>>2] = r3; + case 0x425fc: + if(r2 == r0) { + pc=0x42638; + continue; + } + r7= page[(r2+8)>>>2]; + r7 = ((r7 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; + if(r7 == r0) { + pc=0x42628; + continue; + } + r12 = r2 + r0; + r2= page[(r12+0)>>>2]; + pc=0x425fc; + continue; + case 0x42628: + r12 = r2 + 4; + r2= page[(r12+0)>>>2]; + pc=0x425fc; + continue; + case 0x42638: + page[(r12+0)>>>2] = r10; + r7= page[(r4+0)>>>2]; + pc=0x42414; + continue; + case 0x42648: + r10 = r11 + r0; + pc=0x425b8; + continue; + case 0x42800: + pc=0x42800; + return; + default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); + } + } + } + private final void run_42800() throws ExecutionException { /* 0x42800 - 0x43000 */ + int addr, tmp; + for(;;) { + switch(pc) { + case 0x42800: + r29 = r29 + -48; + page[(r29+40)>>>2] = r20; + r20 = 6 << 16; + r10= page[(r20+17104)>>>2]; + page[(r29+36)>>>2] = r19; + page[(r29+44)>>>2] = r31; + page[(r29+32)>>>2] = r18; + page[(r29+28)>>>2] = r17; + page[(r29+24)>>>2] = r16; + addr=r10+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; r19 = r4 + r0; r8 = r10 + 1; r2 = r0 + r0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3125c; + pc=0x42860; continue; } - case 0x31238: + case 0x4283c: r9 = r2 >>> 25; r2 = r2 << 7; r2 = r2 | r9; r8 = r8 + 1; r2 = r3 ^ r2; addr=r8+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x31238; + pc=0x4283c; continue; } - case 0x3125c: + case 0x42860: r17 = r2 ^ r6; r2 = r17 >>> 16; r2 = r2 ^ r17; @@ -35627,757 +47110,275 @@ public final class AcmeCrossAssembler extends UnixRuntime { r16 = r16 & 255; r16 = r16 << 2; r16 = r5 + r16; - case 0x3127c: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + case 0x42880: + r2= page[(r16+0)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x312b4; + pc=0x428b8; continue; } - case 0x3128c: - r3 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; + case 0x42890: + r3= page[(r2+8)>>>2]; r5 = ((r3 & 0xffffffffL) < (r17 & 0xffffffffL)) ? 1 : 0; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x312e0; + pc=0x428e8; continue; } r16 = r2 + r0; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + r2= page[(r16+0)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3128c; + pc=0x42890; continue; } - case 0x312b4: + case 0x428b8: if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x31368; + pc=0x42974; continue; } - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = r0; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; + r31= page[(r29+44)>>>2]; + r20= page[(r29+40)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + page[(r19+0)>>>2] = r0; + r19= page[(r29+36)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x312e0: + case 0x428e8: if(r17 == r3) { - /* Next insn is delay slot */ - pc=0x312f4; + pc=0x428fc; continue; } - case 0x312e8: + case 0x428f0: r16 = r2 + 4; - /* Next insn is delay slot */ - pc=0x3127c; + pc=0x42880; continue; - case 0x312f4: - r3 = readPages[(r2+20)>>>12][((r2+20)>>>2)&0x3ff]; - if(r6 != r3) { - /* Next insn is delay slot */ - pc=0x312e8; + case 0x428fc: + r3= page[(r2+20)>>>2]; + if(r3 != r6) { + pc=0x428f0; continue; } - r5 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; + r5= page[(r2+12)>>>2]; r3 = r10 + r0; - /* Next insn is delay slot */ - pc=0x3131c; + pc=0x42924; continue; - case 0x31314: + case 0x4291c: if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x31340; + pc=0x42948; continue; } - case 0x3131c: + case 0x42924: r3 = r3 + 1; r5 = r5 + 1; addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r9 = tmp; addr=r5+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r8 = tmp; if(r8 == r9) { - /* Next insn is delay slot */ - pc=0x31314; + pc=0x4291c; continue; } - /* Next insn is delay slot */ - pc=0x312e8; + pc=0x428f0; continue; - case 0x31340: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = r2; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + case 0x42948: + r31= page[(r29+44)>>>2]; + page[(r19+0)>>>2] = r2; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; r2 = r0 + r0; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x31368: + case 0x42974: r4 = r0 + 24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - r31=0x31378; - pc=0x1b400; - run_1b400(); return; - case 0x31378: - r6 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r4 = readPages[(r28+-30596)>>>12][((r28+-30596)>>>2)&0x3ff]; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r17; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r0; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r0; - writePages[(r2+20)>>>12][((r2+20)>>>2)&0x3ff] = r6; + page[(r29+16)>>>2] = r6; + r31=0x42984; + pc=0x20200; + run_20000(); return; + case 0x42984: + r6= page[(r29+16)>>>2]; + page[(r2+8)>>>2] = r17; + r4 = r20 + 17104; + page[(r2+0)>>>2] = r0; + page[(r2+4)>>>2] = r0; + page[(r2+20)>>>2] = r6; r18 = r2 + r0; - /* Next insn is delay slot */ - r31=0x3139c; - pc=0x17a00; - run_17a00(); return; - case 0x3139c: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - writePages[(r18+12)>>>12][((r18+12)>>>2)&0x3ff] = r2; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r18; + r31=0x429a8; + pc=0x1c200; + run_1c000(); return; + case 0x429a8: + r31= page[(r29+44)>>>2]; + page[(r18+12)>>>2] = r2; + r20= page[(r29+40)>>>2]; + page[(r16+0)>>>2] = r18; + r17= page[(r29+28)>>>2]; + page[(r19+0)>>>2] = r18; + r16= page[(r29+24)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; r2 = r0 + 1; - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = r18; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x31400: - pc=0x31400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_31400() throws ExecutionException { /* 0x31400 - 0x31600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x31400: - r29 = r29 + -64; - r3 = r4 + r0; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r30; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r23; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r22; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r21; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r20; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r19; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r4; - r30 = r5 + r0; - r17 = r6 + r0; - r16 = r7 + r0; - case 0x31440: - r2 = readPages[(r3+20)>>>12][((r3+20)>>>2)&0x3ff]; - if(r2 != r30) { - /* Next insn is delay slot */ - pc=0x31460; - continue; - } - r4 = r3 + r0; - r5 = r16 + r0; - /* Next insn is delay slot */ - pc=r17; - r31=0x31460; - return; - case 0x31460: - r2 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3169c; - run_31600(); return; - } - case 0x3147c: - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = readPages[(r3+20)>>>12][((r3+20)>>>2)&0x3ff]; - if(r2 != r30) { - /* Next insn is delay slot */ - pc=0x314a4; - continue; - } - r4 = r3 + r0; - r5 = r16 + r0; - /* Next insn is delay slot */ - pc=r17; - r31=0x314a4; - return; - case 0x314a4: - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x31680; - run_31600(); return; - } - case 0x314c0: - r3 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = readPages[(r3+20)>>>12][((r3+20)>>>2)&0x3ff]; - if(r2 != r30) { - /* Next insn is delay slot */ - pc=0x314e8; - continue; - } - r4 = r3 + r0; - r5 = r16 + r0; - /* Next insn is delay slot */ - pc=r17; - r31=0x314e8; - return; - case 0x314e8: - r2 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r22 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x31664; - run_31600(); return; - } - case 0x31500: - r2 = readPages[(r22+20)>>>12][((r22+20)>>>2)&0x3ff]; - if(r2 != r30) { - /* Next insn is delay slot */ - pc=0x31520; - continue; - } - r4 = r22 + r0; - r5 = r16 + r0; - /* Next insn is delay slot */ - pc=r17; - r31=0x31520; - return; - case 0x31520: - r23 = readPages[(r22+0)>>>12][((r22+0)>>>2)&0x3ff]; - if(r23 == r0) { - /* Next insn is delay slot */ - pc=0x31654; - run_31600(); return; - } - case 0x31530: - r2 = readPages[(r23+20)>>>12][((r23+20)>>>2)&0x3ff]; - if(r2 == r30) { - /* Next insn is delay slot */ - pc=0x31734; - run_31600(); return; - } - case 0x31540: - r20 = readPages[(r23+0)>>>12][((r23+0)>>>2)&0x3ff]; - if(r20 == r0) { - /* Next insn is delay slot */ - pc=0x31644; - run_31600(); return; - } - case 0x31550: - r2 = readPages[(r20+20)>>>12][((r20+20)>>>2)&0x3ff]; - if(r30 == r2) { - /* Next insn is delay slot */ - pc=0x3171c; - run_31600(); return; - } - case 0x31560: - r19 = readPages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff]; - if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x31634; - run_31600(); return; - } - case 0x31570: - r2 = readPages[(r19+20)>>>12][((r19+20)>>>2)&0x3ff]; - if(r30 == r2) { - /* Next insn is delay slot */ - pc=0x31704; - run_31600(); return; - } - case 0x31580: - r18 = readPages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff]; - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x31624; - run_31600(); return; - } - case 0x31590: - r2 = readPages[(r18+20)>>>12][((r18+20)>>>2)&0x3ff]; - if(r30 == r2) { - /* Next insn is delay slot */ - pc=0x316ec; - run_31600(); return; - } - case 0x315a0: - r21 = readPages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff]; - if(r21 != r0) { - /* Next insn is delay slot */ - pc=0x315ec; - continue; - } - /* Next insn is delay slot */ - pc=0x31614; - run_31600(); return; - case 0x315b8: - r4 = readPages[(r21+0)>>>12][((r21+0)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x315dc; - continue; - } - r5 = r30 + r0; - r6 = r17 + r0; - r7 = r16 + r0; - /* Next insn is delay slot */ - r31=0x315dc; - pc=0x31400; - continue; - case 0x315dc: - r21 = readPages[(r21+4)>>>12][((r21+4)>>>2)&0x3ff]; - if(r21 == r0) { - /* Next insn is delay slot */ - pc=0x31614; - run_31600(); return; - } - case 0x315ec: - r3 = readPages[(r21+20)>>>12][((r21+20)>>>2)&0x3ff]; - if(r30 != r3) { - /* Next insn is delay slot */ - pc=0x315b8; - continue; - } - r4 = r21 + r0; - case 0x31600: - pc=0x31600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_31600() throws ExecutionException { /* 0x31600 - 0x31800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x31600: - r5 = r16 + r0; - /* Next insn is delay slot */ - pc=r17; - r31=0x3160c; - return; - case 0x3160c: - /* Next insn is delay slot */ - pc=0x315b8; - run_31400(); return; - case 0x31614: - r18 = readPages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff]; - if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x31590; - run_31400(); return; - } - case 0x31624: - r19 = readPages[(r19+4)>>>12][((r19+4)>>>2)&0x3ff]; - if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x31570; - run_31400(); return; - } - case 0x31634: - r20 = readPages[(r20+4)>>>12][((r20+4)>>>2)&0x3ff]; - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x31550; - run_31400(); return; - } - case 0x31644: - r23 = readPages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff]; - if(r23 != r0) { - /* Next insn is delay slot */ - pc=0x31530; - run_31400(); return; - } - case 0x31654: - r22 = readPages[(r22+4)>>>12][((r22+4)>>>2)&0x3ff]; - if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x31500; - run_31400(); return; - } - case 0x31664: - r3 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x314c0; - run_31400(); return; - } - case 0x31680: - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3147c; - run_31400(); return; - } - case 0x3169c: - r3 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r3 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r3; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x31440; - run_31400(); return; - } - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r30 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r23 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r22 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r21 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r20 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r19 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 64; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x316ec: - r4 = r18 + r0; - r5 = r16 + r0; - /* Next insn is delay slot */ - pc=r17; - r31=0x316fc; - return; - case 0x316fc: - /* Next insn is delay slot */ - pc=0x315a0; - run_31400(); return; - case 0x31704: - r4 = r19 + r0; - r5 = r16 + r0; - /* Next insn is delay slot */ - pc=r17; - r31=0x31714; - return; - case 0x31714: - /* Next insn is delay slot */ - pc=0x31580; - run_31400(); return; - case 0x3171c: - r4 = r20 + r0; - r5 = r16 + r0; - /* Next insn is delay slot */ - pc=r17; - r31=0x3172c; - return; - case 0x3172c: - /* Next insn is delay slot */ - pc=0x31560; - run_31400(); return; - case 0x31734: - r4 = r23 + r0; - r5 = r16 + r0; - /* Next insn is delay slot */ - pc=r17; - r31=0x31744; - return; - case 0x31744: - /* Next insn is delay slot */ - pc=0x31540; - run_31400(); return; - case 0x31800: - pc=0x31800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_31800() throws ExecutionException { /* 0x31800 - 0x31a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x31800: + case 0x42a00: r29 = r29 + -48; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r21; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; + page[(r29+40)>>>2] = r21; + page[(r29+36)>>>2] = r20; + page[(r29+32)>>>2] = r19; + page[(r29+28)>>>2] = r18; + page[(r29+24)>>>2] = r17; + page[(r29+44)>>>2] = r31; + page[(r29+20)>>>2] = r16; r20 = r4 + r0; r17 = r5 + r0; r19 = r6 + r0; r18 = r7 + r0; r21 = r4 + 1024; - case 0x31834: - r16 = readPages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff]; + case 0x42a34: + r16= page[(r20+0)>>>2]; if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x31880; + pc=0x42a80; continue; } - /* Next insn is delay slot */ - pc=0x318a8; + pc=0x42aa8; continue; - case 0x3184c: - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + case 0x42a4c: + r4= page[(r16+0)>>>2]; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x31870; + pc=0x42a70; continue; } r5 = r17 + r0; r6 = r19 + r0; r7 = r18 + r0; - /* Next insn is delay slot */ - r31=0x31870; - pc=0x31400; - run_31400(); return; - case 0x31870: - r16 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + r31=0x42a70; + pc=0x42000; + run_42000(); return; + case 0x42a70: + r16= page[(r16+4)>>>2]; if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x318a8; + pc=0x42aa8; continue; } - case 0x31880: - r2 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; - if(r2 != r17) { - /* Next insn is delay slot */ - pc=0x3184c; + case 0x42a80: + r2= page[(r16+20)>>>2]; + if(r17 != r2) { + pc=0x42a4c; continue; } r4 = r16 + r0; r5 = r18 + r0; - /* Next insn is delay slot */ pc=r19; - r31=0x318a0; + r31=0x42aa0; return; - case 0x318a0: - /* Next insn is delay slot */ - pc=0x3184c; + case 0x42aa0: + pc=0x42a4c; continue; - case 0x318a8: + case 0x42aa8: r20 = r20 + 4; if(r20 != r21) { - /* Next insn is delay slot */ - pc=0x31834; + pc=0x42a34; continue; } - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r21 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r20 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r31= page[(r29+44)>>>2]; + r21= page[(r29+40)>>>2]; + r20= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x31a00: - pc=0x31a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_31a00() throws ExecutionException { /* 0x31a00 - 0x31c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x31a00: - r2 = readPages[(r28+-30656)>>>12][((r28+-30656)>>>2)&0x3ff]; - r3 = readPages[(r28+-30660)>>>12][((r28+-30660)>>>2)&0x3ff]; - r2 = r3 | r2; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x31c00: - pc=0x31c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_31c00() throws ExecutionException { /* 0x31c00 - 0x31e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x31c00: - r29 = r29 + -24; - r2 = r0 + 1; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - r16 = readPages[(r28+-30656)>>>12][((r28+-30656)>>>2)&0x3ff]; - writePages[(r28+-30656)>>>12][((r28+-30656)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x31c20; - pc=0x1b600; - run_1b600(); return; - case 0x31c20: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r28+-30656)>>>12][((r28+-30656)>>>2)&0x3ff] = r16; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x31e00: - pc=0x31e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_31e00() throws ExecutionException { /* 0x31e00 - 0x32000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x31e00: - writePages[(r28+-30660)>>>12][((r28+-30660)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x32000: - pc=0x32000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_32000() throws ExecutionException { /* 0x32000 - 0x32200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x32000: - r2 = readPages[(r28+-30740)>>>12][((r28+-30740)>>>2)&0x3ff]; + case 0x42c00: + r2 = 6 << 16; + r2= page[(r2+31352)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x32034; + pc=0x42c34; continue; } - r2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r2 = r2 & 16; + r2= page[(r4+0)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x32034; + pc=0x42c34; continue; } - r2 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; + r2= page[(r4+16)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3203c; + pc=0x42c3c; continue; } - case 0x32034: - /* Next insn is delay slot */ + case 0x42c34: pc=r31; return; - case 0x3203c: - r4 = 7 << 16; - r4 = r4 + -484; - /* Next insn is delay slot */ - pc=0x1ac00; - run_1ac00(); return; - case 0x32200: - pc=0x32200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_32200() throws ExecutionException { /* 0x32200 - 0x32400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x32200: - r2 = readPages[(r28+-30740)>>>12][((r28+-30740)>>>2)&0x3ff]; + case 0x42c3c: + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 13060; + pc=0x1fc00; + run_1f800(); return; + case 0x42e00: + r2 = 6 << 16; + r2= page[(r2+31352)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x32244; + pc=0x42e48; continue; } - r2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r2 = r2 & 16; + r2= page[(r4+0)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x32244; + pc=0x42e48; continue; } - r3 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; + r3= page[(r4+16)>>>2]; r2 = r0 + 1; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x32244; + pc=0x42e48; continue; } - r4 = 7 << 16; - r4 = r4 + -452; - /* Next insn is delay slot */ - pc=0x1ac00; - run_1ac00(); return; - case 0x32244: - /* Next insn is delay slot */ + r5 = 6 << 16; + r4 = r0 + -1; + r5 = r5 + 13092; + pc=0x1fc00; + run_1f800(); return; + case 0x42e48: pc=r31; return; - case 0x32400: - pc=0x32400; + case 0x43000: + pc=0x43000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_32400() throws ExecutionException { /* 0x32400 - 0x32600 */ + private final void run_43000() throws ExecutionException { /* 0x43000 - 0x43800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x32400: + case 0x43000: r29 = r29 + -32; r2 = f13; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; + page[(r29+20)>>>2] = r16; r16 = 32767 << 16; r16 = r16 | 65535; r16 = r16 & r2; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; + page[(r29+24)>>>2] = r17; r17 = r2 + r0; r2 = 17424 << 16; r2 = r16 < r2 ? 1 : 0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; + page[(r29+28)>>>2] = r31; f0 = f12; f1 = f13; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x32480; + pc=0x43080; continue; } r2 = 32752 << 16; @@ -36385,282 +47386,234 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = r16 < r3 ? 1 : 0; r5 = f12; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x32608; - run_32600(); return; + pc=0x43208; + continue; } if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x32600; - run_32600(); return; + pc=0x43200; + continue; } - case 0x32458: + case 0x43058: if(r17 <= 0) { - /* Next insn is delay slot */ - pc=0x326bc; - run_32600(); return; + pc=0x432bc; + continue; } - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f0 = readPages[(r28+-32220)>>>12][((r28+-32220)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - f1 = readPages[(r28+-32224)>>>12][((r28+-32224)>>>2)&0x3ff]; + r31= page[(r29+28)>>>2]; + f0= page[(r28+-32660)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + f1= page[(r28+-32664)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x32480: + case 0x43080: r2 = 16348 << 16; r2 = r16 < r2 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x32660; - run_32600(); return; + pc=0x43260; + continue; } r2 = 15904 << 16; r16 = r16 < r2 ? 1 : 0; if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x32624; - run_32600(); return; + pc=0x43224; + continue; } - case 0x324a0: + case 0x430a0: r2 = r0 + -1; - case 0x324a4: + case 0x430a4: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f6 = readPages[(r28+-32164)>>>12][((r28+-32164)>>>2)&0x3ff]; - f8 = readPages[(r28+-32156)>>>12][((r28+-32156)>>>2)&0x3ff]; - f7 = readPages[(r28+-32168)>>>12][((r28+-32168)>>>2)&0x3ff]; - f9 = readPages[(r28+-32160)>>>12][((r28+-32160)>>>2)&0x3ff]; + f6= page[(r28+-32604)>>>2]; + f8= page[(r28+-32596)>>>2]; + f7= page[(r28+-32608)>>>2]; + f9= page[(r28+-32600)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r3 = r0 + -1; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))+(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f8 = readPages[(r28+-32148)>>>12][((r28+-32148)>>>2)&0x3ff]; + f8= page[(r28+-32588)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f9 = readPages[(r28+-32152)>>>12][((r28+-32152)>>>2)&0x3ff]; + f9= page[(r28+-32592)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))+(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f8 = readPages[(r28+-32140)>>>12][((r28+-32140)>>>2)&0x3ff]; + f8= page[(r28+-32580)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f9 = readPages[(r28+-32144)>>>12][((r28+-32144)>>>2)&0x3ff]; + f9= page[(r28+-32584)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))+(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f8 = readPages[(r28+-32132)>>>12][((r28+-32132)>>>2)&0x3ff]; + f8= page[(r28+-32572)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f9 = readPages[(r28+-32136)>>>12][((r28+-32136)>>>2)&0x3ff]; + f9= page[(r28+-32576)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))+(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f8 = readPages[(r28+-32124)>>>12][((r28+-32124)>>>2)&0x3ff]; + f8= page[(r28+-32564)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f9 = readPages[(r28+-32128)>>>12][((r28+-32128)>>>2)&0x3ff]; + f9= page[(r28+-32568)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))+(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f8 = readPages[(r28+-32108)>>>12][((r28+-32108)>>>2)&0x3ff]; + f8= page[(r28+-32548)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f6 = readPages[(r28+-32116)>>>12][((r28+-32116)>>>2)&0x3ff]; - f9 = readPages[(r28+-32112)>>>12][((r28+-32112)>>>2)&0x3ff]; - f7 = readPages[(r28+-32120)>>>12][((r28+-32120)>>>2)&0x3ff]; + f6= page[(r28+-32556)>>>2]; + f9= page[(r28+-32552)>>>2]; + f7= page[(r28+-32560)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f8 = readPages[(r28+-32100)>>>12][((r28+-32100)>>>2)&0x3ff]; + f8= page[(r28+-32540)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f9 = readPages[(r28+-32104)>>>12][((r28+-32104)>>>2)&0x3ff]; + f9= page[(r28+-32544)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f8 = readPages[(r28+-32092)>>>12][((r28+-32092)>>>2)&0x3ff]; + f8= page[(r28+-32532)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f9 = readPages[(r28+-32096)>>>12][((r28+-32096)>>>2)&0x3ff]; + f9= page[(r28+-32536)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f8 = readPages[(r28+-32084)>>>12][((r28+-32084)>>>2)&0x3ff]; + f8= page[(r28+-32524)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f9 = readPages[(r28+-32088)>>>12][((r28+-32088)>>>2)&0x3ff]; + f9= page[(r28+-32528)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x326e8; - run_32600(); return; + pc=0x432e8; + continue; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - r5 = 7 << 16; - r6 = 7 << 16; + r5 = 6 << 16; + r6 = 6 << 16; r4 = r2 << 3; - r5 = r5 + -384; - r6 = r6 + -416; + r5 = r5 + 13160; + r6 = r6 + 13128; r5 = r4 + r5; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r4 = r4 + r6; - f6 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - f7 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; + f6= page[(r4+4)>>>2]; + f7= page[(r4+0)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f2 = readPages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff]; - f3 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; + f2= page[(r5+4)>>>2]; + f3= page[(r5+0)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } r3 = f4; r2 = f5; if(r17 < 0) { - /* Next insn is delay slot */ - pc=0x326d0; - run_32600(); return; + pc=0x432d0; + continue; } - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + r31= page[(r29+28)>>>2]; f0 = r3; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; f1 = r2; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x32600: - pc=0x32600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_32600() throws ExecutionException { /* 0x32600 - 0x32800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x32600: + case 0x43200: if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x32458; - run_32400(); return; + pc=0x43058; + continue; } - case 0x32608: + case 0x43208: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - case 0x3260c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + case 0x4320c: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x32624: - f4 = readPages[(r28+-32204)>>>12][((r28+-32204)>>>2)&0x3ff]; - f2 = readPages[(r28+-32196)>>>12][((r28+-32196)>>>2)&0x3ff]; - f5 = readPages[(r28+-32208)>>>12][((r28+-32208)>>>2)&0x3ff]; - f3 = readPages[(r28+-32200)>>>12][((r28+-32200)>>>2)&0x3ff]; + case 0x43224: + f4= page[(r28+-32644)>>>2]; + f2= page[(r28+-32636)>>>2]; + f5= page[(r28+-32648)>>>2]; + f3= page[(r28+-32640)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x324a0; - run_32400(); return; + pc=0x430a0; + continue; } - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x32660: - /* Next insn is delay slot */ - r31=0x32668; - pc=0x32a00; - run_32a00(); return; - case 0x32668: + case 0x43260: + r31=0x43268; + pc=0x43600; + continue; + case 0x43268: r2 = 16371 << 16; r2 = r16 < r2 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x326fc; + pc=0x432fc; continue; } r2 = 16358 << 16; r16 = r16 < r2 ? 1 : 0; if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x32758; + pc=0x43358; continue; } - f2 = readPages[(r28+-32196)>>>12][((r28+-32196)>>>2)&0x3ff]; + f2= page[(r28+-32636)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f3 = readPages[(r28+-32200)>>>12][((r28+-32200)>>>2)&0x3ff]; + f3= page[(r28+-32640)>>>2]; r2 = r0 + r0; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f4 = readPages[(r28+-32188)>>>12][((r28+-32188)>>>2)&0x3ff]; - f5 = readPages[(r28+-32192)>>>12][((r28+-32192)>>>2)&0x3ff]; + f4= page[(r28+-32628)>>>2]; + f5= page[(r28+-32632)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x324a4; - run_32400(); return; - case 0x326bc: - f0 = readPages[(r28+-32212)>>>12][((r28+-32212)>>>2)&0x3ff]; - f1 = readPages[(r28+-32216)>>>12][((r28+-32216)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x3260c; + pc=0x430a4; continue; - case 0x326d0: + case 0x432bc: + f0= page[(r28+-32652)>>>2]; + f1= page[(r28+-32656)>>>2]; + pc=0x4320c; + continue; + case 0x432d0: r6 = 32768 << 16; f0 = r3; r4 = r2 ^ r6; f1 = r4; - /* Next insn is delay slot */ - pc=0x3260c; + pc=0x4320c; continue; - case 0x326e8: + case 0x432e8: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x3260c; + pc=0x4320c; continue; - case 0x326fc: + case 0x432fc: r2 = 16387 << 16; r2 = r2 | 32768; r16 = r16 < r2 ? 1 : 0; if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x3273c; + pc=0x4333c; continue; } - f2 = readPages[(r28+-32180)>>>12][((r28+-32180)>>>2)&0x3ff]; - f6 = readPages[(r28+-32196)>>>12][((r28+-32196)>>>2)&0x3ff]; - f3 = readPages[(r28+-32184)>>>12][((r28+-32184)>>>2)&0x3ff]; - f7 = readPages[(r28+-32200)>>>12][((r28+-32200)>>>2)&0x3ff]; + f2= page[(r28+-32620)>>>2]; + f6= page[(r28+-32636)>>>2]; + f3= page[(r28+-32624)>>>2]; + f7= page[(r28+-32640)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } r2 = r0 + 2; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x324a4; - run_32400(); return; - case 0x3273c: - f2 = readPages[(r28+-32172)>>>12][((r28+-32172)>>>2)&0x3ff]; + pc=0x430a4; + continue; + case 0x4333c: + f2= page[(r28+-32612)>>>2]; r2 = r0 + 3; - f3 = readPages[(r28+-32176)>>>12][((r28+-32176)>>>2)&0x3ff]; + f3= page[(r28+-32616)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x324a4; - run_32400(); return; - case 0x32758: - f2 = readPages[(r28+-32196)>>>12][((r28+-32196)>>>2)&0x3ff]; + pc=0x430a4; + continue; + case 0x43358: + f2= page[(r28+-32636)>>>2]; r2 = r0 + 1; - f3 = readPages[(r28+-32200)>>>12][((r28+-32200)>>>2)&0x3ff]; + f3= page[(r28+-32640)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x324a4; - run_32400(); return; - case 0x32800: - pc=0x32800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_32800() throws ExecutionException { /* 0x32800 - 0x32a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x32800: + pc=0x430a4; + continue; + case 0x43400: r2 = f13; r3 = 32767 << 16; r3 = r3 | 65535; @@ -36669,151 +47622,122 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = r3 + 8700; r29 = r29 + -48; r3 = r2 < r3 ? 1 : 0; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; + page[(r29+44)>>>2] = r31; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x328bc; + pc=0x434bc; continue; } r3 = 32752 << 16; r2 = r2 < r3 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x32860; + pc=0x43460; continue; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r3 = f2; r2 = f3; - case 0x32848: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + case 0x43448: + r31= page[(r29+44)>>>2]; f0 = r3; r29 = r29 + 48; f1 = r2; - /* Next insn is delay slot */ pc=r31; return; - case 0x32860: + case 0x43460: r6 = r29 + 24; - /* Next insn is delay slot */ - r31=0x3286c; - pc=0x35200; - run_35200(); return; - case 0x3286c: + r31=0x4346c; + pc=0x45e00; + run_45800(); return; + case 0x4346c: r2 = r2 & 3; r3 = r0 + 1; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x32934; + pc=0x43534; continue; } r4 = r0 + 2; if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x328f0; + pc=0x434f0; continue; } if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x32958; + pc=0x43558; continue; } - f12 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f14 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - f13 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - f15 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x328ac; - pc=0x36e00; - run_36e00(); return; - case 0x328ac: + f12= page[(r29+28)>>>2]; + f14= page[(r29+36)>>>2]; + f13= page[(r29+24)>>>2]; + f15= page[(r29+32)>>>2]; + page[(r29+16)>>>2] = r3; + r31=0x434ac; + pc=0x47a00; + run_47800(); return; + case 0x434ac: r3 = f0; r2 = f1; - /* Next insn is delay slot */ - pc=0x32848; + pc=0x43448; continue; - case 0x328bc: + case 0x434bc: f14 = r0; f15 = r0; - /* Next insn is delay slot */ - r31=0x328d0; - pc=0x35c00; - run_35c00(); return; - case 0x328d0: + r31=0x434d0; + pc=0x46800; + run_46800(); return; + case 0x434d0: r3 = f0; r2 = f1; - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + r31= page[(r29+44)>>>2]; f0 = r3; r29 = r29 + 48; f1 = r2; - /* Next insn is delay slot */ pc=r31; return; - case 0x328f0: - f12 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f14 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - f13 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - f15 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x32908; - pc=0x35c00; - run_35c00(); return; - case 0x32908: + case 0x434f0: + f12= page[(r29+28)>>>2]; + f14= page[(r29+36)>>>2]; + f13= page[(r29+24)>>>2]; + f15= page[(r29+32)>>>2]; + r31=0x43508; + pc=0x46800; + run_46800(); return; + case 0x43508: r5 = f0; r4 = f1; r3 = r5 + r0; - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + r31= page[(r29+44)>>>2]; r6 = 32768 << 16; f0 = r3; r2 = r4 ^ r6; f1 = r2; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x32934: - f12 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f14 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - f13 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - f15 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x32950; - pc=0x36e00; - run_36e00(); return; - case 0x32950: - /* Next insn is delay slot */ - pc=0x32908; + case 0x43534: + f12= page[(r29+28)>>>2]; + f14= page[(r29+36)>>>2]; + f13= page[(r29+24)>>>2]; + f15= page[(r29+32)>>>2]; + page[(r29+16)>>>2] = r2; + r31=0x43550; + pc=0x47a00; + run_47800(); return; + case 0x43550: + pc=0x43508; continue; - case 0x32958: - f12 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f14 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - f13 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - f15 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x32970; - pc=0x35c00; - run_35c00(); return; - case 0x32970: + case 0x43558: + f12= page[(r29+28)>>>2]; + f14= page[(r29+36)>>>2]; + f13= page[(r29+24)>>>2]; + f15= page[(r29+32)>>>2]; + r31=0x43570; + pc=0x46800; + run_46800(); return; + case 0x43570: r3 = f0; r2 = f1; - /* Next insn is delay slot */ - pc=0x32848; + pc=0x43448; continue; - case 0x32a00: - pc=0x32a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_32a00() throws ExecutionException { /* 0x32a00 - 0x32c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x32a00: + case 0x43600: r3 = f12; r4 = f13; r5 = 32767 << 16; @@ -36821,22 +47745,20 @@ public final class AcmeCrossAssembler extends UnixRuntime { f0 = r3; r2 = r5 & r4; f1 = r2; - /* Next insn is delay slot */ pc=r31; return; - case 0x32c00: - pc=0x32c00; + case 0x43800: + pc=0x43800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_32c00() throws ExecutionException { /* 0x32c00 - 0x32e00 */ + private final void run_43800() throws ExecutionException { /* 0x43800 - 0x44000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x32c00: + case 0x43800: r2 = f13; r3 = 32767 << 16; r3 = r3 | 65535; @@ -36845,152 +47767,123 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = r3 + 8700; r29 = r29 + -48; r3 = r2 < r3 ? 1 : 0; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; + page[(r29+44)>>>2] = r31; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x32cd4; + pc=0x438d4; continue; } r3 = 32752 << 16; r2 = r2 < r3 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x32c60; + pc=0x43860; continue; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r3 = f2; r2 = f3; - case 0x32c48: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + case 0x43848: + r31= page[(r29+44)>>>2]; f0 = r3; r29 = r29 + 48; f1 = r2; - /* Next insn is delay slot */ pc=r31; return; - case 0x32c60: + case 0x43860: r6 = r29 + 24; - /* Next insn is delay slot */ - r31=0x32c6c; - pc=0x35200; - run_35200(); return; - case 0x32c6c: + r31=0x4386c; + pc=0x45e00; + run_45800(); return; + case 0x4386c: r2 = r2 & 3; r3 = r0 + 1; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x32d2c; + pc=0x4392c; continue; } r4 = r0 + 2; if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x32d08; + pc=0x43908; continue; } if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x32d54; + pc=0x43954; continue; } - f12 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f14 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - f13 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - f15 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x32ca8; - pc=0x35c00; - run_35c00(); return; - case 0x32ca8: + f12= page[(r29+28)>>>2]; + f14= page[(r29+36)>>>2]; + f13= page[(r29+24)>>>2]; + f15= page[(r29+32)>>>2]; + r31=0x438a8; + pc=0x46800; + run_46800(); return; + case 0x438a8: r5 = f0; r4 = f1; r3 = r5 + r0; - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + r31= page[(r29+44)>>>2]; r6 = 32768 << 16; f0 = r3; r2 = r4 ^ r6; f1 = r2; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x32cd4: + case 0x438d4: f14 = r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r0; + page[(r29+16)>>>2] = r0; f15 = r0; - /* Next insn is delay slot */ - r31=0x32ce8; - pc=0x36e00; - run_36e00(); return; - case 0x32ce8: + r31=0x438e8; + pc=0x47a00; + run_47800(); return; + case 0x438e8: r3 = f0; r2 = f1; - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + r31= page[(r29+44)>>>2]; f0 = r3; r29 = r29 + 48; f1 = r2; - /* Next insn is delay slot */ pc=r31; return; - case 0x32d08: - f12 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f14 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - f13 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - f15 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x32d24; - pc=0x36e00; - run_36e00(); return; - case 0x32d24: - /* Next insn is delay slot */ - pc=0x32ca8; + case 0x43908: + f12= page[(r29+28)>>>2]; + f14= page[(r29+36)>>>2]; + f13= page[(r29+24)>>>2]; + f15= page[(r29+32)>>>2]; + page[(r29+16)>>>2] = r3; + r31=0x43924; + pc=0x47a00; + run_47800(); return; + case 0x43924: + pc=0x438a8; continue; - case 0x32d2c: - f12 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f14 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - f13 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - f15 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x32d44; - pc=0x35c00; - run_35c00(); return; - case 0x32d44: + case 0x4392c: + f12= page[(r29+28)>>>2]; + f14= page[(r29+36)>>>2]; + f13= page[(r29+24)>>>2]; + f15= page[(r29+32)>>>2]; + r31=0x43944; + pc=0x46800; + run_46800(); return; + case 0x43944: r3 = f0; r2 = f1; - /* Next insn is delay slot */ - pc=0x32c48; + pc=0x43848; continue; - case 0x32d54: - f12 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f14 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - f13 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - f15 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x32d70; - pc=0x36e00; - run_36e00(); return; - case 0x32d70: + case 0x43954: + f12= page[(r29+28)>>>2]; + f14= page[(r29+36)>>>2]; + f13= page[(r29+24)>>>2]; + f15= page[(r29+32)>>>2]; + page[(r29+16)>>>2] = r3; + r31=0x43970; + pc=0x47a00; + run_47800(); return; + case 0x43970: r3 = f0; r2 = f1; - /* Next insn is delay slot */ - pc=0x32c48; + pc=0x43848; continue; - case 0x32e00: - pc=0x32e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_32e00() throws ExecutionException { /* 0x32e00 - 0x33000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x32e00: + case 0x43a00: r2 = f13; r3 = 32767 << 16; r3 = r3 | 65535; @@ -36999,946 +47892,777 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = r3 + 8700; r29 = r29 + -48; r3 = r2 < r3 ? 1 : 0; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; + page[(r29+44)>>>2] = r31; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x32e98; + pc=0x43a98; continue; } r3 = 32752 << 16; r2 = r2 < r3 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x32e50; + pc=0x43a50; continue; } - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + r31= page[(r29+44)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x32e50: + case 0x43a50: r6 = r29 + 24; - /* Next insn is delay slot */ - r31=0x32e5c; - pc=0x35200; - run_35200(); return; - case 0x32e5c: + r31=0x43a5c; + pc=0x45e00; + run_45800(); return; + case 0x43a5c: r2 = r2 & 1; - f12 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f14 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + f12= page[(r29+28)>>>2]; + f14= page[(r29+36)>>>2]; r3 = r0 + 1; r2 = r2 << 1; r2 = r3 - r2; - f13 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - f15 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x32e88; - pc=0x37000; - run_37000(); return; - case 0x32e88: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + f13= page[(r29+24)>>>2]; + f15= page[(r29+32)>>>2]; + page[(r29+16)>>>2] = r2; + r31=0x43a88; + pc=0x47c00; + run_47800(); return; + case 0x43a88: + r31= page[(r29+44)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x32e98: + case 0x43a98: f14 = r0; r2 = r0 + 1; f15 = r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x32eb0; - pc=0x37000; - run_37000(); return; - case 0x32eb0: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + page[(r29+16)>>>2] = r2; + r31=0x43ab0; + pc=0x47c00; + run_47800(); return; + case 0x43ab0: + r31= page[(r29+44)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x33000: - pc=0x33000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_33000() throws ExecutionException { /* 0x33000 - 0x33200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x33000: + case 0x43c00: r29 = r29 + -80; - writePages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff] = f22; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = f23; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = f20; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = f21; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; + page[(r29+76)>>>2] = f22; + page[(r29+72)>>>2] = f23; + page[(r29+68)>>>2] = f20; + page[(r29+64)>>>2] = f21; + page[(r29+60)>>>2] = r31; f20 = f12; f21 = f13; - /* Next insn is delay slot */ - r31=0x33024; - pc=0x33a00; - run_33a00(); return; - case 0x33024: - r3 = readPages[(r28+-31120)>>>12][((r28+-31120)>>>2)&0x3ff]; + r31=0x43c24; + pc=0x44600; + run_44000(); return; + case 0x43c24: + r3= page[(r28+-31560)>>>2]; r2 = r0 + -1; f22 = f0; f23 = f1; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x3304c; + pc=0x43c4c; continue; } f12 = f20; f13 = f21; - /* Next insn is delay slot */ - r31=0x33044; - pc=0x37a00; - run_37a00(); return; - case 0x33044: + r31=0x43c44; + pc=0x48600; + run_48000(); return; + case 0x43c44: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x33070; + pc=0x43c70; continue; } - case 0x3304c: - f20 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; + case 0x43c4c: + f20= page[(r29+68)>>>2]; f0 = f22; f1 = f23; - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - f22 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - f21 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - f23 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; + r31= page[(r29+60)>>>2]; + f22= page[(r29+76)>>>2]; + f21= page[(r29+64)>>>2]; + f23= page[(r29+72)>>>2]; r29 = r29 + 80; - /* Next insn is delay slot */ pc=r31; return; - case 0x33070: + case 0x43c70: f12 = f20; f13 = f21; - /* Next insn is delay slot */ - r31=0x3307c; - pc=0x32a00; - run_32a00(); return; - case 0x3307c: - f2 = readPages[(r28+-32076)>>>12][((r28+-32076)>>>2)&0x3ff]; - f3 = readPages[(r28+-32080)>>>12][((r28+-32080)>>>2)&0x3ff]; + r31=0x43c7c; + pc=0x43600; + run_43000(); return; + case 0x43c7c: + f2= page[(r28+-32516)>>>2]; + f3= page[(r28+-32520)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x3304c; + pc=0x43c4c; continue; } r2 = r0 + 1; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r4 = 7 << 16; - r2 = 7 << 16; - r2 = r2 + -352; - r4 = r4 + -12264; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r0; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = f20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = f21; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = f20; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = f21; - /* Next insn is delay slot */ - r31=0x330d4; - pc=0x37e00; - run_37e00(); return; - case 0x330d4: - r3 = readPages[(r28+-31120)>>>12][((r28+-31120)>>>2)&0x3ff]; + page[(r29+16)>>>2] = r2; + r4 = 6 << 16; + r2 = 6 << 16; + r2 = r2 + 13192; + r4 = r4 + -4072; + page[(r29+20)>>>2] = r2; + page[(r29+48)>>>2] = r0; + page[(r29+36)>>>2] = f20; + page[(r29+32)>>>2] = f21; + page[(r29+28)>>>2] = f20; + page[(r29+24)>>>2] = f21; + r31=0x43cd4; + pc=0x48a00; + run_48800(); return; + case 0x43cd4: + r3= page[(r28+-31560)>>>2]; r2 = r0 + 2; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f1; + page[(r29+44)>>>2] = f0; + page[(r29+40)>>>2] = f1; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x33138; + pc=0x43d38; continue; } r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x330f8; - pc=0x37c00; - run_37c00(); return; - case 0x330f8: + r31=0x43cf8; + pc=0x48800; + run_48800(); return; + case 0x43cf8: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x33138; + pc=0x43d38; continue; } - case 0x33100: - r2 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; + case 0x43d00: + r2= page[(r29+48)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x33150; + pc=0x43d50; continue; } - case 0x33110: - f0 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - f22 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - f20 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - f1 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - f23 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - f21 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; + case 0x43d10: + f0= page[(r29+44)>>>2]; + f22= page[(r29+76)>>>2]; + f20= page[(r29+68)>>>2]; + r31= page[(r29+60)>>>2]; + f1= page[(r29+40)>>>2]; + f23= page[(r29+72)>>>2]; + f21= page[(r29+64)>>>2]; r29 = r29 + 80; - /* Next insn is delay slot */ pc=r31; return; - case 0x33138: - /* Next insn is delay slot */ - r31=0x33140; - pc=0x38c00; - run_38c00(); return; - case 0x33140: + case 0x43d38: + r31=0x43d40; + pc=0x49800; + run_49800(); return; + case 0x43d40: r3 = r0 + 33; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x33100; + page[(r2+0)>>>2] = r3; + pc=0x43d00; continue; - case 0x33150: - /* Next insn is delay slot */ - r31=0x33158; - pc=0x38c00; - run_38c00(); return; - case 0x33158: - r3 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x33110; + case 0x43d50: + r31=0x43d58; + pc=0x49800; + run_49800(); return; + case 0x43d58: + r3= page[(r29+48)>>>2]; + page[(r2+0)>>>2] = r3; + pc=0x43d10; continue; - case 0x33200: - pc=0x33200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_33200() throws ExecutionException { /* 0x33200 - 0x33400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x33200: + case 0x43e00: r29 = r29 + -80; - writePages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff] = f22; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = f23; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = f20; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = f21; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; + page[(r29+76)>>>2] = f22; + page[(r29+72)>>>2] = f23; + page[(r29+68)>>>2] = f20; + page[(r29+64)>>>2] = f21; + page[(r29+60)>>>2] = r31; f20 = f12; f21 = f13; - /* Next insn is delay slot */ - r31=0x33224; - pc=0x34000; - run_34000(); return; - case 0x33224: - r3 = readPages[(r28+-31120)>>>12][((r28+-31120)>>>2)&0x3ff]; + r31=0x43e24; + pc=0x44c00; + run_44800(); return; + case 0x43e24: + r3= page[(r28+-31560)>>>2]; r2 = r0 + -1; f22 = f0; f23 = f1; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x3324c; + pc=0x43e4c; continue; } f12 = f20; f13 = f21; - /* Next insn is delay slot */ - r31=0x33244; - pc=0x37a00; - run_37a00(); return; - case 0x33244: + r31=0x43e44; + pc=0x48600; + run_48000(); return; + case 0x43e44: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x33270; + pc=0x43e70; continue; } - case 0x3324c: - f20 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; + case 0x43e4c: + f20= page[(r29+68)>>>2]; f0 = f22; f1 = f23; - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - f22 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - f21 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - f23 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; + r31= page[(r29+60)>>>2]; + f22= page[(r29+76)>>>2]; + f21= page[(r29+64)>>>2]; + f23= page[(r29+72)>>>2]; r29 = r29 + 80; - /* Next insn is delay slot */ pc=r31; return; - case 0x33270: + case 0x43e70: f12 = f20; f13 = f21; - /* Next insn is delay slot */ - r31=0x3327c; - pc=0x32a00; - run_32a00(); return; - case 0x3327c: - f2 = readPages[(r28+-32068)>>>12][((r28+-32068)>>>2)&0x3ff]; - f3 = readPages[(r28+-32072)>>>12][((r28+-32072)>>>2)&0x3ff]; + r31=0x43e7c; + pc=0x43600; + run_43000(); return; + case 0x43e7c: + f2= page[(r28+-32508)>>>2]; + f3= page[(r28+-32512)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x3324c; + pc=0x43e4c; continue; } r2 = r0 + 1; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r4 = 7 << 16; - r2 = 7 << 16; - r2 = r2 + -344; - r4 = r4 + -12264; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r0; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = f20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = f21; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = f20; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = f21; - /* Next insn is delay slot */ - r31=0x332d4; - pc=0x37e00; - run_37e00(); return; - case 0x332d4: - r3 = readPages[(r28+-31120)>>>12][((r28+-31120)>>>2)&0x3ff]; + page[(r29+16)>>>2] = r2; + r4 = 6 << 16; + r2 = 6 << 16; + r2 = r2 + 13200; + r4 = r4 + -4072; + page[(r29+20)>>>2] = r2; + page[(r29+48)>>>2] = r0; + page[(r29+36)>>>2] = f20; + page[(r29+32)>>>2] = f21; + page[(r29+28)>>>2] = f20; + page[(r29+24)>>>2] = f21; + r31=0x43ed4; + pc=0x48a00; + run_48800(); return; + case 0x43ed4: + r3= page[(r28+-31560)>>>2]; r2 = r0 + 2; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f1; + page[(r29+44)>>>2] = f0; + page[(r29+40)>>>2] = f1; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x33338; + pc=0x43f38; continue; } r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x332f8; - pc=0x37c00; - run_37c00(); return; - case 0x332f8: + r31=0x43ef8; + pc=0x48800; + run_48800(); return; + case 0x43ef8: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x33338; + pc=0x43f38; continue; } - case 0x33300: - r2 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; + case 0x43f00: + r2= page[(r29+48)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x33350; + pc=0x43f50; continue; } - case 0x33310: - f0 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - f22 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - f20 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - f1 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - f23 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - f21 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; + case 0x43f10: + f0= page[(r29+44)>>>2]; + f22= page[(r29+76)>>>2]; + f20= page[(r29+68)>>>2]; + r31= page[(r29+60)>>>2]; + f1= page[(r29+40)>>>2]; + f23= page[(r29+72)>>>2]; + f21= page[(r29+64)>>>2]; r29 = r29 + 80; - /* Next insn is delay slot */ pc=r31; return; - case 0x33338: - /* Next insn is delay slot */ - r31=0x33340; - pc=0x38c00; - run_38c00(); return; - case 0x33340: + case 0x43f38: + r31=0x43f40; + pc=0x49800; + run_49800(); return; + case 0x43f40: r3 = r0 + 33; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x33300; + page[(r2+0)>>>2] = r3; + pc=0x43f00; continue; - case 0x33350: - /* Next insn is delay slot */ - r31=0x33358; - pc=0x38c00; - run_38c00(); return; - case 0x33358: - r3 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x33310; + case 0x43f50: + r31=0x43f58; + pc=0x49800; + run_49800(); return; + case 0x43f58: + r3= page[(r29+48)>>>2]; + page[(r2+0)>>>2] = r3; + pc=0x43f10; continue; - case 0x33400: - pc=0x33400; + case 0x44000: + pc=0x44000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_33400() throws ExecutionException { /* 0x33400 - 0x33600 */ + private final void run_44000() throws ExecutionException { /* 0x44000 - 0x44800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x33400: + case 0x44000: r29 = r29 + -96; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r16; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = f24; - writePages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff] = f25; - writePages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff] = f22; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = f23; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = f20; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = f21; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; - writePages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff] = f26; - writePages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff] = f27; + page[(r29+56)>>>2] = r16; + page[(r29+84)>>>2] = f24; + page[(r29+80)>>>2] = f25; + page[(r29+76)>>>2] = f22; + page[(r29+72)>>>2] = f23; + page[(r29+68)>>>2] = f20; + page[(r29+64)>>>2] = f21; + page[(r29+60)>>>2] = r31; + page[(r29+92)>>>2] = f26; + page[(r29+88)>>>2] = f27; f24 = f12; f25 = f13; f20 = f14; f21 = f15; - /* Next insn is delay slot */ - r31=0x3343c; - pc=0x34600; - run_34600(); return; - case 0x3343c: - r2 = readPages[(r28+-31120)>>>12][((r28+-31120)>>>2)&0x3ff]; + r31=0x4403c; + pc=0x45200; + run_45000(); return; + case 0x4403c: + r2= page[(r28+-31560)>>>2]; r16 = r0 + -1; f22 = f0; f23 = f1; if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x33464; + pc=0x44064; continue; } f12 = f20; f13 = f21; - /* Next insn is delay slot */ - r31=0x3345c; - pc=0x37a00; - run_37a00(); return; - case 0x3345c: + r31=0x4405c; + pc=0x48600; + run_48000(); return; + case 0x4405c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3349c; + pc=0x4409c; continue; } - case 0x33464: + case 0x44064: f0 = f22; f1 = f23; - case 0x33468: - f26 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - f24 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - f22 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - f20 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r16 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - f27 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - f25 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - f23 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - f21 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; + case 0x44068: + f26= page[(r29+92)>>>2]; + f24= page[(r29+84)>>>2]; + f22= page[(r29+76)>>>2]; + f20= page[(r29+68)>>>2]; + r31= page[(r29+60)>>>2]; + r16= page[(r29+56)>>>2]; + f27= page[(r29+88)>>>2]; + f25= page[(r29+80)>>>2]; + f23= page[(r29+72)>>>2]; + f21= page[(r29+64)>>>2]; r29 = r29 + 96; - /* Next insn is delay slot */ pc=r31; return; - case 0x3349c: + case 0x4409c: f12 = f24; f13 = f25; - /* Next insn is delay slot */ - r31=0x334a8; - pc=0x37a00; - run_37a00(); return; - case 0x334a8: + r31=0x440a8; + pc=0x48600; + run_48000(); return; + case 0x440a8: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3356c; + pc=0x4416c; continue; } f0 = r0; f1 = r0; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x33464; + pc=0x44064; continue; } r2 = r0 + 1; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - f0 = readPages[(r28+-32060)>>>12][((r28+-32060)>>>2)&0x3ff]; - r2 = 7 << 16; - r2 = r2 + -336; - f1 = readPages[(r28+-32064)>>>12][((r28+-32064)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-31120)>>>12][((r28+-31120)>>>2)&0x3ff]; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = f24; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = f25; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = f20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = f21; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f1; + page[(r29+16)>>>2] = r2; + f0= page[(r28+-32500)>>>2]; + r2 = 6 << 16; + r2 = r2 + 13208; + f1= page[(r28+-32504)>>>2]; + page[(r29+20)>>>2] = r2; + r2= page[(r28+-31560)>>>2]; + page[(r29+48)>>>2] = r0; + page[(r29+28)>>>2] = f24; + page[(r29+24)>>>2] = f25; + page[(r29+36)>>>2] = f20; + page[(r29+32)>>>2] = f21; + page[(r29+44)>>>2] = f0; + page[(r29+40)>>>2] = f1; if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x33558; + pc=0x44158; continue; } r3 = r0 + 2; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x33558; + pc=0x44158; continue; } - case 0x33520: + case 0x44120: r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x3352c; - pc=0x37c00; - run_37c00(); return; - case 0x3352c: + r31=0x4412c; + pc=0x48800; + run_48800(); return; + case 0x4412c: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x33750; - run_33600(); return; - } - case 0x33534: - r2 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x33558; + pc=0x44350; continue; } - case 0x33544: - /* Next insn is delay slot */ - r31=0x3354c; - pc=0x38c00; - run_38c00(); return; - case 0x3354c: - r3 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - case 0x33558: - f0 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - f1 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x33468; + case 0x44134: + r2= page[(r29+48)>>>2]; + if(r2 == r0) { + pc=0x44158; + continue; + } + case 0x44144: + r31=0x4414c; + pc=0x49800; + run_49800(); return; + case 0x4414c: + r3= page[(r29+48)>>>2]; + page[(r2+0)>>>2] = r3; + case 0x44158: + f0= page[(r29+44)>>>2]; + f1= page[(r29+40)>>>2]; + pc=0x44068; continue; - case 0x3356c: + case 0x4416c: f26 = r0; f27 = r0; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))==(Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x335f8; + pc=0x441f8; continue; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))==(Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x336c0; - run_33600(); return; + pc=0x442c0; + continue; } r2 = r0 + 1; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r2 = 7 << 16; - r2 = r2 + -336; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-31120)>>>12][((r28+-31120)>>>2)&0x3ff]; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = f24; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = f25; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = f20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = f21; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f26; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f27; + page[(r29+16)>>>2] = r2; + r2 = 6 << 16; + r2 = r2 + 13208; + page[(r29+20)>>>2] = r2; + r2= page[(r28+-31560)>>>2]; + page[(r29+48)>>>2] = r0; + page[(r29+28)>>>2] = f24; + page[(r29+24)>>>2] = f25; + page[(r29+36)>>>2] = f20; + page[(r29+32)>>>2] = f21; + page[(r29+44)>>>2] = f26; + page[(r29+40)>>>2] = f27; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x33520; + pc=0x44120; continue; } - f0 = readPages[(r28+-32060)>>>12][((r28+-32060)>>>2)&0x3ff]; - f1 = readPages[(r28+-32064)>>>12][((r28+-32064)>>>2)&0x3ff]; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x33558; + f0= page[(r28+-32500)>>>2]; + f1= page[(r28+-32504)>>>2]; + page[(r29+44)>>>2] = f0; + page[(r29+40)>>>2] = f1; + pc=0x44158; continue; - case 0x335f8: + case 0x441f8: f12 = f22; f13 = f23; - /* Next insn is delay slot */ - r31=0x33604; - pc=0x37400; - run_37400(); return; - case 0x33600: - pc=0x33600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_33600() throws ExecutionException { /* 0x33600 - 0x33800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x33600: - case 0x33604: + r31=0x44204; + pc=0x48000; + run_48000(); return; + case 0x44204: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x33768; + pc=0x44368; continue; } - case 0x3360c: + case 0x4420c: f26 = r0; f27 = r0; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))==(Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x33464; - run_33400(); return; + pc=0x44064; + continue; } f12 = f24; f13 = f25; - /* Next insn is delay slot */ - r31=0x33638; - pc=0x37400; - run_37400(); return; - case 0x33638: + r31=0x44238; + pc=0x48000; + run_48000(); return; + case 0x44238: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x33464; - run_33400(); return; + pc=0x44064; + continue; } f12 = f20; f13 = f21; - /* Next insn is delay slot */ - r31=0x3364c; - pc=0x37400; - run_37400(); return; - case 0x3364c: + r31=0x4424c; + pc=0x48000; + run_48000(); return; + case 0x4424c: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x33464; - run_33400(); return; + pc=0x44064; + continue; } r2 = r0 + 4; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r2 = 7 << 16; - r2 = r2 + -336; - r3 = readPages[(r28+-31120)>>>12][((r28+-31120)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; + page[(r29+16)>>>2] = r2; + r2 = 6 << 16; + r2 = r2 + 13208; + r3= page[(r28+-31560)>>>2]; + page[(r29+20)>>>2] = r2; r2 = r0 + 2; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = f24; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = f25; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = f20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = f21; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f26; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f27; + page[(r29+48)>>>2] = r0; + page[(r29+28)>>>2] = f24; + page[(r29+24)>>>2] = f25; + page[(r29+36)>>>2] = f20; + page[(r29+32)>>>2] = f21; + page[(r29+44)>>>2] = f26; + page[(r29+40)>>>2] = f27; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x3387c; - run_33800(); return; + pc=0x4447c; + continue; } - case 0x33694: + case 0x44294: r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x336a0; - pc=0x37c00; - run_37c00(); return; - case 0x336a0: + r31=0x442a0; + pc=0x48800; + run_48800(); return; + case 0x442a0: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3387c; - run_33800(); return; + pc=0x4447c; + continue; } - case 0x336a8: - r2 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; + case 0x442a8: + r2= page[(r29+48)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x33558; - run_33400(); return; + pc=0x44158; + continue; } - /* Next insn is delay slot */ - pc=0x33544; - run_33400(); return; - case 0x336c0: + pc=0x44144; + continue; + case 0x442c0: f12 = f20; f13 = f21; - /* Next insn is delay slot */ - r31=0x336cc; - pc=0x37400; - run_37400(); return; - case 0x336cc: + r31=0x442cc; + pc=0x48000; + run_48000(); return; + case 0x442cc: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x33464; - run_33400(); return; + pc=0x44064; + continue; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))<(Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x33464; - run_33400(); return; - } - r2 = r0 + 1; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r2 = 7 << 16; - r2 = r2 + -336; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-31120)>>>12][((r28+-31120)>>>2)&0x3ff]; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = f24; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = f25; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = f20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = f21; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3380c; - run_33800(); return; - } - f0 = readPages[(r28+-32052)>>>12][((r28+-32052)>>>2)&0x3ff]; - r3 = r0 + 2; - f1 = readPages[(r28+-32056)>>>12][((r28+-32056)>>>2)&0x3ff]; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f1; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x337f0; + pc=0x44064; continue; } - case 0x33738: - /* Next insn is delay slot */ - r31=0x33740; - pc=0x38c00; - run_38c00(); return; - case 0x33740: + r2 = r0 + 1; + page[(r29+16)>>>2] = r2; + r2 = 6 << 16; + r2 = r2 + 13208; + page[(r29+20)>>>2] = r2; + r2= page[(r28+-31560)>>>2]; + page[(r29+48)>>>2] = r0; + page[(r29+28)>>>2] = f24; + page[(r29+24)>>>2] = f25; + page[(r29+36)>>>2] = f20; + page[(r29+32)>>>2] = f21; + if(r2 == r0) { + pc=0x4440c; + continue; + } + f0= page[(r28+-32492)>>>2]; + r3 = r0 + 2; + f1= page[(r28+-32496)>>>2]; + page[(r29+44)>>>2] = f0; + page[(r29+40)>>>2] = f1; + if(r2 != r3) { + pc=0x443f0; + continue; + } + case 0x44338: + r31=0x44340; + pc=0x49800; + run_49800(); return; + case 0x44340: r3 = r0 + 33; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x336a8; + page[(r2+0)>>>2] = r3; + pc=0x442a8; continue; - case 0x33750: - /* Next insn is delay slot */ - r31=0x33758; - pc=0x38c00; - run_38c00(); return; - case 0x33758: + case 0x44350: + r31=0x44358; + pc=0x49800; + run_49800(); return; + case 0x44358: r3 = r0 + 33; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x33534; - run_33400(); return; - case 0x33768: + page[(r2+0)>>>2] = r3; + pc=0x44134; + continue; + case 0x44368: f12 = f24; f13 = f25; - /* Next insn is delay slot */ - r31=0x33774; - pc=0x37400; - run_37400(); return; - case 0x33774: + r31=0x44374; + pc=0x48000; + run_48000(); return; + case 0x44374: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3360c; + pc=0x4420c; continue; } f12 = f20; f13 = f21; - /* Next insn is delay slot */ - r31=0x33788; - pc=0x37400; - run_37400(); return; - case 0x33788: + r31=0x44388; + pc=0x48000; + run_48000(); return; + case 0x44388: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3360c; + pc=0x4420c; continue; } f12 = f22; f13 = f23; - /* Next insn is delay slot */ - r31=0x3379c; - pc=0x37a00; - run_37a00(); return; - case 0x3379c: + r31=0x4439c; + pc=0x48600; + run_48000(); return; + case 0x4439c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3381c; - run_33800(); return; + pc=0x4441c; + continue; } r2 = r0 + 1; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r2 = 7 << 16; - r2 = r2 + -336; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-31120)>>>12][((r28+-31120)>>>2)&0x3ff]; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = f24; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = f25; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = f20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = f21; + page[(r29+16)>>>2] = r2; + r2 = 6 << 16; + r2 = r2 + 13208; + page[(r29+20)>>>2] = r2; + r2= page[(r28+-31560)>>>2]; + page[(r29+48)>>>2] = r0; + page[(r29+28)>>>2] = f24; + page[(r29+24)>>>2] = f25; + page[(r29+36)>>>2] = f20; + page[(r29+32)>>>2] = f21; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3380c; - run_33800(); return; + pc=0x4440c; + continue; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))/(Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))); f27 = (int)(l >>> 32); f26 = (int)l; } r3 = r0 + 2; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f26; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f27; + page[(r29+44)>>>2] = f26; + page[(r29+40)>>>2] = f27; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x33738; + pc=0x44338; continue; } - case 0x337f0: + case 0x443f0: r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x337fc; - pc=0x37c00; - run_37c00(); return; - case 0x337fc: + r31=0x443fc; + pc=0x48800; + run_48800(); return; + case 0x443fc: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x336a8; + pc=0x442a8; continue; } - case 0x33800: - pc=0x33800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_33800() throws ExecutionException { /* 0x33800 - 0x33a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x33800: - /* Next insn is delay slot */ - pc=0x33738; - run_33600(); return; - case 0x3380c: - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f26; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f27; - /* Next insn is delay slot */ - pc=0x337f0; - run_33600(); return; - case 0x3381c: + pc=0x44338; + continue; + case 0x4440c: + page[(r29+44)>>>2] = f26; + page[(r29+40)>>>2] = f27; + pc=0x443f0; + continue; + case 0x4441c: r2 = r0 + 3; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r2 = 7 << 16; - r2 = r2 + -336; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-31120)>>>12][((r28+-31120)>>>2)&0x3ff]; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = f24; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = f25; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = f20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = f21; + page[(r29+16)>>>2] = r2; + r2 = 6 << 16; + r2 = r2 + 13208; + page[(r29+20)>>>2] = r2; + r2= page[(r28+-31560)>>>2]; + page[(r29+48)>>>2] = r0; + page[(r29+28)>>>2] = f24; + page[(r29+24)>>>2] = f25; + page[(r29+36)>>>2] = f20; + page[(r29+32)>>>2] = f21; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x33894; + pc=0x44494; continue; } - f0 = readPages[(r28+-32044)>>>12][((r28+-32044)>>>2)&0x3ff]; + f0= page[(r28+-32484)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))<(Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))) ? 0x800000 : 0x000000); - f1 = readPages[(r28+-32048)>>>12][((r28+-32048)>>>2)&0x3ff]; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f1; + f1= page[(r28+-32488)>>>2]; + page[(r29+44)>>>2] = f0; + page[(r29+40)>>>2] = f1; if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x33908; + pc=0x44508; continue; } - case 0x33870: + case 0x44470: r3 = r0 + 2; if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x33694; - run_33600(); return; + pc=0x44294; + continue; } - case 0x3387c: - /* Next insn is delay slot */ - r31=0x33884; - pc=0x38c00; - run_38c00(); return; - case 0x33884: + case 0x4447c: + r31=0x44484; + pc=0x49800; + run_49800(); return; + case 0x44484: r3 = r0 + 34; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x336a8; - run_33600(); return; - case 0x33894: - f0 = readPages[(r28+-32020)>>>12][((r28+-32020)>>>2)&0x3ff]; + page[(r2+0)>>>2] = r3; + pc=0x442a8; + continue; + case 0x44494: + f0= page[(r28+-32460)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))<(Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))) ? 0x800000 : 0x000000); - f1 = readPages[(r28+-32024)>>>12][((r28+-32024)>>>2)&0x3ff]; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f1; + f1= page[(r28+-32464)>>>2]; + page[(r29+44)>>>2] = f0; + page[(r29+40)>>>2] = f1; if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x33870; + pc=0x44470; continue; } - f0 = readPages[(r28+-32036)>>>12][((r28+-32036)>>>2)&0x3ff]; - f1 = readPages[(r28+-32040)>>>12][((r28+-32040)>>>2)&0x3ff]; + f0= page[(r28+-32476)>>>2]; + f1= page[(r28+-32480)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } f12 = f20; f13 = f21; - /* Next insn is delay slot */ - r31=0x338d4; - pc=0x38000; - run_38000(); return; - case 0x338d4: + r31=0x444d4; + pc=0x48c00; + run_48800(); return; + case 0x444d4: fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))==(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x338fc; + pc=0x444fc; continue; } - f0 = readPages[(r28+-32052)>>>12][((r28+-32052)>>>2)&0x3ff]; - f1 = readPages[(r28+-32056)>>>12][((r28+-32056)>>>2)&0x3ff]; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f1; - case 0x338fc: - r2 = readPages[(r28+-31120)>>>12][((r28+-31120)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x33870; + f0= page[(r28+-32492)>>>2]; + f1= page[(r28+-32496)>>>2]; + page[(r29+44)>>>2] = f0; + page[(r29+40)>>>2] = f1; + case 0x444fc: + r2= page[(r28+-31560)>>>2]; + pc=0x44470; continue; - case 0x33908: - f0 = readPages[(r28+-32036)>>>12][((r28+-32036)>>>2)&0x3ff]; - f1 = readPages[(r28+-32040)>>>12][((r28+-32040)>>>2)&0x3ff]; + case 0x44508: + f0= page[(r28+-32476)>>>2]; + f1= page[(r28+-32480)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } f12 = f20; f13 = f21; - /* Next insn is delay slot */ - r31=0x33928; - pc=0x38000; - run_38000(); return; - case 0x33928: + r31=0x44528; + pc=0x48c00; + run_48800(); return; + case 0x44528: fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))==(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x338fc; + pc=0x444fc; continue; } - f0 = readPages[(r28+-32028)>>>12][((r28+-32028)>>>2)&0x3ff]; - r2 = readPages[(r28+-31120)>>>12][((r28+-31120)>>>2)&0x3ff]; - f1 = readPages[(r28+-32032)>>>12][((r28+-32032)>>>2)&0x3ff]; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x33870; + f0= page[(r28+-32468)>>>2]; + r2= page[(r28+-31560)>>>2]; + f1= page[(r28+-32472)>>>2]; + page[(r29+44)>>>2] = f0; + page[(r29+40)>>>2] = f1; + pc=0x44470; continue; - case 0x33a00: - pc=0x33a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_33a00() throws ExecutionException { /* 0x33a00 - 0x33c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x33a00: + case 0x44600: r2 = f13; r3 = 32767 << 16; r3 = r3 | 65535; @@ -37947,114 +48671,107 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = 16368 << 16; r29 = r29 + -48; r4 = r2 < r3 ? 1 : 0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f24; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f25; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = f22; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = f23; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = f20; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = f21; + page[(r29+20)>>>2] = r31; + page[(r29+44)>>>2] = f24; + page[(r29+40)>>>2] = f25; + page[(r29+36)>>>2] = f22; + page[(r29+32)>>>2] = f23; + page[(r29+28)>>>2] = f20; + page[(r29+24)>>>2] = f21; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x33a94; + pc=0x44694; continue; } r5 = f12; r2 = r2 - r3; r2 = r2 | r5; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x33c24; - run_33c00(); return; + pc=0x44824; + run_44800(); return; } if(r6 <= 0) { - /* Next insn is delay slot */ - pc=0x33d6c; - run_33c00(); return; + pc=0x4496c; + run_44800(); return; } f0 = r0; f1 = r0; - case 0x33a6c: - f24 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - f22 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - f20 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - f25 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - f23 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - f21 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + case 0x4466c: + f24= page[(r29+44)>>>2]; + f22= page[(r29+36)>>>2]; + f20= page[(r29+28)>>>2]; + r31= page[(r29+20)>>>2]; + f25= page[(r29+40)>>>2]; + f23= page[(r29+32)>>>2]; + f21= page[(r29+24)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x33a94: + case 0x44694: r3 = 16352 << 16; r3 = r2 < r3 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x33be0; + pc=0x447e0; continue; } if(r6 < 0) { - /* Next insn is delay slot */ - pc=0x33d80; - run_33c00(); return; + pc=0x44980; + run_44800(); return; } - f22 = readPages[(r28+-31916)>>>12][((r28+-31916)>>>2)&0x3ff]; - f0 = readPages[(r28+-31900)>>>12][((r28+-31900)>>>2)&0x3ff]; - f23 = readPages[(r28+-31920)>>>12][((r28+-31920)>>>2)&0x3ff]; - f1 = readPages[(r28+-31904)>>>12][((r28+-31904)>>>2)&0x3ff]; + f22= page[(r28+-32356)>>>2]; + f0= page[(r28+-32340)>>>2]; + f23= page[(r28+-32360)>>>2]; + f1= page[(r28+-32344)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))-(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } f12 = f20; f13 = f21; - /* Next insn is delay slot */ - r31=0x33ad0; - pc=0x35800; - run_35800(); return; - case 0x33ad0: - f12 = readPages[(r28+-31996)>>>12][((r28+-31996)>>>2)&0x3ff]; - f4 = readPages[(r28+-31988)>>>12][((r28+-31988)>>>2)&0x3ff]; - f13 = readPages[(r28+-32000)>>>12][((r28+-32000)>>>2)&0x3ff]; - f5 = readPages[(r28+-31992)>>>12][((r28+-31992)>>>2)&0x3ff]; + r31=0x446d0; + pc=0x46400; + run_46000(); return; + case 0x446d0: + f12= page[(r28+-32436)>>>2]; + f4= page[(r28+-32428)>>>2]; + f13= page[(r28+-32440)>>>2]; + f5= page[(r28+-32432)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f6 = readPages[(r28+-31940)>>>12][((r28+-31940)>>>2)&0x3ff]; + f6= page[(r28+-32380)>>>2]; r3 = r0 + r0; - f7 = readPages[(r28+-31944)>>>12][((r28+-31944)>>>2)&0x3ff]; + f7= page[(r28+-32384)>>>2]; r2 = f1; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f4 = readPages[(r28+-31980)>>>12][((r28+-31980)>>>2)&0x3ff]; + f4= page[(r28+-32420)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f5 = readPages[(r28+-31984)>>>12][((r28+-31984)>>>2)&0x3ff]; + f5= page[(r28+-32424)>>>2]; f2 = r3; - f24 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + f24= page[(r29+44)>>>2]; f3 = r2; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f4 = readPages[(r28+-31972)>>>12][((r28+-31972)>>>2)&0x3ff]; + f4= page[(r28+-32412)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f5 = readPages[(r28+-31976)>>>12][((r28+-31976)>>>2)&0x3ff]; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - f25 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; + f5= page[(r28+-32416)>>>2]; + r31= page[(r29+20)>>>2]; + f25= page[(r29+40)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f4 = readPages[(r28+-31964)>>>12][((r28+-31964)>>>2)&0x3ff]; + f4= page[(r28+-32404)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f5 = readPages[(r28+-31968)>>>12][((r28+-31968)>>>2)&0x3ff]; + f5= page[(r28+-32408)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f4 = readPages[(r28+-31956)>>>12][((r28+-31956)>>>2)&0x3ff]; + f4= page[(r28+-32396)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f5 = readPages[(r28+-31960)>>>12][((r28+-31960)>>>2)&0x3ff]; + f5= page[(r28+-32400)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f4 = readPages[(r28+-31948)>>>12][((r28+-31948)>>>2)&0x3ff]; + f4= page[(r28+-32388)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f5 = readPages[(r28+-31952)>>>12][((r28+-31952)>>>2)&0x3ff]; + f5= page[(r28+-32392)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f6 = readPages[(r28+-31932)>>>12][((r28+-31932)>>>2)&0x3ff]; + f6= page[(r28+-32372)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f7 = readPages[(r28+-31936)>>>12][((r28+-31936)>>>2)&0x3ff]; + f7= page[(r28+-32376)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f6 = readPages[(r28+-31924)>>>12][((r28+-31924)>>>2)&0x3ff]; + f6= page[(r28+-32364)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f7 = readPages[(r28+-31928)>>>12][((r28+-31928)>>>2)&0x3ff]; + f7= page[(r28+-32368)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f23 = (int)(l >>> 32); f22 = (int)l; } @@ -38064,204 +48781,183 @@ public final class AcmeCrossAssembler extends UnixRuntime { { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f23 = (int)(l >>> 32); f22 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f20 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f21 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + f20= page[(r29+28)>>>2]; + f21= page[(r29+24)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f22 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + f22= page[(r29+36)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f23 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + f23= page[(r29+32)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x33be0: + case 0x447e0: r3 = 15456 << 16; r3 = r3 + 1; r2 = r2 < r3 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x33c54; - run_33c00(); return; + pc=0x44854; + run_44800(); return; } - f24 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - f22 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - f20 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - case 0x33c00: - pc=0x33c00; + f24= page[(r29+44)>>>2]; + f22= page[(r29+36)>>>2]; + f20= page[(r29+28)>>>2]; + case 0x44800: + pc=0x44800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_33c00() throws ExecutionException { /* 0x33c00 - 0x33e00 */ + private final void run_44800() throws ExecutionException { /* 0x44800 - 0x45000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x33c00: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - f0 = readPages[(r28+-32004)>>>12][((r28+-32004)>>>2)&0x3ff]; - f25 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - f23 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - f21 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - f1 = readPages[(r28+-32008)>>>12][((r28+-32008)>>>2)&0x3ff]; + case 0x44800: + r31= page[(r29+20)>>>2]; + f0= page[(r28+-32444)>>>2]; + f25= page[(r29+40)>>>2]; + f23= page[(r29+32)>>>2]; + f21= page[(r29+24)>>>2]; + f1= page[(r28+-32448)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x33c24: - f24 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - f22 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - f20 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + case 0x44824: + f24= page[(r29+44)>>>2]; + f22= page[(r29+36)>>>2]; + f20= page[(r29+28)>>>2]; + r31= page[(r29+20)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f25 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - f23 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - f21 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + f25= page[(r29+40)>>>2]; + f23= page[(r29+32)>>>2]; + f21= page[(r29+24)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))/(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x33c54: + case 0x44854: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f0 = readPages[(r28+-31996)>>>12][((r28+-31996)>>>2)&0x3ff]; - f4 = readPages[(r28+-31988)>>>12][((r28+-31988)>>>2)&0x3ff]; - f1 = readPages[(r28+-32000)>>>12][((r28+-32000)>>>2)&0x3ff]; - f5 = readPages[(r28+-31992)>>>12][((r28+-31992)>>>2)&0x3ff]; + f0= page[(r28+-32436)>>>2]; + f4= page[(r28+-32428)>>>2]; + f1= page[(r28+-32440)>>>2]; + f5= page[(r28+-32432)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f6 = readPages[(r28+-31940)>>>12][((r28+-31940)>>>2)&0x3ff]; - f24 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - f7 = readPages[(r28+-31944)>>>12][((r28+-31944)>>>2)&0x3ff]; - f22 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + f6= page[(r28+-32380)>>>2]; + f24= page[(r29+44)>>>2]; + f7= page[(r28+-32384)>>>2]; + f22= page[(r29+36)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f4 = readPages[(r28+-31980)>>>12][((r28+-31980)>>>2)&0x3ff]; + f4= page[(r28+-32420)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f5 = readPages[(r28+-31984)>>>12][((r28+-31984)>>>2)&0x3ff]; - f20 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - f25 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; + f5= page[(r28+-32424)>>>2]; + f20= page[(r29+28)>>>2]; + r31= page[(r29+20)>>>2]; + f25= page[(r29+40)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f4 = readPages[(r28+-31972)>>>12][((r28+-31972)>>>2)&0x3ff]; + f4= page[(r28+-32412)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f5 = readPages[(r28+-31976)>>>12][((r28+-31976)>>>2)&0x3ff]; - f23 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - f21 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + f5= page[(r28+-32416)>>>2]; + f23= page[(r29+32)>>>2]; + f21= page[(r29+24)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f4 = readPages[(r28+-31964)>>>12][((r28+-31964)>>>2)&0x3ff]; + f4= page[(r28+-32404)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f5 = readPages[(r28+-31968)>>>12][((r28+-31968)>>>2)&0x3ff]; + f5= page[(r28+-32408)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f4 = readPages[(r28+-31956)>>>12][((r28+-31956)>>>2)&0x3ff]; + f4= page[(r28+-32396)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f5 = readPages[(r28+-31960)>>>12][((r28+-31960)>>>2)&0x3ff]; + f5= page[(r28+-32400)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f4 = readPages[(r28+-31948)>>>12][((r28+-31948)>>>2)&0x3ff]; + f4= page[(r28+-32388)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f5 = readPages[(r28+-31952)>>>12][((r28+-31952)>>>2)&0x3ff]; + f5= page[(r28+-32392)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f6 = readPages[(r28+-31932)>>>12][((r28+-31932)>>>2)&0x3ff]; + f6= page[(r28+-32372)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f7 = readPages[(r28+-31936)>>>12][((r28+-31936)>>>2)&0x3ff]; + f7= page[(r28+-32376)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f6 = readPages[(r28+-31924)>>>12][((r28+-31924)>>>2)&0x3ff]; + f6= page[(r28+-32364)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f7 = readPages[(r28+-31928)>>>12][((r28+-31928)>>>2)&0x3ff]; + f7= page[(r28+-32368)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f4 = readPages[(r28+-31916)>>>12][((r28+-31916)>>>2)&0x3ff]; - f5 = readPages[(r28+-31920)>>>12][((r28+-31920)>>>2)&0x3ff]; + f4= page[(r28+-32356)>>>2]; + f5= page[(r28+-32360)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))/(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f2 = readPages[(r28+-31908)>>>12][((r28+-31908)>>>2)&0x3ff]; - f3 = readPages[(r28+-31912)>>>12][((r28+-31912)>>>2)&0x3ff]; + f2= page[(r28+-32348)>>>2]; + f3= page[(r28+-32352)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f0 = readPages[(r28+-32004)>>>12][((r28+-32004)>>>2)&0x3ff]; - f1 = readPages[(r28+-32008)>>>12][((r28+-32008)>>>2)&0x3ff]; + f0= page[(r28+-32444)>>>2]; + f1= page[(r28+-32448)>>>2]; r29 = r29 + 48; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ pc=r31; return; - case 0x33d6c: - f0 = readPages[(r28+-32012)>>>12][((r28+-32012)>>>2)&0x3ff]; - f1 = readPages[(r28+-32016)>>>12][((r28+-32016)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x33a6c; - run_33a00(); return; - case 0x33d80: - f24 = readPages[(r28+-31916)>>>12][((r28+-31916)>>>2)&0x3ff]; - f0 = readPages[(r28+-31900)>>>12][((r28+-31900)>>>2)&0x3ff]; - f25 = readPages[(r28+-31920)>>>12][((r28+-31920)>>>2)&0x3ff]; - f1 = readPages[(r28+-31904)>>>12][((r28+-31904)>>>2)&0x3ff]; + case 0x4496c: + f0= page[(r28+-32452)>>>2]; + f1= page[(r28+-32456)>>>2]; + pc=0x4466c; + run_44000(); return; + case 0x44980: + f24= page[(r28+-32356)>>>2]; + f0= page[(r28+-32340)>>>2]; + f25= page[(r28+-32360)>>>2]; + f1= page[(r28+-32344)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))+(Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f20 = readPages[(r28+-31996)>>>12][((r28+-31996)>>>2)&0x3ff]; + f20= page[(r28+-32436)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f23 = (int)(l >>> 32); f22 = (int)l; } - f21 = readPages[(r28+-32000)>>>12][((r28+-32000)>>>2)&0x3ff]; - f0 = readPages[(r28+-31988)>>>12][((r28+-31988)>>>2)&0x3ff]; - f2 = readPages[(r28+-31964)>>>12][((r28+-31964)>>>2)&0x3ff]; - f1 = readPages[(r28+-31992)>>>12][((r28+-31992)>>>2)&0x3ff]; + f21= page[(r28+-32440)>>>2]; + f0= page[(r28+-32428)>>>2]; + f2= page[(r28+-32404)>>>2]; + f1= page[(r28+-32432)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } - f3 = readPages[(r28+-31968)>>>12][((r28+-31968)>>>2)&0x3ff]; + f3= page[(r28+-32408)>>>2]; f12 = f22; f13 = f23; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } - f0 = readPages[(r28+-31980)>>>12][((r28+-31980)>>>2)&0x3ff]; + f0= page[(r28+-32420)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } - f1 = readPages[(r28+-31984)>>>12][((r28+-31984)>>>2)&0x3ff]; + f1= page[(r28+-32424)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } - f0 = readPages[(r28+-31972)>>>12][((r28+-31972)>>>2)&0x3ff]; + f0= page[(r28+-32412)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } - f1 = readPages[(r28+-31976)>>>12][((r28+-31976)>>>2)&0x3ff]; + f1= page[(r28+-32416)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } - f2 = readPages[(r28+-31956)>>>12][((r28+-31956)>>>2)&0x3ff]; + f2= page[(r28+-32396)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } - f3 = readPages[(r28+-31960)>>>12][((r28+-31960)>>>2)&0x3ff]; + f3= page[(r28+-32400)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } - case 0x33e00: - pc=0x33e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_33e00() throws ExecutionException { /* 0x33e00 - 0x34000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x33e00: - /* Next insn is delay slot */ - r31=0x33e08; - pc=0x35800; - run_35800(); return; - case 0x33e08: - f12 = readPages[(r28+-31948)>>>12][((r28+-31948)>>>2)&0x3ff]; - f2 = readPages[(r28+-31940)>>>12][((r28+-31940)>>>2)&0x3ff]; - f13 = readPages[(r28+-31952)>>>12][((r28+-31952)>>>2)&0x3ff]; - f3 = readPages[(r28+-31944)>>>12][((r28+-31944)>>>2)&0x3ff]; + r31=0x44a08; + pc=0x46400; + run_46000(); return; + case 0x44a08: + f12= page[(r28+-32388)>>>2]; + f2= page[(r28+-32380)>>>2]; + f13= page[(r28+-32392)>>>2]; + f3= page[(r28+-32384)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))*(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f2 = readPages[(r28+-31932)>>>12][((r28+-31932)>>>2)&0x3ff]; + f2= page[(r28+-32372)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f3 = readPages[(r28+-31936)>>>12][((r28+-31936)>>>2)&0x3ff]; + f3= page[(r28+-32376)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f2 = readPages[(r28+-31924)>>>12][((r28+-31924)>>>2)&0x3ff]; + f2= page[(r28+-32364)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f3 = readPages[(r28+-31928)>>>12][((r28+-31928)>>>2)&0x3ff]; + f3= page[(r28+-32368)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f2 = readPages[(r28+-31908)>>>12][((r28+-31908)>>>2)&0x3ff]; + f2= page[(r28+-32348)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f23 = (int)(l >>> 32); f22 = (int)l; } - f3 = readPages[(r28+-31912)>>>12][((r28+-31912)>>>2)&0x3ff]; - f12 = readPages[(r28+-32012)>>>12][((r28+-32012)>>>2)&0x3ff]; - f13 = readPages[(r28+-32016)>>>12][((r28+-32016)>>>2)&0x3ff]; + f3= page[(r28+-32352)>>>2]; + f12= page[(r28+-32452)>>>2]; + f13= page[(r28+-32456)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))+(Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))); f25 = (int)(l >>> 32); f24 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))/(Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } @@ -38269,201 +48965,164 @@ public final class AcmeCrossAssembler extends UnixRuntime { { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x33a6c; - run_33a00(); return; - case 0x34000: - pc=0x34000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_34000() throws ExecutionException { /* 0x34000 - 0x34200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x34000: + pc=0x4466c; + run_44000(); return; + case 0x44c00: r29 = r29 + -56; r2 = f13; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; + page[(r29+20)>>>2] = r16; r16 = 32767 << 16; r16 = r16 | 65535; r16 = r16 & r2; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; + page[(r29+24)>>>2] = r17; r17 = r2 + r0; r2 = 16368 << 16; r3 = r16 < r2 ? 1 : 0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f24; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f25; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f22; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f23; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = f20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = f21; + page[(r29+28)>>>2] = r31; + page[(r29+52)>>>2] = f24; + page[(r29+48)>>>2] = f25; + page[(r29+44)>>>2] = f22; + page[(r29+40)>>>2] = f23; + page[(r29+36)>>>2] = f20; + page[(r29+32)>>>2] = f21; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x340a8; + pc=0x44ca8; continue; } r5 = f12; r2 = r16 - r2; r2 = r2 | r5; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x340fc; + pc=0x44cfc; continue; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))/(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r3 = f2; r2 = f3; - case 0x34070: - f24 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - f22 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - f20 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + case 0x44c70: + f24= page[(r29+52)>>>2]; + f22= page[(r29+44)>>>2]; + f20= page[(r29+36)>>>2]; + r31= page[(r29+28)>>>2]; f0 = r3; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - f25 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - f23 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - f21 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + f25= page[(r29+48)>>>2]; + f23= page[(r29+40)>>>2]; + f21= page[(r29+32)>>>2]; f1 = r2; r29 = r29 + 56; - /* Next insn is delay slot */ pc=r31; return; - case 0x340a8: + case 0x44ca8: r2 = 16352 << 16; r2 = r16 < r2 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x34138; + pc=0x44d38; continue; } r2 = 15936 << 16; r2 = r16 < r2 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x342e8; - run_34200(); return; + pc=0x44ee8; + continue; } - f0 = readPages[(r28+-31876)>>>12][((r28+-31876)>>>2)&0x3ff]; - f22 = readPages[(r28+-31868)>>>12][((r28+-31868)>>>2)&0x3ff]; - f1 = readPages[(r28+-31880)>>>12][((r28+-31880)>>>2)&0x3ff]; - f23 = readPages[(r28+-31872)>>>12][((r28+-31872)>>>2)&0x3ff]; + f0= page[(r28+-32316)>>>2]; + f22= page[(r28+-32308)>>>2]; + f1= page[(r28+-32320)>>>2]; + f23= page[(r28+-32312)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))<(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x34144; + pc=0x44d44; continue; } r3 = f12; r2 = f13; - /* Next insn is delay slot */ - pc=0x34070; + pc=0x44c70; continue; - case 0x340fc: - f0 = readPages[(r28+-31892)>>>12][((r28+-31892)>>>2)&0x3ff]; - f1 = readPages[(r28+-31896)>>>12][((r28+-31896)>>>2)&0x3ff]; + case 0x44cfc: + f0= page[(r28+-32332)>>>2]; + f1= page[(r28+-32336)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f0 = readPages[(r28+-31884)>>>12][((r28+-31884)>>>2)&0x3ff]; - f1 = readPages[(r28+-31888)>>>12][((r28+-31888)>>>2)&0x3ff]; + f0= page[(r28+-32324)>>>2]; + f1= page[(r28+-32328)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } r3 = f0; r2 = f1; - /* Next insn is delay slot */ - pc=0x34070; + pc=0x44c70; continue; - case 0x34138: - f22 = readPages[(r28+-31868)>>>12][((r28+-31868)>>>2)&0x3ff]; - f23 = readPages[(r28+-31872)>>>12][((r28+-31872)>>>2)&0x3ff]; - case 0x34144: - /* Next insn is delay slot */ - r31=0x3414c; - pc=0x32a00; - run_32a00(); return; - case 0x3414c: - f2 = readPages[(r28+-31780)>>>12][((r28+-31780)>>>2)&0x3ff]; + case 0x44d38: + f22= page[(r28+-32308)>>>2]; + f23= page[(r28+-32312)>>>2]; + case 0x44d44: + r31=0x44d4c; + pc=0x43600; + run_43000(); return; + case 0x44d4c: + f2= page[(r28+-32220)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f3 = readPages[(r28+-31784)>>>12][((r28+-31784)>>>2)&0x3ff]; - f24 = readPages[(r28+-31860)>>>12][((r28+-31860)>>>2)&0x3ff]; + f3= page[(r28+-32224)>>>2]; + f24= page[(r28+-32300)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } - f25 = readPages[(r28+-31864)>>>12][((r28+-31864)>>>2)&0x3ff]; - f0 = readPages[(r28+-31852)>>>12][((r28+-31852)>>>2)&0x3ff]; - f2 = readPages[(r28+-31828)>>>12][((r28+-31828)>>>2)&0x3ff]; - f1 = readPages[(r28+-31856)>>>12][((r28+-31856)>>>2)&0x3ff]; + f25= page[(r28+-32304)>>>2]; + f0= page[(r28+-32292)>>>2]; + f2= page[(r28+-32268)>>>2]; + f1= page[(r28+-32296)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))); f25 = (int)(l >>> 32); f24 = (int)l; } - f3 = readPages[(r28+-31832)>>>12][((r28+-31832)>>>2)&0x3ff]; - f4 = readPages[(r28+-31820)>>>12][((r28+-31820)>>>2)&0x3ff]; + f3= page[(r28+-32272)>>>2]; + f4= page[(r28+-32260)>>>2]; f12 = f20; f13 = f21; - f5 = readPages[(r28+-31824)>>>12][((r28+-31824)>>>2)&0x3ff]; + f5= page[(r28+-32264)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f25 = (int)(l >>> 32); f24 = (int)l; } - f0 = readPages[(r28+-31844)>>>12][((r28+-31844)>>>2)&0x3ff]; + f0= page[(r28+-32284)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f25 = (int)(l >>> 32); f24 = (int)l; } - f1 = readPages[(r28+-31848)>>>12][((r28+-31848)>>>2)&0x3ff]; + f1= page[(r28+-32288)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f25 = (int)(l >>> 32); f24 = (int)l; } - f0 = readPages[(r28+-31836)>>>12][((r28+-31836)>>>2)&0x3ff]; + f0= page[(r28+-32276)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f25 = (int)(l >>> 32); f24 = (int)l; } - f1 = readPages[(r28+-31840)>>>12][((r28+-31840)>>>2)&0x3ff]; + f1= page[(r28+-32280)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f25 = (int)(l >>> 32); f24 = (int)l; } - f0 = readPages[(r28+-31812)>>>12][((r28+-31812)>>>2)&0x3ff]; + f0= page[(r28+-32252)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f25 = (int)(l >>> 32); f24 = (int)l; } - f1 = readPages[(r28+-31816)>>>12][((r28+-31816)>>>2)&0x3ff]; + f1= page[(r28+-32256)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f25 = (int)(l >>> 32); f24 = (int)l; } - f2 = readPages[(r28+-31804)>>>12][((r28+-31804)>>>2)&0x3ff]; + f2= page[(r28+-32244)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f25 = (int)(l >>> 32); f24 = (int)l; } - f3 = readPages[(r28+-31808)>>>12][((r28+-31808)>>>2)&0x3ff]; + f3= page[(r28+-32248)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f2 = readPages[(r28+-31796)>>>12][((r28+-31796)>>>2)&0x3ff]; + f2= page[(r28+-32236)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f3 = readPages[(r28+-31800)>>>12][((r28+-31800)>>>2)&0x3ff]; + f3= page[(r28+-32240)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f25 = (int)(l >>> 32); f24 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f25 = (int)(l >>> 32); f24 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f2 = readPages[(r28+-31788)>>>12][((r28+-31788)>>>2)&0x3ff]; + f2= page[(r28+-32228)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f3 = readPages[(r28+-31792)>>>12][((r28+-31792)>>>2)&0x3ff]; - case 0x34200: - pc=0x34200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_34200() throws ExecutionException { /* 0x34200 - 0x34400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x34200: + f3= page[(r28+-32232)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f23 = (int)(l >>> 32); f22 = (int)l; } - /* Next insn is delay slot */ - r31=0x34218; - pc=0x35800; - run_35800(); return; - case 0x34218: + r31=0x44e18; + pc=0x46400; + run_46000(); return; + case 0x44e18: r2 = 16367 << 16; r2 = r2 + 13107; r16 = r16 < r2 ? 1 : 0; if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x34274; + pc=0x44e74; continue; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))/(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f23 = (int)(l >>> 32); f22 = (int)l; } - f4 = readPages[(r28+-31884)>>>12][((r28+-31884)>>>2)&0x3ff]; - f2 = readPages[(r28+-31892)>>>12][((r28+-31892)>>>2)&0x3ff]; - f5 = readPages[(r28+-31888)>>>12][((r28+-31888)>>>2)&0x3ff]; - f3 = readPages[(r28+-31896)>>>12][((r28+-31896)>>>2)&0x3ff]; + f4= page[(r28+-32324)>>>2]; + f2= page[(r28+-32332)>>>2]; + f5= page[(r28+-32328)>>>2]; + f3= page[(r28+-32336)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f23 = (int)(l >>> 32); f22 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } @@ -38471,18 +49130,16 @@ public final class AcmeCrossAssembler extends UnixRuntime { { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } r5 = f4; r4 = f5; - case 0x3425c: + case 0x44e5c: if(r17 <= 0) { - /* Next insn is delay slot */ - pc=0x343f0; + pc=0x44ff0; continue; } r3 = r5 + r0; r2 = r4 + r0; - /* Next insn is delay slot */ - pc=0x34070; - run_34000(); return; - case 0x34274: + pc=0x44c70; + continue; + case 0x44e74: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))/(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f23 = (int)(l >>> 32); f22 = (int)l; } r3 = r0 + r0; r2 = f1; @@ -38494,134 +49151,117 @@ public final class AcmeCrossAssembler extends UnixRuntime { { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f23 = (int)(l >>> 32); f22 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))-(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } - f22 = readPages[(r28+-31884)>>>12][((r28+-31884)>>>2)&0x3ff]; + f22= page[(r28+-32324)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } - f23 = readPages[(r28+-31888)>>>12][((r28+-31888)>>>2)&0x3ff]; + f23= page[(r28+-32328)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))+(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))-(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f21 = (int)(l >>> 32); f20 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f4 = readPages[(r28+-31772)>>>12][((r28+-31772)>>>2)&0x3ff]; - f5 = readPages[(r28+-31776)>>>12][((r28+-31776)>>>2)&0x3ff]; + f4= page[(r28+-32212)>>>2]; + f5= page[(r28+-32216)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r5 = f2; r4 = f3; - /* Next insn is delay slot */ - pc=0x3425c; + pc=0x44e5c; continue; - case 0x342e8: + case 0x44ee8: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f2 = readPages[(r28+-31860)>>>12][((r28+-31860)>>>2)&0x3ff]; - f3 = readPages[(r28+-31864)>>>12][((r28+-31864)>>>2)&0x3ff]; + f2= page[(r28+-32300)>>>2]; + f3= page[(r28+-32304)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f2 = readPages[(r28+-31852)>>>12][((r28+-31852)>>>2)&0x3ff]; - f3 = readPages[(r28+-31856)>>>12][((r28+-31856)>>>2)&0x3ff]; + f2= page[(r28+-32292)>>>2]; + f3= page[(r28+-32296)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f2 = readPages[(r28+-31844)>>>12][((r28+-31844)>>>2)&0x3ff]; - f3 = readPages[(r28+-31848)>>>12][((r28+-31848)>>>2)&0x3ff]; + f2= page[(r28+-32284)>>>2]; + f3= page[(r28+-32288)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f2 = readPages[(r28+-31836)>>>12][((r28+-31836)>>>2)&0x3ff]; - f3 = readPages[(r28+-31840)>>>12][((r28+-31840)>>>2)&0x3ff]; + f2= page[(r28+-32276)>>>2]; + f3= page[(r28+-32280)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f2 = readPages[(r28+-31828)>>>12][((r28+-31828)>>>2)&0x3ff]; - f3 = readPages[(r28+-31832)>>>12][((r28+-31832)>>>2)&0x3ff]; + f2= page[(r28+-32268)>>>2]; + f3= page[(r28+-32272)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f2 = readPages[(r28+-31820)>>>12][((r28+-31820)>>>2)&0x3ff]; - f3 = readPages[(r28+-31824)>>>12][((r28+-31824)>>>2)&0x3ff]; + f2= page[(r28+-32260)>>>2]; + f3= page[(r28+-32264)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f4 = readPages[(r28+-31804)>>>12][((r28+-31804)>>>2)&0x3ff]; + f4= page[(r28+-32244)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f2 = readPages[(r28+-31812)>>>12][((r28+-31812)>>>2)&0x3ff]; - f5 = readPages[(r28+-31808)>>>12][((r28+-31808)>>>2)&0x3ff]; - f3 = readPages[(r28+-31816)>>>12][((r28+-31816)>>>2)&0x3ff]; + f2= page[(r28+-32252)>>>2]; + f5= page[(r28+-32248)>>>2]; + f3= page[(r28+-32256)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f4 = readPages[(r28+-31796)>>>12][((r28+-31796)>>>2)&0x3ff]; + f4= page[(r28+-32236)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f5 = readPages[(r28+-31800)>>>12][((r28+-31800)>>>2)&0x3ff]; + f5= page[(r28+-32240)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f4 = readPages[(r28+-31788)>>>12][((r28+-31788)>>>2)&0x3ff]; + f4= page[(r28+-32228)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f5 = readPages[(r28+-31792)>>>12][((r28+-31792)>>>2)&0x3ff]; + f5= page[(r28+-32232)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f2 = readPages[(r28+-31868)>>>12][((r28+-31868)>>>2)&0x3ff]; - f3 = readPages[(r28+-31872)>>>12][((r28+-31872)>>>2)&0x3ff]; + f2= page[(r28+-32308)>>>2]; + f3= page[(r28+-32312)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } r3 = f4; r2 = f5; - /* Next insn is delay slot */ - pc=0x34070; - run_34000(); return; - case 0x343f0: + pc=0x44c70; + continue; + case 0x44ff0: r6 = 32768 << 16; r2 = r4 ^ r6; r3 = r5 + r0; - /* Next insn is delay slot */ - pc=0x34070; - run_34000(); return; - case 0x34400: - pc=0x34400; + pc=0x44c70; + continue; + case 0x45000: + pc=0x45000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_34400() throws ExecutionException { /* 0x34400 - 0x34600 */ + private final void run_45000() throws ExecutionException { /* 0x45000 - 0x45800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x34400: - case 0x34600: - pc=0x34600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_34600() throws ExecutionException { /* 0x34600 - 0x34800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x34600: + case 0x45000: + case 0x45200: r2 = f15; r4 = 32767 << 16; r29 = r29 + -72; r3 = f14; r4 = r4 | 65535; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r21; + page[(r29+44)>>>2] = r21; r21 = r4 & r2; r5 = r21 | r3; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r19; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = f20; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = f21; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r30; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r23; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r22; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; + page[(r29+36)>>>2] = r19; + page[(r29+32)>>>2] = r18; + page[(r29+68)>>>2] = f20; + page[(r29+64)>>>2] = f21; + page[(r29+60)>>>2] = r31; + page[(r29+56)>>>2] = r30; + page[(r29+52)>>>2] = r23; + page[(r29+48)>>>2] = r22; + page[(r29+40)>>>2] = r20; + page[(r29+28)>>>2] = r17; + page[(r29+24)>>>2] = r16; f20 = f12; f21 = f13; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = f14; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = f15; + page[(r29+20)>>>2] = f14; + page[(r29+16)>>>2] = f15; r19 = f12; r18 = f13; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x346c0; + pc=0x452c0; continue; } r22 = r4 & r18; @@ -38630,238 +49270,198 @@ public final class AcmeCrossAssembler extends UnixRuntime { r5 = r22 < r5 ? 1 : 0; r16 = r18 + r0; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x346ac; + pc=0x452ac; continue; } r23 = r19 + r0; r30 = r2 + r0; r6 = r3 + r0; if(r22 == r4) { - /* Next insn is delay slot */ - pc=0x347e0; + pc=0x453e0; continue; } - case 0x34698: + case 0x45298: r4 = 32752 << 16; r5 = r4 + 1; r5 = r21 < r5 ? 1 : 0; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x3474c; + pc=0x4534c; continue; } - case 0x346ac: + case 0x452ac: r4 = 49168 << 16; r22 = r22 + r4; r22 = r22 | r19; if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x34708; + pc=0x45308; continue; } - case 0x346c0: - f0 = readPages[(r28+-31764)>>>12][((r28+-31764)>>>2)&0x3ff]; - f1 = readPages[(r28+-31768)>>>12][((r28+-31768)>>>2)&0x3ff]; - case 0x346cc: - f20 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r30 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r23 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r22 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r21 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r20 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r19 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - f21 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; + case 0x452c0: + f0= page[(r28+-32204)>>>2]; + f1= page[(r28+-32208)>>>2]; + case 0x452cc: + f20= page[(r29+68)>>>2]; + r31= page[(r29+60)>>>2]; + r30= page[(r29+56)>>>2]; + r23= page[(r29+52)>>>2]; + r22= page[(r29+48)>>>2]; + r21= page[(r29+44)>>>2]; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + f21= page[(r29+64)>>>2]; r29 = r29 + 72; - /* Next insn is delay slot */ pc=r31; return; - case 0x34708: - f20 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r30 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r23 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r22 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r21 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r20 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r19 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - f21 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r4 = 7 << 16; - r4 = r4 + -12264; + case 0x45308: + f20= page[(r29+68)>>>2]; + r31= page[(r29+60)>>>2]; + r30= page[(r29+56)>>>2]; + r23= page[(r29+52)>>>2]; + r22= page[(r29+48)>>>2]; + r21= page[(r29+44)>>>2]; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + f21= page[(r29+64)>>>2]; + r4 = 6 << 16; + r4 = r4 + -4072; r29 = r29 + 72; - /* Next insn is delay slot */ - pc=0x37e00; - run_37e00(); return; - case 0x3474c: + pc=0x48a00; + run_48800(); return; + case 0x4534c: if(r21 == r4) { - /* Next insn is delay slot */ - pc=0x34878; - run_34800(); return; + pc=0x45478; + continue; } - case 0x34754: + case 0x45354: if(r16 < 0) { - /* Next insn is delay slot */ - pc=0x348cc; - run_34800(); return; + pc=0x454cc; + continue; } - case 0x3475c: + case 0x4535c: r20 = r0 + r0; - case 0x34760: + case 0x45360: if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x347f4; + pc=0x453f4; continue; } r2 = 32752 << 16; if(r21 == r2) { - /* Next insn is delay slot */ - pc=0x34988; - run_34800(); return; + pc=0x45588; + continue; } - case 0x34774: + case 0x45374: r2 = 16368 << 16; if(r21 == r2) { - /* Next insn is delay slot */ - pc=0x34928; - run_34800(); return; + pc=0x45528; + continue; } r2 = 16384 << 16; if(r30 == r2) { - /* Next insn is delay slot */ - pc=0x34ed8; - run_34e00(); return; + pc=0x45ad8; + run_45800(); return; } r2 = 16352 << 16; if(r30 != r2) { - /* Next insn is delay slot */ - pc=0x347f4; + pc=0x453f4; continue; } if(r16 < 0) { - /* Next insn is delay slot */ - pc=0x347f4; + pc=0x453f4; continue; } f12 = f20; f13 = f21; - f20 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r30 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r23 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r22 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r21 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r20 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r19 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - f21 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; + f20= page[(r29+68)>>>2]; + r31= page[(r29+60)>>>2]; + r30= page[(r29+56)>>>2]; + r23= page[(r29+52)>>>2]; + r22= page[(r29+48)>>>2]; + r21= page[(r29+44)>>>2]; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; + f21= page[(r29+64)>>>2]; r29 = r29 + 72; - /* Next insn is delay slot */ - pc=0x35800; - run_35800(); return; - case 0x347e0: + pc=0x46400; + run_46000(); return; + case 0x453e0: if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x346ac; + pc=0x452ac; continue; } - /* Next insn is delay slot */ - pc=0x34698; + pc=0x45298; continue; - case 0x347f0: + case 0x453f0: r20 = r0 + r0; - case 0x347f4: + case 0x453f4: f12 = f20; f13 = f21; - /* Next insn is delay slot */ - r31=0x34800; - pc=0x32a00; - run_32a00(); return; - case 0x34800: - pc=0x34800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_34800() throws ExecutionException { /* 0x34800 - 0x34a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x34800: + r31=0x45400; + pc=0x43600; + run_43000(); return; + case 0x45400: r3 = f0; r2 = f1; if(r23 == r0) { - /* Next insn is delay slot */ - pc=0x34888; + pc=0x45488; continue; } - case 0x34810: + case 0x45410: r18 = r18 >>> 31; r18 = r18 + -1; r4 = r20 | r18; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x349d4; + pc=0x455d4; continue; } r4 = 16864 << 16; r4 = r4 + 1; r4 = r21 < r4 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x349e4; + pc=0x455e4; continue; } r4 = 17392 << 16; r4 = r4 + 1; r21 = r21 < r4 ? 1 : 0; if(r21 != r0) { - /* Next insn is delay slot */ - pc=0x34f80; - run_34e00(); return; + pc=0x45b80; + run_45800(); return; } r2 = 16368 << 16; r22 = r22 < r2 ? 1 : 0; if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x34964; + pc=0x45564; continue; } - case 0x3485c: + case 0x4545c: if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x3496c; + pc=0x4556c; continue; } - case 0x34864: + case 0x45464: f0 = r0; f1 = r0; - /* Next insn is delay slot */ - pc=0x346cc; - run_34600(); return; - case 0x34878: + pc=0x452cc; + continue; + case 0x45478: if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x34754; - run_34600(); return; + pc=0x45354; + continue; } - /* Next insn is delay slot */ - pc=0x346ac; - run_34600(); return; - case 0x34888: + pc=0x452ac; + continue; + case 0x45488: if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x348a8; + pc=0x454a8; continue; } r5 = 16383 << 16; @@ -38869,168 +49469,134 @@ public final class AcmeCrossAssembler extends UnixRuntime { r5 = r5 & r18; r4 = 16368 << 16; if(r5 != r4) { - /* Next insn is delay slot */ - pc=0x34810; + pc=0x45410; continue; } - case 0x348a8: + case 0x454a8: if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x3493c; + pc=0x4553c; continue; } - case 0x348b0: + case 0x454b0: if(r16 < 0) { - /* Next insn is delay slot */ - pc=0x34ea0; - run_34e00(); return; + pc=0x45aa0; + run_45800(); return; } - case 0x348b8: + case 0x454b8: f0 = r3; f1 = r2; - /* Next insn is delay slot */ - pc=0x346cc; - run_34600(); return; - case 0x348cc: + pc=0x452cc; + continue; + case 0x454cc: r4 = 17216 << 16; r4 = r21 < r4 ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x349c8; + pc=0x455c8; continue; } r4 = 16368 << 16; r4 = r21 < r4 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x3475c; - run_34600(); return; + pc=0x4535c; + continue; } r4 = r21 >> 20; r5 = r4 < 1044 ? 1 : 0; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x350bc; - run_35000(); return; + pc=0x45cbc; + run_45800(); return; } r2 = r0 + 1075; r4 = r2 - r4; r2 = r3 >>> (r4&0x1f); r4 = r2 << (r4&0x1f); if(r4 != r6) { - /* Next insn is delay slot */ - pc=0x3475c; - run_34600(); return; + pc=0x4535c; + continue; } r2 = r2 & 1; r20 = r0 + 2; r20 = r20 - r2; - /* Next insn is delay slot */ - pc=0x34760; - run_34600(); return; - case 0x34928: + pc=0x45360; + continue; + case 0x45528: if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x3505c; - run_35000(); return; + pc=0x45c5c; + run_45800(); return; } f0 = f20; f1 = f21; - /* Next insn is delay slot */ - pc=0x346cc; - run_34600(); return; - case 0x3493c: + pc=0x452cc; + continue; + case 0x4553c: f2 = r3; - f0 = readPages[(r28+-31764)>>>12][((r28+-31764)>>>2)&0x3ff]; + f0= page[(r28+-32204)>>>2]; f3 = r2; - f1 = readPages[(r28+-31768)>>>12][((r28+-31768)>>>2)&0x3ff]; + f1= page[(r28+-32208)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))/(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r3 = f2; r2 = f3; - /* Next insn is delay slot */ - pc=0x348b0; + pc=0x454b0; continue; - case 0x34964: + case 0x45564: if(r30 <= 0) { - /* Next insn is delay slot */ - pc=0x34864; + pc=0x45464; continue; } - case 0x3496c: - f0 = readPages[(r28+-31748)>>>12][((r28+-31748)>>>2)&0x3ff]; - f1 = readPages[(r28+-31752)>>>12][((r28+-31752)>>>2)&0x3ff]; + case 0x4556c: + f0= page[(r28+-32188)>>>2]; + f1= page[(r28+-32192)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x346cc; - run_34600(); return; - case 0x34988: + pc=0x452cc; + continue; + case 0x45588: r2 = 49168 << 16; r2 = r22 + r2; r2 = r2 | r19; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x346c0; - run_34600(); return; + pc=0x452c0; + continue; } r2 = 16368 << 16; r22 = r22 < r2 ? 1 : 0; if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x34f58; - run_34e00(); return; + pc=0x45b58; + run_45800(); return; } if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x34864; + pc=0x45464; continue; } - f0 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - f1 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x346cc; - run_34600(); return; - case 0x349c8: + f0= page[(r29+20)>>>2]; + f1= page[(r29+16)>>>2]; + pc=0x452cc; + continue; + case 0x455c8: r20 = r0 + 2; - /* Next insn is delay slot */ - pc=0x34760; - run_34600(); return; - case 0x349d4: + pc=0x45360; + continue; + case 0x455d4: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))-(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x346cc; - run_34600(); return; - case 0x349e4: + pc=0x452cc; + continue; + case 0x455e4: r4 = 16 << 16; r4 = r22 < r4 ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x35050; - run_35000(); return; + pc=0x45c50; + run_45800(); return; } f4 = r3; - f0 = readPages[(r28+-31692)>>>12][((r28+-31692)>>>2)&0x3ff]; + f0= page[(r28+-32132)>>>2]; f5 = r2; - case 0x34a00: - pc=0x34a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_34a00() throws ExecutionException { /* 0x34a00 - 0x34c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x34a00: - f1 = readPages[(r28+-31696)>>>12][((r28+-31696)>>>2)&0x3ff]; + f1= page[(r28+-32136)>>>2]; r4 = r0 + -53; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } r2 = f5; r3 = f4; r22 = r2 + r0; - case 0x34a18: + case 0x45618: r8 = r22 >> 20; r8 = r8 + -1023; r8 = r8 + r4; @@ -39043,35 +49609,33 @@ public final class AcmeCrossAssembler extends UnixRuntime { r4 = r22 < r4 ? 1 : 0; r10 = r22 | r10; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x35040; - run_35000(); return; + pc=0x45c40; + run_45800(); return; } r4 = 11 << 16; r4 = r4 | 46714; r22 = r22 < r4 ? 1 : 0; if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x3510c; - run_35000(); return; + pc=0x45d0c; + run_45800(); return; } r4 = 65520 << 16; r8 = r8 + 1; r10 = r10 + r4; r11 = r0 + r0; r9 = r0 + r0; - case 0x34a74: - r4 = 7 << 16; + case 0x45674: + r4 = 6 << 16; r9 = r9 << 3; - r4 = r4 + -296; + r4 = r4 + 13248; r4 = r9 + r4; - f14 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; + f14= page[(r4+4)>>>2]; f16 = r3; - f15 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; + f15= page[(r4+0)>>>2]; f17 = r10; - f12 = readPages[(r28+-31764)>>>12][((r28+-31764)>>>2)&0x3ff]; + f12= page[(r28+-32204)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f17&0xffffffffL) << 32) | (f16&0xffffffffL)))+(Double.longBitsToDouble(((f15&0xffffffffL) << 32) | (f14&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f13 = readPages[(r28+-31768)>>>12][((r28+-31768)>>>2)&0x3ff]; + f13= page[(r28+-32208)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f17&0xffffffffL) << 32) | (f16&0xffffffffL)))-(Double.longBitsToDouble(((f15&0xffffffffL) << 32) | (f14&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } r7 = r0 + r0; @@ -39080,10 +49644,10 @@ public final class AcmeCrossAssembler extends UnixRuntime { r5 = r0 + r0; f8 = r5; r5 = r0 + r0; - f18 = readPages[(r28+-31612)>>>12][((r28+-31612)>>>2)&0x3ff]; - r2 = 7 << 16; - f19 = readPages[(r28+-31616)>>>12][((r28+-31616)>>>2)&0x3ff]; - r2 = r2 + -328; + f18= page[(r28+-32052)>>>2]; + r2 = 6 << 16; + f19= page[(r28+-32056)>>>2]; + r2 = r2 + 13216; r2 = r9 + r2; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } r6 = f7; @@ -39097,35 +49661,35 @@ public final class AcmeCrossAssembler extends UnixRuntime { { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f11 = (int)(l >>> 32); f10 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))-(Double.longBitsToDouble(((f15&0xffffffffL) << 32) | (f14&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f17&0xffffffffL) << 32) | (f16&0xffffffffL)))-(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f16 = readPages[(r28+-31636)>>>12][((r28+-31636)>>>2)&0x3ff]; + f16= page[(r28+-32076)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f10 = readPages[(r28+-31676)>>>12][((r28+-31676)>>>2)&0x3ff]; - f17 = readPages[(r28+-31640)>>>12][((r28+-31640)>>>2)&0x3ff]; - f11 = readPages[(r28+-31680)>>>12][((r28+-31680)>>>2)&0x3ff]; + f10= page[(r28+-32116)>>>2]; + f17= page[(r28+-32080)>>>2]; + f11= page[(r28+-32120)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f8 = readPages[(r28+-31684)>>>12][((r28+-31684)>>>2)&0x3ff]; + f8= page[(r28+-32124)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f15 = (int)(l >>> 32); f14 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f9 = readPages[(r28+-31688)>>>12][((r28+-31688)>>>2)&0x3ff]; + f9= page[(r28+-32128)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))+(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f10 = readPages[(r28+-31668)>>>12][((r28+-31668)>>>2)&0x3ff]; + f10= page[(r28+-32108)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f11 = readPages[(r28+-31672)>>>12][((r28+-31672)>>>2)&0x3ff]; + f11= page[(r28+-32112)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))+(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f10 = readPages[(r28+-31660)>>>12][((r28+-31660)>>>2)&0x3ff]; + f10= page[(r28+-32100)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f11 = readPages[(r28+-31664)>>>12][((r28+-31664)>>>2)&0x3ff]; + f11= page[(r28+-32104)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))+(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f10 = readPages[(r28+-31652)>>>12][((r28+-31652)>>>2)&0x3ff]; + f10= page[(r28+-32092)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f11 = readPages[(r28+-31656)>>>12][((r28+-31656)>>>2)&0x3ff]; + f11= page[(r28+-32096)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))+(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f8 = readPages[(r28+-31644)>>>12][((r28+-31644)>>>2)&0x3ff]; - f9 = readPages[(r28+-31648)>>>12][((r28+-31648)>>>2)&0x3ff]; + f8= page[(r28+-32084)>>>2]; + f9= page[(r28+-32088)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } @@ -39141,35 +49705,34 @@ public final class AcmeCrossAssembler extends UnixRuntime { { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f15&0xffffffffL) << 32) | (f14&0xffffffffL)))*(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f11 = (int)(l >>> 32); f10 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))-(Double.longBitsToDouble(((f17&0xffffffffL) << 32) | (f16&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f16 = readPages[(r28+-31620)>>>12][((r28+-31620)>>>2)&0x3ff]; + f16= page[(r28+-32060)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f17 = readPages[(r28+-31624)>>>12][((r28+-31624)>>>2)&0x3ff]; + f17= page[(r28+-32064)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - f3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r2 = 7 << 16; + f2= page[(r2+4)>>>2]; + f3= page[(r2+0)>>>2]; + r2 = 6 << 16; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))+(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - case 0x34c00: - pc=0x34c00; + case 0x45800: + pc=0x45800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_34c00() throws ExecutionException { /* 0x34c00 - 0x34e00 */ + private final void run_45800() throws ExecutionException { /* 0x45800 - 0x46000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x34c00: + case 0x45800: f10 = r5; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - r2 = r2 + -312; + r2 = r2 + 13232; r4 = f1; - f0 = readPages[(r28+-31628)>>>12][((r28+-31628)>>>2)&0x3ff]; + f0= page[(r28+-32068)>>>2]; f11 = r4; - f1 = readPages[(r28+-31632)>>>12][((r28+-31632)>>>2)&0x3ff]; + f1= page[(r28+-32072)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))*(Double.longBitsToDouble(((f17&0xffffffffL) << 32) | (f16&0xffffffffL)))); f17 = (int)(l >>> 32); f16 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } @@ -39182,8 +49745,8 @@ public final class AcmeCrossAssembler extends UnixRuntime { f2 = r8; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } { long l = Double.doubleToLongBits(((double)f2)); f11 = (int)(l >>> 32); f10 = (int)l; } - f2 = readPages[(r9+4)>>>12][((r9+4)>>>2)&0x3ff]; - f3 = readPages[(r9+0)>>>12][((r9+0)>>>2)&0x3ff]; + f2= page[(r9+4)>>>2]; + f3= page[(r9+0)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))+(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } r4 = f9; @@ -39193,23 +49756,22 @@ public final class AcmeCrossAssembler extends UnixRuntime { { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - case 0x34c88: + case 0x45888: r20 = r20 + -1; r18 = r20 | r18; if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x34f4c; - run_34e00(); return; + pc=0x45b4c; + continue; } - f20 = readPages[(r28+-31756)>>>12][((r28+-31756)>>>2)&0x3ff]; - f21 = readPages[(r28+-31760)>>>12][((r28+-31760)>>>2)&0x3ff]; - case 0x34ca4: + f20= page[(r28+-32196)>>>2]; + f21= page[(r28+-32200)>>>2]; + case 0x458a4: r5 = r0 + r0; - r4 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + r4= page[(r29+16)>>>2]; f0 = r5; - f2 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + f2= page[(r29+20)>>>2]; f1 = r4; - f3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + f3= page[(r29+16)>>>2]; r4 = 16528 << 16; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f11 = (int)(l >>> 32); f10 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } @@ -39222,29 +49784,26 @@ public final class AcmeCrossAssembler extends UnixRuntime { r5 = r2 < r4 ? 1 : 0; r7 = r2 + r0; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x34ee4; - run_34e00(); return; + pc=0x45ae4; + continue; } r4 = r2 - r4; r4 = r4 | r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x35078; - run_35000(); return; + pc=0x45c78; + continue; } - f2 = readPages[(r28+-31604)>>>12][((r28+-31604)>>>2)&0x3ff]; + f2= page[(r28+-32044)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f3 = readPages[(r28+-31608)>>>12][((r28+-31608)>>>2)&0x3ff]; + f3= page[(r28+-32048)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x35078; - run_35000(); return; + pc=0x45c78; + continue; } r5 = r2 + r0; - case 0x34d28: + case 0x45928: r4 = r5 >> 20; r3 = 16 << 16; r4 = r4 + -1022; @@ -39266,71 +49825,57 @@ public final class AcmeCrossAssembler extends UnixRuntime { f1 = r4; r6 = r3 >> (r8&0x1f); if(r7 < 0) { - /* Next insn is delay slot */ - pc=0x35130; - run_35000(); return; + pc=0x45d30; + continue; } - case 0x34d80: + case 0x45980: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } r4 = r6 << 20; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))+(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - case 0x34d8c: + case 0x4598c: r3 = r0 + r0; r2 = f1; f0 = r3; - f4 = readPages[(r28+-31588)>>>12][((r28+-31588)>>>2)&0x3ff]; + f4= page[(r28+-32028)>>>2]; f1 = r2; - f2 = readPages[(r28+-31580)>>>12][((r28+-31580)>>>2)&0x3ff]; + f2= page[(r28+-32020)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f3 = readPages[(r28+-31584)>>>12][((r28+-31584)>>>2)&0x3ff]; + f3= page[(r28+-32024)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))-(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f11 = (int)(l >>> 32); f10 = (int)l; } - f8 = readPages[(r28+-31572)>>>12][((r28+-31572)>>>2)&0x3ff]; - f5 = readPages[(r28+-31592)>>>12][((r28+-31592)>>>2)&0x3ff]; - f9 = readPages[(r28+-31576)>>>12][((r28+-31576)>>>2)&0x3ff]; + f8= page[(r28+-32012)>>>2]; + f5= page[(r28+-32032)>>>2]; + f9= page[(r28+-32016)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f11 = (int)(l >>> 32); f10 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f6 = readPages[(r28+-31556)>>>12][((r28+-31556)>>>2)&0x3ff]; - f7 = readPages[(r28+-31560)>>>12][((r28+-31560)>>>2)&0x3ff]; + f6= page[(r28+-31996)>>>2]; + f7= page[(r28+-32000)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f11 = (int)(l >>> 32); f10 = (int)l; } - f4 = readPages[(r28+-31564)>>>12][((r28+-31564)>>>2)&0x3ff]; + f4= page[(r28+-32004)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f11 = (int)(l >>> 32); f10 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f5 = readPages[(r28+-31568)>>>12][((r28+-31568)>>>2)&0x3ff]; + f5= page[(r28+-32008)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))+(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f11 = (int)(l >>> 32); f10 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - case 0x34e00: - pc=0x34e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_34e00() throws ExecutionException { /* 0x34e00 - 0x35000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x34e00: - f6 = readPages[(r28+-31548)>>>12][((r28+-31548)>>>2)&0x3ff]; + f6= page[(r28+-31988)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f7 = readPages[(r28+-31552)>>>12][((r28+-31552)>>>2)&0x3ff]; + f7= page[(r28+-31992)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f6 = readPages[(r28+-31540)>>>12][((r28+-31540)>>>2)&0x3ff]; + f6= page[(r28+-31980)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f7 = readPages[(r28+-31544)>>>12][((r28+-31544)>>>2)&0x3ff]; + f7= page[(r28+-31984)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f6 = readPages[(r28+-31532)>>>12][((r28+-31532)>>>2)&0x3ff]; + f6= page[(r28+-31972)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f7 = readPages[(r28+-31536)>>>12][((r28+-31536)>>>2)&0x3ff]; + f7= page[(r28+-31976)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f6 = readPages[(r28+-31524)>>>12][((r28+-31524)>>>2)&0x3ff]; + f6= page[(r28+-31964)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f7 = readPages[(r28+-31528)>>>12][((r28+-31528)>>>2)&0x3ff]; + f7= page[(r28+-31968)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } @@ -39342,25 +49887,22 @@ public final class AcmeCrossAssembler extends UnixRuntime { r2 = r4 + r2; r3 = r2 >> 20; if(r3 <= 0) { - /* Next insn is delay slot */ - pc=0x3511c; - run_35000(); return; + pc=0x45d1c; + continue; } r17 = f12; f0 = r17; f1 = r2; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x346cc; - run_34600(); return; - case 0x34ea0: + pc=0x452cc; + run_45000(); return; + case 0x45aa0: r4 = 49168 << 16; r4 = r22 + r4; r4 = r20 | r4; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x35098; - run_35000(); return; + pc=0x45c98; + continue; } f4 = r3; f6 = r3; @@ -39368,125 +49910,101 @@ public final class AcmeCrossAssembler extends UnixRuntime { f7 = r2; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x346cc; - run_34600(); return; - case 0x34ed8: + pc=0x452cc; + run_45000(); return; + case 0x45ad8: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x346cc; - run_34600(); return; - case 0x34ee4: + pc=0x452cc; + run_45000(); return; + case 0x45ae4: r5 = 32767 << 16; r5 = r5 | 65535; r5 = r5 & r2; r4 = r4 | 52224; r4 = r5 < r4 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x350e8; - run_35000(); return; + pc=0x45ce8; + continue; } r4 = 16239 << 16; r4 = r4 + 13312; r4 = r4 + r2; r4 = r4 | r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x34f2c; + pc=0x45b2c; continue; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))<=(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x34d28; - run_34c00(); return; + pc=0x45928; + continue; } - case 0x34f2c: - f2 = readPages[(r28+-31596)>>>12][((r28+-31596)>>>2)&0x3ff]; - f3 = readPages[(r28+-31600)>>>12][((r28+-31600)>>>2)&0x3ff]; + case 0x45b2c: + f2= page[(r28+-32036)>>>2]; + f3= page[(r28+-32040)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x346cc; - run_34600(); return; - case 0x34f4c: + pc=0x452cc; + run_45000(); return; + case 0x45b4c: f20 = f12; f21 = f13; - /* Next insn is delay slot */ - pc=0x34ca4; - run_34c00(); return; - case 0x34f58: + pc=0x458a4; + continue; + case 0x45b58: if(r30 >= 0) { - /* Next insn is delay slot */ - pc=0x34864; - run_34800(); return; + pc=0x45464; + run_45000(); return; } - r3 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r5 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + r3= page[(r29+20)>>>2]; + r5= page[(r29+16)>>>2]; r4 = 32768 << 16; f0 = r3; r2 = r5 ^ r4; f1 = r2; - /* Next insn is delay slot */ - pc=0x346cc; - run_34600(); return; - case 0x34f80: + pc=0x452cc; + run_45000(); return; + case 0x45b80: r4 = 16367 << 16; r4 = r4 | 65535; r5 = r22 < r4 ? 1 : 0; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x3485c; - run_34800(); return; + pc=0x4545c; + run_45000(); return; } r4 = r4 + 2; r22 = r22 < r4 ? 1 : 0; if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x34964; - run_34800(); return; + pc=0x45564; + run_45000(); return; } - f12 = readPages[(r28+-31764)>>>12][((r28+-31764)>>>2)&0x3ff]; + f12= page[(r28+-32204)>>>2]; f10 = r3; - f13 = readPages[(r28+-31768)>>>12][((r28+-31768)>>>2)&0x3ff]; + f13= page[(r28+-32208)>>>2]; f11 = r2; - f0 = readPages[(r28+-31724)>>>12][((r28+-31724)>>>2)&0x3ff]; + f0= page[(r28+-32164)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))-(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f1 = readPages[(r28+-31728)>>>12][((r28+-31728)>>>2)&0x3ff]; - f2 = readPages[(r28+-31716)>>>12][((r28+-31716)>>>2)&0x3ff]; + f1= page[(r28+-32168)>>>2]; + f2= page[(r28+-32156)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f3 = readPages[(r28+-31720)>>>12][((r28+-31720)>>>2)&0x3ff]; + f3= page[(r28+-32160)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f11 = (int)(l >>> 32); f10 = (int)l; } - f6 = readPages[(r28+-31740)>>>12][((r28+-31740)>>>2)&0x3ff]; - f4 = readPages[(r28+-31732)>>>12][((r28+-31732)>>>2)&0x3ff]; + f6= page[(r28+-32180)>>>2]; + f4= page[(r28+-32172)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f7 = readPages[(r28+-31744)>>>12][((r28+-31744)>>>2)&0x3ff]; + f7= page[(r28+-32184)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f0 = readPages[(r28+-31708)>>>12][((r28+-31708)>>>2)&0x3ff]; - f5 = readPages[(r28+-31736)>>>12][((r28+-31736)>>>2)&0x3ff]; - f1 = readPages[(r28+-31712)>>>12][((r28+-31712)>>>2)&0x3ff]; + f0= page[(r28+-32148)>>>2]; + f5= page[(r28+-32176)>>>2]; + f1= page[(r28+-32152)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - case 0x35000: - pc=0x35000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_35000() throws ExecutionException { /* 0x35000 - 0x35200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x35000: - f8 = readPages[(r28+-31700)>>>12][((r28+-31700)>>>2)&0x3ff]; + f8= page[(r28+-32140)>>>2]; r5 = r0 + r0; - f9 = readPages[(r28+-31704)>>>12][((r28+-31704)>>>2)&0x3ff]; + f9= page[(r28+-32144)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } f8 = r5; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } @@ -39495,199 +50013,163 @@ public final class AcmeCrossAssembler extends UnixRuntime { f9 = r4; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))-(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - /* Next insn is delay slot */ - pc=0x34c88; - run_34c00(); return; - case 0x35040: + pc=0x45888; + continue; + case 0x45c40: r11 = r0 + r0; r9 = r0 + r0; - /* Next insn is delay slot */ - pc=0x34a74; - run_34a00(); return; - case 0x35050: + pc=0x45674; + run_45000(); return; + case 0x45c50: r4 = r0 + r0; - /* Next insn is delay slot */ - pc=0x34a18; - run_34a00(); return; - case 0x3505c: - f0 = readPages[(r28+-31764)>>>12][((r28+-31764)>>>2)&0x3ff]; - f1 = readPages[(r28+-31768)>>>12][((r28+-31768)>>>2)&0x3ff]; + pc=0x45618; + run_45000(); return; + case 0x45c5c: + f0= page[(r28+-32204)>>>2]; + f1= page[(r28+-32208)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))/(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x346cc; - run_34600(); return; - case 0x35078: - f2 = readPages[(r28+-31748)>>>12][((r28+-31748)>>>2)&0x3ff]; - f3 = readPages[(r28+-31752)>>>12][((r28+-31752)>>>2)&0x3ff]; + pc=0x452cc; + run_45000(); return; + case 0x45c78: + f2= page[(r28+-32188)>>>2]; + f3= page[(r28+-32192)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x346cc; - run_34600(); return; - case 0x35098: + pc=0x452cc; + run_45000(); return; + case 0x45c98: r4 = r0 + 1; if(r20 != r4) { - /* Next insn is delay slot */ - pc=0x348b8; - run_34800(); return; + pc=0x454b8; + run_45000(); return; } r6 = 32768 << 16; f0 = r3; r4 = r2 ^ r6; f1 = r4; - /* Next insn is delay slot */ - pc=0x346cc; - run_34600(); return; - case 0x350bc: + pc=0x452cc; + run_45000(); return; + case 0x45cbc: if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x347f0; - run_34600(); return; + pc=0x453f0; + run_45000(); return; } r2 = r0 + 1043; r4 = r2 - r4; r2 = r21 >> (r4&0x1f); r4 = r2 << (r4&0x1f); if(r4 == r21) { - /* Next insn is delay slot */ - pc=0x3513c; + pc=0x45d3c; continue; } r20 = r0 + r0; - /* Next insn is delay slot */ - pc=0x34774; - run_34600(); return; - case 0x350e8: + pc=0x45374; + run_45000(); return; + case 0x45ce8: r4 = 16352 << 16; r4 = r4 + 1; r4 = r5 < r4 ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x34d28; - run_34c00(); return; + pc=0x45928; + continue; } r4 = r0 + r0; r6 = r0 + r0; - /* Next insn is delay slot */ - pc=0x34d8c; - run_34c00(); return; - case 0x3510c: + pc=0x4598c; + continue; + case 0x45d0c: r11 = 4 << 16; r9 = r0 + 1; - /* Next insn is delay slot */ - pc=0x34a74; - run_34a00(); return; - case 0x3511c: - /* Next insn is delay slot */ - r31=0x35124; - pc=0x38400; - run_38400(); return; - case 0x35124: + pc=0x45674; + run_45000(); return; + case 0x45d1c: + r31=0x45d24; + pc=0x49000; + run_49000(); return; + case 0x45d24: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x346cc; - run_34600(); return; - case 0x35130: + pc=0x452cc; + run_45000(); return; + case 0x45d30: r6 = r0 - r6; - /* Next insn is delay slot */ - pc=0x34d80; - run_34c00(); return; - case 0x3513c: + pc=0x45980; + continue; + case 0x45d3c: r2 = r2 & 1; r20 = r0 + 2; r20 = r20 - r2; - /* Next insn is delay slot */ - pc=0x34774; - run_34600(); return; - case 0x35200: - pc=0x35200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_35200() throws ExecutionException { /* 0x35200 - 0x35400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x35200: + pc=0x45374; + run_45000(); return; + case 0x45e00: r29 = r29 + -64; r2 = f13; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r18; + page[(r29+56)>>>2] = r18; r18 = 32767 << 16; r18 = r18 | 65535; r18 = r18 & r2; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r17; + page[(r29+52)>>>2] = r17; r17 = r2 + r0; r2 = 16361 << 16; r2 = r2 + 8700; r2 = r18 < r2 ? 1 : 0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r16; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; + page[(r29+48)>>>2] = r16; + page[(r29+60)>>>2] = r31; r16 = r6 + r0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3542c; - run_35400(); return; + pc=0x4602c; + run_46000(); return; } r2 = 16386 << 16; r2 = r2 | 55676; r2 = r18 < r2 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x352c8; + pc=0x45ec8; continue; } - f2 = readPages[(r28+-31516)>>>12][((r28+-31516)>>>2)&0x3ff]; - f3 = readPages[(r28+-31520)>>>12][((r28+-31520)>>>2)&0x3ff]; + f2= page[(r28+-31956)>>>2]; + f3= page[(r28+-31960)>>>2]; if(r17 <= 0) { - /* Next insn is delay slot */ - pc=0x35690; - run_35600(); return; + pc=0x46290; + run_46000(); return; } r2 = 16377 << 16; r2 = r2 + 8699; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x35478; - run_35400(); return; + pc=0x46078; + run_46000(); return; } - f2 = readPages[(r28+-31508)>>>12][((r28+-31508)>>>2)&0x3ff]; - f3 = readPages[(r28+-31512)>>>12][((r28+-31512)>>>2)&0x3ff]; - case 0x3528c: + f2= page[(r28+-31948)>>>2]; + f3= page[(r28+-31952)>>>2]; + case 0x45e8c: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; + r31= page[(r29+60)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - r18 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; + r18= page[(r29+56)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - r17 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = f4; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = f5; - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = f2; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = f3; + r17= page[(r29+52)>>>2]; + page[(r16+4)>>>2] = f4; + page[(r16+0)>>>2] = f5; + page[(r16+12)>>>2] = f2; + page[(r16+8)>>>2] = f3; r2 = r0 + 1; - r16 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; + r16= page[(r29+48)>>>2]; r29 = r29 + 64; - /* Next insn is delay slot */ pc=r31; return; - case 0x352c8: + case 0x45ec8: r2 = 16697 << 16; r2 = r2 + 8700; r2 = r18 < r2 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x35494; - run_35400(); return; + pc=0x46094; + run_46000(); return; } r2 = 32752 << 16; r2 = r18 < r2 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3545c; - run_35400(); return; + pc=0x4605c; + run_46000(); return; } r9 = f12; r4 = r0 + r0; @@ -39713,11 +50195,11 @@ public final class AcmeCrossAssembler extends UnixRuntime { } fcsr = r2; { long l = Double.doubleToLongBits(((double)f0)); f1 = (int)(l >>> 32); f0 = (int)l; } - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = f0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = f1; + page[(r29+28)>>>2] = f0; + page[(r29+24)>>>2] = f1; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f2 = readPages[(r28+-31452)>>>12][((r28+-31452)>>>2)&0x3ff]; - f3 = readPages[(r28+-31456)>>>12][((r28+-31456)>>>2)&0x3ff]; + f2= page[(r28+-31892)>>>2]; + f3= page[(r28+-31896)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } r4 = fcsr; r4 = fcsr; @@ -39733,111 +50215,101 @@ public final class AcmeCrossAssembler extends UnixRuntime { fcsr = r4; { long l = Double.doubleToLongBits(((double)f0)); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = f0; + page[(r29+36)>>>2] = f0; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } f2 = r0; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = f1; + page[(r29+32)>>>2] = f1; f3 = r0; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))==(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f4; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = f5; + page[(r29+44)>>>2] = f4; + page[(r29+40)>>>2] = f5; if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x356dc; - run_35600(); return; + pc=0x462dc; + run_46000(); return; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))==(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x356e8; - run_35600(); return; + pc=0x462e8; + run_46000(); return; } r7 = r0 + 1; - case 0x353d8: + case 0x45fd8: r2 = r0 + 2; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r2 = 7 << 16; - r2 = r2 + -152; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; + page[(r29+16)>>>2] = r2; + r2 = 6 << 16; + r2 = r2 + 13392; + page[(r29+20)>>>2] = r2; r4 = r29 + 24; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x353fc; - pc=0x36000; - run_36000(); return; - case 0x353fc: + r31=0x45ffc; + pc=0x46c00; + run_46800(); return; + case 0x45ffc: if(r17 >= 0) { - /* Next insn is delay slot */ - pc=0x35440; - run_35400(); return; + pc=0x46040; + run_46000(); return; } - case 0x35400: - pc=0x35400; + case 0x46000: + pc=0x46000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_35400() throws ExecutionException { /* 0x35400 - 0x35600 */ + private final void run_46000() throws ExecutionException { /* 0x46000 - 0x46800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x35400: - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + case 0x46000: + r4= page[(r16+0)>>>2]; r3 = 32768 << 16; r4 = r4 ^ r3; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r4; - r4 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; + page[(r16+0)>>>2] = r4; + r4= page[(r16+8)>>>2]; r2 = r0 - r2; r3 = r4 ^ r3; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x35440; + page[(r16+8)>>>2] = r3; + pc=0x46040; continue; - case 0x3542c: - writePages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff] = f12; - writePages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff] = f13; - writePages[(r6+12)>>>12][((r6+12)>>>2)&0x3ff] = r0; - writePages[(r6+8)>>>12][((r6+8)>>>2)&0x3ff] = r0; + case 0x4602c: + page[(r6+4)>>>2] = f12; + page[(r6+0)>>>2] = f13; + page[(r6+12)>>>2] = r0; + page[(r6+8)>>>2] = r0; r2 = r0 + r0; - case 0x35440: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r18 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r17 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r16 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; + case 0x46040: + r31= page[(r29+60)>>>2]; + r18= page[(r29+56)>>>2]; + r17= page[(r29+52)>>>2]; + r16= page[(r29+48)>>>2]; r29 = r29 + 64; - /* Next insn is delay slot */ pc=r31; return; - case 0x3545c: + case 0x4605c: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - writePages[(r6+12)>>>12][((r6+12)>>>2)&0x3ff] = f0; - writePages[(r6+8)>>>12][((r6+8)>>>2)&0x3ff] = f1; - writePages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff] = f0; - writePages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x35440; + page[(r6+12)>>>2] = f0; + page[(r6+8)>>>2] = f1; + page[(r6+4)>>>2] = f0; + page[(r6+0)>>>2] = f1; + pc=0x46040; continue; - case 0x35478: - f4 = readPages[(r28+-31500)>>>12][((r28+-31500)>>>2)&0x3ff]; - f2 = readPages[(r28+-31492)>>>12][((r28+-31492)>>>2)&0x3ff]; - f5 = readPages[(r28+-31504)>>>12][((r28+-31504)>>>2)&0x3ff]; - f3 = readPages[(r28+-31496)>>>12][((r28+-31496)>>>2)&0x3ff]; + case 0x46078: + f4= page[(r28+-31940)>>>2]; + f2= page[(r28+-31932)>>>2]; + f5= page[(r28+-31944)>>>2]; + f3= page[(r28+-31936)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x3528c; - run_35200(); return; - case 0x35494: - /* Next insn is delay slot */ - r31=0x3549c; - pc=0x32a00; - run_32a00(); return; - case 0x3549c: - f2 = readPages[(r28+-31484)>>>12][((r28+-31484)>>>2)&0x3ff]; - f4 = readPages[(r28+-31476)>>>12][((r28+-31476)>>>2)&0x3ff]; - f3 = readPages[(r28+-31488)>>>12][((r28+-31488)>>>2)&0x3ff]; - f5 = readPages[(r28+-31480)>>>12][((r28+-31480)>>>2)&0x3ff]; + pc=0x45e8c; + run_45800(); return; + case 0x46094: + r31=0x4609c; + pc=0x43600; + run_43000(); return; + case 0x4609c: + f2= page[(r28+-31924)>>>2]; + f4= page[(r28+-31916)>>>2]; + f3= page[(r28+-31928)>>>2]; + f5= page[(r28+-31920)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r4 = fcsr; @@ -39854,61 +50326,57 @@ public final class AcmeCrossAssembler extends UnixRuntime { fcsr = r4; { long l = Double.doubleToLongBits(((double)f4)); f3 = (int)(l >>> 32); f2 = (int)l; } r2 = f4; - f4 = readPages[(r28+-31516)>>>12][((r28+-31516)>>>2)&0x3ff]; + f4= page[(r28+-31956)>>>2]; r3 = r2 < 32 ? 1 : 0; - f5 = readPages[(r28+-31520)>>>12][((r28+-31520)>>>2)&0x3ff]; + f5= page[(r28+-31960)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f4 = readPages[(r28+-31508)>>>12][((r28+-31508)>>>2)&0x3ff]; - f5 = readPages[(r28+-31512)>>>12][((r28+-31512)>>>2)&0x3ff]; + f4= page[(r28+-31948)>>>2]; + f5= page[(r28+-31952)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x355a8; + pc=0x461a8; continue; } r4 = r2 + -1; - r3 = 7 << 16; + r3 = 6 << 16; r4 = r4 << 2; - r3 = r3 + -280; + r3 = r3 + 13264; r3 = r4 + r3; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + r3= page[(r3+0)>>>2]; if(r3 == r18) { - /* Next insn is delay slot */ - pc=0x355a8; + pc=0x461a8; continue; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } r5 = f6; r4 = f7; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r5; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r4; - case 0x35550: + page[(r16+4)>>>2] = r5; + page[(r16+0)>>>2] = r4; + case 0x46150: f6 = r5; f7 = r4; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r7 = f2; r6 = f3; - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = r7; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r6; + page[(r16+12)>>>2] = r7; + page[(r16+8)>>>2] = r6; if(r17 >= 0) { - /* Next insn is delay slot */ - pc=0x35440; + pc=0x46040; continue; } r3 = 32768 << 16; r4 = r4 ^ r3; r3 = r6 ^ r3; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r4; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r5; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r3; - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = r7; + page[(r16+0)>>>2] = r4; + page[(r16+4)>>>2] = r5; + page[(r16+8)>>>2] = r3; + page[(r16+12)>>>2] = r7; r2 = r0 - r2; - /* Next insn is delay slot */ - pc=0x35440; + pc=0x46040; continue; - case 0x355a8: + case 0x461a8: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } r18 = r18 >> 20; r4 = f7; @@ -39917,34 +50385,20 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = r3 & 2047; r3 = r18 - r3; r3 = r3 < 17 ? 1 : 0; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r5; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r4; + page[(r16+4)>>>2] = r5; + page[(r16+0)>>>2] = r4; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x35550; + pc=0x46150; continue; } - f4 = readPages[(r28+-31500)>>>12][((r28+-31500)>>>2)&0x3ff]; - f5 = readPages[(r28+-31504)>>>12][((r28+-31504)>>>2)&0x3ff]; + f4= page[(r28+-31940)>>>2]; + f5= page[(r28+-31944)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f0 = readPages[(r28+-31492)>>>12][((r28+-31492)>>>2)&0x3ff]; - case 0x35600: - pc=0x35600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_35600() throws ExecutionException { /* 0x35600 - 0x35800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x35600: - f1 = readPages[(r28+-31496)>>>12][((r28+-31496)>>>2)&0x3ff]; + f0= page[(r28+-31932)>>>2]; + f1= page[(r28+-31936)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } @@ -39954,92 +50408,72 @@ public final class AcmeCrossAssembler extends UnixRuntime { r6 = r6 & 2047; r18 = r18 - r6; r18 = r18 < 50 ? 1 : 0; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r5; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r4; + page[(r16+4)>>>2] = r5; + page[(r16+0)>>>2] = r4; if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x35710; + pc=0x46310; continue; } - f4 = readPages[(r28+-31468)>>>12][((r28+-31468)>>>2)&0x3ff]; - f5 = readPages[(r28+-31472)>>>12][((r28+-31472)>>>2)&0x3ff]; + f4= page[(r28+-31908)>>>2]; + f5= page[(r28+-31912)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f6 = readPages[(r28+-31460)>>>12][((r28+-31460)>>>2)&0x3ff]; - f7 = readPages[(r28+-31464)>>>12][((r28+-31464)>>>2)&0x3ff]; + f6= page[(r28+-31900)>>>2]; + f7= page[(r28+-31904)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r5 = f2; r4 = f3; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r5; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=0x35550; - run_35400(); return; - case 0x35690: + page[(r16+4)>>>2] = r5; + page[(r16+0)>>>2] = r4; + pc=0x46150; + continue; + case 0x46290: r2 = 16377 << 16; r2 = r2 + 8699; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x356f4; + pc=0x462f4; continue; } - f2 = readPages[(r28+-31508)>>>12][((r28+-31508)>>>2)&0x3ff]; - f3 = readPages[(r28+-31512)>>>12][((r28+-31512)>>>2)&0x3ff]; - case 0x356b4: + f2= page[(r28+-31948)>>>2]; + f3= page[(r28+-31952)>>>2]; + case 0x462b4: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } r2 = r0 + -1; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = f4; + page[(r16+4)>>>2] = f4; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = f5; - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = f2; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = f3; - /* Next insn is delay slot */ - pc=0x35440; - run_35400(); return; - case 0x356dc: - r7 = r0 + 3; - /* Next insn is delay slot */ - pc=0x353d8; - run_35200(); return; - case 0x356e8: - r7 = r0 + 2; - /* Next insn is delay slot */ - pc=0x353d8; - run_35200(); return; - case 0x356f4: - f4 = readPages[(r28+-31500)>>>12][((r28+-31500)>>>2)&0x3ff]; - f2 = readPages[(r28+-31492)>>>12][((r28+-31492)>>>2)&0x3ff]; - f5 = readPages[(r28+-31504)>>>12][((r28+-31504)>>>2)&0x3ff]; - f3 = readPages[(r28+-31496)>>>12][((r28+-31496)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x356b4; + page[(r16+0)>>>2] = f5; + page[(r16+12)>>>2] = f2; + page[(r16+8)>>>2] = f3; + pc=0x46040; continue; - case 0x35710: + case 0x462dc: + r7 = r0 + 3; + pc=0x45fd8; + run_45800(); return; + case 0x462e8: + r7 = r0 + 2; + pc=0x45fd8; + run_45800(); return; + case 0x462f4: + f4= page[(r28+-31940)>>>2]; + f2= page[(r28+-31932)>>>2]; + f5= page[(r28+-31944)>>>2]; + f3= page[(r28+-31936)>>>2]; + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } + pc=0x462b4; + continue; + case 0x46310: f0 = f6; f1 = f7; - /* Next insn is delay slot */ - pc=0x35550; - run_35400(); return; - case 0x35800: - pc=0x35800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_35800() throws ExecutionException { /* 0x35800 - 0x35a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x35800: + pc=0x46150; + continue; + case 0x46400: r2 = f13; r3 = f12; r6 = 32752 << 16; @@ -40047,20 +50481,17 @@ public final class AcmeCrossAssembler extends UnixRuntime { r4 = r2 + r0; r5 = r3 + r0; if(r7 == r6) { - /* Next insn is delay slot */ - pc=0x35a88; - run_35a00(); return; + pc=0x46688; + continue; } if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x359dc; + pc=0x465dc; continue; } r2 = r2 >> 20; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x35a14; - run_35a00(); return; + pc=0x46614; + continue; } r3 = 15 << 16; r3 = r3 | 65535; @@ -40070,11 +50501,10 @@ public final class AcmeCrossAssembler extends UnixRuntime { r4 = r4 | r3; r3 = r2 & 1; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x359c4; + pc=0x465c4; continue; } - case 0x35858: + case 0x46458: r4 = r4 << 1; r14 = r2 >> 1; r2 = r5 >>> 31; @@ -40084,18 +50514,17 @@ public final class AcmeCrossAssembler extends UnixRuntime { r9 = r0 + r0; r5 = r0 + r0; r4 = 32 << 16; - case 0x3587c: + case 0x4647c: r7 = r5 + r4; r8 = r2 < r7 ? 1 : 0; if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x35898; + pc=0x46498; continue; } r5 = r7 + r4; r2 = r2 - r7; r9 = r9 + r4; - case 0x35898: + case 0x46498: r7 = r3 >>> 31; r2 = r2 << 1; r6 = r6 + -1; @@ -40103,8 +50532,7 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = r3 << 1; r4 = r4 >>> 1; if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x3587c; + pc=0x4647c; continue; } r7 = r0 + 32; @@ -40112,38 +50540,35 @@ public final class AcmeCrossAssembler extends UnixRuntime { r10 = r0 + r0; r4 = 32768 << 16; r12 = 32768 << 16; - case 0x358cc: + case 0x464cc: r8 = r5 < r2 ? 1 : 0; r6 = r4 + r10; if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x359a4; + pc=0x465a4; continue; } r8 = ((r3 & 0xffffffffL) < (r6 & 0xffffffffL)) ? 1 : 0; - case 0x358e0: + case 0x464e0: r13 = r6 & r12; r10 = r6 + r4; if(r13 == r12) { - /* Next insn is delay slot */ - pc=0x3598c; + pc=0x4658c; continue; } - case 0x358f0: + case 0x464f0: r13 = r5 + r0; - case 0x358f4: + case 0x464f4: r2 = r2 - r5; if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x35904; + pc=0x46504; continue; } r2 = r2 + -1; - case 0x35904: + case 0x46504: r3 = r3 - r6; r11 = r11 + r4; r5 = r13 + r0; - case 0x35910: + case 0x46510: r6 = r3 >>> 31; r2 = r2 << 1; r7 = r7 + -1; @@ -40151,141 +50576,113 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = r3 << 1; r4 = r4 >>> 1; if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x358cc; + pc=0x464cc; continue; } r2 = r2 | r3; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x35950; + pc=0x46550; continue; } r2 = r0 + -1; if(r11 == r2) { - /* Next insn is delay slot */ - pc=0x35aa4; - run_35a00(); return; + pc=0x466a4; + continue; } r2 = r11 & 1; r11 = r2 + r11; - case 0x35950: + case 0x46550: r11 = r11 >>> 1; - case 0x35954: + case 0x46554: r4 = r9 >> 1; r2 = 16352 << 16; r9 = r9 & 1; r4 = r4 + r2; if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x35974; + pc=0x46574; continue; } r2 = 32768 << 16; r11 = r11 | r2; - case 0x35974: + case 0x46574: r14 = r14 << 20; f0 = r11; r2 = r14 + r4; f1 = r2; - /* Next insn is delay slot */ pc=r31; return; - case 0x3598c: + case 0x4658c: r13 = r10 & r12; if(r13 != r0) { - /* Next insn is delay slot */ - pc=0x358f0; + pc=0x464f0; continue; } r13 = r5 + 1; - /* Next insn is delay slot */ - pc=0x358f4; + pc=0x464f4; continue; - case 0x359a4: + case 0x465a4: if(r2 != r5) { - /* Next insn is delay slot */ - pc=0x35910; + pc=0x46510; continue; } r8 = ((r3 & 0xffffffffL) < (r6 & 0xffffffffL)) ? 1 : 0; if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x358e0; + pc=0x464e0; continue; } r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x35910; + pc=0x46510; continue; - case 0x359c4: + case 0x465c4: r3 = r5 >>> 31; r4 = r4 << 1; r4 = r4 + r3; r5 = r5 << 1; - /* Next insn is delay slot */ - pc=0x35858; + pc=0x46458; continue; - case 0x359dc: + case 0x465dc: r6 = 32767 << 16; r6 = r6 | 65535; r2 = r6 & r2; r2 = r2 | r3; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x35a98; - run_35a00(); return; + pc=0x46698; + continue; } if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x35ac8; - run_35a00(); return; + pc=0x466c8; + continue; } r2 = r0 + r0; - case 0x35a00: - pc=0x35a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_35a00() throws ExecutionException { /* 0x35a00 - 0x35c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x35a00: + case 0x46600: r4 = r5 >>> 11; r2 = r2 + -21; r5 = r5 << 21; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x35a00; + pc=0x46600; continue; } - case 0x35a14: + case 0x46614: r3 = 16 << 16; r3 = r4 & r3; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x35ab4; + pc=0x466b4; continue; } r7 = 16 << 16; - case 0x35a28: + case 0x46628: r4 = r4 << 1; r6 = r4 & r7; r3 = r3 + 1; if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x35a28; + pc=0x46628; continue; } r7 = r0 + 1; r6 = r0 + 32; r7 = r7 - r3; r6 = r6 - r3; - case 0x35a4c: + case 0x4664c: r6 = r5 >>> (r6&0x1f); r5 = r5 << (r3&0x1f); r3 = 15 << 16; @@ -40298,57 +50695,49 @@ public final class AcmeCrossAssembler extends UnixRuntime { r4 = r4 | r3; r3 = r2 & 1; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x35858; - run_35800(); return; + pc=0x46458; + continue; } - /* Next insn is delay slot */ - pc=0x359c4; - run_35800(); return; - case 0x35a88: + pc=0x465c4; + continue; + case 0x46688: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ pc=r31; return; - case 0x35a98: + case 0x46698: f0 = f12; f1 = f13; - /* Next insn is delay slot */ pc=r31; return; - case 0x35aa4: + case 0x466a4: r9 = r9 + 1; r11 = r0 + r0; - /* Next insn is delay slot */ - pc=0x35954; - run_35800(); return; - case 0x35ab4: + pc=0x46554; + continue; + case 0x466b4: r6 = r0 + 32; r7 = r0 + 1; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x35a4c; + pc=0x4664c; continue; - case 0x35ac8: + case 0x466c8: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))/(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ pc=r31; return; - case 0x35c00: - pc=0x35c00; + case 0x46800: + pc=0x46800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_35c00() throws ExecutionException { /* 0x35c00 - 0x35e00 */ + private final void run_46800() throws ExecutionException { /* 0x46800 - 0x47000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x35c00: + case 0x46800: r2 = f13; r3 = 32767 << 16; r3 = r3 | 65535; @@ -40356,8 +50745,7 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = 15936 << 16; r3 = r2 < r3 ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x35d00; + pc=0x46900; continue; } r4 = fcsr; @@ -40374,208 +50762,174 @@ public final class AcmeCrossAssembler extends UnixRuntime { fcsr = r4; r2 = f0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x35e20; - run_35e00(); return; + pc=0x46a20; + continue; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f2 = readPages[(r28+-31420)>>>12][((r28+-31420)>>>2)&0x3ff]; - f4 = readPages[(r28+-31412)>>>12][((r28+-31412)>>>2)&0x3ff]; - f3 = readPages[(r28+-31424)>>>12][((r28+-31424)>>>2)&0x3ff]; - f5 = readPages[(r28+-31416)>>>12][((r28+-31416)>>>2)&0x3ff]; + f2= page[(r28+-31860)>>>2]; + f4= page[(r28+-31852)>>>2]; + f3= page[(r28+-31864)>>>2]; + f5= page[(r28+-31856)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f4 = readPages[(r28+-31404)>>>12][((r28+-31404)>>>2)&0x3ff]; + f4= page[(r28+-31844)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f5 = readPages[(r28+-31408)>>>12][((r28+-31408)>>>2)&0x3ff]; + f5= page[(r28+-31848)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f4 = readPages[(r28+-31396)>>>12][((r28+-31396)>>>2)&0x3ff]; + f4= page[(r28+-31836)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f5 = readPages[(r28+-31400)>>>12][((r28+-31400)>>>2)&0x3ff]; + f5= page[(r28+-31840)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f4 = readPages[(r28+-31388)>>>12][((r28+-31388)>>>2)&0x3ff]; + f4= page[(r28+-31828)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f5 = readPages[(r28+-31392)>>>12][((r28+-31392)>>>2)&0x3ff]; + f5= page[(r28+-31832)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f4 = readPages[(r28+-31380)>>>12][((r28+-31380)>>>2)&0x3ff]; + f4= page[(r28+-31820)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f5 = readPages[(r28+-31384)>>>12][((r28+-31384)>>>2)&0x3ff]; + f5= page[(r28+-31824)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - case 0x35cc8: - f4 = readPages[(r28+-31372)>>>12][((r28+-31372)>>>2)&0x3ff]; + case 0x468c8: + f4= page[(r28+-31812)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f15&0xffffffffL) << 32) | (f14&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } - f5 = readPages[(r28+-31376)>>>12][((r28+-31376)>>>2)&0x3ff]; + f5= page[(r28+-31816)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f12 = readPages[(r28+-31428)>>>12][((r28+-31428)>>>2)&0x3ff]; + f12= page[(r28+-31868)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f13 = readPages[(r28+-31432)>>>12][((r28+-31432)>>>2)&0x3ff]; + f13= page[(r28+-31872)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ pc=r31; return; - case 0x35d00: + case 0x46900: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f2 = readPages[(r28+-31420)>>>12][((r28+-31420)>>>2)&0x3ff]; - f4 = readPages[(r28+-31412)>>>12][((r28+-31412)>>>2)&0x3ff]; - f3 = readPages[(r28+-31424)>>>12][((r28+-31424)>>>2)&0x3ff]; - f5 = readPages[(r28+-31416)>>>12][((r28+-31416)>>>2)&0x3ff]; + f2= page[(r28+-31860)>>>2]; + f4= page[(r28+-31852)>>>2]; + f3= page[(r28+-31864)>>>2]; + f5= page[(r28+-31856)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r3 = 16339 << 16; r3 = r3 + 13107; r3 = r2 < r3 ? 1 : 0; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f4 = readPages[(r28+-31404)>>>12][((r28+-31404)>>>2)&0x3ff]; + f4= page[(r28+-31844)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f5 = readPages[(r28+-31408)>>>12][((r28+-31408)>>>2)&0x3ff]; + f5= page[(r28+-31848)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f4 = readPages[(r28+-31396)>>>12][((r28+-31396)>>>2)&0x3ff]; + f4= page[(r28+-31836)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f5 = readPages[(r28+-31400)>>>12][((r28+-31400)>>>2)&0x3ff]; + f5= page[(r28+-31840)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f4 = readPages[(r28+-31388)>>>12][((r28+-31388)>>>2)&0x3ff]; + f4= page[(r28+-31828)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f5 = readPages[(r28+-31392)>>>12][((r28+-31392)>>>2)&0x3ff]; + f5= page[(r28+-31832)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f4 = readPages[(r28+-31380)>>>12][((r28+-31380)>>>2)&0x3ff]; + f4= page[(r28+-31820)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f5 = readPages[(r28+-31384)>>>12][((r28+-31384)>>>2)&0x3ff]; + f5= page[(r28+-31824)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x35cc8; + pc=0x468c8; continue; } r3 = 16361 << 16; r3 = r3 + 1; r3 = r2 < r3 ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x35de4; + pc=0x469e4; continue; } - f6 = readPages[(r28+-31372)>>>12][((r28+-31372)>>>2)&0x3ff]; + f6= page[(r28+-31812)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f7 = readPages[(r28+-31376)>>>12][((r28+-31376)>>>2)&0x3ff]; + f7= page[(r28+-31816)>>>2]; r5 = r0 + r0; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f15&0xffffffffL) << 32) | (f14&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } r3 = 65504 << 16; f4 = r5; - f8 = readPages[(r28+-31428)>>>12][((r28+-31428)>>>2)&0x3ff]; + f8= page[(r28+-31868)>>>2]; r4 = r2 + r3; f5 = r4; - f9 = readPages[(r28+-31432)>>>12][((r28+-31432)>>>2)&0x3ff]; + f9= page[(r28+-31872)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f15 = (int)(l >>> 32); f14 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f15&0xffffffffL) << 32) | (f14&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ pc=r31; return; - case 0x35de4: - f6 = readPages[(r28+-31372)>>>12][((r28+-31372)>>>2)&0x3ff]; + case 0x469e4: + f6= page[(r28+-31812)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f7 = readPages[(r28+-31376)>>>12][((r28+-31376)>>>2)&0x3ff]; + f7= page[(r28+-31816)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f15&0xffffffffL) << 32) | (f14&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f4 = readPages[(r28+-31436)>>>12][((r28+-31436)>>>2)&0x3ff]; - f8 = readPages[(r28+-31444)>>>12][((r28+-31444)>>>2)&0x3ff]; - case 0x35e00: - pc=0x35e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_35e00() throws ExecutionException { /* 0x35e00 - 0x36000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x35e00: - f5 = readPages[(r28+-31440)>>>12][((r28+-31440)>>>2)&0x3ff]; + f4= page[(r28+-31876)>>>2]; + f8= page[(r28+-31884)>>>2]; + f5= page[(r28+-31880)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f15 = (int)(l >>> 32); f14 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f9 = readPages[(r28+-31448)>>>12][((r28+-31448)>>>2)&0x3ff]; + f9= page[(r28+-31888)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f15&0xffffffffL) << 32) | (f14&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ pc=r31; return; - case 0x35e20: - f0 = readPages[(r28+-31428)>>>12][((r28+-31428)>>>2)&0x3ff]; - f1 = readPages[(r28+-31432)>>>12][((r28+-31432)>>>2)&0x3ff]; - /* Next insn is delay slot */ + case 0x46a20: + f0= page[(r28+-31868)>>>2]; + f1= page[(r28+-31872)>>>2]; pc=r31; return; - case 0x36000: - pc=0x36000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_36000() throws ExecutionException { /* 0x36000 - 0x36200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x36000: + case 0x46c00: r29 = r29 + -688; - r2 = readPages[(r29+704)>>>12][((r29+704)>>>2)&0x3ff]; + r2= page[(r29+704)>>>2]; r9 = r6 + -3; r3 = r2 << 2; - r2 = 7 << 16; - r2 = r2 + 176; + r2 = 6 << 16; + r2 = r2 + 13720; r2 = r3 + r2; - writePages[(r29+608)>>>12][((r29+608)>>>2)&0x3ff] = r18; - r18 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; + page[(r29+608)>>>2] = r18; + r18= page[(r2+0)>>>2]; r2 = r0 + 24; if(r2 != r0) { - /* Next insn is delay slot */ hi = r9%r2; lo = r9/r2; - pc=0x36034; + pc=0x46c34; continue; } hi = r9%r2; lo = r9/r2; throw new ExecutionException("Break"); - case 0x36034: - writePages[(r29+628)>>>12][((r29+628)>>>2)&0x3ff] = r23; - writePages[(r29+612)>>>12][((r29+612)>>>2)&0x3ff] = r19; - writePages[(r29+604)>>>12][((r29+604)>>>2)&0x3ff] = r17; - writePages[(r29+636)>>>12][((r29+636)>>>2)&0x3ff] = r31; - writePages[(r29+632)>>>12][((r29+632)>>>2)&0x3ff] = r30; - writePages[(r29+624)>>>12][((r29+624)>>>2)&0x3ff] = r22; - writePages[(r29+620)>>>12][((r29+620)>>>2)&0x3ff] = r21; - writePages[(r29+616)>>>12][((r29+616)>>>2)&0x3ff] = r20; - writePages[(r29+600)>>>12][((r29+600)>>>2)&0x3ff] = r16; - writePages[(r29+684)>>>12][((r29+684)>>>2)&0x3ff] = f30; - writePages[(r29+680)>>>12][((r29+680)>>>2)&0x3ff] = f31; - writePages[(r29+676)>>>12][((r29+676)>>>2)&0x3ff] = f28; - writePages[(r29+672)>>>12][((r29+672)>>>2)&0x3ff] = f29; - writePages[(r29+668)>>>12][((r29+668)>>>2)&0x3ff] = f26; - writePages[(r29+664)>>>12][((r29+664)>>>2)&0x3ff] = f27; - writePages[(r29+660)>>>12][((r29+660)>>>2)&0x3ff] = f24; - writePages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff] = f25; - writePages[(r29+652)>>>12][((r29+652)>>>2)&0x3ff] = f22; - writePages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff] = f23; - writePages[(r29+644)>>>12][((r29+644)>>>2)&0x3ff] = f20; - writePages[(r29+640)>>>12][((r29+640)>>>2)&0x3ff] = f21; + case 0x46c34: + page[(r29+628)>>>2] = r23; + page[(r29+612)>>>2] = r19; + page[(r29+604)>>>2] = r17; + page[(r29+636)>>>2] = r31; + page[(r29+632)>>>2] = r30; + page[(r29+624)>>>2] = r22; + page[(r29+620)>>>2] = r21; + page[(r29+616)>>>2] = r20; + page[(r29+600)>>>2] = r16; + page[(r29+684)>>>2] = f30; + page[(r29+680)>>>2] = f31; + page[(r29+676)>>>2] = f28; + page[(r29+672)>>>2] = f29; + page[(r29+668)>>>2] = f26; + page[(r29+664)>>>2] = f27; + page[(r29+660)>>>2] = f24; + page[(r29+656)>>>2] = f25; + page[(r29+652)>>>2] = f22; + page[(r29+648)>>>2] = f23; + page[(r29+644)>>>2] = f20; + page[(r29+640)>>>2] = f21; r17 = r4 + r0; r23 = r5 + r0; r19 = r7 + -1; r9 = lo; if(r9 < 0) { - /* Next insn is delay slot */ - pc=0x36c60; - run_36c00(); return; + pc=0x47860; + run_47800(); return; } - case 0x360a0: + case 0x46ca0: r2 = ~(r0 | r9); r3 = r2 << 3; r2 = r2 << 5; @@ -40584,40 +50938,36 @@ public final class AcmeCrossAssembler extends UnixRuntime { r30 = r30 + r6; r2 = r9 - r19; if(r5 < 0) { - /* Next insn is delay slot */ - pc=0x3610c; + pc=0x46d0c; continue; } - r6 = readPages[(r29+708)>>>12][((r29+708)>>>2)&0x3ff]; + r6= page[(r29+708)>>>2]; r4 = r2 << 2; r5 = r2 + r5; r3 = r29 + 336; r4 = r6 + r4; r5 = r5 + 1; - case 0x360dc: + case 0x46cdc: if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x368a8; - run_36800(); return; + pc=0x474a8; + run_47000(); return; } - f2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; + f2= page[(r4+0)>>>2]; { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - case 0x360f0: + case 0x46cf0: r2 = r2 + 1; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = f0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = f1; + page[(r3+4)>>>2] = f0; + page[(r3+0)>>>2] = f1; r4 = r4 + 4; r3 = r3 + 8; if(r2 != r5) { - /* Next insn is delay slot */ - pc=0x360dc; + pc=0x46cdc; continue; } - case 0x3610c: + case 0x46d0c: if(r18 < 0) { - /* Next insn is delay slot */ - pc=0x36d44; - run_36c00(); return; + pc=0x47944; + run_47800(); return; } r16 = r7 << 3; r8 = r18 + 1; @@ -40626,92 +50976,75 @@ public final class AcmeCrossAssembler extends UnixRuntime { r5 = r0 + r0; r21 = r29 + 16; r6 = r6 + 328; - case 0x36130: + case 0x46d30: if(r19 < 0) { - /* Next insn is delay slot */ - pc=0x36938; - run_36800(); return; + pc=0x47538; + run_47000(); return; } f0 = r0; r3 = r6 + r5; f1 = r0; r2 = r0 + r0; - case 0x36148: + case 0x46d48: r4 = r17 + r2; - f2 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - f4 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - f3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - f5 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; + f2= page[(r3+4)>>>2]; + f4= page[(r4+4)>>>2]; + f3= page[(r3+0)>>>2]; + f5= page[(r4+0)>>>2]; r2 = r2 + 8; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r3 = r3 + -8; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } if(r2 != r16) { - /* Next insn is delay slot */ - pc=0x36148; + pc=0x46d48; continue; } r2 = r21 + r5; r5 = r5 + 8; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = f0; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = f1; + page[(r2+4)>>>2] = f0; + page[(r2+0)>>>2] = f1; if(r5 != r8) { - /* Next insn is delay slot */ - pc=0x36130; + pc=0x46d30; continue; } - case 0x3618c: + case 0x46d8c: r2 = r29 + 492; r20 = r18 << 2; - writePages[(r29+576)>>>12][((r29+576)>>>2)&0x3ff] = r2; + page[(r29+576)>>>2] = r2; r20 = r2 + r20; r2 = r18 + -1; r2 = r2 << 2; r2 = r21 + r2; - f28 = readPages[(r28+-31348)>>>12][((r28+-31348)>>>2)&0x3ff]; - f30 = readPages[(r28+-31340)>>>12][((r28+-31340)>>>2)&0x3ff]; - f20 = readPages[(r28+-31324)>>>12][((r28+-31324)>>>2)&0x3ff]; - f24 = readPages[(r28+-31364)>>>12][((r28+-31364)>>>2)&0x3ff]; - f22 = readPages[(r28+-31356)>>>12][((r28+-31356)>>>2)&0x3ff]; - writePages[(r29+584)>>>12][((r29+584)>>>2)&0x3ff] = r2; + f28= page[(r28+-31788)>>>2]; + f30= page[(r28+-31780)>>>2]; + f20= page[(r28+-31764)>>>2]; + f24= page[(r28+-31804)>>>2]; + f22= page[(r28+-31796)>>>2]; + page[(r29+584)>>>2] = r2; r2 = r18 + -2; r2 = r2 << 2; - f29 = readPages[(r28+-31352)>>>12][((r28+-31352)>>>2)&0x3ff]; - f31 = readPages[(r28+-31344)>>>12][((r28+-31344)>>>2)&0x3ff]; - f21 = readPages[(r28+-31328)>>>12][((r28+-31328)>>>2)&0x3ff]; - f25 = readPages[(r28+-31368)>>>12][((r28+-31368)>>>2)&0x3ff]; - f23 = readPages[(r28+-31360)>>>12][((r28+-31360)>>>2)&0x3ff]; + f29= page[(r28+-31792)>>>2]; + f31= page[(r28+-31784)>>>2]; + f21= page[(r28+-31768)>>>2]; + f25= page[(r28+-31808)>>>2]; + f23= page[(r28+-31800)>>>2]; r22 = r18 + r0; r8 = r18 << 3; - writePages[(r29+588)>>>12][((r29+588)>>>2)&0x3ff] = r2; - case 0x361e8: + page[(r29+588)>>>2] = r2; + case 0x46de8: r8 = r21 + r8; - f12 = readPages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff]; - f13 = readPages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff]; + f12= page[(r8+4)>>>2]; + f13= page[(r8+0)>>>2]; if(r22 <= 0) { - /* Next insn is delay slot */ - pc=0x36298; - run_36200(); return; + pc=0x46e98; + continue; } - case 0x36200: - pc=0x36200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_36200() throws ExecutionException { /* 0x36200 - 0x36400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x36200: r2 = r22 + -1; r2 = r2 << 3; r3 = r29 + 496; r2 = r21 + r2; r4 = r29 + 8; - case 0x36214: + case 0x46e14: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f25&0xffffffffL) << 32) | (f24&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } r2 = r2 + -8; r3 = r3 + 4; @@ -40742,33 +51075,30 @@ public final class AcmeCrossAssembler extends UnixRuntime { case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); break; // Round towards minus infinity } fcsr = r6; - f12 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - writePages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff] = f2; - f13 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; + f12= page[(r2+12)>>>2]; + page[(r3+-4)>>>2] = f2; + f13= page[(r2+8)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } if(r2 != r4) { - /* Next insn is delay slot */ - pc=0x36214; + pc=0x46e14; continue; } - case 0x36298: + case 0x46e98: r6 = r30 + r0; - writePages[(r29+592)>>>12][((r29+592)>>>2)&0x3ff] = r9; - /* Next insn is delay slot */ - r31=0x362a8; - pc=0x38400; - run_38400(); return; - case 0x362a8: + page[(r29+592)>>>2] = r9; + r31=0x46ea8; + pc=0x49000; + run_49000(); return; + case 0x46ea8: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f29&0xffffffffL) << 32) | (f28&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } f26 = f0; f27 = f1; - /* Next insn is delay slot */ - r31=0x362b8; - pc=0x37600; - run_37600(); return; - case 0x362b8: + r31=0x46eb8; + pc=0x48200; + run_48000(); return; + case 0x46eb8: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f31&0xffffffffL) << 32) | (f30&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - r9 = readPages[(r29+592)>>>12][((r29+592)>>>2)&0x3ff]; + r9= page[(r29+592)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f27 = (int)(l >>> 32); f26 = (int)l; } r2 = fcsr; r2 = fcsr; @@ -40782,45 +51112,42 @@ public final class AcmeCrossAssembler extends UnixRuntime { case 3: f0 = (int)Math.floor((Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))); break; // Round towards minus infinity } fcsr = r2; - writePages[(r29+580)>>>12][((r29+580)>>>2)&0x3ff] = f0; + page[(r29+580)>>>2] = f0; { long l = Double.doubleToLongBits(((double)f0)); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f27 = (int)(l >>> 32); f26 = (int)l; } if(r30 <= 0) { - /* Next insn is delay slot */ - pc=0x368bc; - run_36800(); return; + pc=0x474bc; + run_47000(); return; } r3 = r22 + -1; r3 = r3 << 2; r3 = r21 + r3; - r2 = readPages[(r3+480)>>>12][((r3+480)>>>2)&0x3ff]; + r2= page[(r3+480)>>>2]; r4 = r0 + 24; r4 = r4 - r30; r5 = r2 >> (r4&0x1f); - r7 = readPages[(r29+580)>>>12][((r29+580)>>>2)&0x3ff]; + r7= page[(r29+580)>>>2]; r4 = r5 << (r4&0x1f); r2 = r2 - r4; r4 = r0 + 23; r7 = r7 + r5; r4 = r4 - r30; - writePages[(r29+580)>>>12][((r29+580)>>>2)&0x3ff] = r7; - writePages[(r3+480)>>>12][((r3+480)>>>2)&0x3ff] = r2; + page[(r29+580)>>>2] = r7; + page[(r3+480)>>>2] = r2; r4 = r2 >> (r4&0x1f); - case 0x36340: + case 0x46f40: if(r4 <= 0) { - /* Next insn is delay slot */ - pc=0x36414; - run_36400(); return; + pc=0x47014; + run_47000(); return; } - r2 = readPages[(r29+580)>>>12][((r29+580)>>>2)&0x3ff]; + r2= page[(r29+580)>>>2]; r2 = r2 + 1; - writePages[(r29+580)>>>12][((r29+580)>>>2)&0x3ff] = r2; + page[(r29+580)>>>2] = r2; if(r22 <= 0) { - /* Next insn is delay slot */ - pc=0x36978; - run_36800(); return; + pc=0x47578; + run_47000(); return; } - case 0x36360: + case 0x46f60: r2 = r29 + 496; r6 = r22 << 2; r7 = 255 << 16; @@ -40828,159 +51155,142 @@ public final class AcmeCrossAssembler extends UnixRuntime { r5 = r0 + r0; r7 = r7 | 65535; r8 = 256 << 16; - /* Next insn is delay slot */ - pc=0x363a4; + pc=0x46fa4; continue; - case 0x36384: + case 0x46f84: if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x36398; + pc=0x46f98; continue; } r3 = r8 - r3; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; + page[(r2+0)>>>2] = r3; r5 = r0 + 1; - case 0x36398: + case 0x46f98: r2 = r2 + 4; if(r2 == r6) { - /* Next insn is delay slot */ - pc=0x363c8; + pc=0x46fc8; continue; } - case 0x363a4: - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; + case 0x46fa4: + r3= page[(r2+0)>>>2]; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x36384; + pc=0x46f84; continue; } r3 = r7 - r3; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; + page[(r2+0)>>>2] = r3; r2 = r2 + 4; r5 = r0 + 1; if(r2 != r6) { - /* Next insn is delay slot */ - pc=0x363a4; + pc=0x46fa4; continue; } - case 0x363c8: + case 0x46fc8: if(r30 <= 0) { - /* Next insn is delay slot */ - pc=0x36408; - run_36400(); return; + pc=0x47008; + run_47000(); return; } r2 = r0 + 1; if(r30 == r2) { - /* Next insn is delay slot */ - pc=0x368e4; - run_36800(); return; + pc=0x474e4; + run_47000(); return; } r2 = r0 + 2; if(r30 != r2) { - /* Next insn is delay slot */ - pc=0x36408; - run_36400(); return; + pc=0x47008; + run_47000(); return; } r2 = r22 + -1; r2 = r2 << 2; r2 = r21 + r2; - r6 = readPages[(r2+480)>>>12][((r2+480)>>>2)&0x3ff]; + r6= page[(r2+480)>>>2]; r3 = 63 << 16; r3 = r3 | 65535; - case 0x36400: - pc=0x36400; + case 0x47000: + pc=0x47000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_36400() throws ExecutionException { /* 0x36400 - 0x36600 */ + private final void run_47000() throws ExecutionException { /* 0x47000 - 0x47800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x36400: + case 0x47000: r3 = r6 & r3; - writePages[(r2+480)>>>12][((r2+480)>>>2)&0x3ff] = r3; - case 0x36408: + page[(r2+480)>>>2] = r3; + case 0x47008: r2 = r0 + 2; if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x365b0; + pc=0x471b0; continue; } - case 0x36414: + case 0x47014: f0 = r0; f1 = r0; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x365f8; + pc=0x471f8; continue; } - case 0x36434: + case 0x47034: r5 = r22 + -1; r2 = r5 < r18 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x36470; + pc=0x47070; continue; } r3 = r29 + 496; r7 = r5 << 2; r2 = r3 + r7; r3 = r0 + r0; - case 0x36454: - r6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; + case 0x47054: + r6= page[(r2+0)>>>2]; r2 = r2 + -4; r3 = r3 | r6; if(r2 != r20) { - /* Next insn is delay slot */ - pc=0x36454; + pc=0x47054; continue; } if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x36c10; - run_36c00(); return; + pc=0x47810; + run_47800(); return; } - case 0x36470: - r4 = readPages[(r29+584)>>>12][((r29+584)>>>2)&0x3ff]; - r2 = readPages[(r4+480)>>>12][((r4+480)>>>2)&0x3ff]; + case 0x47070: + r4= page[(r29+584)>>>2]; + r2= page[(r4+480)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x36c04; - run_36c00(); return; + pc=0x47804; + run_47800(); return; } - r7 = readPages[(r29+588)>>>12][((r29+588)>>>2)&0x3ff]; + r7= page[(r29+588)>>>2]; r5 = r29 + 496; r2 = r5 + r7; r3 = r0 + 1; - case 0x36498: + case 0x47098: r2 = r2 + -4; - r4 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; + r4= page[(r2+4)>>>2]; r3 = r3 + 1; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x36498; + pc=0x47098; continue; } - case 0x364ac: + case 0x470ac: r2 = r22 + 1; r22 = r22 + r3; r3 = r22 < r2 ? 1 : 0; r8 = r22 << 3; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x361e8; - run_36000(); return; + pc=0x46de8; + run_46800(); return; } r5 = r2 + r9; - r3 = readPages[(r29+708)>>>12][((r29+708)>>>2)&0x3ff]; + r3= page[(r29+708)>>>2]; r5 = r5 << 2; r5 = r3 + r5; r7 = r19 + r2; - f2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; + f2= page[(r5+0)>>>2]; r4 = r29 + 336; r2 = r2 << 3; r7 = r7 << 3; @@ -40990,132 +51300,108 @@ public final class AcmeCrossAssembler extends UnixRuntime { r8 = r22 << 3; r2 = r29 + 24; r6 = r2 + r8; - writePages[(r7+4)>>>12][((r7+4)>>>2)&0x3ff] = f0; - writePages[(r7+0)>>>12][((r7+0)>>>2)&0x3ff] = f1; + page[(r7+4)>>>2] = f0; + page[(r7+0)>>>2] = f1; if(r19 < 0) { - /* Next insn is delay slot */ - pc=0x36584; + pc=0x47184; continue; } - case 0x36510: + case 0x47110: f0 = r0; r3 = r7 + r0; f1 = r0; r2 = r0 + r0; - case 0x36520: + case 0x47120: r10 = r17 + r2; - f2 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - f4 = readPages[(r10+4)>>>12][((r10+4)>>>2)&0x3ff]; - f3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - f5 = readPages[(r10+0)>>>12][((r10+0)>>>2)&0x3ff]; + f2= page[(r3+4)>>>2]; + f4= page[(r10+4)>>>2]; + f3= page[(r3+0)>>>2]; + f5= page[(r10+0)>>>2]; r2 = r2 + 8; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r3 = r3 + -8; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } if(r2 != r16) { - /* Next insn is delay slot */ - pc=0x36520; + pc=0x47120; continue; } - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = f0; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = f1; + page[(r4+4)>>>2] = f0; + page[(r4+0)>>>2] = f1; r4 = r4 + 8; r5 = r5 + 4; r7 = r7 + 8; if(r4 == r6) { - /* Next insn is delay slot */ - pc=0x361e8; - run_36000(); return; + pc=0x46de8; + run_46800(); return; } - case 0x36568: - f2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; + case 0x47168: + f2= page[(r5+0)>>>2]; { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - writePages[(r7+4)>>>12][((r7+4)>>>2)&0x3ff] = f0; - writePages[(r7+0)>>>12][((r7+0)>>>2)&0x3ff] = f1; + page[(r7+4)>>>2] = f0; + page[(r7+0)>>>2] = f1; if(r19 >= 0) { - /* Next insn is delay slot */ - pc=0x36510; + pc=0x47110; continue; } - case 0x36584: + case 0x47184: f0 = r0; r4 = r4 + 8; f1 = r0; r5 = r5 + 4; - writePages[(r4+-4)>>>12][((r4+-4)>>>2)&0x3ff] = f0; - writePages[(r4+-8)>>>12][((r4+-8)>>>2)&0x3ff] = f1; + page[(r4+-4)>>>2] = f0; + page[(r4+-8)>>>2] = f1; r7 = r7 + 8; if(r4 != r6) { - /* Next insn is delay slot */ - pc=0x36568; + pc=0x47168; continue; } - /* Next insn is delay slot */ - pc=0x361e8; - run_36000(); return; - case 0x365b0: + pc=0x46de8; + run_46800(); return; + case 0x471b0: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))-(Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))); f27 = (int)(l >>> 32); f26 = (int)l; } if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x36414; + pc=0x47014; continue; } f12 = f20; f13 = f21; r6 = r30 + r0; - writePages[(r29+596)>>>12][((r29+596)>>>2)&0x3ff] = r4; - writePages[(r29+592)>>>12][((r29+592)>>>2)&0x3ff] = r9; - /* Next insn is delay slot */ - r31=0x365d4; - pc=0x38400; - run_38400(); return; - case 0x365d4: + page[(r29+596)>>>2] = r4; + page[(r29+592)>>>2] = r9; + r31=0x471d4; + pc=0x49000; + run_49000(); return; + case 0x471d4: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f27 = (int)(l >>> 32); f26 = (int)l; } f0 = r0; - r9 = readPages[(r29+592)>>>12][((r29+592)>>>2)&0x3ff]; + r9= page[(r29+592)>>>2]; f1 = r0; - r4 = readPages[(r29+596)>>>12][((r29+596)>>>2)&0x3ff]; + r4= page[(r29+596)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x36434; + pc=0x47034; continue; } - case 0x365f8: + case 0x471f8: f12 = f26; f13 = f27; r6 = r0 - r30; - case 0x36600: - pc=0x36600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_36600() throws ExecutionException { /* 0x36600 - 0x36800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x36600: - writePages[(r29+596)>>>12][((r29+596)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - r31=0x3660c; - pc=0x38400; - run_38400(); return; - case 0x3660c: - f2 = readPages[(r28+-31356)>>>12][((r28+-31356)>>>2)&0x3ff]; - r4 = readPages[(r29+596)>>>12][((r29+596)>>>2)&0x3ff]; - f3 = readPages[(r28+-31360)>>>12][((r28+-31360)>>>2)&0x3ff]; + page[(r29+596)>>>2] = r4; + r31=0x4720c; + pc=0x49000; + run_49000(); return; + case 0x4720c: + f2= page[(r28+-31796)>>>2]; + r4= page[(r29+596)>>>2]; + f3= page[(r28+-31800)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<=(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x36c6c; - run_36c00(); return; + pc=0x4786c; + run_47800(); return; } - f4 = readPages[(r28+-31364)>>>12][((r28+-31364)>>>2)&0x3ff]; + f4= page[(r28+-31804)>>>2]; r5 = r22 + 1; - f5 = readPages[(r28+-31368)>>>12][((r28+-31368)>>>2)&0x3ff]; + f5= page[(r28+-31808)>>>2]; r30 = r30 + 24; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } r2 = fcsr; @@ -41147,125 +51433,113 @@ public final class AcmeCrossAssembler extends UnixRuntime { case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity } fcsr = r6; - writePages[(r2+480)>>>12][((r2+480)>>>2)&0x3ff] = f2; + page[(r2+480)>>>2] = f2; r2 = r5 << 2; r2 = r21 + r2; - writePages[(r2+480)>>>12][((r2+480)>>>2)&0x3ff] = f4; - case 0x366b4: + page[(r2+480)>>>2] = f4; + case 0x472b4: f12 = f20; f13 = f21; r6 = r30 + r0; - writePages[(r29+596)>>>12][((r29+596)>>>2)&0x3ff] = r4; - writePages[(r29+592)>>>12][((r29+592)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - r31=0x366cc; - pc=0x38400; - run_38400(); return; - case 0x366cc: - r5 = readPages[(r29+592)>>>12][((r29+592)>>>2)&0x3ff]; - r4 = readPages[(r29+596)>>>12][((r29+596)>>>2)&0x3ff]; + page[(r29+596)>>>2] = r4; + page[(r29+592)>>>2] = r5; + r31=0x472cc; + pc=0x49000; + run_49000(); return; + case 0x472cc: + r5= page[(r29+592)>>>2]; + r4= page[(r29+596)>>>2]; if(r5 < 0) { - /* Next insn is delay slot */ - pc=0x367b4; + pc=0x473b4; continue; } - f4 = readPages[(r28+-31364)>>>12][((r28+-31364)>>>2)&0x3ff]; + f4= page[(r28+-31804)>>>2]; r3 = r29 + 496; r2 = r5 << 2; r9 = r5 << 3; - f5 = readPages[(r28+-31368)>>>12][((r28+-31368)>>>2)&0x3ff]; + f5= page[(r28+-31808)>>>2]; r2 = r3 + r2; r3 = r21 + r9; - case 0x366f8: - f6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r7 = readPages[(r29+576)>>>12][((r29+576)>>>2)&0x3ff]; + case 0x472f8: + f6= page[(r2+0)>>>2]; + r7= page[(r29+576)>>>2]; { long l = Double.doubleToLongBits(((double)f6)); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r2 = r2 + -4; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } r3 = r3 + -8; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f2; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f3; + page[(r3+12)>>>2] = f2; + page[(r3+8)>>>2] = f3; if(r2 != r7) { - /* Next insn is delay slot */ - pc=0x366f8; + pc=0x472f8; continue; } r9 = r21 + r9; r11 = r5 + 1; r8 = r0 + r0; - r10 = 7 << 16; - case 0x36734: + r10 = 6 << 16; + case 0x47334: if(r18 < 0) { - /* Next insn is delay slot */ - pc=0x36984; - run_36800(); return; + pc=0x47584; + continue; } f0 = r0; - r6 = r10 + 112; + r6 = r10 + 13656; r3 = r9 + r0; f1 = r0; r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x3676c; + pc=0x4736c; continue; - case 0x36758: + case 0x47358: r7 = r8 < r2 ? 1 : 0; r6 = r6 + 8; r3 = r3 + 8; if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x36794; + pc=0x47394; continue; } - case 0x3676c: - f4 = readPages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff]; - f2 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - f5 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - f3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + case 0x4736c: + f4= page[(r6+4)>>>2]; + f2= page[(r3+4)>>>2]; + f5= page[(r6+0)>>>2]; + f3= page[(r3+0)>>>2]; r2 = r2 + 1; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r7 = r18 < r2 ? 1 : 0; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x36758; + pc=0x47358; continue; } - case 0x36794: + case 0x47394: r2 = r8 << 3; r2 = r21 + r2; r8 = r8 + 1; - writePages[(r2+164)>>>12][((r2+164)>>>2)&0x3ff] = f0; - writePages[(r2+160)>>>12][((r2+160)>>>2)&0x3ff] = f1; + page[(r2+164)>>>2] = f0; + page[(r2+160)>>>2] = f1; r9 = r9 + -8; if(r8 != r11) { - /* Next insn is delay slot */ - pc=0x36734; + pc=0x47334; continue; } - case 0x367b4: - r3 = readPages[(r29+704)>>>12][((r29+704)>>>2)&0x3ff]; + case 0x473b4: + r3= page[(r29+704)>>>2]; r2 = r3 < 3 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x36a94; - run_36a00(); return; + pc=0x47694; + continue; } if(r3 > 0) { - /* Next insn is delay slot */ - pc=0x369b4; - run_36800(); return; + pc=0x475b4; + continue; } if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3683c; - run_36800(); return; + pc=0x4743c; + continue; } if(r5 < 0) { - /* Next insn is delay slot */ - pc=0x36d34; - run_36c00(); return; + pc=0x47934; + run_47800(); return; } r2 = r29 + 176; r5 = r5 << 3; @@ -41273,170 +51547,141 @@ public final class AcmeCrossAssembler extends UnixRuntime { r6 = r29 + 168; r3 = r0 + r0; r2 = r0 + r0; - case 0x367f8: - f0 = readPages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff]; + case 0x473f8: + f0= page[(r5+4)>>>2]; f2 = r3; - case 0x36800: - pc=0x36800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_36800() throws ExecutionException { /* 0x36800 - 0x36a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x36800: - f1 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; + f1= page[(r5+0)>>>2]; f3 = r2; r5 = r5 + -8; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r3 = f2; r2 = f3; if(r5 != r6) { - /* Next insn is delay slot */ - pc=0x367f8; - run_36600(); return; + pc=0x473f8; + continue; } - case 0x36820: + case 0x47420: if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x36d1c; - run_36c00(); return; + pc=0x4791c; + run_47800(); return; } r6 = 32768 << 16; r4 = r2 ^ r6; r5 = r3 + r0; - writePages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff] = r5; - writePages[(r23+0)>>>12][((r23+0)>>>2)&0x3ff] = r4; - case 0x3683c: - r3 = readPages[(r29+580)>>>12][((r29+580)>>>2)&0x3ff]; - f30 = readPages[(r29+684)>>>12][((r29+684)>>>2)&0x3ff]; - f28 = readPages[(r29+676)>>>12][((r29+676)>>>2)&0x3ff]; - f26 = readPages[(r29+668)>>>12][((r29+668)>>>2)&0x3ff]; - f24 = readPages[(r29+660)>>>12][((r29+660)>>>2)&0x3ff]; - f22 = readPages[(r29+652)>>>12][((r29+652)>>>2)&0x3ff]; - f20 = readPages[(r29+644)>>>12][((r29+644)>>>2)&0x3ff]; - r31 = readPages[(r29+636)>>>12][((r29+636)>>>2)&0x3ff]; - r30 = readPages[(r29+632)>>>12][((r29+632)>>>2)&0x3ff]; - r23 = readPages[(r29+628)>>>12][((r29+628)>>>2)&0x3ff]; - r22 = readPages[(r29+624)>>>12][((r29+624)>>>2)&0x3ff]; - r21 = readPages[(r29+620)>>>12][((r29+620)>>>2)&0x3ff]; - r20 = readPages[(r29+616)>>>12][((r29+616)>>>2)&0x3ff]; - r19 = readPages[(r29+612)>>>12][((r29+612)>>>2)&0x3ff]; - r18 = readPages[(r29+608)>>>12][((r29+608)>>>2)&0x3ff]; - r17 = readPages[(r29+604)>>>12][((r29+604)>>>2)&0x3ff]; - r16 = readPages[(r29+600)>>>12][((r29+600)>>>2)&0x3ff]; - f31 = readPages[(r29+680)>>>12][((r29+680)>>>2)&0x3ff]; - f29 = readPages[(r29+672)>>>12][((r29+672)>>>2)&0x3ff]; - f27 = readPages[(r29+664)>>>12][((r29+664)>>>2)&0x3ff]; - f25 = readPages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff]; - f23 = readPages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff]; - f21 = readPages[(r29+640)>>>12][((r29+640)>>>2)&0x3ff]; + page[(r23+4)>>>2] = r5; + page[(r23+0)>>>2] = r4; + case 0x4743c: + r3= page[(r29+580)>>>2]; + f30= page[(r29+684)>>>2]; + f28= page[(r29+676)>>>2]; + f26= page[(r29+668)>>>2]; + f24= page[(r29+660)>>>2]; + f22= page[(r29+652)>>>2]; + f20= page[(r29+644)>>>2]; + r31= page[(r29+636)>>>2]; + r30= page[(r29+632)>>>2]; + r23= page[(r29+628)>>>2]; + r22= page[(r29+624)>>>2]; + r21= page[(r29+620)>>>2]; + r20= page[(r29+616)>>>2]; + r19= page[(r29+612)>>>2]; + r18= page[(r29+608)>>>2]; + r17= page[(r29+604)>>>2]; + r16= page[(r29+600)>>>2]; + f31= page[(r29+680)>>>2]; + f29= page[(r29+672)>>>2]; + f27= page[(r29+664)>>>2]; + f25= page[(r29+656)>>>2]; + f23= page[(r29+648)>>>2]; + f21= page[(r29+640)>>>2]; r2 = r3 & 7; r29 = r29 + 688; - /* Next insn is delay slot */ pc=r31; return; - case 0x368a8: + case 0x474a8: f0 = r0; f1 = r0; - /* Next insn is delay slot */ - pc=0x360f0; - run_36000(); return; - case 0x368bc: + pc=0x46cf0; + run_46800(); return; + case 0x474bc: if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x3690c; + pc=0x4750c; continue; } r2 = r22 + -1; r2 = r2 << 2; r2 = r21 + r2; - r4 = readPages[(r2+480)>>>12][((r2+480)>>>2)&0x3ff]; + r4= page[(r2+480)>>>2]; r4 = r4 >> 23; - /* Next insn is delay slot */ - pc=0x36340; - run_36200(); return; - case 0x368e4: + pc=0x46f40; + run_46800(); return; + case 0x474e4: r2 = r22 + -1; r2 = r2 << 2; r2 = r21 + r2; - r6 = readPages[(r2+480)>>>12][((r2+480)>>>2)&0x3ff]; + r6= page[(r2+480)>>>2]; r3 = 127 << 16; r3 = r3 | 65535; r3 = r6 & r3; - writePages[(r2+480)>>>12][((r2+480)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x36408; - run_36400(); return; - case 0x3690c: - f2 = readPages[(r28+-31332)>>>12][((r28+-31332)>>>2)&0x3ff]; - f3 = readPages[(r28+-31336)>>>12][((r28+-31336)>>>2)&0x3ff]; + page[(r2+480)>>>2] = r3; + pc=0x47008; + continue; + case 0x4750c: + f2= page[(r28+-31772)>>>2]; + f3= page[(r28+-31776)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<=(Double.longBitsToDouble(((f27&0xffffffffL) << 32) | (f26&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x36960; + pc=0x47560; continue; } r4 = r0 + r0; - /* Next insn is delay slot */ - pc=0x36414; - run_36400(); return; - case 0x36938: + pc=0x47014; + continue; + case 0x47538: f0 = r0; r2 = r21 + r5; f1 = r0; r5 = r5 + 8; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = f0; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = f1; + page[(r2+4)>>>2] = f0; + page[(r2+0)>>>2] = f1; if(r5 != r8) { - /* Next insn is delay slot */ - pc=0x36130; - run_36000(); return; + pc=0x46d30; + run_46800(); return; } - /* Next insn is delay slot */ - pc=0x3618c; - run_36000(); return; - case 0x36960: - r2 = readPages[(r29+580)>>>12][((r29+580)>>>2)&0x3ff]; + pc=0x46d8c; + run_46800(); return; + case 0x47560: + r2= page[(r29+580)>>>2]; r4 = r0 + 2; r2 = r2 + 1; - writePages[(r29+580)>>>12][((r29+580)>>>2)&0x3ff] = r2; + page[(r29+580)>>>2] = r2; if(r22 > 0) { - /* Next insn is delay slot */ - pc=0x36360; - run_36200(); return; + pc=0x46f60; + run_46800(); return; } - case 0x36978: + case 0x47578: r5 = r0 + r0; - /* Next insn is delay slot */ - pc=0x363c8; - run_36200(); return; - case 0x36984: + pc=0x46fc8; + run_46800(); return; + case 0x47584: f0 = r0; r2 = r8 << 3; f1 = r0; r2 = r21 + r2; r8 = r8 + 1; - writePages[(r2+164)>>>12][((r2+164)>>>2)&0x3ff] = f0; - writePages[(r2+160)>>>12][((r2+160)>>>2)&0x3ff] = f1; + page[(r2+164)>>>2] = f0; + page[(r2+160)>>>2] = f1; r9 = r9 + -8; if(r8 != r11) { - /* Next insn is delay slot */ - pc=0x36734; - run_36600(); return; + pc=0x47334; + continue; } - /* Next insn is delay slot */ - pc=0x367b4; - run_36600(); return; - case 0x369b4: + pc=0x473b4; + continue; + case 0x475b4: if(r5 < 0) { - /* Next insn is delay slot */ - pc=0x36d0c; - run_36c00(); return; + pc=0x4790c; + run_47800(); return; } r2 = r29 + 176; r6 = r5 << 3; @@ -41444,266 +51689,229 @@ public final class AcmeCrossAssembler extends UnixRuntime { r7 = r29 + 168; r3 = r0 + r0; r2 = r0 + r0; - case 0x369d4: - f0 = readPages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff]; + case 0x475d4: + f0= page[(r6+4)>>>2]; f2 = r3; - f1 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; + f1= page[(r6+0)>>>2]; f3 = r2; r6 = r6 + -8; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r3 = f2; r2 = f3; if(r6 != r7) { - /* Next insn is delay slot */ - pc=0x369d4; + pc=0x475d4; continue; } - case 0x369fc: + case 0x475fc: if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x36bf4; - run_36a00(); return; + pc=0x477f4; + continue; } - case 0x36a00: - pc=0x36a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_36a00() throws ExecutionException { /* 0x36a00 - 0x36c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x36a00: r8 = 32768 << 16; r6 = r2 ^ r8; r7 = r3 + r0; - case 0x36a10: + case 0x47610: f2 = r3; - f0 = readPages[(r29+180)>>>12][((r29+180)>>>2)&0x3ff]; + f0= page[(r29+180)>>>2]; f3 = r2; - f1 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; - writePages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff] = r7; + f1= page[(r29+176)>>>2]; + page[(r23+4)>>>2] = r7; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - writePages[(r23+0)>>>12][((r23+0)>>>2)&0x3ff] = r6; + page[(r23+0)>>>2] = r6; r3 = f2; r2 = f3; if(r5 <= 0) { - /* Next insn is delay slot */ - pc=0x36a70; + pc=0x47670; continue; } r6 = r29 + 184; r5 = r5 << 3; r5 = r6 + r5; - case 0x36a48: - f0 = readPages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff]; + case 0x47648: + f0= page[(r6+4)>>>2]; f2 = r3; - f1 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; + f1= page[(r6+0)>>>2]; f3 = r2; r6 = r6 + 8; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r3 = f2; r2 = f3; if(r6 != r5) { - /* Next insn is delay slot */ - pc=0x36a48; + pc=0x47648; continue; } - case 0x36a70: + case 0x47670: if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x36cac; - run_36c00(); return; + pc=0x478ac; + run_47800(); return; } r6 = 32768 << 16; r4 = r2 ^ r6; r5 = r3 + r0; - writePages[(r23+12)>>>12][((r23+12)>>>2)&0x3ff] = r5; - writePages[(r23+8)>>>12][((r23+8)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=0x3683c; - run_36800(); return; - case 0x36a94: - r7 = readPages[(r29+704)>>>12][((r29+704)>>>2)&0x3ff]; + page[(r23+12)>>>2] = r5; + page[(r23+8)>>>2] = r4; + pc=0x4743c; + continue; + case 0x47694: + r7= page[(r29+704)>>>2]; r2 = r0 + 3; if(r7 != r2) { - /* Next insn is delay slot */ - pc=0x3683c; - run_36800(); return; + pc=0x4743c; + continue; } if(r5 <= 0) { - /* Next insn is delay slot */ - pc=0x36cfc; - run_36c00(); return; + pc=0x478fc; + run_47800(); return; } r9 = r5 << 3; r2 = r21 + r9; - f0 = readPages[(r2+164)>>>12][((r2+164)>>>2)&0x3ff]; + f0= page[(r2+164)>>>2]; r6 = r29 + 176; - f1 = readPages[(r2+160)>>>12][((r2+160)>>>2)&0x3ff]; + f1= page[(r2+160)>>>2]; r2 = r5 + -1; r2 = r2 << 3; r2 = r6 + r2; r7 = r29 + 168; r3 = r2 + r0; - /* Next insn is delay slot */ - pc=0x36ae0; + pc=0x476e0; continue; - case 0x36adc: + case 0x476dc: f0 = f2; f1 = f3; - case 0x36ae0: - f4 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; + case 0x476e0: + f4= page[(r3+4)>>>2]; r3 = r3 + -8; - f5 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; + f5= page[(r3+8)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = f2; + page[(r3+12)>>>2] = f2; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = f3; - writePages[(r3+20)>>>12][((r3+20)>>>2)&0x3ff] = f0; - writePages[(r3+16)>>>12][((r3+16)>>>2)&0x3ff] = f1; + page[(r3+8)>>>2] = f3; + page[(r3+20)>>>2] = f0; + page[(r3+16)>>>2] = f1; if(r3 != r7) { - /* Next insn is delay slot */ - pc=0x36adc; + pc=0x476dc; continue; } r5 = r5 < 2 ? 1 : 0; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x36cfc; - run_36c00(); return; + pc=0x478fc; + run_47800(); return; } r21 = r21 + r9; - f0 = readPages[(r21+164)>>>12][((r21+164)>>>2)&0x3ff]; - f1 = readPages[(r21+160)>>>12][((r21+160)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x36b3c; + f0= page[(r21+164)>>>2]; + f1= page[(r21+160)>>>2]; + pc=0x4773c; continue; - case 0x36b38: + case 0x47738: f0 = f2; f1 = f3; - case 0x36b3c: - f4 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; + case 0x4773c: + f4= page[(r2+4)>>>2]; r2 = r2 + -8; - f5 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; + f5= page[(r2+8)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = f2; + page[(r2+12)>>>2] = f2; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = f3; - writePages[(r2+20)>>>12][((r2+20)>>>2)&0x3ff] = f0; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = f1; + page[(r2+8)>>>2] = f3; + page[(r2+20)>>>2] = f0; + page[(r2+16)>>>2] = f1; if(r6 != r2) { - /* Next insn is delay slot */ - pc=0x36b38; + pc=0x47738; continue; } r9 = r6 + r9; r3 = r0 + r0; r6 = r6 + 8; r2 = r0 + r0; - case 0x36b80: - f0 = readPages[(r9+4)>>>12][((r9+4)>>>2)&0x3ff]; + case 0x47780: + f0= page[(r9+4)>>>2]; f2 = r3; - f1 = readPages[(r9+0)>>>12][((r9+0)>>>2)&0x3ff]; + f1= page[(r9+0)>>>2]; f3 = r2; r9 = r9 + -8; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r3 = f2; r2 = f3; if(r9 != r6) { - /* Next insn is delay slot */ - pc=0x36b80; + pc=0x47780; continue; } - case 0x36ba8: + case 0x477a8: if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x36cc4; - run_36c00(); return; + pc=0x478c4; + run_47800(); return; } - r5 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; + r5= page[(r29+176)>>>2]; r4 = 32768 << 16; r5 = r5 ^ r4; - writePages[(r23+0)>>>12][((r23+0)>>>2)&0x3ff] = r5; - r5 = readPages[(r29+180)>>>12][((r29+180)>>>2)&0x3ff]; - writePages[(r23+20)>>>12][((r23+20)>>>2)&0x3ff] = r3; - writePages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff] = r5; - r5 = readPages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff]; + page[(r23+0)>>>2] = r5; + r5= page[(r29+180)>>>2]; + page[(r23+20)>>>2] = r3; + page[(r23+4)>>>2] = r5; + r5= page[(r29+184)>>>2]; r5 = r5 ^ r4; - writePages[(r23+8)>>>12][((r23+8)>>>2)&0x3ff] = r5; - r5 = readPages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff]; + page[(r23+8)>>>2] = r5; + r5= page[(r29+188)>>>2]; r4 = r2 ^ r4; - writePages[(r23+12)>>>12][((r23+12)>>>2)&0x3ff] = r5; - writePages[(r23+16)>>>12][((r23+16)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=0x3683c; - run_36800(); return; - case 0x36bf4: + page[(r23+12)>>>2] = r5; + page[(r23+16)>>>2] = r4; + pc=0x4743c; + continue; + case 0x477f4: r7 = r3 + r0; r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x36a10; + pc=0x47610; continue; - case 0x36c00: - pc=0x36c00; + case 0x47800: + pc=0x47800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_36c00() throws ExecutionException { /* 0x36c00 - 0x36e00 */ + private final void run_47800() throws ExecutionException { /* 0x47800 - 0x48000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x36c00: - case 0x36c04: + case 0x47800: + case 0x47804: r3 = r0 + 1; - /* Next insn is delay slot */ - pc=0x364ac; - run_36400(); return; - case 0x36c10: + pc=0x470ac; + run_47000(); return; + case 0x47810: r7 = r21 + r7; - r2 = readPages[(r7+480)>>>12][((r7+480)>>>2)&0x3ff]; + r2= page[(r7+480)>>>2]; r30 = r30 + -24; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x366b4; - run_36600(); return; + pc=0x472b4; + run_47000(); return; } r3 = r5 + -1; r2 = r3 << 2; r5 = r29 + 496; r2 = r5 + r2; - /* Next insn is delay slot */ - pc=0x36c40; + pc=0x47840; continue; - case 0x36c3c: + case 0x4783c: r3 = r3 + -1; - case 0x36c40: + case 0x47840: r2 = r2 + -4; - r6 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; + r6= page[(r2+4)>>>2]; r5 = r3 + r0; r30 = r30 + -24; if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x36c3c; + pc=0x4783c; continue; } - /* Next insn is delay slot */ - pc=0x366b4; - run_36600(); return; - case 0x36c60: + pc=0x472b4; + run_47000(); return; + case 0x47860: r9 = r0 + r0; - /* Next insn is delay slot */ - pc=0x360a0; - run_36000(); return; - case 0x36c6c: + pc=0x46ca0; + run_46800(); return; + case 0x4786c: r2 = r22 << 2; r2 = r21 + r2; r6 = fcsr; @@ -41718,78 +51926,58 @@ public final class AcmeCrossAssembler extends UnixRuntime { case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity } fcsr = r6; - writePages[(r2+480)>>>12][((r2+480)>>>2)&0x3ff] = f2; + page[(r2+480)>>>2] = f2; r5 = r22 + r0; - /* Next insn is delay slot */ - pc=0x366b4; - run_36600(); return; - case 0x36cac: + pc=0x472b4; + run_47000(); return; + case 0x478ac: r5 = r3 + r0; r4 = r2 + r0; - writePages[(r23+12)>>>12][((r23+12)>>>2)&0x3ff] = r5; - writePages[(r23+8)>>>12][((r23+8)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=0x3683c; - run_36800(); return; - case 0x36cc4: - f0 = readPages[(r29+180)>>>12][((r29+180)>>>2)&0x3ff]; - writePages[(r23+20)>>>12][((r23+20)>>>2)&0x3ff] = r3; - f1 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; - writePages[(r23+16)>>>12][((r23+16)>>>2)&0x3ff] = r2; - writePages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff] = f0; - writePages[(r23+0)>>>12][((r23+0)>>>2)&0x3ff] = f1; - f0 = readPages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff]; - f1 = readPages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff]; - writePages[(r23+12)>>>12][((r23+12)>>>2)&0x3ff] = f0; - writePages[(r23+8)>>>12][((r23+8)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x3683c; - run_36800(); return; - case 0x36cfc: + page[(r23+12)>>>2] = r5; + page[(r23+8)>>>2] = r4; + pc=0x4743c; + run_47000(); return; + case 0x478c4: + f0= page[(r29+180)>>>2]; + page[(r23+20)>>>2] = r3; + f1= page[(r29+176)>>>2]; + page[(r23+16)>>>2] = r2; + page[(r23+4)>>>2] = f0; + page[(r23+0)>>>2] = f1; + f0= page[(r29+188)>>>2]; + f1= page[(r29+184)>>>2]; + page[(r23+12)>>>2] = f0; + page[(r23+8)>>>2] = f1; + pc=0x4743c; + run_47000(); return; + case 0x478fc: r3 = r0 + r0; r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x36ba8; - run_36a00(); return; - case 0x36d0c: + pc=0x477a8; + run_47000(); return; + case 0x4790c: r3 = r0 + r0; r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x369fc; - run_36800(); return; - case 0x36d1c: + pc=0x475fc; + run_47000(); return; + case 0x4791c: r5 = r3 + r0; r4 = r2 + r0; - writePages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff] = r5; - writePages[(r23+0)>>>12][((r23+0)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=0x3683c; - run_36800(); return; - case 0x36d34: + page[(r23+4)>>>2] = r5; + page[(r23+0)>>>2] = r4; + pc=0x4743c; + run_47000(); return; + case 0x47934: r3 = r0 + r0; r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x36820; - run_36800(); return; - case 0x36d44: + pc=0x47420; + run_47000(); return; + case 0x47944: r16 = r7 << 3; r21 = r29 + 16; - /* Next insn is delay slot */ - pc=0x3618c; - run_36000(); return; - case 0x36e00: - pc=0x36e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_36e00() throws ExecutionException { /* 0x36e00 - 0x37000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x36e00: + pc=0x46d8c; + run_46800(); return; + case 0x47a00: r2 = f13; r3 = 32767 << 16; r3 = r3 | 65535; @@ -41797,8 +51985,7 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = 15936 << 16; r2 = r2 < r3 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x36e58; + pc=0x47a58; continue; } r4 = fcsr; @@ -41815,81 +52002,64 @@ public final class AcmeCrossAssembler extends UnixRuntime { fcsr = r4; r2 = f0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x36f28; + pc=0x47b28; continue; } - case 0x36e58: + case 0x47a58: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f6 = readPages[(r28+-31316)>>>12][((r28+-31316)>>>2)&0x3ff]; - f8 = readPages[(r28+-31308)>>>12][((r28+-31308)>>>2)&0x3ff]; - f7 = readPages[(r28+-31320)>>>12][((r28+-31320)>>>2)&0x3ff]; - f9 = readPages[(r28+-31312)>>>12][((r28+-31312)>>>2)&0x3ff]; + f6= page[(r28+-31756)>>>2]; + f8= page[(r28+-31748)>>>2]; + f7= page[(r28+-31760)>>>2]; + f9= page[(r28+-31752)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f4 = readPages[(r28+-31284)>>>12][((r28+-31284)>>>2)&0x3ff]; - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - f5 = readPages[(r28+-31288)>>>12][((r28+-31288)>>>2)&0x3ff]; + f4= page[(r28+-31724)>>>2]; + r2= page[(r29+16)>>>2]; + f5= page[(r28+-31728)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f8 = readPages[(r28+-31300)>>>12][((r28+-31300)>>>2)&0x3ff]; + f8= page[(r28+-31740)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f9 = readPages[(r28+-31304)>>>12][((r28+-31304)>>>2)&0x3ff]; + f9= page[(r28+-31744)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))+(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f8 = readPages[(r28+-31292)>>>12][((r28+-31292)>>>2)&0x3ff]; + f8= page[(r28+-31732)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f9 = readPages[(r28+-31296)>>>12][((r28+-31296)>>>2)&0x3ff]; + f9= page[(r28+-31736)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x36f00; + pc=0x47b00; continue; } - f6 = readPages[(r28+-31268)>>>12][((r28+-31268)>>>2)&0x3ff]; + f6= page[(r28+-31708)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f7 = readPages[(r28+-31272)>>>12][((r28+-31272)>>>2)&0x3ff]; + f7= page[(r28+-31712)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f15&0xffffffffL) << 32) | (f14&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f15&0xffffffffL) << 32) | (f14&0xffffffffL)))); f15 = (int)(l >>> 32); f14 = (int)l; } - f2 = readPages[(r28+-31276)>>>12][((r28+-31276)>>>2)&0x3ff]; - f3 = readPages[(r28+-31280)>>>12][((r28+-31280)>>>2)&0x3ff]; + f2= page[(r28+-31716)>>>2]; + f3= page[(r28+-31720)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f15&0xffffffffL) << 32) | (f14&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ pc=r31; return; - case 0x36f00: + case 0x47b00: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f8 = readPages[(r28+-31276)>>>12][((r28+-31276)>>>2)&0x3ff]; - f9 = readPages[(r28+-31280)>>>12][((r28+-31280)>>>2)&0x3ff]; + f8= page[(r28+-31716)>>>2]; + f9= page[(r28+-31720)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ pc=r31; return; - case 0x36f28: + case 0x47b28: f0 = f12; f1 = f13; - /* Next insn is delay slot */ pc=r31; return; - case 0x37000: - pc=0x37000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_37000() throws ExecutionException { /* 0x37000 - 0x37200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x37000: + case 0x47c00: r2 = f13; r10 = 32767 << 16; r10 = r10 | 65535; @@ -41898,13 +52068,12 @@ public final class AcmeCrossAssembler extends UnixRuntime { r29 = r29 + -24; r8 = r10 < r8 ? 1 : 0; r3 = f12; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; + page[(r29+20)>>>2] = r31; r5 = f14; r4 = f15; r6 = r2 + r0; if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x370cc; + pc=0x47ccc; continue; } f12 = r3; @@ -41923,67 +52092,61 @@ public final class AcmeCrossAssembler extends UnixRuntime { fcsr = r12; r8 = f0; if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x37124; + pc=0x47d24; continue; } - r5 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; + r5= page[(r29+40)>>>2]; r10 = r10 | r3; r4 = r5 + 1; r10 = r10 | r4; if(r10 == r0) { - /* Next insn is delay slot */ - pc=0x37368; - run_37200(); return; + pc=0x47f68; + continue; } - r6 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; + r6= page[(r29+40)>>>2]; r4 = r0 + 1; if(r6 == r4) { - /* Next insn is delay slot */ - pc=0x373b4; - run_37200(); return; + pc=0x47fb4; + continue; } - f0 = readPages[(r28+-31252)>>>12][((r28+-31252)>>>2)&0x3ff]; + f0= page[(r28+-31692)>>>2]; f2 = r3; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - f1 = readPages[(r28+-31256)>>>12][((r28+-31256)>>>2)&0x3ff]; + r31= page[(r29+20)>>>2]; + f1= page[(r28+-31696)>>>2]; f3 = r2; r29 = r29 + 24; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))/(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ pc=r31; return; - case 0x370cc: + case 0x47ccc: r8 = 16357 << 16; r8 = r8 | 37928; r8 = r10 < r8 ? 1 : 0; if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x37124; + pc=0x47d24; continue; } if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x3738c; - run_37200(); return; + pc=0x47f8c; + continue; } - case 0x370e8: + case 0x47ce8: f4 = r3; - f0 = readPages[(r28+-31244)>>>12][((r28+-31244)>>>2)&0x3ff]; + f0= page[(r28+-31684)>>>2]; f5 = r2; - f1 = readPages[(r28+-31248)>>>12][((r28+-31248)>>>2)&0x3ff]; + f1= page[(r28+-31688)>>>2]; f10 = r5; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f0 = readPages[(r28+-31236)>>>12][((r28+-31236)>>>2)&0x3ff]; + f0= page[(r28+-31676)>>>2]; f11 = r4; - f1 = readPages[(r28+-31240)>>>12][((r28+-31240)>>>2)&0x3ff]; + f1= page[(r28+-31680)>>>2]; r5 = r0 + r0; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } r4 = r0 + r0; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } r3 = f4; r2 = f5; - case 0x37124: + case 0x47d24: f10 = r3; f0 = r3; f11 = r2; @@ -41991,64 +52154,51 @@ public final class AcmeCrossAssembler extends UnixRuntime { f4 = r3; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } f5 = r2; - f8 = readPages[(r28+-31220)>>>12][((r28+-31220)>>>2)&0x3ff]; - f10 = readPages[(r28+-31172)>>>12][((r28+-31172)>>>2)&0x3ff]; - f9 = readPages[(r28+-31224)>>>12][((r28+-31224)>>>2)&0x3ff]; + f8= page[(r28+-31660)>>>2]; + f10= page[(r28+-31612)>>>2]; + f9= page[(r28+-31664)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } - f4 = readPages[(r28+-31228)>>>12][((r28+-31228)>>>2)&0x3ff]; - f11 = readPages[(r28+-31176)>>>12][((r28+-31176)>>>2)&0x3ff]; - f5 = readPages[(r28+-31232)>>>12][((r28+-31232)>>>2)&0x3ff]; + f4= page[(r28+-31668)>>>2]; + f11= page[(r28+-31616)>>>2]; + f5= page[(r28+-31672)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f8 = readPages[(r28+-31212)>>>12][((r28+-31212)>>>2)&0x3ff]; + f8= page[(r28+-31652)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f9 = readPages[(r28+-31216)>>>12][((r28+-31216)>>>2)&0x3ff]; + f9= page[(r28+-31656)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f8 = readPages[(r28+-31204)>>>12][((r28+-31204)>>>2)&0x3ff]; + f8= page[(r28+-31644)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f9 = readPages[(r28+-31208)>>>12][((r28+-31208)>>>2)&0x3ff]; + f9= page[(r28+-31648)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f8 = readPages[(r28+-31196)>>>12][((r28+-31196)>>>2)&0x3ff]; + f8= page[(r28+-31636)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f9 = readPages[(r28+-31200)>>>12][((r28+-31200)>>>2)&0x3ff]; + f9= page[(r28+-31640)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f8 = readPages[(r28+-31188)>>>12][((r28+-31188)>>>2)&0x3ff]; + f8= page[(r28+-31628)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f9 = readPages[(r28+-31192)>>>12][((r28+-31192)>>>2)&0x3ff]; + f9= page[(r28+-31632)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f8 = readPages[(r28+-31180)>>>12][((r28+-31180)>>>2)&0x3ff]; - f9 = readPages[(r28+-31184)>>>12][((r28+-31184)>>>2)&0x3ff]; + f8= page[(r28+-31620)>>>2]; + f9= page[(r28+-31624)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))+(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f10 = readPages[(r28+-31164)>>>12][((r28+-31164)>>>2)&0x3ff]; + f10= page[(r28+-31604)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f11 = readPages[(r28+-31168)>>>12][((r28+-31168)>>>2)&0x3ff]; + f11= page[(r28+-31608)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))+(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f10 = readPages[(r28+-31156)>>>12][((r28+-31156)>>>2)&0x3ff]; + f10= page[(r28+-31596)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f11 = readPages[(r28+-31160)>>>12][((r28+-31160)>>>2)&0x3ff]; + f11= page[(r28+-31600)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))+(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f10 = readPages[(r28+-31148)>>>12][((r28+-31148)>>>2)&0x3ff]; - case 0x37200: - pc=0x37200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_37200() throws ExecutionException { /* 0x37200 - 0x37400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x37200: + f10= page[(r28+-31588)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f11 = readPages[(r28+-31152)>>>12][((r28+-31152)>>>2)&0x3ff]; + f11= page[(r28+-31592)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))+(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f10 = readPages[(r28+-31140)>>>12][((r28+-31140)>>>2)&0x3ff]; + f10= page[(r28+-31580)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } - f11 = readPages[(r28+-31144)>>>12][((r28+-31144)>>>2)&0x3ff]; + f11= page[(r28+-31584)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))+(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } f10 = r5; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } @@ -42061,28 +52211,26 @@ public final class AcmeCrossAssembler extends UnixRuntime { { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f2 = readPages[(r28+-31132)>>>12][((r28+-31132)>>>2)&0x3ff]; - f3 = readPages[(r28+-31136)>>>12][((r28+-31136)>>>2)&0x3ff]; + f2= page[(r28+-31572)>>>2]; + f3= page[(r28+-31576)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } f0 = r3; f1 = r2; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } if(r10 == r0) { - /* Next insn is delay slot */ - pc=0x37308; + pc=0x47f08; continue; } - r5 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; + r5= page[(r29+40)>>>2]; r4 = r0 + 1; if(r5 == r4) { - /* Next insn is delay slot */ - pc=0x373a8; + pc=0x47fa8; continue; } - f0 = readPages[(r28+-31252)>>>12][((r28+-31252)>>>2)&0x3ff]; + f0= page[(r28+-31692)>>>2]; r4 = f5; - f1 = readPages[(r28+-31256)>>>12][((r28+-31256)>>>2)&0x3ff]; + f1= page[(r28+-31696)>>>2]; r5 = r0 + r0; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))/(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } f2 = r5; @@ -42092,9 +52240,9 @@ public final class AcmeCrossAssembler extends UnixRuntime { f11 = r2; f8 = r9; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f10 = readPages[(r28+-31260)>>>12][((r28+-31260)>>>2)&0x3ff]; + f10= page[(r28+-31700)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f11 = readPages[(r28+-31264)>>>12][((r28+-31264)>>>2)&0x3ff]; + f11= page[(r28+-31704)>>>2]; r8 = f5; f9 = r8; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } @@ -42103,14 +52251,13 @@ public final class AcmeCrossAssembler extends UnixRuntime { { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - case 0x372f8: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + case 0x47ef8: + r31= page[(r29+20)>>>2]; r29 = r29 + 24; - /* Next insn is delay slot */ pc=r31; return; - case 0x37308: - f2 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; + case 0x47f08: + f2= page[(r29+40)>>>2]; r6 = r6 >> 30; { long l = Double.doubleToLongBits(((double)f2)); f9 = (int)(l >>> 32); f8 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } @@ -42120,7 +52267,7 @@ public final class AcmeCrossAssembler extends UnixRuntime { r6 = r4 - r6; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))/(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } f10 = r6; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r31= page[(r29+20)>>>2]; { long l = Double.doubleToLongBits(((double)f10)); f1 = (int)(l >>> 32); f0 = (int)l; } r29 = r29 + 24; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } @@ -42130,55 +52277,48 @@ public final class AcmeCrossAssembler extends UnixRuntime { { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f9 = (int)(l >>> 32); f8 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ pc=r31; return; - case 0x37368: - /* Next insn is delay slot */ - r31=0x37370; - pc=0x32a00; - run_32a00(); return; - case 0x37370: - f4 = readPages[(r28+-31260)>>>12][((r28+-31260)>>>2)&0x3ff]; - f5 = readPages[(r28+-31264)>>>12][((r28+-31264)>>>2)&0x3ff]; + case 0x47f68: + r31=0x47f70; + pc=0x43600; + run_43000(); return; + case 0x47f70: + f4= page[(r28+-31700)>>>2]; + f5= page[(r28+-31704)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x372f8; + pc=0x47ef8; continue; - case 0x3738c: + case 0x47f8c: r11 = 32768 << 16; r8 = r2 ^ r11; r2 = r8 + r0; r8 = r4 ^ r11; r4 = r8 + r0; - /* Next insn is delay slot */ - pc=0x370e8; - run_37000(); return; - case 0x373a8: + pc=0x47ce8; + continue; + case 0x47fa8: f0 = f4; f1 = f5; - /* Next insn is delay slot */ - pc=0x372f8; + pc=0x47ef8; continue; - case 0x373b4: + case 0x47fb4: f0 = r3; f1 = r2; - /* Next insn is delay slot */ - pc=0x372f8; + pc=0x47ef8; continue; - case 0x37400: - pc=0x37400; + case 0x48000: + pc=0x48000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_37400() throws ExecutionException { /* 0x37400 - 0x37600 */ + private final void run_48000() throws ExecutionException { /* 0x48000 - 0x48800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x37400: + case 0x48000: r2 = f13; r3 = 32767 << 16; r3 = r3 | 65535; @@ -42186,22 +52326,9 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = 32784 << 16; r2 = r2 + r3; r2 = r2 >>> 31; - /* Next insn is delay slot */ pc=r31; return; - case 0x37600: - pc=0x37600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_37600() throws ExecutionException { /* 0x37600 - 0x37800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x37600: + case 0x48200: r2 = f13; r3 = f12; r5 = r2 >> 20; @@ -42212,13 +52339,11 @@ public final class AcmeCrossAssembler extends UnixRuntime { r9 = r2 + r0; r6 = r3 + r0; if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x376ac; + pc=0x482ac; continue; } if(r4 < 0) { - /* Next insn is delay slot */ - pc=0x37740; + pc=0x48340; continue; } r5 = 15 << 16; @@ -42227,129 +52352,112 @@ public final class AcmeCrossAssembler extends UnixRuntime { r7 = r5 & r2; r7 = r7 | r3; if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x376c4; + pc=0x482c4; continue; } - f0 = readPages[(r28+-31124)>>>12][((r28+-31124)>>>2)&0x3ff]; - f1 = readPages[(r28+-31128)>>>12][((r28+-31128)>>>2)&0x3ff]; + f0= page[(r28+-31564)>>>2]; + f1= page[(r28+-31568)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } f0 = r0; f1 = r0; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x37698; + pc=0x48298; continue; } if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x37798; + pc=0x48398; continue; } - case 0x3768c: + case 0x4828c: r8 = ~(r0 | r5); r8 = r9 & r8; r6 = r0 + r0; - case 0x37698: + case 0x48298: f0 = r6; f1 = r8; - /* Next insn is delay slot */ pc=r31; return; - case 0x376ac: + case 0x482ac: r7 = r4 < 52 ? 1 : 0; if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x376d0; + pc=0x482d0; continue; } r2 = r0 + 1024; if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x3778c; + pc=0x4838c; continue; } - case 0x376c4: + case 0x482c4: f0 = f12; f1 = f13; - /* Next insn is delay slot */ pc=r31; return; - case 0x376d0: + case 0x482d0: r10 = r0 + -1; r7 = r5 + -1043; r7 = r10 >>> (r7&0x1f); r10 = r7 & r3; if(r10 == r0) { - /* Next insn is delay slot */ - pc=0x376c4; + pc=0x482c4; continue; } - f0 = readPages[(r28+-31124)>>>12][((r28+-31124)>>>2)&0x3ff]; - f1 = readPages[(r28+-31128)>>>12][((r28+-31128)>>>2)&0x3ff]; + f0= page[(r28+-31564)>>>2]; + f1= page[(r28+-31568)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } f0 = r0; f1 = r0; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x37698; + pc=0x48298; continue; } if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x377ac; + pc=0x483ac; continue; } - case 0x37724: + case 0x48324: r7 = ~(r0 | r7); r6 = r6 & r7; f0 = r6; r8 = r9 + r0; f1 = r8; - /* Next insn is delay slot */ pc=r31; return; - case 0x37740: - f0 = readPages[(r28+-31124)>>>12][((r28+-31124)>>>2)&0x3ff]; - f1 = readPages[(r28+-31128)>>>12][((r28+-31128)>>>2)&0x3ff]; + case 0x48340: + f0= page[(r28+-31564)>>>2]; + f1= page[(r28+-31568)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f13 = (int)(l >>> 32); f12 = (int)l; } f0 = r0; f1 = r0; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x37698; + pc=0x48298; continue; } if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x377e4; + pc=0x483e4; continue; } r6 = r0 + r0; r8 = r0 + r0; - /* Next insn is delay slot */ - pc=0x37698; + pc=0x48298; continue; - case 0x3778c: + case 0x4838c: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))+(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ pc=r31; return; - case 0x37798: + case 0x48398: r9 = 16 << 16; r4 = r9 >> (r4&0x1f); r9 = r4 + r2; - /* Next insn is delay slot */ - pc=0x3768c; + pc=0x4828c; continue; - case 0x377ac: + case 0x483ac: r8 = r0 + 20; if(r4 == r8) { - /* Next insn is delay slot */ - pc=0x377d8; + pc=0x483d8; continue; } r6 = r0 + 1075; @@ -42359,64 +52467,34 @@ public final class AcmeCrossAssembler extends UnixRuntime { r6 = r6 + r3; r4 = ((r6 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x37724; + pc=0x48324; continue; } - case 0x377d8: + case 0x483d8: r9 = r2 + 1; - /* Next insn is delay slot */ - pc=0x37724; + pc=0x48324; continue; - case 0x377e4: + case 0x483e4: r4 = 32767 << 16; r4 = r4 | 65535; r2 = r4 & r2; r2 = r2 | r3; r6 = r0 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x37698; + pc=0x48298; continue; } - case 0x37800: - pc=0x37800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_37800() throws ExecutionException { /* 0x37800 - 0x37a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x37800: r8 = 49136 << 16; - /* Next insn is delay slot */ - pc=0x37698; - run_37600(); return; - case 0x37a00: - pc=0x37a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_37a00() throws ExecutionException { /* 0x37a00 - 0x37c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x37a00: + pc=0x48298; + continue; + case 0x48600: r4 = f13; r3 = 32767 << 16; r3 = r3 | 65535; r3 = r3 & r4; r5 = f12; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x37a40; + pc=0x48640; continue; } r2 = 65520 << 16; @@ -42424,99 +52502,64 @@ public final class AcmeCrossAssembler extends UnixRuntime { r6 = 32736 << 16; r2 = ((r2 & 0xffffffffL) < (r6 & 0xffffffffL)) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x37a54; + pc=0x48654; continue; } r2 = r0 + 4; - /* Next insn is delay slot */ pc=r31; return; - case 0x37a40: + case 0x48640: r2 = (r5&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; r3 = r0 + 3; r2 = r3 - r2; - /* Next insn is delay slot */ pc=r31; return; - case 0x37a54: + case 0x48654: r2 = 16 << 16; r2 = ((r3 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x37a70; + pc=0x48670; continue; } r2 = r0 + 3; - /* Next insn is delay slot */ pc=r31; return; - case 0x37a70: + case 0x48670: r2 = 32752 << 16; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x37a88; + pc=0x48688; continue; } r2 = r0 + r0; - /* Next insn is delay slot */ pc=r31; return; - case 0x37a88: + case 0x48688: r2 = (r5&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - /* Next insn is delay slot */ pc=r31; return; - case 0x37c00: - pc=0x37c00; + case 0x48800: + pc=0x48800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_37c00() throws ExecutionException { /* 0x37c00 - 0x37e00 */ + private final void run_48800() throws ExecutionException { /* 0x48800 - 0x49000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x37c00: + case 0x48800: r2 = r0 + r0; - /* Next insn is delay slot */ pc=r31; return; - case 0x37e00: - pc=0x37e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_37e00() throws ExecutionException { /* 0x37e00 - 0x38000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x37e00: + case 0x48a00: r3 = r0 + r0; f0 = r3; r2 = 32760 << 16; f1 = r2; - /* Next insn is delay slot */ pc=r31; return; - case 0x38000: - pc=0x38000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_38000() throws ExecutionException { /* 0x38000 - 0x38200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x38000: + case 0x48c00: r2 = f13; r29 = r29 + -8; r5 = r2 >> 20; @@ -42527,13 +52570,11 @@ public final class AcmeCrossAssembler extends UnixRuntime { r9 = r2 + r0; r6 = r2 >>> 31; if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x38090; + pc=0x48c90; continue; } if(r4 < 0) { - /* Next insn is delay slot */ - pc=0x38144; + pc=0x48d44; continue; } r5 = 15 << 16; @@ -42542,71 +52583,62 @@ public final class AcmeCrossAssembler extends UnixRuntime { r7 = r5 & r2; r7 = r7 | r3; if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x380a8; + pc=0x48ca8; continue; } r5 = r5 >>> 1; r7 = r5 & r2; r7 = r7 | r3; if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x381f4; + pc=0x48df4; continue; } r7 = r0 + 19; if(r4 == r7) { - /* Next insn is delay slot */ - pc=0x3820c; - run_38200(); return; + pc=0x48e0c; + continue; } r8 = r0 + r0; - case 0x38074: + case 0x48c74: r9 = 4 << 16; r5 = ~(r0 | r5); r2 = r5 & r2; r4 = r9 >> (r4&0x1f); r9 = r2 | r4; - /* Next insn is delay slot */ - pc=0x380f8; + pc=0x48cf8; continue; - case 0x38090: + case 0x48c90: r7 = r4 < 52 ? 1 : 0; if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x380b8; + pc=0x48cb8; continue; } r2 = r0 + 1024; if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x38200; - run_38200(); return; + pc=0x48e00; + continue; } - case 0x380a8: + case 0x48ca8: f0 = f12; f1 = f13; - case 0x380ac: + case 0x48cac: r29 = r29 + 8; - /* Next insn is delay slot */ pc=r31; return; - case 0x380b8: + case 0x48cb8: r5 = r5 + -1043; r4 = r0 + -1; r4 = r4 >>> (r5&0x1f); r7 = r4 & r3; if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x380a8; + pc=0x48ca8; continue; } r4 = r4 >>> 1; r7 = r4 & r3; r8 = r3 + r0; if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x380f8; + pc=0x48cf8; continue; } r4 = ~(r0 | r4); @@ -42614,33 +52646,31 @@ public final class AcmeCrossAssembler extends UnixRuntime { r8 = r4 & r3; r5 = r2 >> (r5&0x1f); r8 = r8 | r5; - case 0x380f8: - r2 = 7 << 16; + case 0x48cf8: + r2 = 6 << 16; r6 = r6 << 3; - r2 = r2 + 192; + r2 = r2 + 13736; r6 = r6 + r2; f2 = r8; - f0 = readPages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff]; + f0= page[(r6+4)>>>2]; f3 = r9; - f1 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; + f1= page[(r6+0)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - writePages[(r29+4)>>>12][((r29+4)>>>2)&0x3ff] = f2; - writePages[(r29+0)>>>12][((r29+0)>>>2)&0x3ff] = f3; - f12 = readPages[(r29+4)>>>12][((r29+4)>>>2)&0x3ff]; - f13 = readPages[(r29+0)>>>12][((r29+0)>>>2)&0x3ff]; + page[(r29+4)>>>2] = f2; + page[(r29+0)>>>2] = f3; + f12= page[(r29+4)>>>2]; + f13= page[(r29+0)>>>2]; r29 = r29 + 8; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ pc=r31; return; - case 0x38144: + case 0x48d44: r7 = 32767 << 16; r7 = r7 | 65535; r4 = r7 & r2; r4 = r4 | r3; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x380a8; + pc=0x48ca8; continue; } r4 = 15 << 16; @@ -42655,21 +52685,21 @@ public final class AcmeCrossAssembler extends UnixRuntime { r8 = 65534 << 16; r2 = r8 & r2; r4 = r3 | r2; - r2 = 7 << 16; + r2 = 6 << 16; r3 = r6 << 3; r5 = f12; - r2 = r2 + 192; + r2 = r2 + 13736; r2 = r3 + r2; - f0 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; + f0= page[(r2+4)>>>2]; f2 = r5; - f1 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; + f1= page[(r2+0)>>>2]; f3 = r4; r6 = r6 << 31; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - writePages[(r29+4)>>>12][((r29+4)>>>2)&0x3ff] = f2; - writePages[(r29+0)>>>12][((r29+0)>>>2)&0x3ff] = f3; - f2 = readPages[(r29+4)>>>12][((r29+4)>>>2)&0x3ff]; - f3 = readPages[(r29+0)>>>12][((r29+0)>>>2)&0x3ff]; + page[(r29+4)>>>2] = f2; + page[(r29+0)>>>2] = f3; + f2= page[(r29+4)>>>2]; + f3= page[(r29+0)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } r4 = f1; r3 = f0; @@ -42677,49 +52707,32 @@ public final class AcmeCrossAssembler extends UnixRuntime { f0 = r3; r2 = r6 | r4; f1 = r2; - /* Next insn is delay slot */ - pc=0x380ac; + pc=0x48cac; continue; - case 0x381f4: + case 0x48df4: r8 = r0 + r0; - /* Next insn is delay slot */ - pc=0x380f8; + pc=0x48cf8; continue; - case 0x38200: - pc=0x38200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_38200() throws ExecutionException { /* 0x38200 - 0x38400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x38200: + case 0x48e00: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))+(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x380ac; - run_38000(); return; - case 0x3820c: + pc=0x48cac; + continue; + case 0x48e0c: r8 = 32768 << 16; - /* Next insn is delay slot */ - pc=0x38074; - run_38000(); return; - case 0x38400: - pc=0x38400; + pc=0x48c74; + continue; + case 0x49000: + pc=0x49000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_38400() throws ExecutionException { /* 0x38400 - 0x38600 */ + private final void run_49000() throws ExecutionException { /* 0x49000 - 0x49800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x38400: + case 0x49000: r2 = f13; r5 = 32752 << 16; r4 = r5 & r2; @@ -42727,13 +52740,12 @@ public final class AcmeCrossAssembler extends UnixRuntime { r4 = r4 >> 20; f14 = f12; f15 = f13; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = f20; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = f21; + page[(r29+20)>>>2] = r31; + page[(r29+28)>>>2] = f20; + page[(r29+24)>>>2] = f21; r3 = f12; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x384c8; + pc=0x490c8; continue; } r4 = 32767 << 16; @@ -42741,20 +52753,18 @@ public final class AcmeCrossAssembler extends UnixRuntime { r2 = r4 & r2; r2 = r2 | r3; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x38528; + pc=0x49128; continue; } - f0 = readPages[(r28+-31108)>>>12][((r28+-31108)>>>2)&0x3ff]; + f0= page[(r28+-31548)>>>2]; r4 = 65535 << 16; - f1 = readPages[(r28+-31112)>>>12][((r28+-31112)>>>2)&0x3ff]; + f1= page[(r28+-31552)>>>2]; r4 = r4 + 15536; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f15 = (int)(l >>> 32); f14 = (int)l; } r4 = r6 < r4 ? 1 : 0; r2 = f15; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x38544; + pc=0x49144; continue; } r4 = r5 & r2; @@ -42764,47 +52774,41 @@ public final class AcmeCrossAssembler extends UnixRuntime { r8 = r2 + r0; r2 = r7 < 2047 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x384e8; + pc=0x490e8; continue; } - case 0x3848c: - f20 = readPages[(r28+-31092)>>>12][((r28+-31092)>>>2)&0x3ff]; - f21 = readPages[(r28+-31096)>>>12][((r28+-31096)>>>2)&0x3ff]; + case 0x4908c: + f20= page[(r28+-31532)>>>2]; + f21= page[(r28+-31536)>>>2]; f12 = f20; f13 = f21; - /* Next insn is delay slot */ - r31=0x384a8; - pc=0x38800; - run_38800(); return; - case 0x384a8: + r31=0x490a8; + pc=0x49400; + continue; + case 0x490a8: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - f20 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f21 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + r31= page[(r29+20)>>>2]; + f20= page[(r29+28)>>>2]; + f21= page[(r29+24)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x384c8: + case 0x490c8: r8 = r2 + r0; r2 = r0 + 2047; if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x385ac; + pc=0x491ac; continue; } r7 = r4 + r6; r2 = r7 < 2047 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3848c; + pc=0x4908c; continue; } - case 0x384e8: + case 0x490e8: if(r7 <= 0) { - /* Next insn is delay slot */ - pc=0x38568; + pc=0x49168; continue; } r3 = f14; @@ -42815,72 +52819,64 @@ public final class AcmeCrossAssembler extends UnixRuntime { f0 = r3; r2 = r7 | r8; f1 = r2; - case 0x38510: - f20 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - f21 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + case 0x49110: + f20= page[(r29+28)>>>2]; + r31= page[(r29+20)>>>2]; + f21= page[(r29+24)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x38528: - f20 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - f21 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + case 0x49128: + f20= page[(r29+28)>>>2]; + r31= page[(r29+20)>>>2]; + f21= page[(r29+24)>>>2]; f0 = f12; f1 = f13; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x38544: - f0 = readPages[(r28+-31100)>>>12][((r28+-31100)>>>2)&0x3ff]; - f20 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - f1 = readPages[(r28+-31104)>>>12][((r28+-31104)>>>2)&0x3ff]; - f21 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + case 0x49144: + f0= page[(r28+-31540)>>>2]; + f20= page[(r29+28)>>>2]; + r31= page[(r29+20)>>>2]; + f1= page[(r28+-31544)>>>2]; + f21= page[(r29+24)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f15&0xffffffffL) << 32) | (f14&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x38568: + case 0x49168: r2 = r7 < -53 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x385c8; + pc=0x491c8; continue; } r2 = r0 | 50001; r6 = r6 < r2 ? 1 : 0; if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x3848c; + pc=0x4908c; continue; } - f20 = readPages[(r28+-31100)>>>12][((r28+-31100)>>>2)&0x3ff]; - f21 = readPages[(r28+-31104)>>>12][((r28+-31104)>>>2)&0x3ff]; + f20= page[(r28+-31540)>>>2]; + f21= page[(r28+-31544)>>>2]; f12 = f20; f13 = f21; - /* Next insn is delay slot */ - r31=0x385a0; - pc=0x38800; - run_38800(); return; - case 0x385a0: - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x38510; + r31=0x491a0; + pc=0x49400; continue; - case 0x385ac: - f20 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - f21 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + case 0x491a0: + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } + pc=0x49110; + continue; + case 0x491ac: + f20= page[(r29+28)>>>2]; + r31= page[(r29+20)>>>2]; + f21= page[(r29+24)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))+(Double.longBitsToDouble(((f13&0xffffffffL) << 32) | (f12&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x385c8: + case 0x491c8: r5 = f14; r2 = 32783 << 16; r7 = r7 + 54; @@ -42888,40 +52884,14 @@ public final class AcmeCrossAssembler extends UnixRuntime { r7 = r7 << 20; r8 = r8 & r2; f2 = r5; - f0 = readPages[(r28+-31084)>>>12][((r28+-31084)>>>2)&0x3ff]; + f0= page[(r28+-31524)>>>2]; r4 = r7 | r8; f3 = r4; - f1 = readPages[(r28+-31088)>>>12][((r28+-31088)>>>2)&0x3ff]; + f1= page[(r28+-31528)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x38510; + pc=0x49110; continue; - case 0x38600: - pc=0x38600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_38600() throws ExecutionException { /* 0x38600 - 0x38800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x38600: - case 0x38800: - pc=0x38800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_38800() throws ExecutionException { /* 0x38800 - 0x38a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x38800: + case 0x49400: r6 = f15; r5 = 32768 << 16; r6 = r5 & r6; @@ -42933,7209 +52903,5360 @@ public final class AcmeCrossAssembler extends UnixRuntime { f0 = r3; r2 = r6 | r4; f1 = r2; - /* Next insn is delay slot */ pc=r31; return; - case 0x38a00: - pc=0x38a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_38a00() throws ExecutionException { /* 0x38a00 - 0x38c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x38a00: + case 0x49600: r5 = r4 + r0; r6 = r0 + r0; r4 = r0 + r0; r7 = r0 + r0; - /* Next insn is delay slot */ - pc=0x56a00; - run_56a00(); return; - case 0x38c00: - pc=0x38c00; + pc=0x57400; + run_57000(); return; + case 0x49800: + pc=0x49800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_38c00() throws ExecutionException { /* 0x38c00 - 0x38e00 */ + private final void run_49800() throws ExecutionException { /* 0x49800 - 0x4a000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x38c00: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ + case 0x49800: + r2= page[(r28+-31512)>>>2]; pc=r31; return; - case 0x38e00: - pc=0x38e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_38e00() throws ExecutionException { /* 0x38e00 - 0x39000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x38e00: + case 0x49a00: r29 = r29 + -24; r5 = r0 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; + page[(r29+16)>>>2] = r16; + page[(r29+20)>>>2] = r31; r16 = r4 + r0; - /* Next insn is delay slot */ - r31=0x38e1c; - pc=0x56c00; - run_56c00(); return; - case 0x38e1c: - r4 = readPages[(r28+-31076)>>>12][((r28+-31076)>>>2)&0x3ff]; - r2 = readPages[(r4+60)>>>12][((r4+60)>>>2)&0x3ff]; + r31=0x49a1c; + pc=0x57600; + run_57000(); return; + case 0x49a1c: + r4= page[(r28+-31516)>>>2]; + r2= page[(r4+60)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x38e3c; + pc=0x49a3c; continue; } - /* Next insn is delay slot */ pc=r2; - r31=0x38e3c; + r31=0x49a3c; return; - case 0x38e3c: + case 0x49a3c: r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x38e48; - pc=0x48800; - run_48800(); return; - case 0x38e48: - case 0x39000: - pc=0x39000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_39000() throws ExecutionException { /* 0x39000 - 0x39200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x39000: + r31=0x49a48; + pc=0x56e00; + run_56800(); return; + case 0x49a48: + case 0x49c00: r29 = r29 + -32; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; + page[(r29+16)>>>2] = r16; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r18; + page[(r29+20)>>>2] = r17; r16 = r5 + r0; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x3904c; + pc=0x49c4c; continue; } r17 = r4 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3903c; + pc=0x49c3c; continue; } - r2 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; + r2= page[(r4+56)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x39138; + pc=0x49d38; continue; } - case 0x3903c: + case 0x49c3c: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r2 = tmp; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3906c; + pc=0x49c6c; continue; } - case 0x3904c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + case 0x49c4c: + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; r2 = r0 + r0; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x3906c: + case 0x49c6c: r4 = r17 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x3907c; - pc=0x39800; - run_39800(); return; - case 0x3907c: - r3 = readPages[(r16+44)>>>12][((r16+44)>>>2)&0x3ff]; + r31=0x49c7c; + pc=0x4a400; + run_4a000(); return; + case 0x49c7c: + r3= page[(r16+44)>>>2]; r18 = r2 + r0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x390a4; + pc=0x49ca4; continue; } - r5 = readPages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff]; + r5= page[(r16+28)>>>2]; r4 = r17 + r0; - /* Next insn is delay slot */ pc=r3; - r31=0x3909c; + r31=0x49c9c; return; - case 0x3909c: + case 0x49c9c: if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x39148; + pc=0x49d48; continue; } - case 0x390a4: + case 0x49ca4: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r2 = r2 & 128; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x39154; + pc=0x49d54; continue; } - case 0x390b8: - r5 = readPages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff]; + case 0x49cb8: + r5= page[(r16+48)>>>2]; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x390e4; + pc=0x49ce4; continue; } r2 = r16 + 64; if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x390e0; + pc=0x49ce0; continue; } r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x390e0; - pc=0x3ca00; - run_3ca00(); return; - case 0x390e0: - writePages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff] = r0; - case 0x390e4: - r5 = readPages[(r16+68)>>>12][((r16+68)>>>2)&0x3ff]; + r31=0x49ce0; + pc=0x4c400; + run_4c000(); return; + case 0x49ce0: + page[(r16+48)>>>2] = r0; + case 0x49ce4: + r5= page[(r16+68)>>>2]; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x39104; + pc=0x49d04; continue; } r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x39100; - pc=0x3ca00; - run_3ca00(); return; - case 0x39100: - writePages[(r16+68)>>>12][((r16+68)>>>2)&0x3ff] = r0; - case 0x39104: - /* Next insn is delay slot */ - r31=0x3910c; - pc=0x3aa00; - run_3aa00(); return; - case 0x3910c: + r31=0x49d00; + pc=0x4c400; + run_4c000(); return; + case 0x49d00: + page[(r16+68)>>>2] = r0; + case 0x49d04: + r31=0x49d0c; + pc=0x4b000; + run_4b000(); return; + case 0x49d0c: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r0&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x39118; - pc=0x3ac00; - run_3ac00(); return; - case 0x39118: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r31=0x49d18; + pc=0x4b200; + run_4b000(); return; + case 0x49d18: + r31= page[(r29+28)>>>2]; r2 = r18 + r0; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + r17= page[(r29+20)>>>2]; + r18= page[(r29+24)>>>2]; + r16= page[(r29+16)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x39138: - /* Next insn is delay slot */ - r31=0x39140; - pc=0x3a600; - run_3a600(); return; - case 0x39140: - /* Next insn is delay slot */ - pc=0x3903c; + case 0x49d38: + r31=0x49d40; + pc=0x4ac00; + run_4a800(); return; + case 0x49d40: + pc=0x49c3c; continue; - case 0x39148: + case 0x49d48: r18 = r0 + -1; - /* Next insn is delay slot */ - pc=0x390a4; + pc=0x49ca4; continue; - case 0x39154: - r5 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; + case 0x49d54: + r5= page[(r16+16)>>>2]; r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x39164; - pc=0x3ca00; - run_3ca00(); return; - case 0x39164: - /* Next insn is delay slot */ - pc=0x390b8; + r31=0x49d64; + pc=0x4c400; + run_4c000(); return; + case 0x49d64: + pc=0x49cb8; continue; - case 0x39200: - pc=0x39200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_39200() throws ExecutionException { /* 0x39200 - 0x39400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x39200: + case 0x49e00: r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x39000; - run_39000(); return; - case 0x39400: - pc=0x39400; + r4= page[(r28+-31512)>>>2]; + pc=0x49c00; + continue; + case 0x4a000: + pc=0x4a000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_39400() throws ExecutionException { /* 0x39400 - 0x39600 */ + private final void run_4a000() throws ExecutionException { /* 0x4a000 - 0x4a800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x39400: + case 0x4a000: addr=r5+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r2 = tmp; r29 = r29 + -40; r3 = r2 & 8; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; + page[(r29+32)>>>2] = r19; + page[(r29+24)>>>2] = r17; + page[(r29+36)>>>2] = r31; + page[(r29+28)>>>2] = r18; + page[(r29+20)>>>2] = r16; r19 = r4 + r0; r17 = r5 + r0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x39540; + pc=0x4a140; continue; } - r3 = readPages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff]; + r3= page[(r5+4)>>>2]; r2 = r2 | 2048; addr=r5+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r3 <= 0) { - /* Next insn is delay slot */ - pc=0x395f4; + pc=0x4a1f4; continue; } - case 0x39444: - r3 = readPages[(r17+40)>>>12][((r17+40)>>>2)&0x3ff]; + case 0x4a044: + r3= page[(r17+40)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3951c; + pc=0x4a11c; continue; } r2 = r2 & 65535; r4 = r2 & 4096; - r16 = readPages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff]; - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = r0; + r16= page[(r19+0)>>>2]; + page[(r19+0)>>>2] = r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3960c; - run_39600(); return; + pc=0x4a20c; + continue; } - r6 = readPages[(r17+80)>>>12][((r17+80)>>>2)&0x3ff]; - case 0x39470: + r6= page[(r17+80)>>>2]; + case 0x4a070: r2 = r2 & 4; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x394a4; + pc=0x4a0a4; continue; } - r2 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; + r2= page[(r17+4)>>>2]; r6 = r6 - r2; - r2 = readPages[(r17+48)>>>12][((r17+48)>>>2)&0x3ff]; + r2= page[(r17+48)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x394a4; + pc=0x4a0a4; continue; } - r2 = readPages[(r17+60)>>>12][((r17+60)>>>2)&0x3ff]; + r2= page[(r17+60)>>>2]; r6 = r6 - r2; - case 0x394a4: - r5 = readPages[(r17+28)>>>12][((r17+28)>>>2)&0x3ff]; + case 0x4a0a4: + r5= page[(r17+28)>>>2]; r4 = r19 + r0; r7 = r0 + r0; - /* Next insn is delay slot */ pc=r3; - r31=0x394b8; + r31=0x4a0b8; return; - case 0x394b8: + case 0x4a0b8: r3 = r0 + -1; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x39644; - run_39600(); return; + pc=0x4a244; + continue; } - case 0x394c4: + case 0x4a0c4: addr=r17+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r3 = tmp; - r4 = readPages[(r17+16)>>>12][((r17+16)>>>2)&0x3ff]; + r4= page[(r17+16)>>>2]; r3 = r3 & 63487; r3 = r3 << 16; r3 = r3 >> 16; addr=r17+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r3 & 4096; - writePages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff] = r0; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r4; + page[(r17+4)>>>2] = r0; + page[(r17+0)>>>2] = r4; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x396c8; - run_39600(); return; + pc=0x4a2c8; + continue; } - case 0x394f0: - r5 = readPages[(r17+48)>>>12][((r17+48)>>>2)&0x3ff]; - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = r16; + case 0x4a0f0: + r5= page[(r17+48)>>>2]; + page[(r19+0)>>>2] = r16; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x3951c; + pc=0x4a11c; continue; } r2 = r17 + 64; if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x39518; + pc=0x4a118; continue; } r4 = r19 + r0; - /* Next insn is delay slot */ - r31=0x39518; - pc=0x3ca00; - run_3ca00(); return; - case 0x39518: - writePages[(r17+48)>>>12][((r17+48)>>>2)&0x3ff] = r0; - case 0x3951c: + r31=0x4a118; + pc=0x4c400; + run_4c000(); return; + case 0x4a118: + page[(r17+48)>>>2] = r0; + case 0x4a11c: r2 = r0 + r0; - case 0x39520: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + case 0x4a120: + r31= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r29 = r29 + 40; - /* Next insn is delay slot */ pc=r31; return; - case 0x39540: - r18 = readPages[(r5+16)>>>12][((r5+16)>>>2)&0x3ff]; + case 0x4a140: + r18= page[(r5+16)>>>2]; if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x3951c; + pc=0x4a11c; continue; } - r16 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; + r16= page[(r5+0)>>>2]; r2 = r2 & 3; r16 = r16 - r18; - writePages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff] = r18; + page[(r5+0)>>>2] = r18; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x395e8; + pc=0x4a1e8; continue; } - r2 = readPages[(r5+20)>>>12][((r5+20)>>>2)&0x3ff]; - case 0x39570: - writePages[(r17+8)>>>12][((r17+8)>>>2)&0x3ff] = r2; + r2= page[(r5+20)>>>2]; + case 0x4a170: + page[(r17+8)>>>2] = r2; if(r16 > 0) { - /* Next insn is delay slot */ - pc=0x39594; + pc=0x4a194; continue; } - /* Next insn is delay slot */ - pc=0x3951c; + pc=0x4a11c; continue; - case 0x39584: + case 0x4a184: r16 = r16 - r2; r18 = r18 + r2; if(r16 <= 0) { - /* Next insn is delay slot */ - pc=0x3951c; + pc=0x4a11c; continue; } - case 0x39594: - r2 = readPages[(r17+36)>>>12][((r17+36)>>>2)&0x3ff]; - r5 = readPages[(r17+28)>>>12][((r17+28)>>>2)&0x3ff]; + case 0x4a194: + r2= page[(r17+36)>>>2]; + r5= page[(r17+28)>>>2]; r4 = r19 + r0; r6 = r18 + r0; r7 = r16 + r0; - /* Next insn is delay slot */ pc=r2; - r31=0x395b0; + r31=0x4a1b0; return; - case 0x395b0: + case 0x4a1b0: if(r2 > 0) { - /* Next insn is delay slot */ - pc=0x39584; + pc=0x4a184; continue; } - case 0x395b8: + case 0x4a1b8: addr=r17+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + r31= page[(r29+36)>>>2]; r2 = r2 | 64; addr=r17+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r2 = r0 + -1; r29 = r29 + 40; - /* Next insn is delay slot */ pc=r31; return; - case 0x395e8: + case 0x4a1e8: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x39570; + pc=0x4a170; continue; - case 0x395f4: - r3 = readPages[(r5+60)>>>12][((r5+60)>>>2)&0x3ff]; + case 0x4a1f4: + r3= page[(r5+60)>>>2]; if(r3 > 0) { - /* Next insn is delay slot */ - pc=0x39444; + pc=0x4a044; continue; } - case 0x39600: - pc=0x39600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_39600() throws ExecutionException { /* 0x39600 - 0x39800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x39600: - /* Next insn is delay slot */ - pc=0x3951c; - run_39400(); return; - case 0x3960c: - r5 = readPages[(r17+28)>>>12][((r17+28)>>>2)&0x3ff]; + pc=0x4a11c; + continue; + case 0x4a20c: + r5= page[(r17+28)>>>2]; r6 = r0 + r0; r4 = r19 + r0; r7 = r0 + 1; - /* Next insn is delay slot */ pc=r3; - r31=0x39624; + r31=0x4a224; return; - case 0x39624: + case 0x4a224: r6 = r2 + r0; r2 = r0 + -1; if(r6 == r2) { - /* Next insn is delay slot */ - pc=0x39690; + pc=0x4a290; continue; } - case 0x39634: + case 0x4a234: addr=r17+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; - r3 = readPages[(r17+40)>>>12][((r17+40)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x39470; - run_39400(); return; - case 0x39644: - r3 = readPages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff]; + r3= page[(r17+40)>>>2]; + pc=0x4a070; + continue; + case 0x4a244: + r3= page[(r19+0)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x394c4; - run_39400(); return; + pc=0x4a0c4; + continue; } r2 = r0 + 29; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x3966c; + pc=0x4a26c; continue; } r2 = r0 + 22; if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x395b8; - run_39400(); return; + pc=0x4a1b8; + continue; } - case 0x3966c: + case 0x4a26c: addr=r17+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; - writePages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff] = r0; + page[(r17+4)>>>2] = r0; r2 = r2 & 63487; addr=r17+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r17+16)>>>12][((r17+16)>>>2)&0x3ff]; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x394f0; - run_39400(); return; - case 0x39690: - r2 = readPages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r2= page[(r17+16)>>>2]; + page[(r17+0)>>>2] = r2; + pc=0x4a0f0; + continue; + case 0x4a290: + r2= page[(r19+0)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x39634; + pc=0x4a234; continue; } r3 = r0 + 29; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x396b8; + pc=0x4a2b8; continue; } r3 = r0 + 22; if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x395b8; - run_39400(); return; + pc=0x4a1b8; + continue; } - case 0x396b8: - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = r16; + case 0x4a2b8: + page[(r19+0)>>>2] = r16; r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x39520; - run_39400(); return; - case 0x396c8: - writePages[(r17+80)>>>12][((r17+80)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x394f0; - run_39400(); return; - case 0x39800: - pc=0x39800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_39800() throws ExecutionException { /* 0x39800 - 0x39a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x39800: + pc=0x4a120; + continue; + case 0x4a2c8: + page[(r17+80)>>>2] = r2; + pc=0x4a0f0; + continue; + case 0x4a400: r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; + page[(r29+24)>>>2] = r16; + page[(r29+28)>>>2] = r31; r16 = r4 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x39828; + pc=0x4a428; continue; } - r2 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; + r2= page[(r4+56)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x39868; + pc=0x4a468; continue; } - case 0x39828: + case 0x4a428: addr=r5+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r2 = tmp; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x39850; + pc=0x4a450; continue; } - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + r31= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; r2 = r0 + r0; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x39850: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + case 0x4a450: + r31= page[(r29+28)>>>2]; r4 = r16 + r0; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + r16= page[(r29+24)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x39400; - run_39400(); return; - case 0x39868: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - r31=0x39874; - pc=0x3a600; - run_3a600(); return; - case 0x39874: - r5 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x39828; + pc=0x4a000; continue; - case 0x39a00: - pc=0x39a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_39a00() throws ExecutionException { /* 0x39a00 - 0x39c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x39a00: + case 0x4a468: + page[(r29+16)>>>2] = r5; + r31=0x4a474; + pc=0x4ac00; + run_4a800(); return; + case 0x4a474: + r5= page[(r29+16)>>>2]; + pc=0x4a428; + continue; + case 0x4a600: r5 = r4 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x39a18; + pc=0x4a618; continue; } - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x39800; - run_39800(); return; - case 0x39a18: - r5 = 4 << 16; - r4 = readPages[(r28+-31076)>>>12][((r28+-31076)>>>2)&0x3ff]; - r5 = r5 + -26624; - /* Next insn is delay slot */ - pc=0x3d800; - run_3d800(); return; - case 0x39c00: - pc=0x39c00; + r4= page[(r28+-31512)>>>2]; + pc=0x4a400; + continue; + case 0x4a618: + r5 = 5 << 16; + r4= page[(r28+-31516)>>>2]; + r5 = r5 + -23552; + pc=0x4d200; + run_4d000(); return; + case 0x4a800: + pc=0x4a800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_39c00() throws ExecutionException { /* 0x39c00 - 0x39e00 */ + private final void run_4a800() throws ExecutionException { /* 0x4a800 - 0x4b000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x39c00: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x39e00: - pc=0x39e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_39e00() throws ExecutionException { /* 0x39e00 - 0x3a000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x39e00: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x3a000: - pc=0x3a000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3a000() throws ExecutionException { /* 0x3a000 - 0x3a200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3a000: - r5 = 4 << 16; - r5 = r5 + -28160; - /* Next insn is delay slot */ - pc=0x3d600; - run_3d600(); return; - case 0x3a200: - pc=0x3a200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3a200() throws ExecutionException { /* 0x3a200 - 0x3a400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3a200: + case 0x4a800: + r5 = 5 << 16; + r5 = r5 + -25088; + pc=0x4d000; + run_4d000(); return; + case 0x4aa00: r29 = r29 + -32; r2 = r5 << 2; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; + page[(r29+24)>>>2] = r18; r18 = r5 << 4; r18 = r18 - r2; r18 = r18 + r5; r18 = r18 << 3; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; + page[(r29+20)>>>2] = r17; r17 = r5 + r0; r5 = r18 + 12; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x3a238; - pc=0x3ec00; - run_3ec00(); return; - case 0x3a238: + page[(r29+16)>>>2] = r16; + page[(r29+28)>>>2] = r31; + r31=0x4aa38; + pc=0x4e200; + run_4e000(); return; + case 0x4aa38: r16 = r2 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3a264; + pc=0x4aa64; continue; } r4 = r2 + 12; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r0; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r17; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r4; + page[(r2+0)>>>2] = r0; + page[(r2+4)>>>2] = r17; + page[(r2+8)>>>2] = r4; r5 = r0 + r0; r6 = r18 + r0; - /* Next insn is delay slot */ - r31=0x3a264; - pc=0x48fec; - run_48e00(); return; - case 0x3a264: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + r31=0x4aa64; + pc=0x56ff0; + run_56800(); return; + case 0x4aa64: + r31= page[(r29+28)>>>2]; r2 = r16 + r0; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x3a400: - pc=0x3a400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3a400() throws ExecutionException { /* 0x3a400 - 0x3a600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3a400: - r5 = 4 << 16; - r4 = readPages[(r28+-31076)>>>12][((r28+-31076)>>>2)&0x3ff]; - r5 = r5 + -28160; - /* Next insn is delay slot */ - pc=0x3d600; - run_3d600(); return; - case 0x3a600: - pc=0x3a600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3a600() throws ExecutionException { /* 0x3a600 - 0x3a800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3a600: - r2 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; + case 0x4ac00: + r2= page[(r4+56)>>>2]; r29 = r29 + -48; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r22; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r21; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; + page[(r29+20)>>>2] = r17; + page[(r29+44)>>>2] = r31; + page[(r29+40)>>>2] = r22; + page[(r29+36)>>>2] = r21; + page[(r29+32)>>>2] = r20; + page[(r29+28)>>>2] = r19; + page[(r29+24)>>>2] = r18; + page[(r29+16)>>>2] = r16; r17 = r4 + r0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3a77c; + pc=0x4ad7c; continue; } - r2 = 4 << 16; - r2 = r2 + -24576; - writePages[(r4+60)>>>12][((r4+60)>>>2)&0x3ff] = r2; + r2 = 5 << 16; + r2 = r2 + -22528; + page[(r4+60)>>>2] = r2; r2 = r0 + 3; - r16 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - writePages[(r4+740)>>>12][((r4+740)>>>2)&0x3ff] = r2; + r16= page[(r4+4)>>>2]; + page[(r4+740)>>>2] = r2; r2 = r4 + 748; - writePages[(r4+744)>>>12][((r4+744)>>>2)&0x3ff] = r2; + page[(r4+744)>>>2] = r2; r22 = r0 + 1; r2 = r0 + 4; - r21 = 4 << 16; - r20 = 4 << 16; - r19 = 4 << 16; - r18 = 4 << 16; - writePages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff] = r22; - writePages[(r4+736)>>>12][((r4+736)>>>2)&0x3ff] = r0; - r21 = r21 + 8704; + r21 = 5 << 16; + r20 = 5 << 16; + r19 = 5 << 16; + r18 = 5 << 16; + page[(r4+56)>>>2] = r22; + page[(r4+736)>>>2] = r0; + r21 = r21 + 3584; r4 = r16 + 92; - r20 = r20 + 9728; - r19 = r19 + 10240; - r18 = r18 + 10752; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r0; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r0; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r0; + r20 = r20 + 4096; + r19 = r19 + 4608; + r18 = r18 + 5120; + page[(r16+0)>>>2] = r0; + page[(r16+4)>>>2] = r0; + page[(r16+8)>>>2] = r0; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff] = r0; + page[(addr)>>>2] = tmp; + page[(r16+100)>>>2] = r0; addr=r16+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r0&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r0; - writePages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff] = r0; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r0; + page[(addr)>>>2] = tmp; + page[(r16+16)>>>2] = r0; + page[(r16+20)>>>2] = r0; + page[(r16+24)>>>2] = r0; r5 = r0 + r0; r6 = r0 + 8; - /* Next insn is delay slot */ - r31=0x3a6bc; - pc=0x48fec; - run_48e00(); return; - case 0x3a6bc: - writePages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff] = r16; - writePages[(r16+32)>>>12][((r16+32)>>>2)&0x3ff] = r21; - writePages[(r16+36)>>>12][((r16+36)>>>2)&0x3ff] = r20; - writePages[(r16+40)>>>12][((r16+40)>>>2)&0x3ff] = r19; - writePages[(r16+44)>>>12][((r16+44)>>>2)&0x3ff] = r18; - r16 = readPages[(r17+8)>>>12][((r17+8)>>>2)&0x3ff]; + r31=0x4acbc; + pc=0x56ff0; + run_56800(); return; + case 0x4acbc: + page[(r16+28)>>>2] = r16; + page[(r16+32)>>>2] = r21; + page[(r16+36)>>>2] = r20; + page[(r16+40)>>>2] = r19; + page[(r16+44)>>>2] = r18; + r16= page[(r17+8)>>>2]; r2 = r0 + 8; r4 = r16 + 92; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r0; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r0; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r0; + page[(r16+0)>>>2] = r0; + page[(r16+4)>>>2] = r0; + page[(r16+8)>>>2] = r0; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff] = r0; + page[(addr)>>>2] = tmp; + page[(r16+100)>>>2] = r0; addr=r16+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r22&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r0; - writePages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff] = r0; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r0; + page[(addr)>>>2] = tmp; + page[(r16+16)>>>2] = r0; + page[(r16+20)>>>2] = r0; + page[(r16+24)>>>2] = r0; r5 = r0 + r0; r6 = r0 + 8; - /* Next insn is delay slot */ - r31=0x3a710; - pc=0x48fec; - run_48e00(); return; - case 0x3a710: - writePages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff] = r16; - writePages[(r16+32)>>>12][((r16+32)>>>2)&0x3ff] = r21; - writePages[(r16+36)>>>12][((r16+36)>>>2)&0x3ff] = r20; - writePages[(r16+40)>>>12][((r16+40)>>>2)&0x3ff] = r19; - writePages[(r16+44)>>>12][((r16+44)>>>2)&0x3ff] = r18; - r16 = readPages[(r17+12)>>>12][((r17+12)>>>2)&0x3ff]; + r31=0x4ad10; + pc=0x56ff0; + run_56800(); return; + case 0x4ad10: + page[(r16+28)>>>2] = r16; + page[(r16+32)>>>2] = r21; + page[(r16+36)>>>2] = r20; + page[(r16+40)>>>2] = r19; + page[(r16+44)>>>2] = r18; + r16= page[(r17+12)>>>2]; r2 = r0 + 18; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r0 + 2; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r0; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r0; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r0; - writePages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff] = r0; + page[(r16+0)>>>2] = r0; + page[(r16+4)>>>2] = r0; + page[(r16+8)>>>2] = r0; + page[(r16+100)>>>2] = r0; addr=r16+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r0; - writePages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff] = r0; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r0; + page[(addr)>>>2] = tmp; + page[(r16+16)>>>2] = r0; + page[(r16+20)>>>2] = r0; + page[(r16+24)>>>2] = r0; r4 = r16 + 92; r5 = r0 + r0; r6 = r0 + 8; - /* Next insn is delay slot */ - r31=0x3a768; - pc=0x48fec; - run_48e00(); return; - case 0x3a768: - writePages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff] = r16; - writePages[(r16+32)>>>12][((r16+32)>>>2)&0x3ff] = r21; - writePages[(r16+36)>>>12][((r16+36)>>>2)&0x3ff] = r20; - writePages[(r16+40)>>>12][((r16+40)>>>2)&0x3ff] = r19; - writePages[(r16+44)>>>12][((r16+44)>>>2)&0x3ff] = r18; - case 0x3a77c: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + r31=0x4ad68; + pc=0x56ff0; + run_56800(); return; + case 0x4ad68: + page[(r16+28)>>>2] = r16; + page[(r16+32)>>>2] = r21; + page[(r16+36)>>>2] = r20; + page[(r16+40)>>>2] = r19; + page[(r16+44)>>>2] = r18; + case 0x4ad7c: + r31= page[(r29+44)>>>2]; + r22= page[(r29+40)>>>2]; + r21= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x3a800: - pc=0x3a800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3a800() throws ExecutionException { /* 0x3a800 - 0x3aa00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3a800: + case 0x4ae00: r29 = r29 + -40; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - r18 = readPages[(r28+-31076)>>>12][((r28+-31076)>>>2)&0x3ff]; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - r2 = readPages[(r18+56)>>>12][((r18+56)>>>2)&0x3ff]; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; + page[(r29+28)>>>2] = r18; + r18= page[(r28+-31516)>>>2]; + page[(r29+32)>>>2] = r19; + r2= page[(r18+56)>>>2]; + page[(r29+36)>>>2] = r31; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; r19 = r4 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3a900; + pc=0x4af00; continue; } - case 0x3a82c: + case 0x4ae2c: r18 = r18 + 736; r17 = r0 + -1; - case 0x3a834: - r2 = readPages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff]; - r16 = readPages[(r18+8)>>>12][((r18+8)>>>2)&0x3ff]; + case 0x4ae34: + r2= page[(r18+4)>>>2]; + r16= page[(r18+8)>>>2]; r2 = r2 + -1; if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x3a860; + pc=0x4ae60; continue; } - /* Next insn is delay slot */ - pc=0x3a8e4; + pc=0x4aee4; continue; - case 0x3a850: + case 0x4ae50: r2 = r2 + -1; r16 = r16 + 104; if(r2 == r17) { - /* Next insn is delay slot */ - pc=0x3a8e4; + pc=0x4aee4; continue; } - case 0x3a860: + case 0x4ae60: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r3 = tmp; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3a850; + pc=0x4ae50; continue; } r2 = r0 + -1; addr=r16+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r0 + 1; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff] = r0; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r0; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r0; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r0; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r0; - writePages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff] = r0; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r0; + page[(addr)>>>2] = tmp; + page[(r16+100)>>>2] = r0; + page[(r16+0)>>>2] = r0; + page[(r16+8)>>>2] = r0; + page[(r16+4)>>>2] = r0; + page[(r16+16)>>>2] = r0; + page[(r16+20)>>>2] = r0; + page[(r16+24)>>>2] = r0; r4 = r16 + 92; r5 = r0 + r0; r6 = r0 + 8; - /* Next insn is delay slot */ - r31=0x3a8b0; - pc=0x48fec; - run_48e00(); return; - case 0x3a8b0: - writePages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff] = r0; - writePages[(r16+52)>>>12][((r16+52)>>>2)&0x3ff] = r0; - writePages[(r16+68)>>>12][((r16+68)>>>2)&0x3ff] = r0; - writePages[(r16+72)>>>12][((r16+72)>>>2)&0x3ff] = r0; + r31=0x4aeb0; + pc=0x56ff0; + run_56800(); return; + case 0x4aeb0: + page[(r16+48)>>>2] = r0; + page[(r16+52)>>>2] = r0; + page[(r16+68)>>>2] = r0; + page[(r16+72)>>>2] = r0; r2 = r16 + r0; - case 0x3a8c4: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + case 0x4aec4: + r31= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r29 = r29 + 40; - /* Next insn is delay slot */ pc=r31; return; - case 0x3a8e4: - r2 = readPages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff]; + case 0x4aee4: + r2= page[(r18+0)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3a914; + pc=0x4af14; continue; } - case 0x3a8f4: + case 0x4aef4: r18 = r2 + r0; - /* Next insn is delay slot */ - pc=0x3a834; + pc=0x4ae34; continue; - case 0x3a900: + case 0x4af00: r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x3a90c; - pc=0x3a600; - run_3a600(); return; - case 0x3a90c: - /* Next insn is delay slot */ - pc=0x3a82c; + r31=0x4af0c; + pc=0x4ac00; continue; - case 0x3a914: + case 0x4af0c: + pc=0x4ae2c; + continue; + case 0x4af14: r4 = r19 + r0; r5 = r0 + 4; - /* Next insn is delay slot */ - r31=0x3a924; - pc=0x3a200; - run_3a200(); return; - case 0x3a924: - writePages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff] = r2; + r31=0x4af24; + pc=0x4aa00; + continue; + case 0x4af24: + page[(r18+0)>>>2] = r2; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3a8f4; + pc=0x4aef4; continue; } r2 = r0 + 12; - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = r2; + page[(r19+0)>>>2] = r2; r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x3a8c4; + pc=0x4aec4; continue; - case 0x3aa00: - pc=0x3aa00; + case 0x4b000: + pc=0x4b000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_3aa00() throws ExecutionException { /* 0x3aa00 - 0x3ac00 */ + private final void run_4b000() throws ExecutionException { /* 0x4b000 - 0x4b800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x3aa00: - /* Next insn is delay slot */ + case 0x4b000: pc=r31; return; - case 0x3ac00: - pc=0x3ac00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3ac00() throws ExecutionException { /* 0x3ac00 - 0x3ae00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3ac00: - /* Next insn is delay slot */ + case 0x4b200: pc=r31; return; - case 0x3ae00: - pc=0x3ae00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3ae00() throws ExecutionException { /* 0x3ae00 - 0x3b000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3ae00: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x3b000: - pc=0x3b000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3b000() throws ExecutionException { /* 0x3b000 - 0x3b200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3b000: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x3b200: - pc=0x3b200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3b200() throws ExecutionException { /* 0x3b200 - 0x3b400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3b200: - r5 = 4 << 16; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r5 + -25600; - /* Next insn is delay slot */ - pc=0x3d600; - run_3d600(); return; - case 0x3b400: - pc=0x3b400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3b400() throws ExecutionException { /* 0x3b400 - 0x3b600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3b400: - r5 = 4 << 16; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r5 + -25088; - /* Next insn is delay slot */ - pc=0x3d600; - run_3d600(); return; - case 0x3b600: - pc=0x3b600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3b600() throws ExecutionException { /* 0x3b600 - 0x3b800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3b600: + case 0x4b400: r29 = r29 + -48; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r19; + page[(r29+40)>>>2] = r19; r19 = r5 + r0; r5 = r6 + r0; r6 = r29 + 16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r18; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r17; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r16; + page[(r29+36)>>>2] = r18; + page[(r29+32)>>>2] = r17; + page[(r29+44)>>>2] = r31; + page[(r29+28)>>>2] = r16; r18 = r4 + r0; - /* Next insn is delay slot */ - r31=0x3b630; - pc=0x59600; - run_59600(); return; - case 0x3b630: + r31=0x4b430; + pc=0x59c00; + run_59800(); return; + case 0x4b430: r17 = r2 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3b6f4; + pc=0x4b4f4; continue; } r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x3b648; - pc=0x3a800; - run_3a800(); return; - case 0x3b648: + r31=0x4b448; + pc=0x4ae00; + run_4a800(); return; + case 0x4b448: r16 = r2 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3b6f4; + pc=0x4b4f4; continue; } - r6 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + r6= page[(r29+16)>>>2]; r4 = r18 + r0; r5 = r19 + r0; r7 = r0 + 438; - /* Next insn is delay slot */ - r31=0x3b66c; - pc=0x48820; - run_48800(); return; - case 0x3b66c: + r31=0x4b46c; + pc=0x56e10; + run_56800(); return; + case 0x4b46c: if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x3b6e0; + pc=0x4b4e0; continue; } addr=r16+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = 4 << 16; - r2 = r2 + 8704; - writePages[(r16+32)>>>12][((r16+32)>>>2)&0x3ff] = r2; - r2 = 4 << 16; - r2 = r2 + 9728; - writePages[(r16+36)>>>12][((r16+36)>>>2)&0x3ff] = r2; - r2 = 4 << 16; - r2 = r2 + 10240; - writePages[(r16+40)>>>12][((r16+40)>>>2)&0x3ff] = r2; - r2 = 4 << 16; + page[(addr)>>>2] = tmp; + r2 = 5 << 16; + r2 = r2 + 3584; + page[(r16+32)>>>2] = r2; + r2 = 5 << 16; + r2 = r2 + 4096; + page[(r16+36)>>>2] = r2; + r2 = 5 << 16; + r2 = r2 + 4608; + page[(r16+40)>>>2] = r2; + r2 = 5 << 16; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r17&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r2 + 10752; + page[(addr)>>>2] = tmp; + r2 = r2 + 5120; r17 = r17 & 256; - writePages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff] = r16; - writePages[(r16+44)>>>12][((r16+44)>>>2)&0x3ff] = r2; + page[(r16+28)>>>2] = r16; + page[(r16+44)>>>2] = r2; if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x3b718; + pc=0x4b518; continue; } - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + r31= page[(r29+44)>>>2]; r2 = r16 + r0; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + r19= page[(r29+40)>>>2]; + r18= page[(r29+36)>>>2]; + r17= page[(r29+32)>>>2]; + r16= page[(r29+28)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x3b6e0: - /* Next insn is delay slot */ - r31=0x3b6e8; - pc=0x3aa00; - run_3aa00(); return; - case 0x3b6e8: + case 0x4b4e0: + r31=0x4b4e8; + pc=0x4b000; + continue; + case 0x4b4e8: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r0&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x3b6f4; - pc=0x3ac00; - run_3ac00(); return; - case 0x3b6f4: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r31=0x4b4f4; + pc=0x4b200; + continue; + case 0x4b4f4: + r31= page[(r29+44)>>>2]; + r19= page[(r29+40)>>>2]; + r18= page[(r29+36)>>>2]; + r17= page[(r29+32)>>>2]; + r16= page[(r29+28)>>>2]; r2 = r0 + r0; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x3b718: + case 0x4b518: r4 = r18 + r0; r5 = r16 + r0; r6 = r0 + r0; r7 = r0 + 2; - /* Next insn is delay slot */ - r31=0x3b730; - pc=0x3ce00; - run_3ce00(); return; - case 0x3b730: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + r31=0x4b530; + pc=0x4c800; + run_4c800(); return; + case 0x4b530: + r31= page[(r29+44)>>>2]; r2 = r16 + r0; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + r19= page[(r29+40)>>>2]; + r18= page[(r29+36)>>>2]; + r17= page[(r29+32)>>>2]; + r16= page[(r29+28)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x3b800: - pc=0x3b800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3b800() throws ExecutionException { /* 0x3b800 - 0x3ba00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3b800: + case 0x4b600: r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; + r4= page[(r28+-31512)>>>2]; r6 = r5 + r0; r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x3b600; - run_3b600(); return; - case 0x3ba00: - pc=0x3ba00; + pc=0x4b400; + continue; + case 0x4b800: + pc=0x4b800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_3ba00() throws ExecutionException { /* 0x3ba00 - 0x3bc00 */ + private final void run_4b800() throws ExecutionException { /* 0x4b800 - 0x4c000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x3ba00: - r29 = r29 + -32; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r7; - r7 = r29 + 44; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x3ba1c; - pc=0x45c00; - run_45c00(); return; - case 0x3ba1c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x3bc00: - pc=0x3bc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3bc00() throws ExecutionException { /* 0x3bc00 - 0x3be00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3bc00: + case 0x4b800: r29 = r29 + -32; r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r6; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r7; + r4= page[(r28+-31512)>>>2]; + page[(r29+40)>>>2] = r6; + page[(r29+44)>>>2] = r7; r6 = r5 + r0; r7 = r29 + 40; r5 = r2 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x3bc30; - pc=0x45c00; - run_45c00(); return; - case 0x3bc30: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + page[(r29+28)>>>2] = r31; + page[(r29+16)>>>2] = r7; + r31=0x4b830; + pc=0x54600; + run_54000(); return; + case 0x4b830: + r31= page[(r29+28)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x3be00: - pc=0x3be00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3be00() throws ExecutionException { /* 0x3be00 - 0x3c000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3be00: + case 0x4ba00: r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; + page[(r29+24)>>>2] = r16; r16 = r4 + r0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3be40; - continue; - } - r2 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3be40; - continue; - } - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r5; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - r31=0x3be38; - pc=0x3a600; - run_3a600(); return; - case 0x3be38: - r6 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r5 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - case 0x3be40: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r4 = r16 + r0; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x3fe00; - run_3fe00(); return; - case 0x3c000: - pc=0x3c000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3c000() throws ExecutionException { /* 0x3c000 - 0x3c200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3c000: - r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - r16 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; + r4= page[(r28+-31512)>>>2]; + page[(r29+28)>>>2] = r31; r6 = r5 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3c05c; + pc=0x4ba5c; continue; } - r3 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; + r3= page[(r4+56)>>>2]; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3c044; + pc=0x4ba44; continue; } - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - r31=0x3c03c; - pc=0x3a600; - run_3a600(); return; - case 0x3c03c: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - case 0x3c044: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + page[(r29+16)>>>2] = r5; + r31=0x4ba3c; + pc=0x4ac00; + run_4a800(); return; + case 0x4ba3c: + r4= page[(r28+-31512)>>>2]; + r6= page[(r29+16)>>>2]; + case 0x4ba44: + r31= page[(r29+28)>>>2]; r5 = r16 + r0; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + r16= page[(r29+24)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x3fe00; - run_3fe00(); return; - case 0x3c05c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + pc=0x4f400; + run_4f000(); return; + case 0x4ba5c: + r31= page[(r29+28)>>>2]; r5 = r16 + r0; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + r16= page[(r29+24)>>>2]; r4 = r0 + r0; r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x3fe00; - run_3fe00(); return; - case 0x3c200: - pc=0x3c200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3c200() throws ExecutionException { /* 0x3c200 - 0x3c400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3c200: - { long hilo = (r7) * r6; hi = (int) (hilo >>> 32); lo = (int) hilo; } + pc=0x4f400; + run_4f000(); return; + case 0x4bc00: + { long hilo = (long)(r7) * ((long)r6); hi = (int) (hilo >>> 32); lo = (int) hilo; } r29 = r29 + -64; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r21; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r23; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r22; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r30; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r20; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r19; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; + page[(r29+44)>>>2] = r21; + page[(r29+52)>>>2] = r23; + page[(r29+48)>>>2] = r22; + page[(r29+24)>>>2] = r16; + page[(r29+60)>>>2] = r31; + page[(r29+56)>>>2] = r30; + page[(r29+40)>>>2] = r20; + page[(r29+36)>>>2] = r19; + page[(r29+32)>>>2] = r18; + page[(r29+28)>>>2] = r17; r21 = lo; r22 = r6 + r0; r23 = r7 + r0; - r16 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; + r16= page[(r29+80)>>>2]; if(r21 == r0) { - /* Next insn is delay slot */ - pc=0x3c380; + pc=0x4bd80; continue; } r20 = r4 + r0; r18 = r5 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3c268; + pc=0x4bc68; continue; } - r2 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; + r2= page[(r4+56)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3c4b8; - run_3c400(); return; + pc=0x4beb8; + continue; } - case 0x3c268: + case 0x4bc68: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r3 = tmp; r2 = r3 & 65535; r4 = r2 & 8192; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x3c29c; + pc=0x4bc9c; continue; } - case 0x3c280: - r4 = readPages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff]; + case 0x4bc80: + r4= page[(r16+100)>>>2]; r2 = r3 | 8192; r3 = r0 + -8193; r3 = r4 & r3; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff] = r3; + page[(addr)>>>2] = tmp; + page[(r16+100)>>>2] = r3; r2 = r2 & 65535; - case 0x3c29c: - r17 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + case 0x4bc9c: + r17= page[(r16+4)>>>2]; if(r17 < 0) { - /* Next insn is delay slot */ - pc=0x3c3a8; + pc=0x4bda8; continue; } r2 = r2 & 2; r3 = r17 + r0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3c3c0; + pc=0x4bdc0; continue; } - case 0x3c2bc: + case 0x4bcbc: r19 = r21 + r0; - /* Next insn is delay slot */ - pc=0x3c308; + pc=0x4bd08; continue; - case 0x3c2c8: + case 0x4bcc8: r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x3c2d4; - pc=0x48fdc; - run_48e00(); return; - case 0x3c2d4: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + r31=0x4bcd4; + pc=0x56fe0; + run_56800(); return; + case 0x4bcd4: + r2= page[(r16+0)>>>2]; r4 = r20 + r0; r2 = r2 + r17; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; + page[(r16+0)>>>2] = r2; r5 = r16 + r0; r18 = r18 + r17; r19 = r19 - r17; - /* Next insn is delay slot */ - r31=0x3c2f8; - pc=0x41200; - run_41200(); return; - case 0x3c2f8: + r31=0x4bcf8; + pc=0x50600; + run_50000(); return; + case 0x4bcf8: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3c38c; + pc=0x4bd8c; continue; } - r17 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - case 0x3c308: + r17= page[(r16+4)>>>2]; + case 0x4bd08: r3 = ((r17 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; r4 = r18 + r0; - r5 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + r5= page[(r16+0)>>>2]; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3c2c8; + pc=0x4bcc8; continue; } r6 = r19 + r0; - /* Next insn is delay slot */ - r31=0x3c328; - pc=0x48fdc; - run_48e00(); return; - case 0x3c328: - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + r31=0x4bd28; + pc=0x56fe0; + run_56800(); return; + case 0x4bd28: + r2= page[(r16+4)>>>2]; r2 = r2 - r19; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + page[(r16+4)>>>2] = r2; + r2= page[(r16+0)>>>2]; r19 = r2 + r19; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r19; - case 0x3c348: + page[(r16+0)>>>2] = r19; + case 0x4bd48: r2 = r23 + r0; - case 0x3c34c: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r30 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r23 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r22 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r21 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r20 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r19 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + case 0x4bd4c: + r31= page[(r29+60)>>>2]; + r30= page[(r29+56)>>>2]; + r23= page[(r29+52)>>>2]; + r22= page[(r29+48)>>>2]; + r21= page[(r29+44)>>>2]; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; r29 = r29 + 64; - /* Next insn is delay slot */ pc=r31; return; - case 0x3c380: + case 0x4bd80: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x3c34c; + pc=0x4bd4c; continue; - case 0x3c38c: + case 0x4bd8c: r2 = r21 - r19; if(r22 != r0) { - /* Next insn is delay slot */ if(r22!=0) { hi = (int)((r2 & 0xffffffffL) % (r22 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r22 & 0xffffffffL)); } - pc=0x3c39c; + pc=0x4bd9c; continue; } if(r22!=0) { hi = (int)((r2 & 0xffffffffL) % (r22 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r22 & 0xffffffffL)); } throw new ExecutionException("Break"); - case 0x3c39c: + case 0x4bd9c: r2 = lo; - /* Next insn is delay slot */ - pc=0x3c34c; + pc=0x4bd4c; continue; - case 0x3c3a8: + case 0x4bda8: r2 = r2 & 2; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r0; + page[(r16+4)>>>2] = r0; r3 = r0 + r0; r17 = r0 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3c2bc; + pc=0x4bcbc; continue; } - case 0x3c3c0: + case 0x4bdc0: r2 = ((r21 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; r17 = r3 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3c3d4; + pc=0x4bdd4; continue; } r17 = r21 + r0; - case 0x3c3d4: - r5 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + case 0x4bdd4: + r5= page[(r16+0)>>>2]; r4 = r18 + r0; r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x3c3e8; - pc=0x48fdc; - run_48e00(); return; - case 0x3c3e8: - r19 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r5 = readPages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff]; + r31=0x4bde8; + pc=0x56fe0; + run_56800(); return; + case 0x4bde8: + r19= page[(r16+0)>>>2]; + r2= page[(r16+4)>>>2]; + r5= page[(r16+48)>>>2]; r19 = r19 + r17; r2 = r2 - r17; r18 = r18 + r17; - case 0x3c400: - pc=0x3c400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3c400() throws ExecutionException { /* 0x3c400 - 0x3c600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3c400: - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r19; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; + page[(r16+0)>>>2] = r19; + page[(r16+4)>>>2] = r2; r17 = r21 - r17; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x3c4e0; + pc=0x4bee0; continue; } if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x3c348; - run_3c200(); return; + pc=0x4bd48; + continue; } r2 = r16 + 64; if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x3c438; + pc=0x4be38; continue; } r4 = r20 + r0; - /* Next insn is delay slot */ - r31=0x3c434; - pc=0x3ca00; - run_3ca00(); return; - case 0x3c434: - r19 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - case 0x3c438: - writePages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff] = r0; - case 0x3c43c: - r3 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - r30 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x3c458; + r31=0x4be34; + pc=0x4c400; + run_4c000(); return; + case 0x4be34: + r19= page[(r16+0)>>>2]; + case 0x4be38: + page[(r16+48)>>>2] = r0; + case 0x4be3c: + r3= page[(r16+16)>>>2]; + r30= page[(r16+20)>>>2]; + page[(r29+16)>>>2] = r3; + pc=0x4be58; continue; - case 0x3c450: + case 0x4be50: if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x3c348; - run_3c200(); return; + pc=0x4bd48; + continue; } - case 0x3c458: - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r18; - writePages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff] = r17; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r18; + case 0x4be58: + page[(r16+16)>>>2] = r18; + page[(r16+20)>>>2] = r17; + page[(r16+0)>>>2] = r18; r4 = r20 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x3c474; - pc=0x41200; - run_41200(); return; - case 0x3c474: - r4 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - writePages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff] = r30; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r3; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r19; + r31=0x4be74; + pc=0x50600; + run_50000(); return; + case 0x4be74: + r4= page[(r16+4)>>>2]; + r3= page[(r29+16)>>>2]; + page[(r16+20)>>>2] = r30; + page[(r16+16)>>>2] = r3; + page[(r16+0)>>>2] = r19; r17 = r17 - r4; r18 = r18 + r4; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r0; + page[(r16+4)>>>2] = r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3c450; + pc=0x4be50; continue; } r2 = r21 - r17; if(r22 != r0) { - /* Next insn is delay slot */ if(r22!=0) { hi = (int)((r2 & 0xffffffffL) % (r22 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r22 & 0xffffffffL)); } - pc=0x3c4ac; + pc=0x4beac; continue; } if(r22!=0) { hi = (int)((r2 & 0xffffffffL) % (r22 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r22 & 0xffffffffL)); } throw new ExecutionException("Break"); - case 0x3c4ac: + case 0x4beac: r2 = lo; - /* Next insn is delay slot */ - pc=0x3c34c; - run_3c200(); return; - case 0x3c4b8: - /* Next insn is delay slot */ - r31=0x3c4c0; - pc=0x3a600; - run_3a600(); return; - case 0x3c4c0: + pc=0x4bd4c; + continue; + case 0x4beb8: + r31=0x4bec0; + pc=0x4ac00; + run_4a800(); return; + case 0x4bec0: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r3 = tmp; r2 = r3 & 65535; r4 = r2 & 8192; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x3c29c; - run_3c200(); return; - } - /* Next insn is delay slot */ - pc=0x3c280; - run_3c200(); return; - case 0x3c4e0: - if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x3c43c; + pc=0x4bc9c; continue; } - /* Next insn is delay slot */ - pc=0x3c348; - run_3c200(); return; - case 0x3c600: - pc=0x3c600; + pc=0x4bc80; + continue; + case 0x4bee0: + if(r17 != r0) { + pc=0x4be3c; + continue; + } + pc=0x4bd48; + continue; + case 0x4c000: + pc=0x4c000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_3c600() throws ExecutionException { /* 0x3c600 - 0x3c800 */ + private final void run_4c000() throws ExecutionException { /* 0x4c000 - 0x4c800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x3c600: + case 0x4c000: r29 = r29 + -32; r8 = r4 + r0; r3 = r5 + r0; r2 = r6 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; + r4= page[(r28+-31512)>>>2]; r5 = r8 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; + page[(r29+16)>>>2] = r7; r6 = r3 + r0; r7 = r2 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x3c630; - pc=0x3c200; - run_3c200(); return; - case 0x3c630: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + page[(r29+28)>>>2] = r31; + r31=0x4c030; + pc=0x4bc00; + run_4b800(); return; + case 0x4c030: + r31= page[(r29+28)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x3c800: - pc=0x3c800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3c800() throws ExecutionException { /* 0x3c800 - 0x3ca00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3c800: + case 0x4c200: r29 = r29 + -40; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - r18 = 7 << 16; + page[(r29+24)>>>2] = r18; + page[(r29+20)>>>2] = r17; + r18 = 6 << 16; r17 = r4 + r0; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; + page[(r29+36)>>>2] = r31; + page[(r29+32)>>>2] = r20; + page[(r29+28)>>>2] = r19; r20 = r5 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - r18 = r18 + 11104; - /* Next insn is delay slot */ - r31=0x3c834; - pc=0x48b80; - run_48a00(); return; - case 0x3c834: + page[(r29+16)>>>2] = r16; + r18 = r18 + 25176; + r31=0x4c234; + pc=0x56fd0; + run_56800(); return; + case 0x4c234: r4 = r17 + r0; r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x3c844; - pc=0x3f600; - run_3f600(); return; - case 0x3c844: - r2 = readPages[(r18+8)>>>12][((r18+8)>>>2)&0x3ff]; - r19 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; + r31=0x4c244; + pc=0x4ee00; + run_4e800(); return; + case 0x4c244: + r2= page[(r18+8)>>>2]; + r19= page[(r2+4)>>>2]; r2 = r0 + -4; r19 = r19 & r2; r5 = r19 - r20; r5 = r5 + -17; r5 = r5 + r16; if(r16 != r0) { - /* Next insn is delay slot */ if(r16!=0) { hi = (int)((r5 & 0xffffffffL) % (r16 & 0xffffffffL)); lo = (int)((r5 & 0xffffffffL) / (r16 & 0xffffffffL)); } - pc=0x3c870; + pc=0x4c270; continue; } if(r16!=0) { hi = (int)((r5 & 0xffffffffL) % (r16 & 0xffffffffL)); lo = (int)((r5 & 0xffffffffL) / (r16 & 0xffffffffL)); } throw new ExecutionException("Break"); - case 0x3c870: + case 0x4c270: r20 = lo; r20 = r20 + -1; - { long hilo = (r20) * r16; hi = (int) (hilo >>> 32); lo = (int) hilo; } + { long hilo = (long)(r20) * ((long)r16); hi = (int) (hilo >>> 32); lo = (int) hilo; } r20 = lo; r16 = r20 < r16 ? 1 : 0; if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x3c8b4; + pc=0x4c2b4; continue; } r4 = r17 + r0; r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x3c8a0; - pc=0x48920; - run_48800(); return; - case 0x3c8a0: - r3 = readPages[(r18+8)>>>12][((r18+8)>>>2)&0x3ff]; + r31=0x4c2a0; + pc=0x56f10; + run_56800(); return; + case 0x4c2a0: + r3= page[(r18+8)>>>2]; r3 = r3 + r19; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x3c8e8; + pc=0x4c2e8; continue; } - case 0x3c8b4: + case 0x4c2b4: r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x3c8c0; - pc=0x3f800; - run_3f800(); return; - case 0x3c8c0: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + r31=0x4c2c0; + pc=0x4f000; + run_4f000(); return; + case 0x4c2c0: + r31= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; r2 = r0 + r0; r29 = r29 + 40; - /* Next insn is delay slot */ pc=r31; return; - case 0x3c8e8: + case 0x4c2e8: r4 = r17 + r0; r5 = r0 - r20; - /* Next insn is delay slot */ - r31=0x3c8f8; - pc=0x48920; - run_48800(); return; - case 0x3c8f8: + r31=0x4c2f8; + pc=0x56f10; + run_56800(); return; + case 0x4c2f8: r3 = r0 + -1; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x3c958; + pc=0x4c358; continue; } - r2 = readPages[(r18+8)>>>12][((r18+8)>>>2)&0x3ff]; + r2= page[(r18+8)>>>2]; r19 = r19 - r20; r19 = r19 | 1; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r19; - r2 = 7 << 16; - r3 = readPages[(r2+17968)>>>12][((r2+17968)>>>2)&0x3ff]; + page[(r2+4)>>>2] = r19; + r2 = 6 << 16; + r3= page[(r2+31280)>>>2]; r4 = r17 + r0; r20 = r3 - r20; - writePages[(r2+17968)>>>12][((r2+17968)>>>2)&0x3ff] = r20; - /* Next insn is delay slot */ - r31=0x3c930; - pc=0x3f800; - run_3f800(); return; - case 0x3c930: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + page[(r2+31280)>>>2] = r20; + r31=0x4c330; + pc=0x4f000; + run_4f000(); return; + case 0x4c330: + r31= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; r2 = r0 + 1; r29 = r29 + 40; - /* Next insn is delay slot */ pc=r31; return; - case 0x3c958: + case 0x4c358: r4 = r17 + r0; r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x3c968; - pc=0x48920; - run_48800(); return; - case 0x3c968: - r3 = readPages[(r18+8)>>>12][((r18+8)>>>2)&0x3ff]; + r31=0x4c368; + pc=0x56f10; + run_56800(); return; + case 0x4c368: + r3= page[(r18+8)>>>2]; r4 = r2 - r3; r5 = r4 < 16 ? 1 : 0; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x3c8b4; + pc=0x4c2b4; continue; } - r5 = readPages[(r28+-31068)>>>12][((r28+-31068)>>>2)&0x3ff]; + r5= page[(r28+-31508)>>>2]; r4 = r4 | 1; r2 = r2 - r5; - r5 = 7 << 16; - writePages[(r5+17968)>>>12][((r5+17968)>>>2)&0x3ff] = r2; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=0x3c8b4; + r5 = 6 << 16; + page[(r5+31280)>>>2] = r2; + page[(r3+4)>>>2] = r4; + pc=0x4c2b4; continue; - case 0x3ca00: - pc=0x3ca00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3ca00() throws ExecutionException { /* 0x3ca00 - 0x3cc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3ca00: + case 0x4c400: r29 = r29 + -32; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; + page[(r29+20)>>>2] = r16; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r17; r16 = r5 + r0; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x3cba0; + pc=0x4c5a0; continue; } r17 = r4 + r0; - /* Next insn is delay slot */ - r31=0x3ca28; - pc=0x3f600; - run_3f600(); return; - case 0x3ca28: - r8 = readPages[(r16+-4)>>>12][((r16+-4)>>>2)&0x3ff]; + r31=0x4c428; + pc=0x4ee00; + run_4e800(); return; + case 0x4c428: + r8= page[(r16+-4)>>>2]; r2 = r0 + -2; r6 = r16 + -8; r2 = r8 & r2; r3 = r6 + r2; - r5 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r7 = 7 << 16; + r5= page[(r3+4)>>>2]; + r7 = 6 << 16; r4 = r0 + -4; - r7 = r7 + 11104; + r7 = r7 + 25176; r5 = r5 & r4; - r4 = readPages[(r7+8)>>>12][((r7+8)>>>2)&0x3ff]; + r4= page[(r7+8)>>>2]; if(r4 == r3) { - /* Next insn is delay slot */ - pc=0x3cc44; - run_3cc00(); return; + pc=0x4c644; + continue; } r8 = r8 & 1; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r5; + page[(r3+4)>>>2] = r5; if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x3cb64; + pc=0x4c564; continue; } r4 = r0 + r0; - case 0x3ca74: + case 0x4c474: r8 = r3 + r5; - r8 = readPages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff]; + r8= page[(r8+4)>>>2]; r8 = r8 & 1; if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x3caac; + pc=0x4c4ac; continue; } r2 = r2 + r5; - r5 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; + r5= page[(r3+8)>>>2]; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3cc0c; - run_3cc00(); return; + pc=0x4c60c; + continue; } - case 0x3ca9c: - r3 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - writePages[(r5+12)>>>12][((r5+12)>>>2)&0x3ff] = r3; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r5; - case 0x3caac: + case 0x4c49c: + r3= page[(r3+12)>>>2]; + page[(r5+12)>>>2] = r3; + page[(r3+8)>>>2] = r5; + case 0x4c4ac: r3 = r2 | 1; - writePages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff] = r3; + page[(r6+4)>>>2] = r3; r3 = r6 + r2; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; + page[(r3+0)>>>2] = r2; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x3cb48; + pc=0x4c548; continue; } r3 = (r2&0xffffffffL) < (512&0xffffffffL) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3cbb8; + pc=0x4c5b8; continue; } r3 = r2 >>> 9; r4 = (r3&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3ccb8; - run_3cc00(); return; + pc=0x4c6b8; + continue; } r4 = r2 >>> 6; r4 = r4 + 56; r8 = r4 << 1; - case 0x3caec: + case 0x4c4ec: r8 = r8 << 2; r8 = r7 + r8; - r3 = readPages[(r8+8)>>>12][((r8+8)>>>2)&0x3ff]; + r3= page[(r8+8)>>>2]; if(r3 == r8) { - /* Next insn is delay slot */ - pc=0x3ccd4; - run_3cc00(); return; + pc=0x4c6d4; + continue; } r4 = r0 + -4; - case 0x3cb08: - r5 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; + case 0x4c508: + r5= page[(r3+4)>>>2]; r5 = r5 & r4; r5 = ((r2 & 0xffffffffL) < (r5 & 0xffffffffL)) ? 1 : 0; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x3cb30; + pc=0x4c530; continue; } - r3 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; + r3= page[(r3+8)>>>2]; if(r8 != r3) { - /* Next insn is delay slot */ - pc=0x3cb08; + pc=0x4c508; continue; } - case 0x3cb30: - r2 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - case 0x3cb38: - writePages[(r6+12)>>>12][((r6+12)>>>2)&0x3ff] = r2; - writePages[(r6+8)>>>12][((r6+8)>>>2)&0x3ff] = r3; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r6; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r6; - case 0x3cb48: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + case 0x4c530: + r2= page[(r3+12)>>>2]; + case 0x4c538: + page[(r6+12)>>>2] = r2; + page[(r6+8)>>>2] = r3; + page[(r2+8)>>>2] = r6; + page[(r3+12)>>>2] = r6; + case 0x4c548: + r31= page[(r29+28)>>>2]; + r16= page[(r29+20)>>>2]; r4 = r17 + r0; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + r17= page[(r29+24)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x3f800; - run_3f800(); return; - case 0x3cb64: - r4 = readPages[(r16+-8)>>>12][((r16+-8)>>>2)&0x3ff]; - r8 = 7 << 16; + pc=0x4f000; + run_4f000(); return; + case 0x4c564: + r4= page[(r16+-8)>>>2]; + r8 = 6 << 16; r6 = r6 - r4; r2 = r2 + r4; - r4 = readPages[(r6+8)>>>12][((r6+8)>>>2)&0x3ff]; - r8 = r8 + 11112; + r4= page[(r6+8)>>>2]; + r8 = r8 + 25184; if(r4 == r8) { - /* Next insn is delay slot */ - pc=0x3ccac; - run_3cc00(); return; + pc=0x4c6ac; + continue; } - r8 = readPages[(r6+12)>>>12][((r6+12)>>>2)&0x3ff]; - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = r8; - writePages[(r8+8)>>>12][((r8+8)>>>2)&0x3ff] = r4; + r8= page[(r6+12)>>>2]; + page[(r4+12)>>>2] = r8; + page[(r8+8)>>>2] = r4; r4 = r0 + r0; - /* Next insn is delay slot */ - pc=0x3ca74; + pc=0x4c474; continue; - case 0x3cba0: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + case 0x4c5a0: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x3cbb8: + case 0x4c5b8: r2 = r2 >>> 3; r3 = r2 >> 2; r4 = r0 + 1; r3 = r4 << (r3&0x1f); - r4 = readPages[(r7+4)>>>12][((r7+4)>>>2)&0x3ff]; + r4= page[(r7+4)>>>2]; r2 = r2 << 3; r3 = r3 | r4; - writePages[(r7+4)>>>12][((r7+4)>>>2)&0x3ff] = r3; + page[(r7+4)>>>2] = r3; r7 = r7 + r2; - r2 = readPages[(r7+8)>>>12][((r7+8)>>>2)&0x3ff]; - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r2= page[(r7+8)>>>2]; + r31= page[(r29+28)>>>2]; + r16= page[(r29+20)>>>2]; r4 = r17 + r0; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - writePages[(r6+12)>>>12][((r6+12)>>>2)&0x3ff] = r7; - writePages[(r6+8)>>>12][((r6+8)>>>2)&0x3ff] = r2; - writePages[(r7+8)>>>12][((r7+8)>>>2)&0x3ff] = r6; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r6; - case 0x3cc00: - pc=0x3cc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3cc00() throws ExecutionException { /* 0x3cc00 - 0x3ce00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3cc00: + r17= page[(r29+24)>>>2]; + page[(r6+12)>>>2] = r7; + page[(r6+8)>>>2] = r2; + page[(r7+8)>>>2] = r6; + page[(r2+12)>>>2] = r6; r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x3f800; - run_3f800(); return; - case 0x3cc0c: - r8 = 7 << 16; - r8 = r8 + 11112; + pc=0x4f000; + run_4f000(); return; + case 0x4c60c: + r8 = 6 << 16; + r8 = r8 + 25184; if(r5 != r8) { - /* Next insn is delay slot */ - pc=0x3ca9c; - run_3ca00(); return; + pc=0x4c49c; + continue; } r3 = r2 | 1; - writePages[(r7+20)>>>12][((r7+20)>>>2)&0x3ff] = r6; - writePages[(r7+16)>>>12][((r7+16)>>>2)&0x3ff] = r6; - writePages[(r6+12)>>>12][((r6+12)>>>2)&0x3ff] = r5; - writePages[(r6+8)>>>12][((r6+8)>>>2)&0x3ff] = r5; - writePages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff] = r3; + page[(r7+20)>>>2] = r6; + page[(r7+16)>>>2] = r6; + page[(r6+12)>>>2] = r5; + page[(r6+8)>>>2] = r5; + page[(r6+4)>>>2] = r3; r6 = r6 + r2; - writePages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x3cb48; - run_3ca00(); return; - case 0x3cc44: + page[(r6+0)>>>2] = r2; + pc=0x4c548; + continue; + case 0x4c644: r8 = r8 & 1; r2 = r5 + r2; if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x3cc78; + pc=0x4c678; continue; } - r3 = readPages[(r16+-8)>>>12][((r16+-8)>>>2)&0x3ff]; + r3= page[(r16+-8)>>>2]; r6 = r6 - r3; - r4 = readPages[(r6+8)>>>12][((r6+8)>>>2)&0x3ff]; + r4= page[(r6+8)>>>2]; r2 = r2 + r3; - r3 = readPages[(r6+12)>>>12][((r6+12)>>>2)&0x3ff]; - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = r3; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r4; - case 0x3cc78: - r5 = readPages[(r28+-31064)>>>12][((r28+-31064)>>>2)&0x3ff]; + r3= page[(r6+12)>>>2]; + page[(r4+12)>>>2] = r3; + page[(r3+8)>>>2] = r4; + case 0x4c678: + r5= page[(r28+-31504)>>>2]; r3 = r2 | 1; r2 = ((r2 & 0xffffffffL) < (r5 & 0xffffffffL)) ? 1 : 0; - writePages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff] = r3; - writePages[(r7+8)>>>12][((r7+8)>>>2)&0x3ff] = r6; + page[(r6+4)>>>2] = r3; + page[(r7+8)>>>2] = r6; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3cb48; - run_3ca00(); return; + pc=0x4c548; + continue; } - r5 = readPages[(r28+-30640)>>>12][((r28+-30640)>>>2)&0x3ff]; + r5= page[(r28+-31276)>>>2]; r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x3cca4; - pc=0x3c800; - run_3c800(); return; - case 0x3cca4: - /* Next insn is delay slot */ - pc=0x3cb48; - run_3ca00(); return; - case 0x3ccac: + r31=0x4c6a4; + pc=0x4c200; + continue; + case 0x4c6a4: + pc=0x4c548; + continue; + case 0x4c6ac: r4 = r0 + 1; - /* Next insn is delay slot */ - pc=0x3ca74; - run_3ca00(); return; - case 0x3ccb8: + pc=0x4c474; + continue; + case 0x4c6b8: r4 = (r3&0xffffffffL) < (21&0xffffffffL) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3ccfc; + pc=0x4c6fc; continue; } r4 = r3 + 91; r8 = r4 << 1; - /* Next insn is delay slot */ - pc=0x3caec; - run_3ca00(); return; - case 0x3ccd4: + pc=0x4c4ec; + continue; + case 0x4c6d4: r2 = r0 + 1; r4 = r4 >> 2; r4 = r2 << (r4&0x1f); - r2 = readPages[(r7+4)>>>12][((r7+4)>>>2)&0x3ff]; + r2= page[(r7+4)>>>2]; r2 = r4 | r2; - writePages[(r7+4)>>>12][((r7+4)>>>2)&0x3ff] = r2; + page[(r7+4)>>>2] = r2; r2 = r3 + r0; - /* Next insn is delay slot */ - pc=0x3cb38; - run_3ca00(); return; - case 0x3ccfc: + pc=0x4c538; + continue; + case 0x4c6fc: r4 = (r3&0xffffffffL) < (85&0xffffffffL) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3cd1c; + pc=0x4c71c; continue; } r4 = r2 >>> 12; r4 = r4 + 110; r8 = r4 << 1; - /* Next insn is delay slot */ - pc=0x3caec; - run_3ca00(); return; - case 0x3cd1c: + pc=0x4c4ec; + continue; + case 0x4c71c: r4 = (r3&0xffffffffL) < (341&0xffffffffL) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3cd3c; + pc=0x4c73c; continue; } r4 = r2 >>> 15; r4 = r4 + 119; r8 = r4 << 1; - /* Next insn is delay slot */ - pc=0x3caec; - run_3ca00(); return; - case 0x3cd3c: + pc=0x4c4ec; + continue; + case 0x4c73c: r3 = (r3&0xffffffffL) < (1365&0xffffffffL) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3cd5c; + pc=0x4c75c; continue; } r4 = r2 >>> 18; r4 = r4 + 124; r8 = r4 << 1; - /* Next insn is delay slot */ - pc=0x3caec; - run_3ca00(); return; - case 0x3cd5c: + pc=0x4c4ec; + continue; + case 0x4c75c: r8 = r0 + 252; r4 = r0 + 126; - /* Next insn is delay slot */ - pc=0x3caec; - run_3ca00(); return; - case 0x3ce00: - pc=0x3ce00; + pc=0x4c4ec; + continue; + case 0x4c800: + pc=0x4c800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_3ce00() throws ExecutionException { /* 0x3ce00 - 0x3d000 */ + private final void run_4c800() throws ExecutionException { /* 0x4c800 - 0x4d000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x3ce00: + case 0x4c800: r29 = r29 + -120; - writePages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff] = r21; - writePages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff] = r18; - writePages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff] = r17; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r16; - writePages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff] = r31; - writePages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff] = r23; - writePages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff] = r22; - writePages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff] = r20; - writePages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff] = r19; + page[(r29+104)>>>2] = r21; + page[(r29+92)>>>2] = r18; + page[(r29+88)>>>2] = r17; + page[(r29+84)>>>2] = r16; + page[(r29+116)>>>2] = r31; + page[(r29+112)>>>2] = r23; + page[(r29+108)>>>2] = r22; + page[(r29+100)>>>2] = r20; + page[(r29+96)>>>2] = r19; r17 = r4 + r0; r16 = r5 + r0; r21 = r6 + r0; r18 = r7 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3ce50; + pc=0x4c850; continue; } - r2 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; + r2= page[(r4+56)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3d030; - run_3d000(); return; + pc=0x4ca30; + continue; } - case 0x3ce50: + case 0x4c850: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r3 = tmp; r2 = r0 + 264; r3 = r3 & 264; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x3d04c; - run_3d000(); return; + pc=0x4ca4c; + continue; } - case 0x3ce64: - r19 = readPages[(r16+40)>>>12][((r16+40)>>>2)&0x3ff]; + case 0x4c864: + r19= page[(r16+40)>>>2]; if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x3d388; - run_3d200(); return; + pc=0x4cd88; + continue; } r2 = r0 + 1; if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x3cfc4; + pc=0x4c9c4; continue; } r2 = r0 + 2; if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x3ced4; + pc=0x4c8d4; continue; } if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x3ced4; + pc=0x4c8d4; continue; } r2 = r0 + 22; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r2; - case 0x3ce9c: + page[(r17+0)>>>2] = r2; + case 0x4c89c: r20 = r0 + -1; - case 0x3cea0: - r31 = readPages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff]; + case 0x4c8a0: + r31= page[(r29+116)>>>2]; r2 = r20 + r0; - r23 = readPages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff]; - r22 = readPages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff]; - r21 = readPages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff]; - r20 = readPages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff]; - r19 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r18 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - r17 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r16 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; + r23= page[(r29+112)>>>2]; + r22= page[(r29+108)>>>2]; + r21= page[(r29+104)>>>2]; + r20= page[(r29+100)>>>2]; + r19= page[(r29+96)>>>2]; + r18= page[(r29+92)>>>2]; + r17= page[(r29+88)>>>2]; + r16= page[(r29+84)>>>2]; r29 = r29 + 120; - /* Next insn is delay slot */ pc=r31; return; - case 0x3ced4: - r2 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; + case 0x4c8d4: + r2= page[(r16+16)>>>2]; r22 = r0 + r0; r20 = r0 + r0; - case 0x3cee0: + case 0x4c8e0: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3d324; - run_3d200(); return; + pc=0x4cd24; + continue; } - case 0x3cee8: + case 0x4c8e8: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r3 = tmp; r2 = r3 & 65535; r4 = r2 & 2074; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x3cf24; + pc=0x4c924; continue; } r2 = r2 & 1024; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3d0b8; - run_3d000(); return; - } - r2 = 4 << 16; - r2 = r2 + 10240; - if(r19 == r2) { - /* Next insn is delay slot */ - pc=0x3d064; - run_3d000(); return; - } - case 0x3cf1c: - r3 = r3 | 2048; - addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x3cf24: - r4 = r17 + r0; - r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x3cf34; - pc=0x39800; - run_39800(); return; - case 0x3cf34: - r20 = r2 + r0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3ce9c; + pc=0x4cab8; continue; } - r5 = readPages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff]; + r2 = 5 << 16; + r2 = r2 + 4608; + if(r19 == r2) { + pc=0x4ca64; + continue; + } + case 0x4c91c: + r3 = r3 | 2048; + addr=r16+12; + tmp= page[(addr)>>>2]; + tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); + page[(addr)>>>2] = tmp; + case 0x4c924: + r4 = r17 + r0; + r5 = r16 + r0; + r31=0x4c934; + pc=0x4a400; + run_4a000(); return; + case 0x4c934: + r20 = r2 + r0; + if(r2 != r0) { + pc=0x4c89c; + continue; + } + r5= page[(r16+28)>>>2]; r4 = r17 + r0; r6 = r21 + r0; r7 = r18 + r0; - /* Next insn is delay slot */ pc=r19; - r31=0x3cf58; + r31=0x4c958; return; - case 0x3cf58: + case 0x4c958: r3 = r0 + -1; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x3ce9c; + pc=0x4c89c; continue; } - r5 = readPages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff]; + r5= page[(r16+48)>>>2]; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x3cf90; + pc=0x4c990; continue; } r2 = r16 + 64; if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x3cf8c; + pc=0x4c98c; continue; } r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x3cf8c; - pc=0x3ca00; - run_3ca00(); return; - case 0x3cf8c: - writePages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff] = r0; - case 0x3cf90: - r2 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r0; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; + r31=0x4c98c; + pc=0x4c400; + run_4c000(); return; + case 0x4c98c: + page[(r16+48)>>>2] = r0; + case 0x4c990: + r2= page[(r16+16)>>>2]; + page[(r16+4)>>>2] = r0; + page[(r16+0)>>>2] = r2; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r4 = r16 + 92; r2 = r2 & 63455; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r5 = r0 + r0; r6 = r0 + 8; - /* Next insn is delay slot */ - r31=0x3cfbc; - pc=0x48fec; - run_48e00(); return; - case 0x3cfbc: - /* Next insn is delay slot */ - pc=0x3cea0; + r31=0x4c9bc; + pc=0x56ff0; + run_56800(); return; + case 0x4c9bc: + pc=0x4c8a0; continue; - case 0x3cfc4: + case 0x4c9c4: r4 = r17 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x3cfd4; - pc=0x39800; - run_39800(); return; - case 0x3cfd4: + r31=0x4c9d4; + pc=0x4a400; + run_4a000(); return; + case 0x4c9d4: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r3 = r2 & 4096; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3d2e4; - run_3d200(); return; + pc=0x4cce4; + continue; } - r20 = readPages[(r16+80)>>>12][((r16+80)>>>2)&0x3ff]; - case 0x3cfec: + r20= page[(r16+80)>>>2]; + case 0x4c9ec: r3 = r2 & 4; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3d1a0; - run_3d000(); return; + pc=0x4cba0; + continue; } r2 = r2 & 8; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3d1c8; - run_3d000(); return; + pc=0x4cbc8; + continue; } - case 0x3d000: - pc=0x3d000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3d000() throws ExecutionException { /* 0x3d000 - 0x3d200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3d000: - r3 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; + r3= page[(r16+0)>>>2]; + r2= page[(r16+16)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3d01c; + pc=0x4ca1c; continue; } r3 = r3 - r2; r20 = r20 + r3; - case 0x3d01c: + case 0x4ca1c: r21 = r21 + r20; r22 = r0 + 1; r18 = r0 + r0; - /* Next insn is delay slot */ - pc=0x3cee0; - run_3ce00(); return; - case 0x3d030: - /* Next insn is delay slot */ - r31=0x3d038; - pc=0x3a600; - run_3a600(); return; - case 0x3d038: + pc=0x4c8e0; + continue; + case 0x4ca30: + r31=0x4ca38; + pc=0x4ac00; + run_4a800(); return; + case 0x4ca38: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r3 = tmp; r2 = r0 + 264; r3 = r3 & 264; if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x3ce64; - run_3ce00(); return; + pc=0x4c864; + continue; } - case 0x3d04c: + case 0x4ca4c: r4 = r17 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x3d05c; - pc=0x39800; - run_39800(); return; - case 0x3d05c: - /* Next insn is delay slot */ - pc=0x3ce64; - run_3ce00(); return; - case 0x3d064: + r31=0x4ca5c; + pc=0x4a400; + run_4a000(); return; + case 0x4ca5c: + pc=0x4c864; + continue; + case 0x4ca64: addr=r16+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r5 = tmp; if(r5 < 0) { - /* Next insn is delay slot */ - pc=0x3cf1c; - run_3ce00(); return; + pc=0x4c91c; + continue; } r4 = r17 + r0; r6 = r29 + 16; - /* Next insn is delay slot */ - r31=0x3d084; - pc=0x48960; - run_48800(); return; - case 0x3d084: + r31=0x4ca84; + pc=0x56f50; + run_56800(); return; + case 0x4ca84: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3d318; - run_3d200(); return; + pc=0x4cd18; + continue; } - r3 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r3= page[(r29+20)>>>2]; r2 = r0 | 32768; r3 = r3 & 61440; if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x3d318; - run_3d200(); return; + pc=0x4cd18; + continue; } r2 = r0 + 1024; - writePages[(r16+76)>>>12][((r16+76)>>>2)&0x3ff] = r2; + page[(r16+76)>>>2] = r2; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r2 = r2 | 1024; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x3d0b8: + page[(addr)>>>2] = tmp; + case 0x4cab8: if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x3d1d4; + pc=0x4cbd4; continue; } r23 = r21 + r0; if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x3d204; - run_3d200(); return; + pc=0x4cc04; + continue; } - case 0x3d0cc: + case 0x4cacc: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r2 = r2 & 4096; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3d33c; - run_3d200(); return; + pc=0x4cd3c; + continue; } - r2 = readPages[(r16+80)>>>12][((r16+80)>>>2)&0x3ff]; - case 0x3d0e4: - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r5 = readPages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff]; + r2= page[(r16+80)>>>2]; + case 0x4cae4: + r3= page[(r16+4)>>>2]; + r5= page[(r16+48)>>>2]; r20 = r2 - r3; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x3d368; - run_3d200(); return; + pc=0x4cd68; + continue; } - r6 = readPages[(r16+60)>>>12][((r16+60)>>>2)&0x3ff]; + r6= page[(r16+60)>>>2]; r20 = r20 - r6; - case 0x3d104: - r2 = readPages[(r16+56)>>>12][((r16+56)>>>2)&0x3ff]; - r4 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; + case 0x4cb04: + r2= page[(r16+56)>>>2]; + r4= page[(r16+16)>>>2]; r20 = r20 + r3; r2 = r2 - r4; r20 = r20 - r2; r2 = r6 + r2; - case 0x3d11c: + case 0x4cb1c: r3 = r23 < r20 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3d220; - run_3d200(); return; + pc=0x4cc20; + continue; } r3 = r20 + r2; r3 = ((r23 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3d220; - run_3d200(); return; + pc=0x4cc20; + continue; } r20 = r23 - r20; r4 = r4 + r20; r2 = r2 - r20; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r4; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; + page[(r16+0)>>>2] = r4; + page[(r16+4)>>>2] = r2; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x3d170; + pc=0x4cb70; continue; } r2 = r16 + 64; if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x3d16c; + pc=0x4cb6c; continue; } r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x3d16c; - pc=0x3ca00; - run_3ca00(); return; - case 0x3d16c: - writePages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff] = r0; - case 0x3d170: + r31=0x4cb6c; + pc=0x4c400; + run_4c000(); return; + case 0x4cb6c: + page[(r16+48)>>>2] = r0; + case 0x4cb70: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r2 = r2 & 65503; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x3d180: + page[(addr)>>>2] = tmp; + case 0x4cb80: r4 = r16 + 92; r5 = r0 + r0; r6 = r0 + 8; - /* Next insn is delay slot */ - r31=0x3d194; - pc=0x48fec; - run_48e00(); return; - case 0x3d194: + r31=0x4cb94; + pc=0x56ff0; + run_56800(); return; + case 0x4cb94: r20 = r0 + r0; - /* Next insn is delay slot */ - pc=0x3cea0; - run_3ce00(); return; - case 0x3d1a0: - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + pc=0x4c8a0; + continue; + case 0x4cba0: + r2= page[(r16+4)>>>2]; r20 = r20 - r2; - r2 = readPages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff]; + r2= page[(r16+48)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3d1c8; + pc=0x4cbc8; continue; } - r2 = readPages[(r16+60)>>>12][((r16+60)>>>2)&0x3ff]; + r2= page[(r16+60)>>>2]; r20 = r20 - r2; - case 0x3d1c8: - r2 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x3d01c; + case 0x4cbc8: + r2= page[(r16+16)>>>2]; + pc=0x4ca1c; continue; - case 0x3d1d4: + case 0x4cbd4: addr=r16+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r5 = tmp; r4 = r17 + r0; r6 = r29 + 16; - /* Next insn is delay slot */ - r31=0x3d1e8; - pc=0x48960; - run_48800(); return; - case 0x3d1e8: + r31=0x4cbe8; + pc=0x56f50; + run_56800(); return; + case 0x4cbe8: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3cf24; - run_3ce00(); return; + pc=0x4c924; + continue; } - r23 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + r23= page[(r29+32)>>>2]; r23 = r21 + r23; if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x3d0cc; + pc=0x4cacc; continue; } - case 0x3d200: - pc=0x3d200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3d200() throws ExecutionException { /* 0x3d200 - 0x3d400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3d200: - case 0x3d204: - r5 = readPages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff]; - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + case 0x4cc04: + r5= page[(r16+48)>>>2]; + r3= page[(r16+4)>>>2]; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x3d368; + pc=0x4cd68; continue; } - r6 = readPages[(r16+60)>>>12][((r16+60)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x3d104; - run_3d000(); return; - case 0x3d220: - r20 = readPages[(r16+76)>>>12][((r16+76)>>>2)&0x3ff]; - r5 = readPages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff]; + r6= page[(r16+60)>>>2]; + pc=0x4cb04; + continue; + case 0x4cc20: + r20= page[(r16+76)>>>2]; + r5= page[(r16+28)>>>2]; r20 = r0 - r20; r20 = r23 & r20; r4 = r17 + r0; r6 = r20 + r0; r7 = r0 + r0; - /* Next insn is delay slot */ pc=r19; - r31=0x3d244; + r31=0x4cc44; return; - case 0x3d244: + case 0x4cc44: r3 = r0 + -1; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x3cf24; - run_3ce00(); return; + pc=0x4c924; + continue; } - r2 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - r5 = readPages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff]; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r0; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; + r2= page[(r16+16)>>>2]; + r5= page[(r16+48)>>>2]; + page[(r16+4)>>>2] = r0; + page[(r16+0)>>>2] = r2; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x3d284; + pc=0x4cc84; continue; } r2 = r16 + 64; if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x3d280; + pc=0x4cc80; continue; } r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x3d280; - pc=0x3ca00; - run_3ca00(); return; - case 0x3d280: - writePages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff] = r0; - case 0x3d284: + r31=0x4cc80; + pc=0x4c400; + run_4c000(); return; + case 0x4cc80: + page[(r16+48)>>>2] = r0; + case 0x4cc84: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r23 = r23 - r20; r2 = r2 & 65503; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r23 == r0) { - /* Next insn is delay slot */ - pc=0x3d180; - run_3d000(); return; + pc=0x4cb80; + continue; } r4 = r17 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x3d2ac; - pc=0x41200; - run_41200(); return; - case 0x3d2ac: + r31=0x4ccac; + pc=0x50600; + run_50000(); return; + case 0x4ccac: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3cf24; - run_3ce00(); return; + pc=0x4c924; + continue; } - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + r2= page[(r16+4)>>>2]; r3 = ((r2 & 0xffffffffL) < (r23 & 0xffffffffL)) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3cf24; - run_3ce00(); return; + pc=0x4c924; + continue; } - r3 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + r3= page[(r16+0)>>>2]; r2 = r2 - r23; r3 = r3 + r23; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r3; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x3d180; - run_3d000(); return; - case 0x3d2e4: - r5 = readPages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff]; + page[(r16+0)>>>2] = r3; + page[(r16+4)>>>2] = r2; + pc=0x4cb80; + continue; + case 0x4cce4: + r5= page[(r16+28)>>>2]; r4 = r17 + r0; r6 = r0 + r0; r7 = r0 + 1; - /* Next insn is delay slot */ pc=r19; - r31=0x3d2fc; + r31=0x4ccfc; return; - case 0x3d2fc: + case 0x4ccfc: r20 = r2 + r0; r2 = r0 + -1; if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x3ce9c; - run_3ce00(); return; + pc=0x4c89c; + continue; } addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; - /* Next insn is delay slot */ - pc=0x3cfec; - run_3ce00(); return; - case 0x3d318: + pc=0x4c9ec; + continue; + case 0x4cd18: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r3 = tmp; - /* Next insn is delay slot */ - pc=0x3cf1c; - run_3ce00(); return; - case 0x3d324: + pc=0x4c91c; + continue; + case 0x4cd24: r4 = r17 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x3d334; - pc=0x3e600; - run_3e600(); return; - case 0x3d334: - /* Next insn is delay slot */ - pc=0x3cee8; - run_3ce00(); return; - case 0x3d33c: - r5 = readPages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff]; + r31=0x4cd34; + pc=0x4dc00; + run_4d800(); return; + case 0x4cd34: + pc=0x4c8e8; + continue; + case 0x4cd3c: + r5= page[(r16+28)>>>2]; r4 = r17 + r0; r6 = r0 + r0; r7 = r0 + 1; - /* Next insn is delay slot */ pc=r19; - r31=0x3d354; + r31=0x4cd54; return; - case 0x3d354: + case 0x4cd54: r3 = r0 + -1; if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x3d0e4; - run_3d000(); return; + pc=0x4cae4; + continue; } - /* Next insn is delay slot */ - pc=0x3cf24; - run_3ce00(); return; - case 0x3d368: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r4 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; + pc=0x4c924; + continue; + case 0x4cd68: + r2= page[(r16+0)>>>2]; + r4= page[(r16+16)>>>2]; r5 = r0 + r0; r2 = r2 - r4; r20 = r20 - r2; r2 = r3 + r2; - /* Next insn is delay slot */ - pc=0x3d11c; - run_3d000(); return; - case 0x3d388: + pc=0x4cb1c; + continue; + case 0x4cd88: r2 = r0 + 29; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r2; + page[(r17+0)>>>2] = r2; r20 = r0 + -1; - /* Next insn is delay slot */ - pc=0x3cea0; - run_3ce00(); return; - case 0x3d400: - pc=0x3d400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3d400() throws ExecutionException { /* 0x3d400 - 0x3d600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3d400: + pc=0x4c8a0; + continue; + case 0x4ce00: r3 = r4 + r0; r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; + r4= page[(r28+-31512)>>>2]; r7 = r6 + r0; r5 = r3 + r0; r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x3ce00; - run_3ce00(); return; - case 0x3d600: - pc=0x3d600; + pc=0x4c800; + continue; + case 0x4d000: + pc=0x4d000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_3d600() throws ExecutionException { /* 0x3d600 - 0x3d800 */ + private final void run_4d000() throws ExecutionException { /* 0x4d000 - 0x4d800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x3d600: + case 0x4d000: r29 = r29 + -48; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; + page[(r29+32)>>>2] = r19; r19 = r4 + 736; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r21; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; + page[(r29+44)>>>2] = r31; + page[(r29+40)>>>2] = r21; + page[(r29+36)>>>2] = r20; + page[(r29+28)>>>2] = r18; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x3d6cc; + pc=0x4d0cc; continue; } r21 = r5 + r0; r20 = r0 + r0; r18 = r0 + -1; - case 0x3d638: - r17 = readPages[(r19+4)>>>12][((r19+4)>>>2)&0x3ff]; - r16 = readPages[(r19+8)>>>12][((r19+8)>>>2)&0x3ff]; + case 0x4d038: + r17= page[(r19+4)>>>2]; + r16= page[(r19+8)>>>2]; r17 = r17 + -1; if(r17 < 0) { - /* Next insn is delay slot */ - pc=0x3d690; + pc=0x4d090; continue; } - case 0x3d64c: + case 0x4d04c: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r3 = tmp; r3 = (r3&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3d680; + pc=0x4d080; continue; } addr=r16+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r3 = tmp; if(r3 == r18) { - /* Next insn is delay slot */ - pc=0x3d680; + pc=0x4d080; continue; } r4 = r16 + r0; - /* Next insn is delay slot */ pc=r21; - r31=0x3d67c; + r31=0x4d07c; return; - case 0x3d67c: + case 0x4d07c: r20 = r20 | r2; - case 0x3d680: + case 0x4d080: r17 = r17 + -1; r16 = r16 + 104; if(r17 != r18) { - /* Next insn is delay slot */ - pc=0x3d64c; + pc=0x4d04c; continue; } - case 0x3d690: - r19 = readPages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff]; + case 0x4d090: + r19= page[(r19+0)>>>2]; if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x3d638; + pc=0x4d038; continue; } - case 0x3d6a0: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + case 0x4d0a0: + r31= page[(r29+44)>>>2]; r2 = r20 + r0; - r21 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r20 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r21= page[(r29+40)>>>2]; + r20= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x3d6cc: + case 0x4d0cc: r20 = r0 + r0; - /* Next insn is delay slot */ - pc=0x3d6a0; + pc=0x4d0a0; continue; - case 0x3d800: - pc=0x3d800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3d800() throws ExecutionException { /* 0x3d800 - 0x3da00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3d800: + case 0x4d200: r29 = r29 + -48; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; + page[(r29+28)>>>2] = r19; r19 = r4 + 736; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r22; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r21; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; + page[(r29+32)>>>2] = r20; + page[(r29+44)>>>2] = r31; + page[(r29+40)>>>2] = r22; + page[(r29+36)>>>2] = r21; + page[(r29+24)>>>2] = r18; + page[(r29+20)>>>2] = r17; + page[(r29+16)>>>2] = r16; r20 = r4 + r0; if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x3d8dc; + pc=0x4d2dc; continue; } r21 = r5 + r0; r22 = r0 + r0; r18 = r0 + -1; - case 0x3d840: - r17 = readPages[(r19+4)>>>12][((r19+4)>>>2)&0x3ff]; - r16 = readPages[(r19+8)>>>12][((r19+8)>>>2)&0x3ff]; + case 0x4d240: + r17= page[(r19+4)>>>2]; + r16= page[(r19+8)>>>2]; r17 = r17 + -1; if(r17 < 0) { - /* Next insn is delay slot */ - pc=0x3d89c; + pc=0x4d29c; continue; } - case 0x3d854: + case 0x4d254: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r3 = tmp; r3 = (r3&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3d88c; + pc=0x4d28c; continue; } addr=r16+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r3 = tmp; if(r3 == r18) { - /* Next insn is delay slot */ - pc=0x3d88c; + pc=0x4d28c; continue; } r4 = r20 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ pc=r21; - r31=0x3d888; + r31=0x4d288; return; - case 0x3d888: + case 0x4d288: r22 = r22 | r2; - case 0x3d88c: + case 0x4d28c: r17 = r17 + -1; r16 = r16 + 104; if(r17 != r18) { - /* Next insn is delay slot */ - pc=0x3d854; + pc=0x4d254; continue; } - case 0x3d89c: - r19 = readPages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff]; + case 0x4d29c: + r19= page[(r19+0)>>>2]; if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x3d840; + pc=0x4d240; continue; } - case 0x3d8ac: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + case 0x4d2ac: + r31= page[(r29+44)>>>2]; r2 = r22 + r0; - r21 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + r21= page[(r29+36)>>>2]; + r22= page[(r29+40)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x3d8dc: + case 0x4d2dc: r22 = r0 + r0; - /* Next insn is delay slot */ - pc=0x3d8ac; + pc=0x4d2ac; continue; - case 0x3da00: - pc=0x3da00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3da00() throws ExecutionException { /* 0x3da00 - 0x3dc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3da00: - { long hilo = (r7) * r6; hi = (int) (hilo >>> 32); lo = (int) hilo; } + case 0x4d400: + { long hilo = (long)(r7) * ((long)r6); hi = (int) (hilo >>> 32); lo = (int) hilo; } r29 = r29 + -64; r2 = r29 + 28; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r18; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; + page[(r29+48)>>>2] = r18; + page[(r29+16)>>>2] = r2; r2 = r0 + 1; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r20; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r19; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r17; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r16; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; + page[(r29+56)>>>2] = r20; + page[(r29+52)>>>2] = r19; + page[(r29+44)>>>2] = r17; + page[(r29+40)>>>2] = r16; + page[(r29+60)>>>2] = r31; r17 = r4 + r0; r18 = lo; r19 = r6 + r0; r20 = r7 + r0; - r16 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r5; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; + r16= page[(r29+80)>>>2]; + page[(r29+28)>>>2] = r5; + page[(r29+32)>>>2] = r18; + page[(r29+24)>>>2] = r18; + page[(r29+20)>>>2] = r2; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3da68; + pc=0x4d468; continue; } - r2 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; + r2= page[(r4+56)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3db14; + pc=0x4d514; continue; } - case 0x3da68: + case 0x4d468: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r3 = tmp; r2 = r3 & 8192; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3da94; + pc=0x4d494; continue; } r3 = r3 | 8192; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = readPages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r3= page[(r16+100)>>>2]; r2 = r0 + -8193; r2 = r3 & r2; - writePages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff] = r2; - case 0x3da94: + page[(r16+100)>>>2] = r2; + case 0x4d494: r4 = r17 + r0; r5 = r16 + r0; r6 = r29 + 16; - /* Next insn is delay slot */ - r31=0x3daa8; - pc=0x59c00; - run_59c00(); return; - case 0x3daa8: + r31=0x4d4a8; + pc=0x59e00; + run_59800(); return; + case 0x4d4a8: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3daec; + pc=0x4d4ec; continue; } - r2 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; + r2= page[(r29+24)>>>2]; + r31= page[(r29+60)>>>2]; r18 = r18 - r2; if(r19 != r0) { - /* Next insn is delay slot */ if(r19!=0) { hi = (int)((r18 & 0xffffffffL) % (r19 & 0xffffffffL)); lo = (int)((r18 & 0xffffffffL) / (r19 & 0xffffffffL)); } - pc=0x3dac8; + pc=0x4d4c8; continue; } if(r19!=0) { hi = (int)((r18 & 0xffffffffL) % (r19 & 0xffffffffL)); lo = (int)((r18 & 0xffffffffL) / (r19 & 0xffffffffL)); } throw new ExecutionException("Break"); - case 0x3dac8: - r20 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r19 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r18 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r17 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r16 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; + case 0x4d4c8: + r20= page[(r29+56)>>>2]; + r19= page[(r29+52)>>>2]; + r18= page[(r29+48)>>>2]; + r17= page[(r29+44)>>>2]; + r16= page[(r29+40)>>>2]; r29 = r29 + 64; r2 = lo; - /* Next insn is delay slot */ pc=r31; return; - case 0x3daec: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; + case 0x4d4ec: + r31= page[(r29+60)>>>2]; r2 = r20 + r0; - r19 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r20 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r18 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r17 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r16 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; + r19= page[(r29+52)>>>2]; + r20= page[(r29+56)>>>2]; + r18= page[(r29+48)>>>2]; + r17= page[(r29+44)>>>2]; + r16= page[(r29+40)>>>2]; r29 = r29 + 64; - /* Next insn is delay slot */ pc=r31; return; - case 0x3db14: - /* Next insn is delay slot */ - r31=0x3db1c; - pc=0x3a600; - run_3a600(); return; - case 0x3db1c: - /* Next insn is delay slot */ - pc=0x3da68; + case 0x4d514: + r31=0x4d51c; + pc=0x4ac00; + run_4a800(); return; + case 0x4d51c: + pc=0x4d468; continue; - case 0x3dc00: - pc=0x3dc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3dc00() throws ExecutionException { /* 0x3dc00 - 0x3de00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3dc00: + case 0x4d600: r29 = r29 + -32; r8 = r4 + r0; r3 = r5 + r0; r2 = r6 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; + r4= page[(r28+-31512)>>>2]; r5 = r8 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; + page[(r29+16)>>>2] = r7; r6 = r3 + r0; r7 = r2 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x3dc30; - pc=0x3da00; - run_3da00(); return; - case 0x3dc30: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + page[(r29+28)>>>2] = r31; + r31=0x4d630; + pc=0x4d400; + continue; + case 0x4d630: + r31= page[(r29+28)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x3de00: - pc=0x3de00; + case 0x4d800: + pc=0x4d800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_3de00() throws ExecutionException { /* 0x3de00 - 0x3e000 */ + private final void run_4d800() throws ExecutionException { /* 0x4d800 - 0x4e000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x3de00: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x3e200; - run_3e200(); return; - case 0x3e000: - pc=0x3e000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3e000() throws ExecutionException { /* 0x3e000 - 0x3e200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3e000: + case 0x4d800: r29 = r29 + -32; r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; + r4= page[(r28+-31512)>>>2]; r6 = r29 + 16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x3e01c; - pc=0x3e200; - run_3e200(); return; - case 0x3e01c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + page[(r29+28)>>>2] = r31; + r31=0x4d81c; + pc=0x4da00; + continue; + case 0x4d81c: + r31= page[(r29+28)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x3e200: - pc=0x3e200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3e200() throws ExecutionException { /* 0x3e200 - 0x3e400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3e200: + case 0x4da00: r29 = r29 + -48; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r21; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r22; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; + page[(r29+36)>>>2] = r21; + page[(r29+32)>>>2] = r20; + page[(r29+24)>>>2] = r18; + page[(r29+16)>>>2] = r16; + page[(r29+44)>>>2] = r31; + page[(r29+40)>>>2] = r22; + page[(r29+28)>>>2] = r19; + page[(r29+20)>>>2] = r17; r20 = r4 + r0; r18 = r5 + r0; r21 = r6 + r0; - /* Next insn is delay slot */ - r31=0x3e238; - pc=0x58e00; - run_58e00(); return; - case 0x3e238: - r16 = readPages[(r28+-31080)>>>12][((r28+-31080)>>>2)&0x3ff]; + r31=0x4da38; + pc=0x59800; + run_59800(); return; + case 0x4da38: + r16= page[(r28+-31520)>>>2]; if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x3e2f0; + pc=0x4daf0; continue; } addr=r18+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3e354; + pc=0x4db54; continue; } r5 = r0 + 61; r2 = r18 + r0; r4 = r0 + 61; if(r3 != r5) { - /* Next insn is delay slot */ - pc=0x3e27c; + pc=0x4da7c; continue; } - /* Next insn is delay slot */ - pc=0x3e2f0; + pc=0x4daf0; continue; - case 0x3e274: + case 0x4da74: if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x3e2f0; + pc=0x4daf0; continue; } - case 0x3e27c: + case 0x4da7c: r2 = r2 + 1; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3e274; + pc=0x4da74; continue; } r17 = r2 - r18; - case 0x3e294: - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + case 0x4da94: + r4= page[(r16+0)>>>2]; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3e2f0; + pc=0x4daf0; continue; } r22 = r0 + 61; - case 0x3e2a8: + case 0x4daa8: r5 = r18 + r0; r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x3e2b8; - pc=0x43000; - run_43000(); return; - case 0x3e2b8: + r31=0x4dab8; + pc=0x51a00; + run_51800(); return; + case 0x4dab8: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3e2dc; + pc=0x4dadc; continue; } - r19 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + r19= page[(r16+0)>>>2]; r19 = r19 + r17; addr=r19+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; if(r2 == r22) { - /* Next insn is delay slot */ - pc=0x3e32c; + pc=0x4db2c; continue; } - case 0x3e2dc: + case 0x4dadc: r16 = r16 + 4; - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + r4= page[(r16+0)>>>2]; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x3e2a8; + pc=0x4daa8; continue; } - case 0x3e2f0: + case 0x4daf0: r4 = r20 + r0; - /* Next insn is delay slot */ - r31=0x3e2fc; - pc=0x59000; - run_59000(); return; - case 0x3e2fc: + r31=0x4dafc; + pc=0x59a00; + run_59800(); return; + case 0x4dafc: r2 = r0 + r0; - case 0x3e300: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + case 0x4db00: + r31= page[(r29+44)>>>2]; + r22= page[(r29+40)>>>2]; + r21= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x3e32c: - r2 = readPages[(r28+-31080)>>>12][((r28+-31080)>>>2)&0x3ff]; + case 0x4db2c: + r2= page[(r28+-31520)>>>2]; r4 = r20 + r0; r16 = r16 - r2; r16 = r16 >> 2; - writePages[(r21+0)>>>12][((r21+0)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x3e348; - pc=0x59000; - run_59000(); return; - case 0x3e348: + page[(r21+0)>>>2] = r16; + r31=0x4db48; + pc=0x59a00; + run_59800(); return; + case 0x4db48: r2 = r19 + 1; - /* Next insn is delay slot */ - pc=0x3e300; + pc=0x4db00; continue; - case 0x3e354: + case 0x4db54: r17 = r0 + r0; - /* Next insn is delay slot */ - pc=0x3e294; + pc=0x4da94; continue; - case 0x3e400: - pc=0x3e400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3e400() throws ExecutionException { /* 0x3e400 - 0x3e600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3e400: - r29 = r29 + -32; - r6 = r29 + 16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x3e414; - pc=0x3e200; - run_3e200(); return; - case 0x3e414: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x3e600: - pc=0x3e600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3e600() throws ExecutionException { /* 0x3e600 - 0x3e800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3e600: + case 0x4dc00: addr=r5+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r2 = tmp; r29 = r29 + -104; r3 = r2 & 65535; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r16; + page[(r29+84)>>>2] = r16; r16 = r5 + r0; r5 = r3 & 2; - writePages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff] = r31; - writePages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff] = r19; - writePages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff] = r18; - writePages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff] = r17; + page[(r29+100)>>>2] = r31; + page[(r29+96)>>>2] = r19; + page[(r29+92)>>>2] = r18; + page[(r29+88)>>>2] = r17; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x3e730; + pc=0x4dd30; continue; } addr=r16+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r5 = tmp; r17 = r4 + r0; if(r5 < 0) { - /* Next insn is delay slot */ - pc=0x3e6f0; + pc=0x4dcf0; continue; } r6 = r29 + 16; - /* Next insn is delay slot */ - r31=0x3e64c; - pc=0x48960; - run_48800(); return; - case 0x3e64c: + r31=0x4dc4c; + pc=0x56f50; + run_56800(); return; + case 0x4dc4c: if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x3e6e4; + pc=0x4dce4; continue; } - r2 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r2= page[(r29+20)>>>2]; r3 = r0 | 32768; r2 = r2 & 61440; r19 = r2 ^ 8192; r19 = (r19&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x3e770; + pc=0x4dd70; continue; } - case 0x3e670: + case 0x4dc70: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r18 = r0 + 1024; r2 = r2 | 2048; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x3e680: + page[(addr)>>>2] = tmp; + case 0x4dc80: r4 = r17 + r0; r5 = r18 + r0; - /* Next insn is delay slot */ - r31=0x3e690; - pc=0x3ec00; - run_3ec00(); return; - case 0x3e690: + r31=0x4dc90; + pc=0x4e200; + run_4e000(); return; + case 0x4dc90: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3e714; + pc=0x4dd14; continue; } - r3 = 4 << 16; - r3 = r3 + -24576; - writePages[(r17+60)>>>12][((r17+60)>>>2)&0x3ff] = r3; + r3 = 5 << 16; + r3 = r3 + -22528; + page[(r17+60)>>>2] = r3; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r3 = tmp; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; + page[(r16+0)>>>2] = r2; r3 = r3 | 128; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r2; - writePages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff] = r18; + page[(addr)>>>2] = tmp; + page[(r16+16)>>>2] = r2; + page[(r16+20)>>>2] = r18; if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x3e7a4; + pc=0x4dda4; continue; } - case 0x3e6c4: - r31 = readPages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff]; - r19 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r18 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - r17 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r16 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; + case 0x4dcc4: + r31= page[(r29+100)>>>2]; + r19= page[(r29+96)>>>2]; + r18= page[(r29+92)>>>2]; + r17= page[(r29+88)>>>2]; + r16= page[(r29+84)>>>2]; r29 = r29 + 104; - /* Next insn is delay slot */ pc=r31; return; - case 0x3e6e4: + case 0x4dce4: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r2 = tmp; r3 = r2 & 65535; - case 0x3e6f0: + case 0x4dcf0: r3 = r3 & 128; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3e764; + pc=0x4dd64; continue; } r18 = r0 + 1024; - case 0x3e700: + case 0x4dd00: r2 = r2 | 2048; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r19 = r0 + r0; - /* Next insn is delay slot */ - pc=0x3e680; + pc=0x4dc80; continue; - case 0x3e714: + case 0x4dd14: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r2 = tmp; r3 = r2 & 512; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3e6c4; + pc=0x4dcc4; continue; } r2 = r2 | 2; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x3e730: + page[(addr)>>>2] = tmp; + case 0x4dd30: r2 = r16 + 67; - r31 = readPages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff]; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r2; + r31= page[(r29+100)>>>2]; + page[(r16+0)>>>2] = r2; + page[(r16+16)>>>2] = r2; r2 = r0 + 1; - r19 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r18 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - r17 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - writePages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff] = r2; - r16 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; + r19= page[(r29+96)>>>2]; + r18= page[(r29+92)>>>2]; + r17= page[(r29+88)>>>2]; + page[(r16+20)>>>2] = r2; + r16= page[(r29+84)>>>2]; r29 = r29 + 104; - /* Next insn is delay slot */ pc=r31; return; - case 0x3e764: + case 0x4dd64: r18 = r0 + 64; - /* Next insn is delay slot */ - pc=0x3e700; + pc=0x4dd00; continue; - case 0x3e770: - r2 = 4 << 16; - r3 = readPages[(r16+40)>>>12][((r16+40)>>>2)&0x3ff]; - r2 = r2 + 10240; + case 0x4dd70: + r2 = 5 << 16; + r3= page[(r16+40)>>>2]; + r2 = r2 + 4608; if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x3e670; + pc=0x4dc70; continue; } addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r18 = r0 + 1024; r2 = r2 | 1024; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r0 + 1024; - writePages[(r16+76)>>>12][((r16+76)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x3e680; + page[(r16+76)>>>2] = r2; + pc=0x4dc80; continue; - case 0x3e7a4: + case 0x4dda4: addr=r16+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r5 = tmp; r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x3e7b4; - pc=0x56800; - run_56800(); return; - case 0x3e7b4: + r31=0x4ddb4; + pc=0x57200; + run_57000(); return; + case 0x4ddb4: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3e6c4; + pc=0x4dcc4; continue; } addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r2 = r2 | 1; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x3e6c4; + page[(addr)>>>2] = tmp; + pc=0x4dcc4; continue; - case 0x3e800: - pc=0x3e800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3e800() throws ExecutionException { /* 0x3e800 - 0x3ea00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3e800: + case 0x4de00: r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x3ec00; - run_3ec00(); return; - case 0x3ea00: - pc=0x3ea00; + r4= page[(r28+-31512)>>>2]; + pc=0x4e200; + run_4e000(); return; + case 0x4e000: + pc=0x4e000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_3ea00() throws ExecutionException { /* 0x3ea00 - 0x3ec00 */ + private final void run_4e000() throws ExecutionException { /* 0x4e000 - 0x4e800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x3ea00: + case 0x4e000: r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x3ca00; - run_3ca00(); return; - case 0x3ec00: - pc=0x3ec00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3ec00() throws ExecutionException { /* 0x3ec00 - 0x3ee00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3ec00: + r4= page[(r28+-31512)>>>2]; + pc=0x4c400; + run_4c000(); return; + case 0x4e200: r2 = r5 + 11; r29 = r29 + -64; r3 = (r2&0xffffffffL) < (23&0xffffffffL) ? 1 : 0; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r19; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r30; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r23; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r22; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r21; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; + page[(r29+36)>>>2] = r19; + page[(r29+60)>>>2] = r31; + page[(r29+56)>>>2] = r30; + page[(r29+52)>>>2] = r23; + page[(r29+48)>>>2] = r22; + page[(r29+44)>>>2] = r21; + page[(r29+40)>>>2] = r20; + page[(r29+32)>>>2] = r18; + page[(r29+28)>>>2] = r17; + page[(r29+24)>>>2] = r16; r19 = r4 + r0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3ed04; + pc=0x4e304; continue; } r17 = r0 + -8; r17 = r2 & r17; if(r17 < 0) { - /* Next insn is delay slot */ - pc=0x3ed14; + pc=0x4e314; continue; } r5 = ((r17 & 0xffffffffL) < (r5 & 0xffffffffL)) ? 1 : 0; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x3ed14; + pc=0x4e314; continue; } - case 0x3ec5c: + case 0x4e25c: r4 = r19 + r0; - /* Next insn is delay slot */ - r31=0x3ec68; - pc=0x3f600; - run_3f600(); return; - case 0x3ec68: + r31=0x4e268; + pc=0x4ee00; + run_4e800(); return; + case 0x4e268: r2 = (r17&0xffffffffL) < (504&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3ed28; + pc=0x4e328; continue; } - r18 = 7 << 16; - r18 = r18 + 11104; + r18 = 6 << 16; + r18 = r18 + 25176; r2 = r18 + r17; - r16 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; + r16= page[(r2+12)>>>2]; r7 = r17 >>> 3; if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x3f2d8; - run_3f200(); return; + pc=0x4e8d8; + run_4e800(); return; } - case 0x3ec90: - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + case 0x4e290: + r3= page[(r16+4)>>>2]; r2 = r0 + -4; - r4 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; + r4= page[(r16+8)>>>2]; r2 = r3 & r2; - r3 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = r3; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r4; - case 0x3ecb0: + r3= page[(r16+12)>>>2]; + page[(r4+12)>>>2] = r3; + page[(r3+8)>>>2] = r4; + case 0x4e2b0: r2 = r16 + r2; - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; + r3= page[(r2+4)>>>2]; r4 = r19 + r0; r3 = r3 | 1; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x3eccc; - pc=0x3f800; - run_3f800(); return; - case 0x3eccc: + page[(r2+4)>>>2] = r3; + r31=0x4e2cc; + pc=0x4f000; + run_4f000(); return; + case 0x4e2cc: r2 = r16 + 8; - case 0x3ecd0: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r30 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r23 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r22 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r21 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r20 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r19 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + case 0x4e2d0: + r31= page[(r29+60)>>>2]; + r30= page[(r29+56)>>>2]; + r23= page[(r29+52)>>>2]; + r22= page[(r29+48)>>>2]; + r21= page[(r29+44)>>>2]; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; r29 = r29 + 64; - /* Next insn is delay slot */ pc=r31; return; - case 0x3ed04: + case 0x4e304: r17 = r0 + 16; r5 = ((r17 & 0xffffffffL) < (r5 & 0xffffffffL)) ? 1 : 0; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x3ec5c; + pc=0x4e25c; continue; } - case 0x3ed14: + case 0x4e314: r2 = r0 + 12; - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = r2; + page[(r19+0)>>>2] = r2; r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x3ecd0; + pc=0x4e2d0; continue; - case 0x3ed28: + case 0x4e328: r2 = r17 >>> 9; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3ef4c; - run_3ee00(); return; + pc=0x4e54c; + continue; } r3 = (r2&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3f1b8; - run_3f000(); return; + pc=0x4e7b8; + continue; } r8 = r17 >>> 6; r8 = r8 + 56; r6 = r8 << 1; - case 0x3ed4c: - r18 = 7 << 16; + case 0x4e34c: + r18 = 6 << 16; r6 = r6 << 2; - r18 = r18 + 11104; + r18 = r18 + 25176; r6 = r18 + r6; - r16 = readPages[(r6+12)>>>12][((r6+12)>>>2)&0x3ff]; + r16= page[(r6+12)>>>2]; if(r6 == r16) { - /* Next insn is delay slot */ - pc=0x3edd0; + pc=0x4e3d0; continue; } - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + r3= page[(r16+4)>>>2]; r2 = r0 + -4; r3 = r3 & r2; r4 = r3 - r17; r2 = r4 < 16 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3ef5c; - run_3ee00(); return; + pc=0x4e55c; + continue; } r7 = r0 + -4; if(r4 < 0) { - /* Next insn is delay slot */ - pc=0x3edc0; + pc=0x4e3c0; continue; } - /* Next insn is delay slot */ - pc=0x3ef68; - run_3ee00(); return; - case 0x3ed9c: - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + pc=0x4e568; + continue; + case 0x4e39c: + r3= page[(r16+4)>>>2]; r3 = r3 & r7; r2 = r3 - r17; r5 = r2 < 16 ? 1 : 0; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x3ef5c; - run_3ee00(); return; - } - if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x3ef68; - run_3ee00(); return; - } - case 0x3edc0: - r16 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - if(r6 != r16) { - /* Next insn is delay slot */ - pc=0x3ed9c; + pc=0x4e55c; continue; } - case 0x3edd0: - r7 = r8 + 1; - case 0x3edd4: - r9 = 7 << 16; - r16 = readPages[(r18+16)>>>12][((r18+16)>>>2)&0x3ff]; - r9 = r9 + 11112; - if(r16 == r9) { - /* Next insn is delay slot */ - pc=0x3f2b0; - run_3f200(); return; + if(r2 >= 0) { + pc=0x4e568; + continue; } - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + case 0x4e3c0: + r16= page[(r16+12)>>>2]; + if(r6 != r16) { + pc=0x4e39c; + continue; + } + case 0x4e3d0: + r7 = r8 + 1; + case 0x4e3d4: + r9 = 6 << 16; + r16= page[(r18+16)>>>2]; + r9 = r9 + 25184; + if(r16 == r9) { + pc=0x4e8b0; + run_4e800(); return; + } + r3= page[(r16+4)>>>2]; r2 = r0 + -4; r2 = r3 & r2; r3 = r2 - r17; r4 = r3 < 16 ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3f26c; - run_3f200(); return; + pc=0x4e86c; + run_4e800(); return; } - case 0x3ee00: - pc=0x3ee00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3ee00() throws ExecutionException { /* 0x3ee00 - 0x3f000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3ee00: - writePages[(r18+20)>>>12][((r18+20)>>>2)&0x3ff] = r9; - writePages[(r18+16)>>>12][((r18+16)>>>2)&0x3ff] = r9; + page[(r18+20)>>>2] = r9; + page[(r18+16)>>>2] = r9; if(r3 >= 0) { - /* Next insn is delay slot */ - pc=0x3ecb0; - run_3ec00(); return; + pc=0x4e2b0; + continue; } r3 = (r2&0xffffffffL) < (512&0xffffffffL) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3f1e4; - run_3f000(); return; + pc=0x4e7e4; + continue; } r3 = r2 >>> 3; r2 = r3 >> 2; r4 = r0 + 1; r4 = r4 << (r2&0x1f); r3 = r3 << 3; - r2 = readPages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff]; + r2= page[(r18+4)>>>2]; r3 = r18 + r3; r2 = r4 | r2; - r4 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - writePages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff] = r2; - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = r3; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r4; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r16; - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = r16; - case 0x3ee58: + r4= page[(r3+8)>>>2]; + page[(r18+4)>>>2] = r2; + page[(r16+12)>>>2] = r3; + page[(r16+8)>>>2] = r4; + page[(r3+8)>>>2] = r16; + page[(r4+12)>>>2] = r16; + case 0x4e458: r3 = r7 >> 2; r4 = r0 + 1; r4 = r4 << (r3&0x1f); r3 = ((r2 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3efa0; + pc=0x4e5a0; continue; } r3 = r2 & r4; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3ee98; + pc=0x4e498; continue; } r3 = r0 + -4; r7 = r7 & r3; - case 0x3ee84: + case 0x4e484: r4 = r4 << 1; r3 = r2 & r4; r7 = r7 + 4; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3ee84; + pc=0x4e484; continue; } - case 0x3ee98: + case 0x4e498: r8 = r0 + -4; - case 0x3ee9c: + case 0x4e49c: r10 = r7 << 3; r10 = r18 + r10; r6 = r10 + r0; r11 = r7 + r0; - case 0x3eeac: - r16 = readPages[(r6+12)>>>12][((r6+12)>>>2)&0x3ff]; + case 0x4e4ac: + r16= page[(r6+12)>>>2]; if(r6 != r16) { - /* Next insn is delay slot */ - pc=0x3eedc; + pc=0x4e4dc; continue; } - /* Next insn is delay slot */ - pc=0x3f2bc; - run_3f200(); return; - case 0x3eec4: + pc=0x4e8bc; + run_4e800(); return; + case 0x4e4c4: if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x3f2f4; - run_3f200(); return; + pc=0x4e8f4; + run_4e800(); return; } - r16 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; + r16= page[(r16+12)>>>2]; if(r6 == r16) { - /* Next insn is delay slot */ - pc=0x3f2bc; - run_3f200(); return; + pc=0x4e8bc; + run_4e800(); return; } - case 0x3eedc: - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + case 0x4e4dc: + r3= page[(r16+4)>>>2]; r3 = r3 & r8; r2 = r3 - r17; r5 = r2 < 16 ? 1 : 0; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x3eec4; + pc=0x4e4c4; continue; } - r4 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r5 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; + r4= page[(r16+12)>>>2]; + r5= page[(r16+8)>>>2]; r3 = r16 + r17; r17 = r17 | 1; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r17; - writePages[(r5+12)>>>12][((r5+12)>>>2)&0x3ff] = r4; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = r5; + page[(r16+4)>>>2] = r17; + page[(r5+12)>>>2] = r4; + page[(r4+8)>>>2] = r5; r4 = r2 | 1; - writePages[(r18+20)>>>12][((r18+20)>>>2)&0x3ff] = r3; - writePages[(r18+16)>>>12][((r18+16)>>>2)&0x3ff] = r3; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r4; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r9; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r9; + page[(r18+20)>>>2] = r3; + page[(r18+16)>>>2] = r3; + page[(r3+4)>>>2] = r4; + page[(r3+12)>>>2] = r9; + page[(r3+8)>>>2] = r9; r3 = r3 + r2; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; + page[(r3+0)>>>2] = r2; r4 = r19 + r0; - /* Next insn is delay slot */ - r31=0x3ef40; - pc=0x3f800; - run_3f800(); return; - case 0x3ef40: + r31=0x4e540; + pc=0x4f000; + run_4f000(); return; + case 0x4e540: r2 = r16 + 8; - /* Next insn is delay slot */ - pc=0x3ecd0; - run_3ec00(); return; - case 0x3ef4c: + pc=0x4e2d0; + continue; + case 0x4e54c: r6 = r0 + 126; r8 = r0 + 63; - /* Next insn is delay slot */ - pc=0x3ed4c; - run_3ec00(); return; - case 0x3ef5c: + pc=0x4e34c; + continue; + case 0x4e55c: r8 = r8 + -1; - /* Next insn is delay slot */ - pc=0x3edd0; - run_3ec00(); return; - case 0x3ef68: - r2 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r4 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; + pc=0x4e3d0; + continue; + case 0x4e568: + r2= page[(r16+12)>>>2]; + r4= page[(r16+8)>>>2]; r3 = r16 + r3; - writePages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff] = r2; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r4; - r2 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; + page[(r4+12)>>>2] = r2; + page[(r2+8)>>>2] = r4; + r2= page[(r3+4)>>>2]; r4 = r19 + r0; r2 = r2 | 1; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x3ef94; - pc=0x3f800; - run_3f800(); return; - case 0x3ef94: + page[(r3+4)>>>2] = r2; + r31=0x4e594; + pc=0x4f000; + run_4f000(); return; + case 0x4e594: r2 = r16 + 8; - /* Next insn is delay slot */ - pc=0x3ecd0; - run_3ec00(); return; - case 0x3efa0: - r16 = readPages[(r18+8)>>>12][((r18+8)>>>2)&0x3ff]; + pc=0x4e2d0; + continue; + case 0x4e5a0: + r16= page[(r18+8)>>>2]; r2 = r0 + -4; - r21 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + r21= page[(r16+4)>>>2]; r21 = r21 & r2; r2 = ((r21 & 0xffffffffL) < (r17 & 0xffffffffL)) ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3efd0; + pc=0x4e5d0; continue; } r2 = r21 - r17; r3 = r2 < 16 ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3f188; - run_3f000(); return; + pc=0x4e788; + continue; } - case 0x3efd0: - r22 = readPages[(r28+-30640)>>>12][((r28+-30640)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x3efdc; - pc=0x48b80; - run_48a00(); return; - case 0x3efdc: - r3 = readPages[(r28+-31068)>>>12][((r28+-31068)>>>2)&0x3ff]; + case 0x4e5d0: + r22= page[(r28+-31276)>>>2]; + r31=0x4e5dc; + pc=0x56fd0; + run_56800(); return; + case 0x4e5dc: + r3= page[(r28+-31508)>>>2]; r22 = r22 + 16; r23 = r2 + r0; r2 = r0 + -1; r30 = r16 + r21; r22 = r22 + r17; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x3f00c; - run_3f000(); return; + pc=0x4e60c; + continue; } r2 = r22 + -1; - case 0x3f000: - pc=0x3f000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3f000() throws ExecutionException { /* 0x3f000 - 0x3f200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3f000: r2 = r2 + r23; r22 = r0 - r23; r22 = r22 & r2; - case 0x3f00c: + case 0x4e60c: r4 = r19 + r0; r5 = r22 + r0; - /* Next insn is delay slot */ - r31=0x3f01c; - pc=0x48920; - run_48800(); return; - case 0x3f01c: + r31=0x4e61c; + pc=0x56f10; + run_56800(); return; + case 0x4e61c: r20 = r2 + r0; r2 = r0 + -1; if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x3f158; + pc=0x4e758; continue; } r2 = ((r20 & 0xffffffffL) < (r30 & 0xffffffffL)) ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3f354; - run_3f200(); return; + pc=0x4e954; + run_4e800(); return; } - case 0x3f038: - r3 = 7 << 16; - r2 = readPages[(r3+17968)>>>12][((r3+17968)>>>2)&0x3ff]; + case 0x4e638: + r3 = 6 << 16; + r2= page[(r3+31280)>>>2]; r4 = r23 + -1; r2 = r22 + r2; - writePages[(r3+17968)>>>12][((r3+17968)>>>2)&0x3ff] = r2; + page[(r3+31280)>>>2] = r2; if(r30 == r20) { - /* Next insn is delay slot */ - pc=0x3f4ac; - run_3f400(); return; + pc=0x4eaac; + run_4e800(); return; } - case 0x3f054: - r6 = readPages[(r28+-31068)>>>12][((r28+-31068)>>>2)&0x3ff]; + case 0x4e654: + r6= page[(r28+-31508)>>>2]; r5 = r0 + -1; if(r6 == r5) { - /* Next insn is delay slot */ - pc=0x3f4d0; - run_3f400(); return; + pc=0x4ead0; + run_4e800(); return; } r30 = r20 - r30; r2 = r2 + r30; - writePages[(r3+17968)>>>12][((r3+17968)>>>2)&0x3ff] = r2; - case 0x3f070: + page[(r3+31280)>>>2] = r2; + case 0x4e670: r2 = r20 & 7; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3f410; - run_3f400(); return; + pc=0x4ea10; + run_4e800(); return; } r5 = r0 + 8; r2 = r5 - r2; r20 = r20 + r2; - case 0x3f088: + case 0x4e688: r22 = r20 + r22; r2 = r2 + r23; r4 = r22 & r4; r22 = r2 - r4; r5 = r22 + r0; r4 = r19 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x3f0ac; - pc=0x48920; - run_48800(); return; - case 0x3f0ac: + page[(r29+16)>>>2] = r3; + r31=0x4e6ac; + pc=0x56f10; + run_56800(); return; + case 0x4e6ac: r4 = r0 + -1; - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + r3= page[(r29+16)>>>2]; if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x3f4fc; - run_3f400(); return; + pc=0x4eafc; + run_4e800(); return; } r2 = r2 - r20; r4 = r22 + r2; r4 = r4 | 1; - case 0x3f0c8: - r2 = readPages[(r3+17968)>>>12][((r3+17968)>>>2)&0x3ff]; - writePages[(r18+8)>>>12][((r18+8)>>>2)&0x3ff] = r20; + case 0x4e6c8: + r2= page[(r3+31280)>>>2]; + page[(r18+8)>>>2] = r20; r2 = r22 + r2; - writePages[(r3+17968)>>>12][((r3+17968)>>>2)&0x3ff] = r2; - writePages[(r20+4)>>>12][((r20+4)>>>2)&0x3ff] = r4; + page[(r3+31280)>>>2] = r2; + page[(r20+4)>>>2] = r4; if(r16 == r18) { - /* Next insn is delay slot */ - pc=0x3f128; + pc=0x4e728; continue; } r3 = (r21&0xffffffffL) < (16&0xffffffffL) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3f444; - run_3f400(); return; + pc=0x4ea44; + run_4e800(); return; } - r4 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + r4= page[(r16+4)>>>2]; r21 = r21 + -12; r3 = r0 + -8; r3 = r21 & r3; r4 = r4 & 1; r4 = r3 | r4; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r4; + page[(r16+4)>>>2] = r4; r5 = r0 + 5; r4 = r16 + r3; r3 = (r3&0xffffffffL) < (16&0xffffffffL) ? 1 : 0; - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r5; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = r5; + page[(r4+4)>>>2] = r5; + page[(r4+8)>>>2] = r5; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3f4dc; - run_3f400(); return; + pc=0x4eadc; + run_4e800(); return; } - case 0x3f128: - r3 = readPages[(r28+-30644)>>>12][((r28+-30644)>>>2)&0x3ff]; + case 0x4e728: + r3= page[(r28+-31280)>>>2]; r3 = ((r3 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3f140; + pc=0x4e740; continue; } - writePages[(r28+-30644)>>>12][((r28+-30644)>>>2)&0x3ff] = r2; - case 0x3f140: - r3 = readPages[(r28+-30648)>>>12][((r28+-30648)>>>2)&0x3ff]; + page[(r28+-31280)>>>2] = r2; + case 0x4e740: + r3= page[(r28+-31284)>>>2]; r3 = ((r3 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3f158; + pc=0x4e758; continue; } - writePages[(r28+-30648)>>>12][((r28+-30648)>>>2)&0x3ff] = r2; - case 0x3f158: - r16 = readPages[(r18+8)>>>12][((r18+8)>>>2)&0x3ff]; + page[(r28+-31284)>>>2] = r2; + case 0x4e758: + r16= page[(r18+8)>>>2]; r2 = r0 + -4; - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + r3= page[(r16+4)>>>2]; r3 = r3 & r2; - case 0x3f16c: + case 0x4e76c: r2 = r3 - r17; r3 = ((r3 & 0xffffffffL) < (r17 & 0xffffffffL)) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3f3d8; - run_3f200(); return; + pc=0x4e9d8; + run_4e800(); return; } r3 = r2 < 16 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3f3d8; - run_3f200(); return; + pc=0x4e9d8; + run_4e800(); return; } - case 0x3f188: + case 0x4e788: r3 = r17 | 1; r2 = r2 | 1; r17 = r16 + r17; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r3; + page[(r16+4)>>>2] = r3; r4 = r19 + r0; - writePages[(r18+8)>>>12][((r18+8)>>>2)&0x3ff] = r17; - writePages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x3f1ac; - pc=0x3f800; - run_3f800(); return; - case 0x3f1ac: + page[(r18+8)>>>2] = r17; + page[(r17+4)>>>2] = r2; + r31=0x4e7ac; + pc=0x4f000; + run_4f000(); return; + case 0x4e7ac: r2 = r16 + 8; - /* Next insn is delay slot */ - pc=0x3ecd0; - run_3ec00(); return; - case 0x3f1b8: + pc=0x4e2d0; + continue; + case 0x4e7b8: r3 = (r2&0xffffffffL) < (21&0xffffffffL) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3f330; - run_3f200(); return; + pc=0x4e930; + run_4e800(); return; } r3 = (r2&0xffffffffL) < (85&0xffffffffL) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3f3f0; - run_3f200(); return; + pc=0x4e9f0; + run_4e800(); return; } r8 = r17 >>> 12; r8 = r8 + 110; r6 = r8 << 1; - /* Next insn is delay slot */ - pc=0x3ed4c; - run_3ec00(); return; - case 0x3f1e4: + pc=0x4e34c; + continue; + case 0x4e7e4: r3 = r2 >>> 9; r4 = (r3&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x3f340; - run_3f200(); return; + pc=0x4e940; + run_4e800(); return; } r4 = (r3&0xffffffffL) < (21&0xffffffffL) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3f47c; - run_3f400(); return; + pc=0x4ea7c; + run_4e800(); return; } - case 0x3f200: - pc=0x3f200; + case 0x4e800: + pc=0x4e800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_3f200() throws ExecutionException { /* 0x3f200 - 0x3f400 */ + private final void run_4e800() throws ExecutionException { /* 0x4e800 - 0x4f000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x3f200: + case 0x4e800: r4 = r3 + 91; r5 = r4 << 1; - case 0x3f208: + case 0x4e808: r5 = r5 << 2; r5 = r18 + r5; - r3 = readPages[(r5+8)>>>12][((r5+8)>>>2)&0x3ff]; + r3= page[(r5+8)>>>2]; if(r3 == r5) { - /* Next insn is delay slot */ - pc=0x3f41c; - run_3f400(); return; + pc=0x4ea1c; + continue; } r6 = r0 + -4; - case 0x3f224: - r4 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; + case 0x4e824: + r4= page[(r3+4)>>>2]; r4 = r4 & r6; r4 = ((r2 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3f24c; + pc=0x4e84c; continue; } - r3 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; + r3= page[(r3+8)>>>2]; if(r5 != r3) { - /* Next insn is delay slot */ - pc=0x3f224; + pc=0x4e824; continue; } - case 0x3f24c: - r4 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r2 = readPages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff]; - case 0x3f254: - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = r4; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r3; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = r16; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - pc=0x3ee58; - run_3ee00(); return; - case 0x3f26c: + case 0x4e84c: + r4= page[(r3+12)>>>2]; + r2= page[(r18+4)>>>2]; + case 0x4e854: + page[(r16+12)>>>2] = r4; + page[(r16+8)>>>2] = r3; + page[(r4+8)>>>2] = r16; + page[(r3+12)>>>2] = r16; + pc=0x4e458; + run_4e000(); return; + case 0x4e86c: r2 = r16 + r17; r4 = r3 | 1; r17 = r17 | 1; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r17; - writePages[(r18+20)>>>12][((r18+20)>>>2)&0x3ff] = r2; - writePages[(r18+16)>>>12][((r18+16)>>>2)&0x3ff] = r2; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r4; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r9; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r9; + page[(r16+4)>>>2] = r17; + page[(r18+20)>>>2] = r2; + page[(r18+16)>>>2] = r2; + page[(r2+4)>>>2] = r4; + page[(r2+12)>>>2] = r9; + page[(r2+8)>>>2] = r9; r2 = r2 + r3; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; + page[(r2+0)>>>2] = r3; r4 = r19 + r0; - /* Next insn is delay slot */ - r31=0x3f2a4; - pc=0x3f800; - run_3f800(); return; - case 0x3f2a4: + r31=0x4e8a4; + pc=0x4f000; + run_4f000(); return; + case 0x4e8a4: r2 = r16 + 8; - /* Next insn is delay slot */ - pc=0x3ecd0; - run_3ec00(); return; - case 0x3f2b0: - r2 = readPages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x3ee58; - run_3ee00(); return; - case 0x3f2bc: + pc=0x4e2d0; + run_4e000(); return; + case 0x4e8b0: + r2= page[(r18+4)>>>2]; + pc=0x4e458; + run_4e000(); return; + case 0x4e8bc: r11 = r11 + 1; r2 = r11 & 3; r6 = r6 + 8; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3eeac; - run_3ee00(); return; + pc=0x4e4ac; + run_4e000(); return; } - /* Next insn is delay slot */ - pc=0x3f378; + pc=0x4e978; continue; - case 0x3f2d8: + case 0x4e8d8: r2 = r16 + 8; - r16 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; + r16= page[(r16+20)>>>2]; r7 = r7 + 2; if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x3edd4; - run_3ec00(); return; + pc=0x4e3d4; + run_4e000(); return; } - /* Next insn is delay slot */ - pc=0x3ec90; - run_3ec00(); return; - case 0x3f2f4: + pc=0x4e290; + run_4e000(); return; + case 0x4e8f4: r3 = r16 + r3; - r2 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; + r2= page[(r3+4)>>>2]; r4 = r19 + r0; r2 = r2 | 1; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r3 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x3f324; - pc=0x3f800; - run_3f800(); return; - case 0x3f324: + page[(r3+4)>>>2] = r2; + r2= page[(r16+12)>>>2]; + r3= page[(r16+8)>>>2]; + page[(r3+12)>>>2] = r2; + page[(r2+8)>>>2] = r3; + r31=0x4e924; + pc=0x4f000; + run_4f000(); return; + case 0x4e924: r2 = r16 + 8; - /* Next insn is delay slot */ - pc=0x3ecd0; - run_3ec00(); return; - case 0x3f330: + pc=0x4e2d0; + run_4e000(); return; + case 0x4e930: r8 = r2 + 91; r6 = r8 << 1; - /* Next insn is delay slot */ - pc=0x3ed4c; - run_3ec00(); return; - case 0x3f340: + pc=0x4e34c; + run_4e000(); return; + case 0x4e940: r4 = r2 >>> 6; r4 = r4 + 56; r5 = r4 << 1; - /* Next insn is delay slot */ - pc=0x3f208; + pc=0x4e808; continue; - case 0x3f354: + case 0x4e954: if(r16 != r18) { - /* Next insn is delay slot */ - pc=0x3f158; - run_3f000(); return; + pc=0x4e758; + run_4e000(); return; } - /* Next insn is delay slot */ - pc=0x3f038; - run_3f000(); return; - case 0x3f364: + pc=0x4e638; + run_4e000(); return; + case 0x4e964: r2 = r10 + -8; - r10 = readPages[(r10+0)>>>12][((r10+0)>>>2)&0x3ff]; + r10= page[(r10+0)>>>2]; r7 = r7 + -1; if(r10 != r2) { - /* Next insn is delay slot */ - pc=0x3f55c; - run_3f400(); return; - } - case 0x3f378: - r2 = r7 & 3; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3f364; + pc=0x4eb5c; continue; } - r2 = readPages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff]; + case 0x4e978: + r2 = r7 & 3; + if(r2 != r0) { + pc=0x4e964; + continue; + } + r2= page[(r18+4)>>>2]; r3 = ~(r0 | r4); r2 = r3 & r2; - writePages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff] = r2; - case 0x3f394: + page[(r18+4)>>>2] = r2; + case 0x4e994: r4 = r4 << 1; r3 = ((r2 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3efa0; - run_3ee00(); return; + pc=0x4e5a0; + run_4e000(); return; } if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3efa0; - run_3ee00(); return; + pc=0x4e5a0; + run_4e000(); return; } r3 = r2 & r4; r7 = r11 + r0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x3ee9c; - run_3ee00(); return; + pc=0x4e49c; + run_4e000(); return; } - case 0x3f3bc: + case 0x4e9bc: r4 = r4 << 1; r3 = r2 & r4; r7 = r7 + 4; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3f3bc; + pc=0x4e9bc; continue; } - /* Next insn is delay slot */ - pc=0x3ee9c; - run_3ee00(); return; - case 0x3f3d8: + pc=0x4e49c; + run_4e000(); return; + case 0x4e9d8: r4 = r19 + r0; - /* Next insn is delay slot */ - r31=0x3f3e4; - pc=0x3f800; - run_3f800(); return; - case 0x3f3e4: + r31=0x4e9e4; + pc=0x4f000; + run_4f000(); return; + case 0x4e9e4: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x3ecd0; - run_3ec00(); return; - case 0x3f3f0: + pc=0x4e2d0; + run_4e000(); return; + case 0x4e9f0: r3 = (r2&0xffffffffL) < (341&0xffffffffL) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3f45c; - run_3f400(); return; + pc=0x4ea5c; + continue; } r8 = r17 >>> 15; - case 0x3f400: - pc=0x3f400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3f400() throws ExecutionException { /* 0x3f400 - 0x3f600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3f400: r8 = r8 + 119; r6 = r8 << 1; - /* Next insn is delay slot */ - pc=0x3ed4c; - run_3ec00(); return; - case 0x3f410: + pc=0x4e34c; + run_4e000(); return; + case 0x4ea10: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x3f088; - run_3f000(); return; - case 0x3f41c: + pc=0x4e688; + run_4e000(); return; + case 0x4ea1c: r2 = r0 + 1; r4 = r4 >> 2; r4 = r2 << (r4&0x1f); - r2 = readPages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff]; + r2= page[(r18+4)>>>2]; r2 = r4 | r2; - writePages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff] = r2; + page[(r18+4)>>>2] = r2; r4 = r3 + r0; - /* Next insn is delay slot */ - pc=0x3f254; - run_3f200(); return; - case 0x3f444: + pc=0x4e854; + continue; + case 0x4ea44: r2 = r0 + 1; - writePages[(r20+4)>>>12][((r20+4)>>>2)&0x3ff] = r2; + page[(r20+4)>>>2] = r2; r16 = r20 + r0; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x3f16c; - run_3f000(); return; - case 0x3f45c: + pc=0x4e76c; + run_4e000(); return; + case 0x4ea5c: r2 = (r2&0xffffffffL) < (1365&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3f49c; + pc=0x4ea9c; continue; } r8 = r17 >>> 18; r8 = r8 + 124; r6 = r8 << 1; - /* Next insn is delay slot */ - pc=0x3ed4c; - run_3ec00(); return; - case 0x3f47c: + pc=0x4e34c; + run_4e000(); return; + case 0x4ea7c: r4 = (r3&0xffffffffL) < (85&0xffffffffL) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3f50c; + pc=0x4eb0c; continue; } r4 = r2 >>> 12; r4 = r4 + 110; r5 = r4 << 1; - /* Next insn is delay slot */ - pc=0x3f208; - run_3f200(); return; - case 0x3f49c: + pc=0x4e808; + continue; + case 0x4ea9c: r6 = r0 + 252; r8 = r0 + 126; - /* Next insn is delay slot */ - pc=0x3ed4c; - run_3ec00(); return; - case 0x3f4ac: + pc=0x4e34c; + run_4e000(); return; + case 0x4eaac: r5 = r30 & r4; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x3f054; - run_3f000(); return; + pc=0x4e654; + run_4e000(); return; } - r3 = readPages[(r18+8)>>>12][((r18+8)>>>2)&0x3ff]; + r3= page[(r18+8)>>>2]; r4 = r22 + r21; r4 = r4 | 1; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=0x3f128; - run_3f000(); return; - case 0x3f4d0: - writePages[(r28+-31068)>>>12][((r28+-31068)>>>2)&0x3ff] = r20; - /* Next insn is delay slot */ - pc=0x3f070; - run_3f000(); return; - case 0x3f4dc: + page[(r3+4)>>>2] = r4; + pc=0x4e728; + run_4e000(); return; + case 0x4ead0: + page[(r28+-31508)>>>2] = r20; + pc=0x4e670; + run_4e000(); return; + case 0x4eadc: r4 = r19 + r0; r5 = r16 + 8; - /* Next insn is delay slot */ - r31=0x3f4ec; - pc=0x3ca00; - run_3ca00(); return; - case 0x3f4ec: - r2 = 7 << 16; - r2 = readPages[(r2+17968)>>>12][((r2+17968)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x3f128; - run_3f000(); return; - case 0x3f4fc: + r31=0x4eaec; + pc=0x4c400; + run_4c000(); return; + case 0x4eaec: + r2 = 6 << 16; + r2= page[(r2+31280)>>>2]; + pc=0x4e728; + run_4e000(); return; + case 0x4eafc: r4 = r0 + 1; r22 = r0 + r0; - /* Next insn is delay slot */ - pc=0x3f0c8; - run_3f000(); return; - case 0x3f50c: + pc=0x4e6c8; + run_4e000(); return; + case 0x4eb0c: r4 = (r3&0xffffffffL) < (341&0xffffffffL) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3f52c; + pc=0x4eb2c; continue; } r4 = r2 >>> 15; r4 = r4 + 119; r5 = r4 << 1; - /* Next insn is delay slot */ - pc=0x3f208; - run_3f200(); return; - case 0x3f52c: + pc=0x4e808; + continue; + case 0x4eb2c: r3 = (r3&0xffffffffL) < (1365&0xffffffffL) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x3f54c; + pc=0x4eb4c; continue; } r4 = r2 >>> 18; r4 = r4 + 124; r5 = r4 << 1; - /* Next insn is delay slot */ - pc=0x3f208; - run_3f200(); return; - case 0x3f54c: + pc=0x4e808; + continue; + case 0x4eb4c: r5 = r0 + 252; r4 = r0 + 126; - /* Next insn is delay slot */ - pc=0x3f208; - run_3f200(); return; - case 0x3f55c: - r2 = readPages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x3f394; - run_3f200(); return; - case 0x3f600: - pc=0x3f600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3f600() throws ExecutionException { /* 0x3f600 - 0x3f800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3f600: - /* Next insn is delay slot */ + pc=0x4e808; + continue; + case 0x4eb5c: + r2= page[(r18+4)>>>2]; + pc=0x4e994; + continue; + case 0x4ec00: + r2 = (r6&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; + if(r2 != r0) { + pc=0x4ec9c; + continue; + } + r2 = r4 | r5; + r2 = r2 & 3; + if(r2 == r0) { + pc=0x4ec70; + continue; + } + case 0x4ec1c: + addr=r4+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r7 = tmp; + addr=r5+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + if(r7 != r2) { + pc=0x4ecac; + continue; + } + r6 = r6 + -1; + r3 = r0 + r0; + pc=0x4ec54; + continue; + case 0x4ec40: + addr=r4+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r7 = tmp; + addr=r5+0; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; + r2 = tmp; + r3 = r3 + 1; + if(r7 != r2) { + pc=0x4ecac; + continue; + } + case 0x4ec54: + r4 = r4 + 1; + r5 = r5 + 1; + if(r3 != r6) { + pc=0x4ec40; + continue; + } + case 0x4ec64: + r2 = r0 + r0; pc=r31; return; - case 0x3f800: - pc=0x3f800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3f800() throws ExecutionException { /* 0x3f800 - 0x3fa00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3f800: - /* Next insn is delay slot */ + case 0x4ec70: + r3= page[(r4+0)>>>2]; + r2= page[(r5+0)>>>2]; + if(r3 != r2) { + pc=0x4ec9c; + continue; + } + r6 = r6 + -4; + r2 = (r6&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; + r4 = r4 + 4; + r5 = r5 + 4; + if(r2 == r0) { + pc=0x4ec70; + continue; + } + case 0x4ec9c: + if(r6 != r0) { + pc=0x4ec1c; + continue; + } + pc=0x4ec64; + continue; + case 0x4ecac: + r2 = r7 - r2; pc=r31; return; - case 0x3fa00: - pc=0x3fa00; + case 0x4ee00: + pc=r31; + return; + case 0x4f000: + pc=0x4f000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_3fa00() throws ExecutionException { /* 0x3fa00 - 0x3fc00 */ + private final void run_4f000() throws ExecutionException { /* 0x4f000 - 0x4f800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x3fa00: + case 0x4f000: + pc=r31; + return; + case 0x4f200: r29 = r29 + -32; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r6; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r7; - r6 = r5 + r0; - r5 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - r7 = r29 + 40; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x3fa28; - pc=0x45c00; - run_45c00(); return; - case 0x3fa28: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x3fc00: - pc=0x3fc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3fc00() throws ExecutionException { /* 0x3fc00 - 0x3fe00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3fc00: - r29 = r29 + -32; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r6; + page[(r29+40)>>>2] = r6; r6 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r7; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r5; - r5 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; + r4= page[(r28+-31512)>>>2]; + page[(r29+44)>>>2] = r7; + page[(r29+36)>>>2] = r5; + r5= page[(r4+8)>>>2]; r7 = r29 + 36; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x3fc30; - pc=0x45c00; - run_45c00(); return; - case 0x3fc30: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + page[(r29+28)>>>2] = r31; + page[(r29+16)>>>2] = r7; + r31=0x4f230; + pc=0x54600; + run_54000(); return; + case 0x4f230: + r31= page[(r29+28)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x3fe00: - pc=0x3fe00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_3fe00() throws ExecutionException { /* 0x3fe00 - 0x40000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x3fe00: + case 0x4f400: r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; + page[(r29+24)>>>2] = r16; + page[(r29+28)>>>2] = r31; r16 = r4 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x3fe28; + pc=0x4f428; continue; } - r2 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; + r2= page[(r4+56)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x3fec8; + pc=0x4f4c8; continue; } - case 0x3fe28: - r2 = readPages[(r6+8)>>>12][((r6+8)>>>2)&0x3ff]; + case 0x4f428: + r2= page[(r6+8)>>>2]; r2 = r2 + -1; - writePages[(r6+8)>>>12][((r6+8)>>>2)&0x3ff] = r2; + page[(r6+8)>>>2] = r2; if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x3fe74; + pc=0x4f474; continue; } - r2 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; + r2= page[(r6+0)>>>2]; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - case 0x3fe54: + page[(addr)>>>2] = tmp; + r2= page[(r6+0)>>>2]; + case 0x4f454: r3 = r2 + 1; - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - writePages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff] = r3; + r31= page[(r29+28)>>>2]; + page[(r6+0)>>>2] = r3; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r2 = tmp; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + r16= page[(r29+24)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x3fe74: - r3 = readPages[(r6+24)>>>12][((r6+24)>>>2)&0x3ff]; + case 0x4f474: + r3= page[(r6+24)>>>2]; r2 = r2 < r3 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x3fee8; + pc=0x4f4e8; continue; } - r2 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; + r2= page[(r6+0)>>>2]; r3 = r0 + 10; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r2= page[(r6+0)>>>2]; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r4 = tmp; if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x3fe54; + pc=0x4f454; continue; } - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + r31= page[(r29+28)>>>2]; r4 = r16 + r0; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + r16= page[(r29+24)>>>2]; r5 = r0 + 10; r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x48200; - run_48200(); return; - case 0x3fec8: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r5; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - r31=0x3fed8; - pc=0x3a600; - run_3a600(); return; - case 0x3fed8: - r6 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r5 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x3fe28; + pc=0x56a00; + run_56800(); return; + case 0x4f4c8: + page[(r29+16)>>>2] = r5; + page[(r29+20)>>>2] = r6; + r31=0x4f4d8; + pc=0x4ac00; + run_4a800(); return; + case 0x4f4d8: + r6= page[(r29+20)>>>2]; + r5= page[(r29+16)>>>2]; + pc=0x4f428; continue; - case 0x3fee8: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + case 0x4f4e8: + r31= page[(r29+28)>>>2]; r4 = r16 + r0; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + r16= page[(r29+24)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x48200; - run_48200(); return; - case 0x40000: - pc=0x40000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_40000() throws ExecutionException { /* 0x40000 - 0x40200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x40000: - r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - r17 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r16 = r5 + r0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x40034; - continue; - } - r3 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x400cc; - continue; - } - case 0x40034: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r2 = r2 + -1; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x40084; - continue; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - case 0x40060: - r3 = r2 + 1; - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r3; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x40084: - r3 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - r2 = r2 < r3 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x400dc; - continue; - } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r0 + 10; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r17&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x40060; - continue; - } - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r0 + 10; - /* Next insn is delay slot */ - pc=0x400e4; - continue; - case 0x400cc: - /* Next insn is delay slot */ - r31=0x400d4; - pc=0x3a600; - run_3a600(); return; - case 0x400d4: - /* Next insn is delay slot */ - pc=0x40034; - continue; - case 0x400dc: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r17 + r0; - case 0x400e4: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r6 = r16 + r0; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x48200; - run_48200(); return; - case 0x40200: - pc=0x40200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_40200() throws ExecutionException { /* 0x40200 - 0x40400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x40200: + pc=0x56a00; + run_56800(); return; + case 0x4f600: r29 = r29 + -64; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r17; + page[(r29+56)>>>2] = r17; r17 = r4 + r0; r4 = r5 + r0; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r16; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; + page[(r29+52)>>>2] = r16; + page[(r29+60)>>>2] = r31; r16 = r5 + r0; - /* Next insn is delay slot */ - r31=0x40224; + r31=0x4f624; pc=0x10268; - run_10200(); return; - case 0x40224: - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; + run_10000(); return; + case 0x4f624: + page[(r29+20)>>>2] = r2; r2 = r2 + 1; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; + page[(r29+40)>>>2] = r2; r2 = r29 + 16; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; + page[(r29+32)>>>2] = r2; r2 = r0 + 2; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r3 = 7 << 16; - r3 = r3 + -7636; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r3; + page[(r29+36)>>>2] = r2; + r2= page[(r28+-31512)>>>2]; + r3 = 6 << 16; + r3 = r3 + -4040; + r2= page[(r2+8)>>>2]; + page[(r29+24)>>>2] = r3; r3 = r0 + 1; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r3; + page[(r29+28)>>>2] = r3; addr=r2+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r3 = tmp; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; + page[(r29+16)>>>2] = r16; r4 = r3 & 8192; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x40288; + pc=0x4f688; continue; } r3 = r3 | 8192; - r4 = readPages[(r2+100)>>>12][((r2+100)>>>2)&0x3ff]; + r4= page[(r2+100)>>>2]; addr=r2+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + -8193; r3 = r4 & r3; - writePages[(r2+100)>>>12][((r2+100)>>>2)&0x3ff] = r3; - case 0x40288: - r5 = readPages[(r17+8)>>>12][((r17+8)>>>2)&0x3ff]; + page[(r2+100)>>>2] = r3; + case 0x4f688: + r5= page[(r17+8)>>>2]; r4 = r17 + r0; r6 = r29 + 32; - /* Next insn is delay slot */ - r31=0x4029c; - pc=0x59c00; - run_59c00(); return; - case 0x4029c: + r31=0x4f69c; + pc=0x59e00; + run_59800(); return; + case 0x4f69c: r3 = r0 + 10; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x402c4; + pc=0x4f6c4; continue; } - case 0x402a8: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r17 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r16 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; + case 0x4f6a8: + r31= page[(r29+60)>>>2]; + r17= page[(r29+56)>>>2]; + r16= page[(r29+52)>>>2]; r2 = r3 + r0; r29 = r29 + 64; - /* Next insn is delay slot */ pc=r31; return; - case 0x402c4: + case 0x4f6c4: r3 = r0 + -1; - /* Next insn is delay slot */ - pc=0x402a8; + pc=0x4f6a8; continue; - case 0x40400: - pc=0x40400; + case 0x4f800: + pc=0x4f800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_40400() throws ExecutionException { /* 0x40400 - 0x40600 */ + private final void run_4f800() throws ExecutionException { /* 0x4f800 - 0x50000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x40400: + case 0x4f800: r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x40200; - run_40200(); return; - case 0x40600: - pc=0x40600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_40600() throws ExecutionException { /* 0x40600 - 0x40800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x40600: + r4= page[(r28+-31512)>>>2]; + pc=0x4f600; + run_4f000(); return; + case 0x4fa00: r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; + r4= page[(r28+-31512)>>>2]; r6 = r5 + r0; r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x40800; - run_40800(); return; - case 0x40800: - pc=0x40800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_40800() throws ExecutionException { /* 0x40800 - 0x40a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x40800: + pc=0x4fc00; + continue; + case 0x4fc00: r29 = r29 + -56; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r30; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r23; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r22; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r21; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; + page[(r29+32)>>>2] = r20; + page[(r29+16)>>>2] = r16; + page[(r29+52)>>>2] = r31; + page[(r29+48)>>>2] = r30; + page[(r29+44)>>>2] = r23; + page[(r29+40)>>>2] = r22; + page[(r29+36)>>>2] = r21; + page[(r29+28)>>>2] = r19; + page[(r29+24)>>>2] = r18; + page[(r29+20)>>>2] = r17; r16 = r5 + r0; r20 = r6 + r0; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x40b4c; - run_40a00(); return; + pc=0x4ff4c; + continue; } r21 = r4 + r0; - /* Next insn is delay slot */ - r31=0x40848; - pc=0x3f600; - run_3f600(); return; - case 0x40848: - r3 = readPages[(r16+-4)>>>12][((r16+-4)>>>2)&0x3ff]; + r31=0x4fc48; + pc=0x4ee00; + run_4e800(); return; + case 0x4fc48: + r3= page[(r16+-4)>>>2]; r2 = r20 + 11; r17 = r0 + -4; r4 = (r2&0xffffffffL) < (23&0xffffffffL) ? 1 : 0; r19 = r16 + -8; r17 = r3 & r17; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x4098c; + pc=0x4fd8c; continue; } r4 = r0 + 16; r18 = r0 + 16; - case 0x40870: + case 0x4fc70: r2 = ((r18 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x409a0; + pc=0x4fda0; continue; } r2 = r17 < r4 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x409e0; + pc=0x4fde0; continue; } - r23 = 7 << 16; - r23 = r23 + 11104; - r5 = readPages[(r23+8)>>>12][((r23+8)>>>2)&0x3ff]; + r23 = 6 << 16; + r23 = r23 + 25176; + r5= page[(r23+8)>>>2]; r2 = r19 + r17; if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x40b84; - run_40a00(); return; + pc=0x4ff84; + continue; } - r6 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; + r6= page[(r2+4)>>>2]; r7 = r0 + -2; r7 = r6 & r7; r7 = r2 + r7; - r7 = readPages[(r7+4)>>>12][((r7+4)>>>2)&0x3ff]; + r7= page[(r7+4)>>>2]; r7 = r7 & 1; if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x409b4; + pc=0x4fdb4; continue; } r6 = r0 + r0; r2 = r0 + r0; - case 0x408cc: + case 0x4fccc: r3 = r3 & 1; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x40aa4; - run_40a00(); return; + pc=0x4fea4; + continue; } - r22 = readPages[(r16+-8)>>>12][((r16+-8)>>>2)&0x3ff]; + r22= page[(r16+-8)>>>2]; r3 = r0 + -4; r22 = r19 - r22; - r7 = readPages[(r22+4)>>>12][((r22+4)>>>2)&0x3ff]; + r7= page[(r22+4)>>>2]; r3 = r7 & r3; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x40c98; - run_40c00(); return; + pc=0x50098; + run_50000(); return; } r3 = r3 + r17; if(r2 == r5) { - /* Next insn is delay slot */ - pc=0x40ca4; - run_40c00(); return; + pc=0x500a4; + run_50000(); return; } r23 = r6 + r3; r5 = r23 < r4 ? 1 : 0; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x40a94; - run_40a00(); return; + pc=0x4fe94; + continue; } - r3 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - case 0x40928: - r2 = readPages[(r22+12)>>>12][((r22+12)>>>2)&0x3ff]; - r3 = readPages[(r22+8)>>>12][((r22+8)>>>2)&0x3ff]; + r3= page[(r2+12)>>>2]; + r2= page[(r2+8)>>>2]; + page[(r2+12)>>>2] = r3; + page[(r3+8)>>>2] = r2; + case 0x4fd28: + r2= page[(r22+12)>>>2]; + r3= page[(r22+8)>>>2]; r6 = r17 + -4; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r3; + page[(r3+12)>>>2] = r2; + page[(r2+8)>>>2] = r3; r2 = (r6&0xffffffffL) < (37&0xffffffffL) ? 1 : 0; r19 = r22 + 8; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x40c70; - run_40c00(); return; + pc=0x50070; + run_50000(); return; } r2 = (r6&0xffffffffL) < (20&0xffffffffL) ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x40be4; - run_40a00(); return; + pc=0x4ffe4; + continue; } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - writePages[(r22+8)>>>12][((r22+8)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - writePages[(r22+12)>>>12][((r22+12)>>>2)&0x3ff] = r2; + r2= page[(r16+0)>>>2]; + page[(r22+8)>>>2] = r2; + r2= page[(r16+4)>>>2]; + page[(r22+12)>>>2] = r2; r2 = (r6&0xffffffffL) < (28&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x40dc0; - run_40c00(); return; + pc=0x501c0; + run_50000(); return; } r3 = r22 + 16; r16 = r16 + 8; - /* Next insn is delay slot */ - pc=0x40be8; - run_40a00(); return; - case 0x4098c: + pc=0x4ffe8; + continue; + case 0x4fd8c: r18 = r0 + -8; r18 = r2 & r18; r4 = r18 + r0; if(r18 >= 0) { - /* Next insn is delay slot */ - pc=0x40870; + pc=0x4fc70; continue; } - case 0x409a0: + case 0x4fda0: r2 = r0 + 12; - writePages[(r21+0)>>>12][((r21+0)>>>2)&0x3ff] = r2; + page[(r21+0)>>>2] = r2; r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x40a20; - run_40a00(); return; - case 0x409b4: + pc=0x4fe20; + continue; + case 0x4fdb4: r7 = r0 + -4; r6 = r6 & r7; r7 = r6 + r17; r8 = r7 < r4 ? 1 : 0; if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x408cc; + pc=0x4fccc; continue; } - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r2 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; + r4= page[(r2+12)>>>2]; + r2= page[(r2+8)>>>2]; r17 = r7 + r0; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r4; - writePages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff] = r2; - case 0x409e0: + page[(r2+12)>>>2] = r4; + page[(r4+8)>>>2] = r2; + case 0x4fde0: r6 = r17 - r18; r2 = (r6&0xffffffffL) < (16&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x40a54; - run_40a00(); return; + pc=0x4fe54; + continue; } r3 = r3 & 1; r3 = r3 | r17; - writePages[(r19+4)>>>12][((r19+4)>>>2)&0x3ff] = r3; + page[(r19+4)>>>2] = r3; r17 = r19 + r17; - case 0x40a00: - pc=0x40a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_40a00() throws ExecutionException { /* 0x40a00 - 0x40c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x40a00: - r2 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; + r2= page[(r17+4)>>>2]; r2 = r2 | 1; - writePages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff] = r2; - case 0x40a10: + page[(r17+4)>>>2] = r2; + case 0x4fe10: r4 = r21 + r0; - /* Next insn is delay slot */ - r31=0x40a1c; - pc=0x3f800; - run_3f800(); return; - case 0x40a1c: + r31=0x4fe1c; + pc=0x4f000; + run_4f000(); return; + case 0x4fe1c: r2 = r16 + r0; - case 0x40a20: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r30 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r23 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + case 0x4fe20: + r31= page[(r29+52)>>>2]; + r30= page[(r29+48)>>>2]; + r23= page[(r29+44)>>>2]; + r22= page[(r29+40)>>>2]; + r21= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; r29 = r29 + 56; - /* Next insn is delay slot */ pc=r31; return; - case 0x40a54: + case 0x4fe54: r3 = r3 & 1; r5 = r19 + r18; r2 = r6 | 1; r18 = r3 | r18; - writePages[(r19+4)>>>12][((r19+4)>>>2)&0x3ff] = r18; + page[(r19+4)>>>2] = r18; r6 = r5 + r6; - writePages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff] = r2; - r2 = readPages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff]; + page[(r5+4)>>>2] = r2; + r2= page[(r6+4)>>>2]; r4 = r21 + r0; r2 = r2 | 1; - writePages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff] = r2; + page[(r6+4)>>>2] = r2; r5 = r5 + 8; - /* Next insn is delay slot */ - r31=0x40a8c; - pc=0x3ca00; - run_3ca00(); return; - case 0x40a8c: - /* Next insn is delay slot */ - pc=0x40a10; + r31=0x4fe8c; + pc=0x4c400; + run_4c000(); return; + case 0x4fe8c: + pc=0x4fe10; continue; - case 0x40a94: + case 0x4fe94: r23 = r3 + r0; - case 0x40a98: + case 0x4fe98: r4 = r23 < r4 ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x40928; - run_40800(); return; + pc=0x4fd28; + continue; } - case 0x40aa4: + case 0x4fea4: r5 = r20 + r0; r4 = r21 + r0; - /* Next insn is delay slot */ - r31=0x40ab4; - pc=0x3ec00; - run_3ec00(); return; - case 0x40ab4: + r31=0x4feb4; + pc=0x4e200; + run_4e000(); return; + case 0x4feb4: r20 = r2 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x40e8c; - run_40e00(); return; + pc=0x5028c; + run_50000(); return; } - r3 = readPages[(r16+-4)>>>12][((r16+-4)>>>2)&0x3ff]; + r3= page[(r16+-4)>>>2]; r4 = r2 + -8; r2 = r0 + -2; r2 = r3 & r2; r2 = r19 + r2; if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x40da8; - run_40c00(); return; + pc=0x501a8; + run_50000(); return; } r6 = r17 + -4; r2 = (r6&0xffffffffL) < (37&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x40c58; - run_40c00(); return; + pc=0x50058; + run_50000(); return; } r2 = (r6&0xffffffffL) < (20&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x40bb0; + pc=0x4ffb0; continue; } r2 = r20 + r0; r3 = r16 + r0; - case 0x40b00: - r4 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r4; - r4 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r4; - r3 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r3; - case 0x40b24: + case 0x4ff00: + r4= page[(r3+0)>>>2]; + page[(r2+0)>>>2] = r4; + r4= page[(r3+4)>>>2]; + page[(r2+4)>>>2] = r4; + r3= page[(r3+8)>>>2]; + page[(r2+8)>>>2] = r3; + case 0x4ff24: r4 = r21 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x40b34; - pc=0x3ca00; - run_3ca00(); return; - case 0x40b34: + r31=0x4ff34; + pc=0x4c400; + run_4c000(); return; + case 0x4ff34: r4 = r21 + r0; - /* Next insn is delay slot */ - r31=0x40b40; - pc=0x3f800; - run_3f800(); return; - case 0x40b40: + r31=0x4ff40; + pc=0x4f000; + run_4f000(); return; + case 0x4ff40: r2 = r20 + r0; - /* Next insn is delay slot */ - pc=0x40a20; + pc=0x4fe20; continue; - case 0x40b4c: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r30 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r23 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + case 0x4ff4c: + r31= page[(r29+52)>>>2]; + r30= page[(r29+48)>>>2]; + r23= page[(r29+44)>>>2]; + r22= page[(r29+40)>>>2]; + r21= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; r5 = r6 + r0; r29 = r29 + 56; - /* Next insn is delay slot */ - pc=0x3ec00; - run_3ec00(); return; - case 0x40b84: - r6 = readPages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff]; + pc=0x4e200; + run_4e000(); return; + case 0x4ff84: + r6= page[(r5+4)>>>2]; r2 = r0 + -4; r6 = r6 & r2; r2 = r6 + r17; r7 = r18 + 16; r7 = r2 < r7 ? 1 : 0; if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x40c1c; - run_40c00(); return; + pc=0x5001c; + run_50000(); return; } r2 = r5 + r0; - /* Next insn is delay slot */ - pc=0x408cc; - run_40800(); return; - case 0x40bb0: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - writePages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - writePages[(r20+4)>>>12][((r20+4)>>>2)&0x3ff] = r2; + pc=0x4fccc; + continue; + case 0x4ffb0: + r2= page[(r16+0)>>>2]; + page[(r20+0)>>>2] = r2; + r2= page[(r16+4)>>>2]; + page[(r20+4)>>>2] = r2; r2 = (r6&0xffffffffL) < (28&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x40d74; - run_40c00(); return; + pc=0x50174; + run_50000(); return; } r2 = r20 + 8; r3 = r16 + 8; - /* Next insn is delay slot */ - pc=0x40b00; + pc=0x4ff00; continue; - case 0x40be4: + case 0x4ffe4: r3 = r19 + r0; - case 0x40be8: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + case 0x4ffe8: + r2= page[(r16+0)>>>2]; r17 = r23 + r0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r2; - case 0x40c00: - pc=0x40c00; + page[(r3+0)>>>2] = r2; + r2= page[(r16+4)>>>2]; + page[(r3+4)>>>2] = r2; + case 0x50000: + pc=0x50000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_40c00() throws ExecutionException { /* 0x40c00 - 0x40e00 */ + private final void run_50000() throws ExecutionException { /* 0x50000 - 0x50800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x40c00: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; + case 0x50000: + r2= page[(r16+8)>>>2]; r16 = r19 + r0; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - r3 = readPages[(r22+4)>>>12][((r22+4)>>>2)&0x3ff]; + page[(r3+8)>>>2] = r2; + r3= page[(r22+4)>>>2]; r19 = r22 + r0; - /* Next insn is delay slot */ - pc=0x409e0; - run_40800(); return; - case 0x40c1c: + pc=0x4fde0; + run_4f800(); return; + case 0x5001c: r2 = r2 - r18; r19 = r19 + r18; r2 = r2 | 1; - writePages[(r23+8)>>>12][((r23+8)>>>2)&0x3ff] = r19; - writePages[(r19+4)>>>12][((r19+4)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+-4)>>>12][((r16+-4)>>>2)&0x3ff]; + page[(r23+8)>>>2] = r19; + page[(r19+4)>>>2] = r2; + r2= page[(r16+-4)>>>2]; r4 = r21 + r0; r2 = r2 & 1; r18 = r18 | r2; - writePages[(r16+-4)>>>12][((r16+-4)>>>2)&0x3ff] = r18; - /* Next insn is delay slot */ - r31=0x40c4c; - pc=0x3f800; - run_3f800(); return; - case 0x40c4c: + page[(r16+-4)>>>2] = r18; + r31=0x5004c; + pc=0x4f000; + run_4f000(); return; + case 0x5004c: r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x40a20; - run_40a00(); return; - case 0x40c58: + pc=0x4fe20; + run_4f800(); return; + case 0x50058: r4 = r20 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x40c68; - pc=0x5b600; - run_5b600(); return; - case 0x40c68: - /* Next insn is delay slot */ - pc=0x40b24; - run_40a00(); return; - case 0x40c70: + r31=0x50068; + pc=0x5ae00; + run_5a800(); return; + case 0x50068: + pc=0x4ff24; + run_4f800(); return; + case 0x50070: r4 = r19 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x40c80; - pc=0x5b600; - run_5b600(); return; - case 0x40c80: + r31=0x50080; + pc=0x5ae00; + run_5a800(); return; + case 0x50080: r16 = r19 + r0; - r3 = readPages[(r22+4)>>>12][((r22+4)>>>2)&0x3ff]; + r3= page[(r22+4)>>>2]; r17 = r23 + r0; r19 = r22 + r0; - /* Next insn is delay slot */ - pc=0x409e0; - run_40800(); return; - case 0x40c98: + pc=0x4fde0; + run_4f800(); return; + case 0x50098: r23 = r3 + r17; - /* Next insn is delay slot */ - pc=0x40a98; - run_40a00(); return; - case 0x40ca4: + pc=0x4fe98; + run_4f800(); return; + case 0x500a4: r30 = r6 + r3; r2 = r18 + 16; r2 = r30 < r2 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x40a94; - run_40a00(); return; + pc=0x4fe94; + run_4f800(); return; } - r2 = readPages[(r22+12)>>>12][((r22+12)>>>2)&0x3ff]; - r3 = readPages[(r22+8)>>>12][((r22+8)>>>2)&0x3ff]; + r2= page[(r22+12)>>>2]; + r3= page[(r22+8)>>>2]; r6 = r17 + -4; - writePages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff] = r2; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r3; + page[(r3+12)>>>2] = r2; + page[(r2+8)>>>2] = r3; r2 = (r6&0xffffffffL) < (37&0xffffffffL) ? 1 : 0; r19 = r22 + 8; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x40e40; - run_40e00(); return; + pc=0x50240; + continue; } r2 = (r6&0xffffffffL) < (20&0xffffffffL) ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x40e34; - run_40e00(); return; + pc=0x50234; + continue; } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - writePages[(r22+8)>>>12][((r22+8)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - writePages[(r22+12)>>>12][((r22+12)>>>2)&0x3ff] = r2; + r2= page[(r16+0)>>>2]; + page[(r22+8)>>>2] = r2; + r2= page[(r16+4)>>>2]; + page[(r22+12)>>>2] = r2; r2 = (r6&0xffffffffL) < (28&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x40e58; - run_40e00(); return; + pc=0x50258; + continue; } r3 = r22 + 16; r16 = r16 + 8; - case 0x40d14: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - writePages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff] = r2; - case 0x40d38: + case 0x50114: + r2= page[(r16+0)>>>2]; + page[(r3+0)>>>2] = r2; + r2= page[(r16+4)>>>2]; + page[(r3+4)>>>2] = r2; + r2= page[(r16+8)>>>2]; + page[(r3+8)>>>2] = r2; + case 0x50138: r2 = r30 - r18; r3 = r22 + r18; r2 = r2 | 1; - writePages[(r23+8)>>>12][((r23+8)>>>2)&0x3ff] = r3; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r2; - r2 = readPages[(r22+4)>>>12][((r22+4)>>>2)&0x3ff]; + page[(r23+8)>>>2] = r3; + page[(r3+4)>>>2] = r2; + r2= page[(r22+4)>>>2]; r4 = r21 + r0; r2 = r2 & 1; r18 = r18 | r2; - writePages[(r22+4)>>>12][((r22+4)>>>2)&0x3ff] = r18; - /* Next insn is delay slot */ - r31=0x40d68; - pc=0x3f800; - run_3f800(); return; - case 0x40d68: + page[(r22+4)>>>2] = r18; + r31=0x50168; + pc=0x4f000; + run_4f000(); return; + case 0x50168: r2 = r19 + r0; - /* Next insn is delay slot */ - pc=0x40a20; - run_40a00(); return; - case 0x40d74: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - writePages[(r20+8)>>>12][((r20+8)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - writePages[(r20+12)>>>12][((r20+12)>>>2)&0x3ff] = r2; + pc=0x4fe20; + run_4f800(); return; + case 0x50174: + r2= page[(r16+8)>>>2]; + page[(r20+8)>>>2] = r2; + r2= page[(r16+12)>>>2]; + page[(r20+12)>>>2] = r2; r2 = r0 + 36; if(r6 == r2) { - /* Next insn is delay slot */ - pc=0x40df4; + pc=0x501f4; continue; } r2 = r20 + 16; r3 = r16 + 16; - /* Next insn is delay slot */ - pc=0x40b00; - run_40a00(); return; - case 0x40da8: - r4 = readPages[(r20+-4)>>>12][((r20+-4)>>>2)&0x3ff]; + pc=0x4ff00; + run_4f800(); return; + case 0x501a8: + r4= page[(r20+-4)>>>2]; r2 = r0 + -4; r2 = r4 & r2; r17 = r17 + r2; - /* Next insn is delay slot */ - pc=0x409e0; - run_40800(); return; - case 0x40dc0: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - writePages[(r22+16)>>>12][((r22+16)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - writePages[(r22+20)>>>12][((r22+20)>>>2)&0x3ff] = r2; + pc=0x4fde0; + run_4f800(); return; + case 0x501c0: + r2= page[(r16+8)>>>2]; + page[(r22+16)>>>2] = r2; + r2= page[(r16+12)>>>2]; + page[(r22+20)>>>2] = r2; r2 = r0 + 36; if(r6 == r2) { - /* Next insn is delay slot */ - pc=0x40e14; - run_40e00(); return; - } - r3 = r22 + 24; - r16 = r16 + 16; - /* Next insn is delay slot */ - pc=0x40be8; - run_40a00(); return; - case 0x40df4: - r2 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - r3 = r16 + 24; - writePages[(r20+16)>>>12][((r20+16)>>>2)&0x3ff] = r2; - case 0x40e00: - pc=0x40e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_40e00() throws ExecutionException { /* 0x40e00 - 0x41000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x40e00: - r4 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; - r2 = r20 + 24; - writePages[(r20+20)>>>12][((r20+20)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=0x40b00; - run_40a00(); return; - case 0x40e14: - r2 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - r3 = r22 + 32; - writePages[(r22+24)>>>12][((r22+24)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; - r16 = r16 + 24; - writePages[(r22+28)>>>12][((r22+28)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x40be8; - run_40a00(); return; - case 0x40e34: - r3 = r19 + r0; - /* Next insn is delay slot */ - pc=0x40d14; - run_40c00(); return; - case 0x40e40: - r4 = r19 + r0; - r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x40e50; - pc=0x5b600; - run_5b600(); return; - case 0x40e50: - /* Next insn is delay slot */ - pc=0x40d38; - run_40c00(); return; - case 0x40e58: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - writePages[(r22+16)>>>12][((r22+16)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - writePages[(r22+20)>>>12][((r22+20)>>>2)&0x3ff] = r2; - r2 = r0 + 36; - if(r6 == r2) { - /* Next insn is delay slot */ - pc=0x40ea4; + pc=0x50214; continue; } r3 = r22 + 24; r16 = r16 + 16; - /* Next insn is delay slot */ - pc=0x40d14; - run_40c00(); return; - case 0x40e8c: - r4 = r21 + r0; - /* Next insn is delay slot */ - r31=0x40e98; - pc=0x3f800; - run_3f800(); return; - case 0x40e98: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x40a20; - run_40a00(); return; - case 0x40ea4: - r2 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; + pc=0x4ffe8; + run_4f800(); return; + case 0x501f4: + r2= page[(r16+16)>>>2]; + r3 = r16 + 24; + page[(r20+16)>>>2] = r2; + r4= page[(r16+20)>>>2]; + r2 = r20 + 24; + page[(r20+20)>>>2] = r4; + pc=0x4ff00; + run_4f800(); return; + case 0x50214: + r2= page[(r16+16)>>>2]; r3 = r22 + 32; - writePages[(r22+24)>>>12][((r22+24)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; + page[(r22+24)>>>2] = r2; + r2= page[(r16+20)>>>2]; r16 = r16 + 24; - writePages[(r22+28)>>>12][((r22+28)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x40d14; - run_40c00(); return; - case 0x41000: - pc=0x41000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_41000() throws ExecutionException { /* 0x41000 - 0x41200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x41000: + page[(r22+28)>>>2] = r2; + pc=0x4ffe8; + run_4f800(); return; + case 0x50234: + r3 = r19 + r0; + pc=0x50114; + continue; + case 0x50240: + r4 = r19 + r0; + r5 = r16 + r0; + r31=0x50250; + pc=0x5ae00; + run_5a800(); return; + case 0x50250: + pc=0x50138; + continue; + case 0x50258: + r2= page[(r16+8)>>>2]; + page[(r22+16)>>>2] = r2; + r2= page[(r16+12)>>>2]; + page[(r22+20)>>>2] = r2; + r2 = r0 + 36; + if(r6 == r2) { + pc=0x502a4; + continue; + } + r3 = r22 + 24; + r16 = r16 + 16; + pc=0x50114; + continue; + case 0x5028c: + r4 = r21 + r0; + r31=0x50298; + pc=0x4f000; + run_4f000(); return; + case 0x50298: + r2 = r0 + r0; + pc=0x4fe20; + run_4f800(); return; + case 0x502a4: + r2= page[(r16+16)>>>2]; + r3 = r22 + 32; + page[(r22+24)>>>2] = r2; + r2= page[(r16+20)>>>2]; + r16 = r16 + 24; + page[(r22+28)>>>2] = r2; + pc=0x50114; + continue; + case 0x50400: addr=r4+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r3 = tmp; r2 = r0 + 9; r3 = r3 & 9; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x41020; + pc=0x50420; continue; } r2 = r0 + r0; - /* Next insn is delay slot */ pc=r31; return; - case 0x41020: - /* Next insn is delay slot */ - pc=0x39a00; - run_39a00(); return; - case 0x41200: - pc=0x41200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_41200() throws ExecutionException { /* 0x41200 - 0x41400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x41200: + case 0x50420: + pc=0x4a600; + run_4a000(); return; + case 0x50600: r29 = r29 + -40; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + page[(r29+36)>>>2] = r31; + page[(r29+32)>>>2] = r19; + page[(r29+28)>>>2] = r18; r17 = r4 + r0; r16 = r5 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x41238; + pc=0x50638; continue; } - r2 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; + r2= page[(r4+56)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x413a0; + pc=0x507a0; continue; } - case 0x41238: + case 0x50638: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r3 = tmp; r2 = r3 & 65535; r4 = r2 & 8192; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x4126c; + pc=0x5066c; continue; } - r4 = readPages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff]; + r4= page[(r16+100)>>>2]; r2 = r0 + -8193; r3 = r3 | 8192; r2 = r4 & r2; - writePages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff] = r2; + page[(r16+100)>>>2] = r2; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r3 & 65535; - case 0x4126c: + case 0x5066c: r4 = r2 & 32; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r0; + page[(r16+4)>>>2] = r0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x4137c; + pc=0x5077c; continue; } r4 = r2 & 4; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x4133c; + pc=0x5073c; continue; } - r5 = readPages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff]; + r5= page[(r16+48)>>>2]; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x412c4; + pc=0x506c4; continue; } r2 = r16 + 64; if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x412b0; + pc=0x506b0; continue; } r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x412b0; - pc=0x3ca00; - run_3ca00(); return; - case 0x412b0: - r2 = readPages[(r16+60)>>>12][((r16+60)>>>2)&0x3ff]; - writePages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff] = r0; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; + r31=0x506b0; + pc=0x4c400; + run_4c000(); return; + case 0x506b0: + r2= page[(r16+60)>>>2]; + page[(r16+48)>>>2] = r0; + page[(r16+4)>>>2] = r2; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x4146c; - run_41400(); return; + pc=0x5086c; + run_50800(); return; } - case 0x412c4: - r2 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; + case 0x506c4: + r2= page[(r16+16)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x41498; - run_41400(); return; + pc=0x50898; + run_50800(); return; } - case 0x412d4: + case 0x506d4: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r19 = tmp; r18 = r19 & 65535; r2 = r18 & 3; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x413b0; + pc=0x507b0; continue; } - case 0x412ec: - r6 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - r2 = readPages[(r16+32)>>>12][((r16+32)>>>2)&0x3ff]; - r5 = readPages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff]; - r7 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r6; + case 0x506ec: + r6= page[(r16+16)>>>2]; + r2= page[(r16+32)>>>2]; + r5= page[(r16+28)>>>2]; + r7= page[(r16+20)>>>2]; + page[(r16+0)>>>2] = r6; r4 = r17 + r0; - /* Next insn is delay slot */ pc=r2; - r31=0x4130c; + r31=0x5070c; return; - case 0x4130c: - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; + case 0x5070c: + page[(r16+4)>>>2] = r2; if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x41364; + pc=0x50764; continue; } r2 = r0 + r0; - case 0x4131c: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + case 0x5071c: + r31= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r29 = r29 + 40; - /* Next insn is delay slot */ pc=r31; return; - case 0x4133c: + case 0x5073c: r4 = r2 & 16; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x414b0; - run_41400(); return; + pc=0x508b0; + run_50800(); return; } r2 = r2 & 8; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x4142c; - run_41400(); return; + pc=0x5082c; + run_50800(); return; } r3 = r3 | 4; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x412c4; + page[(addr)>>>2] = tmp; + pc=0x506c4; continue; - case 0x41364: + case 0x50764: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x413f8; + pc=0x507f8; continue; } addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r2 = r2 | 32; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x4137c: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + case 0x5077c: + r31= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r2 = r0 + -1; r29 = r29 + 40; - /* Next insn is delay slot */ pc=r31; return; - case 0x413a0: - /* Next insn is delay slot */ - r31=0x413a8; - pc=0x3a600; - run_3a600(); return; - case 0x413a8: - /* Next insn is delay slot */ - pc=0x41238; + case 0x507a0: + r31=0x507a8; + pc=0x4ac00; + run_4a800(); return; + case 0x507a8: + pc=0x50638; continue; - case 0x413b0: + case 0x507b0: r2 = r0 + 1; - r4 = readPages[(r28+-31076)>>>12][((r28+-31076)>>>2)&0x3ff]; - r5 = 4 << 16; + r4= page[(r28+-31516)>>>2]; + r5 = 5 << 16; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r5 = r5 + 4096; - /* Next insn is delay slot */ - r31=0x413cc; - pc=0x3d600; - run_3d600(); return; - case 0x413cc: + page[(addr)>>>2] = tmp; + r5 = r5 + 1024; + r31=0x507cc; + pc=0x4d000; + run_4d000(); return; + case 0x507cc: r18 = r18 & 9; r2 = r0 + 9; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r19&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r18 != r2) { - /* Next insn is delay slot */ - pc=0x412ec; + pc=0x506ec; continue; } r4 = r17 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x413f0; - pc=0x39400; - run_39400(); return; - case 0x413f0: - /* Next insn is delay slot */ - pc=0x412ec; + r31=0x507f0; + pc=0x4a000; + run_4a000(); return; + case 0x507f0: + pc=0x506ec; continue; - case 0x413f8: + case 0x507f8: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - case 0x41400: - pc=0x41400; + r31= page[(r29+36)>>>2]; + case 0x50800: + pc=0x50800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_41400() throws ExecutionException { /* 0x41400 - 0x41600 */ + private final void run_50800() throws ExecutionException { /* 0x50800 - 0x51000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x41400: + case 0x50800: r2 = r2 | 64; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r0; + page[(addr)>>>2] = tmp; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + page[(r16+4)>>>2] = r0; r2 = r0 + -1; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r16= page[(r29+20)>>>2]; r29 = r29 + 40; - /* Next insn is delay slot */ pc=r31; return; - case 0x4142c: + case 0x5082c: r4 = r17 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x4143c; - pc=0x39800; - run_39800(); return; - case 0x4143c: + r31=0x5083c; + pc=0x4a400; + run_4a000(); return; + case 0x5083c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x4137c; - run_41200(); return; + pc=0x5077c; + run_50000(); return; } addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r3 = tmp; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r0; + page[(r16+8)>>>2] = r0; r3 = r3 & 65527; r3 = r3 << 16; r3 = r3 >> 16; r3 = r3 | 4; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r0; + page[(r16+24)>>>2] = r0; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x412c4; - run_41200(); return; - case 0x4146c: - r2 = readPages[(r16+56)>>>12][((r16+56)>>>2)&0x3ff]; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + pc=0x506c4; + run_50000(); return; + case 0x5086c: + r2= page[(r16+56)>>>2]; + r31= page[(r29+36)>>>2]; + page[(r16+0)>>>2] = r2; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r2 = r0 + r0; r29 = r29 + 40; - /* Next insn is delay slot */ pc=r31; return; - case 0x41498: + case 0x50898: r4 = r17 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x414a8; - pc=0x3e600; - run_3e600(); return; - case 0x414a8: - /* Next insn is delay slot */ - pc=0x412d4; - run_41200(); return; - case 0x414b0: + r31=0x508a8; + pc=0x4dc00; + run_4d800(); return; + case 0x508a8: + pc=0x506d4; + run_50000(); return; + case 0x508b0: r2 = r0 + 9; r3 = r3 | 64; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r2; + page[(r17+0)>>>2] = r2; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x4131c; - run_41200(); return; - case 0x41600: - pc=0x41600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_41600() throws ExecutionException { /* 0x41600 - 0x41800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x41600: + pc=0x5071c; + run_50000(); return; + case 0x50a00: r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + page[(r29+28)>>>2] = r31; r17 = r4 + r0; r16 = r5 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x41630; + pc=0x50a30; continue; } - r2 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; + r2= page[(r4+56)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x41684; + pc=0x50a84; continue; } - case 0x41630: + case 0x50a30: r4 = r17 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x41640; - pc=0x41200; - run_41200(); return; - case 0x41640: + r31=0x50a40; + pc=0x50600; + run_50000(); return; + case 0x50a40: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x41694; + pc=0x50a94; continue; } - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + r2= page[(r16+4)>>>2]; r2 = r2 + -1; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + page[(r16+4)>>>2] = r2; + r2= page[(r16+0)>>>2]; r3 = r2 + 1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r3; + page[(r16+0)>>>2] = r3; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r2 = tmp; - case 0x4166c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + case 0x50a6c: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x41684: - /* Next insn is delay slot */ - r31=0x4168c; - pc=0x3a600; - run_3a600(); return; - case 0x4168c: - /* Next insn is delay slot */ - pc=0x41630; + case 0x50a84: + r31=0x50a8c; + pc=0x4ac00; + run_4a800(); return; + case 0x50a8c: + pc=0x50a30; continue; - case 0x41694: + case 0x50a94: r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x4166c; + pc=0x50a6c; continue; - case 0x41800: - pc=0x41800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_41800() throws ExecutionException { /* 0x41800 - 0x41a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x41800: - r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x41600; - run_41600(); return; - case 0x41a00: - pc=0x41a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_41a00() throws ExecutionException { /* 0x41a00 - 0x41c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x41a00: - r29 = r29 + -144; - writePages[(r29+136)>>>12][((r29+136)>>>2)&0x3ff] = r17; - writePages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff] = r16; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r31; - r17 = r4 + r0; - r16 = r6 + r0; - if(r6 < 0) { - /* Next insn is delay slot */ - pc=0x41af4; - continue; - } - r2 = r0 + 520; - addr=r29+28; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r5; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r5; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x41aa4; - continue; - } - r2 = r0 + r0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - r2 = r0 + -1; - addr=r29+30; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r29 + 160; - r6 = r7 + r0; - r4 = r17 + r0; - r5 = r29 + 16; - r7 = r2 + r0; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x41a6c; - pc=0x43800; - run_43800(); return; - case 0x41a6c: - r3 = r2 < -1 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x41ae4; - continue; - } - case 0x41a78: - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x41a8c; - continue; - } - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x41a8c: - r31 = readPages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff]; - r17 = readPages[(r29+136)>>>12][((r29+136)>>>2)&0x3ff]; - r16 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; - r29 = r29 + 144; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x41aa4: - r2 = r6 + -1; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - r2 = r0 + -1; - addr=r29+30; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r29 + 160; - r6 = r7 + r0; - r4 = r17 + r0; - r5 = r29 + 16; - r7 = r2 + r0; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x41ad8; - pc=0x43800; - run_43800(); return; - case 0x41ad8: - r3 = r2 < -1 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x41a78; - continue; - } - case 0x41ae4: - r3 = r0 + 139; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x41a78; - continue; - case 0x41af4: - r2 = r0 + 139; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r2; - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x41a8c; - continue; - case 0x41c00: - pc=0x41c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_41c00() throws ExecutionException { /* 0x41c00 - 0x41e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x41c00: - r29 = r29 + -144; - writePages[(r29+136)>>>12][((r29+136)>>>2)&0x3ff] = r17; - writePages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff] = r16; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r31; - r16 = r5 + r0; - writePages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff] = r7; - r17 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - if(r5 < 0) { - /* Next insn is delay slot */ - pc=0x41ce8; - continue; - } - r2 = r0 + 520; - addr=r29+28; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r4; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r4; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x41ca0; - continue; - } - r2 = r0 + r0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - r7 = r29 + 156; - r2 = r0 + -1; - r4 = r17 + r0; - r5 = r29 + 16; - addr=r29+30; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x41c68; - pc=0x43800; - run_43800(); return; - case 0x41c68: - r3 = r2 < -1 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x41cd8; - continue; - } - case 0x41c74: - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x41c88; - continue; - } - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x41c88: - r31 = readPages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff]; - r17 = readPages[(r29+136)>>>12][((r29+136)>>>2)&0x3ff]; - r16 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; - r29 = r29 + 144; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x41ca0: - r2 = r5 + -1; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - r7 = r29 + 156; - r2 = r0 + -1; - r4 = r17 + r0; - r5 = r29 + 16; - addr=r29+30; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x41ccc; - pc=0x43800; - run_43800(); return; - case 0x41ccc: - r3 = r2 < -1 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x41c74; - continue; - } - case 0x41cd8: - r3 = r0 + 139; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x41c74; - continue; - case 0x41ce8: - r2 = r0 + 139; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r2; - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x41c88; - continue; - case 0x41e00: - pc=0x41e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_41e00() throws ExecutionException { /* 0x41e00 - 0x42000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x41e00: + case 0x50c00: r29 = r29 + -136; r2 = r0 + 520; addr=r29+28; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = 32767 << 16; + page[(r29+16)>>>2] = r4; + page[(r29+32)>>>2] = r4; r2 = r2 | 65535; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r7; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r5; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r5; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - r7 = r29 + 148; - r2 = r0 + -1; - r5 = r29 + 16; - writePages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff] = r31; - addr=r29+30; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x41e48; - pc=0x43800; - run_43800(); return; - case 0x41e48: - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r31 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; - r29 = r29 + 136; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x42000: - pc=0x42000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_42000() throws ExecutionException { /* 0x42000 - 0x42200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x42000: - r29 = r29 + -136; - r2 = r0 + 520; - addr=r29+28; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = 32767 << 16; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r4; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r4; - r2 = r2 | 65535; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r6; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r7; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; + r4= page[(r28+-31512)>>>2]; + page[(r29+144)>>>2] = r6; + page[(r29+148)>>>2] = r7; + page[(r29+24)>>>2] = r2; + page[(r29+36)>>>2] = r2; r7 = r29 + 144; r6 = r5 + r0; r2 = r0 + -1; r5 = r29 + 16; - writePages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff] = r31; + page[(r29+132)>>>2] = r31; addr=r29+30; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x42054; - pc=0x43800; - run_43800(); return; - case 0x42054: - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + page[(r29+120)>>>2] = r7; + r31=0x50c54; + pc=0x52200; + run_52000(); return; + case 0x50c54: + r3= page[(r29+16)>>>2]; addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r31 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r31= page[(r29+132)>>>2]; r29 = r29 + 136; - /* Next insn is delay slot */ pc=r31; return; - case 0x42200: - pc=0x42200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_42200() throws ExecutionException { /* 0x42200 - 0x42400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x42200: + case 0x50e00: r29 = r29 + -24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; + page[(r29+16)>>>2] = r16; r16 = r5 + r0; addr=r5+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r5 = tmp; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x4221c; - pc=0x488a0; - run_48800(); return; - case 0x4221c: + page[(r29+20)>>>2] = r31; + r31=0x50e1c; + pc=0x56e90; + run_56800(); return; + case 0x50e1c: if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x42244; + pc=0x50e44; continue; } - r3 = readPages[(r16+80)>>>12][((r16+80)>>>2)&0x3ff]; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r3= page[(r16+80)>>>2]; + r31= page[(r29+20)>>>2]; r3 = r3 + r2; - writePages[(r16+80)>>>12][((r16+80)>>>2)&0x3ff] = r3; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + page[(r16+80)>>>2] = r3; + r16= page[(r29+16)>>>2]; r29 = r29 + 24; - /* Next insn is delay slot */ pc=r31; return; - case 0x42244: + case 0x50e44: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r3 = tmp; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r31= page[(r29+20)>>>2]; r3 = r3 & 61439; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r16= page[(r29+16)>>>2]; r29 = r29 + 24; - /* Next insn is delay slot */ pc=r31; return; - case 0x42400: - pc=0x42400; + case 0x51000: + pc=0x51000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_42400() throws ExecutionException { /* 0x42400 - 0x42600 */ + private final void run_51000() throws ExecutionException { /* 0x51000 - 0x51800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x42400: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x42600: - pc=0x42600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_42600() throws ExecutionException { /* 0x42600 - 0x42800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x42600: + case 0x51000: addr=r5+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r2 = tmp; r29 = r29 + -40; r3 = r2 & 256; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; + page[(r29+32)>>>2] = r19; + page[(r29+28)>>>2] = r18; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; + page[(r29+36)>>>2] = r31; r19 = r4 + r0; r16 = r5 + r0; r18 = r6 + r0; r17 = r7 + r0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x42650; + pc=0x51050; continue; } addr=r5+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r5 = tmp; r6 = r0 + r0; r7 = r0 + 2; - /* Next insn is delay slot */ - r31=0x4264c; - pc=0x489a0; - run_48800(); return; - case 0x4264c: + r31=0x5104c; + pc=0x56f90; + run_56800(); return; + case 0x5104c: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r2 = tmp; - case 0x42650: + case 0x51050: r3 = r0 + -4097; r2 = r2 & r3; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + r31= page[(r29+36)>>>2]; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r4 = r19 + r0; addr=r16+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r5 = tmp; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r19= page[(r29+32)>>>2]; + r16= page[(r29+20)>>>2]; r6 = r18 + r0; r7 = r17 + r0; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; r29 = r29 + 40; - /* Next insn is delay slot */ - pc=0x488e0; - run_48800(); return; - case 0x42800: - pc=0x42800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_42800() throws ExecutionException { /* 0x42800 - 0x42a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x42800: + pc=0x56ed0; + run_56800(); return; + case 0x51200: r29 = r29 + -24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; + page[(r29+16)>>>2] = r16; r16 = r5 + r0; addr=r5+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r5 = tmp; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x4281c; - pc=0x489a0; - run_48800(); return; - case 0x4281c: + page[(r29+20)>>>2] = r31; + r31=0x5121c; + pc=0x56f90; + run_56800(); return; + case 0x5121c: r3 = r0 + -1; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x4284c; + pc=0x5124c; continue; } addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r3 = tmp; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r31= page[(r29+20)>>>2]; r3 = r3 | 4096; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r16+80)>>>12][((r16+80)>>>2)&0x3ff] = r2; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + page[(r16+80)>>>2] = r2; + r16= page[(r29+16)>>>2]; r29 = r29 + 24; - /* Next insn is delay slot */ pc=r31; return; - case 0x4284c: + case 0x5124c: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r3 = tmp; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r31= page[(r29+20)>>>2]; r3 = r3 & 61439; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r16= page[(r29+16)>>>2]; r29 = r29 + 24; - /* Next insn is delay slot */ pc=r31; return; - case 0x42a00: - pc=0x42a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_42a00() throws ExecutionException { /* 0x42a00 - 0x42c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x42a00: + case 0x51400: addr=r5+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r5 = tmp; - /* Next insn is delay slot */ - pc=0x48860; - run_48800(); return; - case 0x42c00: - pc=0x42c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_42c00() throws ExecutionException { /* 0x42c00 - 0x42e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x42c00: + pc=0x56e50; + run_56800(); return; + case 0x51600: r2 = r4 | r5; r2 = r2 & 1; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x42c68; + pc=0x51668; continue; } addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r3 = tmp; - /* Next insn is delay slot */ - pc=0x42c44; + pc=0x51644; continue; - case 0x42c1c: + case 0x5161c: addr=r4+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r6 = tmp; if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x42c54; + pc=0x51654; continue; } addr=r5+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r2 = tmp; r5 = r5 + 2; if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x42c8c; + pc=0x5168c; continue; } addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r3 = tmp; if(r6 != r2) { - /* Next insn is delay slot */ - pc=0x42c8c; + pc=0x5168c; continue; } - case 0x42c44: + case 0x51644: addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r2 = tmp; r4 = r4 + 2; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x42c1c; + pc=0x5161c; continue; } - case 0x42c54: + case 0x51654: r2 = r3 - r2; - /* Next insn is delay slot */ pc=r31; return; - case 0x42c60: + case 0x51660: if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x42c54; + pc=0x51654; continue; } - case 0x42c68: + case 0x51668: r4 = r4 + 1; addr=r4+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r3 = tmp; r5 = r5 + 1; addr=r5+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r2 = tmp; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x42c60; + pc=0x51660; continue; } r2 = r3 - r2; - /* Next insn is delay slot */ pc=r31; return; - case 0x42c8c: + case 0x5168c: r2 = r6 - r2; - /* Next insn is delay slot */ pc=r31; return; - case 0x42e00: - pc=0x42e00; + case 0x51800: + pc=0x51800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_42e00() throws ExecutionException { /* 0x42e00 - 0x43000 */ + private final void run_51800() throws ExecutionException { /* 0x51800 - 0x52000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x42e00: + case 0x51800: r3 = r4 | r5; r3 = r3 & 3; r2 = r4 + r0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x42e90; + pc=0x51890; continue; } - r6 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; + r6= page[(r5+0)>>>2]; r10 = 65278 << 16; r10 = r10 | 65279; r4 = ~(r0 | r6); @@ -50145,190 +58266,158 @@ public final class AcmeCrossAssembler extends UnixRuntime { r9 = r9 | 32896; r3 = r3 & r9; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x42e90; + pc=0x51890; continue; } r3 = r2 + r0; - case 0x42e44: + case 0x51844: r3 = r3 + 4; r5 = r5 + 4; - writePages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff] = r6; - r6 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; + page[(r3+-4)>>>2] = r6; + r6= page[(r5+0)>>>2]; r8 = ~(r0 | r6); r7 = r6 + r10; r7 = r8 & r7; r7 = r7 & r9; if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x42e44; + pc=0x51844; continue; } r5 = r5 + 1; addr=r5+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r6 = tmp; r3 = r3 + 1; addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x42e94; + pc=0x51894; continue; } - /* Next insn is delay slot */ pc=r31; return; - case 0x42e90: + case 0x51890: r3 = r2 + r0; - case 0x42e94: + case 0x51894: r5 = r5 + 1; addr=r5+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r6 = tmp; r3 = r3 + 1; addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x42e94; + pc=0x51894; continue; } - /* Next insn is delay slot */ pc=r31; return; - case 0x43000: - pc=0x43000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_43000() throws ExecutionException { /* 0x43000 - 0x43200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x43000: + case 0x51a00: if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x43098; + pc=0x51a98; continue; } r2 = r4 | r5; r2 = r2 & 3; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x430a4; + pc=0x51aa4; continue; } - case 0x43018: + case 0x51a18: r6 = r6 + -1; - case 0x4301c: + case 0x51a1c: addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x43158; + pc=0x51b58; continue; } if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x43098; + pc=0x51a98; continue; } if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x43098; + pc=0x51a98; continue; } r2 = r4 + 1; r5 = r5 + 1; r4 = r4 + r6; - /* Next insn is delay slot */ - pc=0x4306c; + pc=0x51a6c; continue; - case 0x43054: + case 0x51a54: if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x43098; + pc=0x51a98; continue; } if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x43098; + pc=0x51a98; continue; } r2 = r2 + 1; r5 = r5 + 1; - case 0x4306c: + case 0x51a6c: addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r6 = tmp; addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; if(r3 == r6) { - /* Next insn is delay slot */ - pc=0x43054; + pc=0x51a54; continue; } - case 0x43080: + case 0x51a80: addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r3 = tmp; addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r2 = tmp; r2 = r3 - r2; - /* Next insn is delay slot */ pc=r31; return; - case 0x43098: + case 0x51a98: r2 = r0 + r0; - /* Next insn is delay slot */ pc=r31; return; - case 0x430a4: + case 0x51aa4: r2 = (r6&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43018; + pc=0x51a18; continue; } - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; + r3= page[(r4+0)>>>2]; + r2= page[(r5+0)>>>2]; if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x43018; + pc=0x51a18; continue; } r2 = r6 + -4; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x43098; + pc=0x51a98; continue; } r8 = 65278 << 16; @@ -50340,25 +58429,21 @@ public final class AcmeCrossAssembler extends UnixRuntime { r7 = r7 | 32896; r3 = r3 & r7; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x43138; + pc=0x51b38; continue; } - /* Next insn is delay slot */ - pc=0x43098; + pc=0x51a98; continue; - case 0x43100: - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r6 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; + case 0x51b00: + r3= page[(r4+0)>>>2]; + r6= page[(r5+0)>>>2]; if(r3 != r6) { - /* Next insn is delay slot */ - pc=0x43164; + pc=0x51b64; continue; } r2 = r2 + -4; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x43098; + pc=0x51a98; continue; } r6 = r3 + r8; @@ -50366,1288 +58451,1082 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = r6 & r3; r3 = r3 & r7; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x43098; + pc=0x51a98; continue; } - case 0x43138: + case 0x51b38: r3 = (r2&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; r4 = r4 + 4; r5 = r5 + 4; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x43100; + pc=0x51b00; continue; } r6 = r2 + -1; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x4301c; + pc=0x51a1c; continue; } - case 0x43158: + case 0x51b58: r2 = r4 + r0; - /* Next insn is delay slot */ - pc=0x43080; + pc=0x51a80; continue; - case 0x43164: + case 0x51b64: r6 = r2 + -1; - /* Next insn is delay slot */ - pc=0x4301c; + pc=0x51a1c; continue; - case 0x43200: - pc=0x43200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_43200() throws ExecutionException { /* 0x43200 - 0x43400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x43200: + case 0x51c00: r29 = r29 + -8; - r11 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; + r11= page[(r28+-31500)>>>2]; r2 = r5 + r0; - writePages[(r29+4)>>>12][((r29+4)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - pc=0x4321c; + page[(r29+4)>>>2] = r16; + pc=0x51c1c; continue; - case 0x43218: + case 0x51c18: r2 = r3 + r0; - case 0x4321c: + case 0x51c1c: r3 = r2 + 1; addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r8 = tmp; r9 = r11 + r8; addr=r9+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r9 = tmp; r9 = r9 & 8; if(r9 != r0) { - /* Next insn is delay slot */ - pc=0x43218; + pc=0x51c18; continue; } r9 = r0 + 45; if(r8 == r9) { - /* Next insn is delay slot */ - pc=0x43418; - run_43400(); return; + pc=0x51e18; + continue; } r9 = r0 + 43; if(r8 == r9) { - /* Next insn is delay slot */ - pc=0x4342c; - run_43400(); return; + pc=0x51e2c; + continue; } r25 = r0 + r0; - case 0x4325c: + case 0x51c5c: r2 = r0 + -17; r2 = r7 & r2; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x4339c; + pc=0x51d9c; continue; } r2 = r0 + 48; if(r8 == r2) { - /* Next insn is delay slot */ - pc=0x43380; + pc=0x51d80; continue; } if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x4339c; + pc=0x51d9c; continue; } r24 = r0 + 10; r7 = r0 + 10; - case 0x43288: + case 0x51c88: if(r25 == r0) { - /* Next insn is delay slot */ - pc=0x433a8; + pc=0x51da8; continue; } - case 0x43290: + case 0x51c90: r13 = 32768 << 16; - case 0x43294: + case 0x51c94: if(r24 != r0) { - /* Next insn is delay slot */ if(r24!=0) { hi = (int)((r13 & 0xffffffffL) % (r24 & 0xffffffffL)); lo = (int)((r13 & 0xffffffffL) / (r24 & 0xffffffffL)); } - pc=0x432a0; + pc=0x51ca0; continue; } if(r24!=0) { hi = (int)((r13 & 0xffffffffL) % (r24 & 0xffffffffL)); lo = (int)((r13 & 0xffffffffL) / (r24 & 0xffffffffL)); } throw new ExecutionException("Break"); - case 0x432a0: + case 0x51ca0: r12 = r0 + r0; r2 = r0 + r0; r15 = r0 + 1; r14 = r0 + -1; r16 = hi; r13 = lo; - /* Next insn is delay slot */ - pc=0x43308; + pc=0x51d08; continue; - case 0x432c0: + case 0x51cc0: r8 = r8 + -48; r9 = r8 < r7 ? 1 : 0; if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x43348; + pc=0x51d48; continue; } - case 0x432d0: + case 0x51cd0: if(r12 == r14) { - /* Next insn is delay slot */ - pc=0x432fc; + pc=0x51cfc; continue; } r9 = ((r13 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; if(r9 != r0) { - /* Next insn is delay slot */ - pc=0x433c4; + pc=0x51dc4; continue; } if(r2 == r13) { - /* Next insn is delay slot */ - pc=0x433b8; + pc=0x51db8; continue; } - case 0x432ec: - { long hilo = (r2) * r24; hi = (int) (hilo >>> 32); lo = (int) hilo; } + case 0x51cec: + { long hilo = (long)(r2) * ((long)r24); hi = (int) (hilo >>> 32); lo = (int) hilo; } r12 = r0 + 1; r2 = lo; r2 = r8 + r2; - case 0x432fc: + case 0x51cfc: r3 = r3 + 1; addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r8 = tmp; - case 0x43308: + case 0x51d08: r9 = r11 + r8; addr=r9+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r9 = tmp; r10 = r9 & 4; if(r10 != r0) { - /* Next insn is delay slot */ - pc=0x432c0; + pc=0x51cc0; continue; } r9 = r9 & 3; if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x43348; + pc=0x51d48; continue; } if(r9 == r15) { - /* Next insn is delay slot */ - pc=0x433d0; + pc=0x51dd0; continue; } r9 = r0 + 87; r8 = r8 - r9; - case 0x4333c: + case 0x51d3c: r9 = r8 < r7 ? 1 : 0; if(r9 != r0) { - /* Next insn is delay slot */ - pc=0x432d0; + pc=0x51cd0; continue; } - case 0x43348: + case 0x51d48: r7 = r0 + -1; if(r12 == r7) { - /* Next insn is delay slot */ - pc=0x433e0; + pc=0x51de0; continue; } if(r25 != r0) { - /* Next insn is delay slot */ - pc=0x4340c; - run_43400(); return; + pc=0x51e0c; + continue; } - case 0x4335c: + case 0x51d5c: if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x43370; + pc=0x51d70; continue; } if(r12 != r0) { - /* Next insn is delay slot */ - pc=0x43400; - run_43400(); return; + pc=0x51e00; + continue; } - case 0x4336c: - writePages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff] = r5; - case 0x43370: - r16 = readPages[(r29+4)>>>12][((r29+4)>>>2)&0x3ff]; + case 0x51d6c: + page[(r6+0)>>>2] = r5; + case 0x51d70: + r16= page[(r29+4)>>>2]; r29 = r29 + 8; - /* Next insn is delay slot */ pc=r31; return; - case 0x43380: + case 0x51d80: addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r9 = tmp; r2 = r0 + 88; r9 = r9 & 223; if(r9 == r2) { - /* Next insn is delay slot */ - pc=0x4344c; - run_43400(); return; + pc=0x51e4c; + continue; } if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x43464; - run_43400(); return; + pc=0x51e64; + continue; } - case 0x4339c: + case 0x51d9c: r24 = r7 + r0; if(r25 != r0) { - /* Next insn is delay slot */ - pc=0x43290; + pc=0x51c90; continue; } - case 0x433a8: + case 0x51da8: r13 = 32767 << 16; r13 = r13 | 65535; - /* Next insn is delay slot */ - pc=0x43294; + pc=0x51c94; continue; - case 0x433b8: + case 0x51db8: r9 = r16 < r8 ? 1 : 0; if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x432ec; + pc=0x51cec; continue; } - case 0x433c4: + case 0x51dc4: r12 = r0 + -1; - /* Next insn is delay slot */ - pc=0x432fc; + pc=0x51cfc; continue; - case 0x433d0: + case 0x51dd0: r9 = r0 + 55; r8 = r8 - r9; - /* Next insn is delay slot */ - pc=0x4333c; + pc=0x51d3c; continue; - case 0x433e0: + case 0x51de0: if(r25 != r0) { - /* Next insn is delay slot */ - pc=0x43440; - run_43400(); return; + pc=0x51e40; + continue; } r2 = 32767 << 16; r2 = r2 | 65535; - case 0x433f0: + case 0x51df0: r5 = r0 + 34; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; + page[(r4+0)>>>2] = r5; if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x43370; + pc=0x51d70; continue; } - case 0x43400: - pc=0x43400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_43400() throws ExecutionException { /* 0x43400 - 0x43600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x43400: + case 0x51e00: r5 = r3 + -1; - /* Next insn is delay slot */ - pc=0x4336c; - run_43200(); return; - case 0x4340c: + pc=0x51d6c; + continue; + case 0x51e0c: r2 = r0 - r2; - /* Next insn is delay slot */ - pc=0x4335c; - run_43200(); return; - case 0x43418: + pc=0x51d5c; + continue; + case 0x51e18: r3 = r2 + 2; addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r8 = tmp; r25 = r0 + 1; - /* Next insn is delay slot */ - pc=0x4325c; - run_43200(); return; - case 0x4342c: + pc=0x51c5c; + continue; + case 0x51e2c: r3 = r2 + 2; addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r8 = tmp; r25 = r0 + r0; - /* Next insn is delay slot */ - pc=0x4325c; - run_43200(); return; - case 0x43440: + pc=0x51c5c; + continue; + case 0x51e40: r2 = 32768 << 16; - /* Next insn is delay slot */ - pc=0x433f0; - run_43200(); return; - case 0x4344c: + pc=0x51df0; + continue; + case 0x51e4c: addr=r3+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r8 = tmp; r24 = r0 + 16; r3 = r3 + 2; r7 = r0 + 16; - /* Next insn is delay slot */ - pc=0x43288; - run_43200(); return; - case 0x43464: + pc=0x51c88; + continue; + case 0x51e64: r24 = r0 + 8; r7 = r0 + 8; - /* Next insn is delay slot */ - pc=0x43288; - run_43200(); return; - case 0x43600: - pc=0x43600; + pc=0x51c88; + continue; + case 0x52000: + pc=0x52000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_43600() throws ExecutionException { /* 0x43600 - 0x43800 */ + private final void run_52000() throws ExecutionException { /* 0x52000 - 0x52800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x43600: + case 0x52000: r3 = r4 + r0; r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; + r4= page[(r28+-31512)>>>2]; r7 = r6 + r0; r5 = r3 + r0; r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x43200; - run_43200(); return; - case 0x43800: - pc=0x43800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_43800() throws ExecutionException { /* 0x43800 - 0x43a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x43800: + pc=0x51c00; + run_51800(); return; + case 0x52200: r29 = r29 + -304; - writePages[(r29+300)>>>12][((r29+300)>>>2)&0x3ff] = r31; - writePages[(r29+288)>>>12][((r29+288)>>>2)&0x3ff] = r22; - writePages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff] = r4; + page[(r29+300)>>>2] = r31; + page[(r29+288)>>>2] = r22; + page[(r29+304)>>>2] = r4; r22 = r5 + r0; - writePages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff] = r6; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r7; - writePages[(r29+296)>>>12][((r29+296)>>>2)&0x3ff] = r30; - writePages[(r29+292)>>>12][((r29+292)>>>2)&0x3ff] = r23; - writePages[(r29+284)>>>12][((r29+284)>>>2)&0x3ff] = r21; - writePages[(r29+280)>>>12][((r29+280)>>>2)&0x3ff] = r20; - writePages[(r29+276)>>>12][((r29+276)>>>2)&0x3ff] = r19; - writePages[(r29+272)>>>12][((r29+272)>>>2)&0x3ff] = r18; - writePages[(r29+268)>>>12][((r29+268)>>>2)&0x3ff] = r17; - writePages[(r29+264)>>>12][((r29+264)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x43844; - pc=0x5ae00; - run_5ae00(); return; - case 0x43844: - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; + page[(r29+312)>>>2] = r6; + page[(r29+316)>>>2] = r7; + page[(r29+296)>>>2] = r30; + page[(r29+292)>>>2] = r23; + page[(r29+284)>>>2] = r21; + page[(r29+280)>>>2] = r20; + page[(r29+276)>>>2] = r19; + page[(r29+272)>>>2] = r18; + page[(r29+268)>>>2] = r17; + page[(r29+264)>>>2] = r16; + r31=0x52244; + pc=0x5aa00; + run_5a800(); return; + case 0x52244: + r2= page[(r2+0)>>>2]; r4 = r2 + r0; - writePages[(r29+216)>>>12][((r29+216)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x4385c; + page[(r29+216)>>>2] = r2; + r31=0x5225c; pc=0x10268; - run_10200(); return; - case 0x4385c: - writePages[(r29+232)>>>12][((r29+232)>>>2)&0x3ff] = r2; + run_10000(); return; + case 0x5225c: + page[(r29+232)>>>2] = r2; addr=r22+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r2 = r2 & 128; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x43884; + pc=0x52284; continue; } - r2 = readPages[(r22+16)>>>12][((r22+16)>>>2)&0x3ff]; + r2= page[(r22+16)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x45464; - run_45400(); return; + pc=0x53e64; + run_53800(); return; } - case 0x43884: + case 0x52284: r21 = r29 + 40; - r2 = 7 << 16; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r21; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r0; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r0; - writePages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff] = r0; - writePages[(r29+228)>>>12][((r29+228)>>>2)&0x3ff] = r0; - writePages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff] = r0; - writePages[(r29+240)>>>12][((r29+240)>>>2)&0x3ff] = r0; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r0; - writePages[(r29+200)>>>12][((r29+200)>>>2)&0x3ff] = r0; + r2 = 6 << 16; + page[(r29+144)>>>2] = r21; + page[(r29+152)>>>2] = r0; + page[(r29+148)>>>2] = r0; + page[(r29+212)>>>2] = r0; + page[(r29+228)>>>2] = r0; + page[(r29+224)>>>2] = r0; + page[(r29+240)>>>2] = r0; + page[(r29+236)>>>2] = r0; + page[(r29+200)>>>2] = r0; r8 = r21 + r0; - r19 = r2 + 652; - case 0x438b8: - r3 = readPages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff]; + r19 = r2 + 14192; + case 0x522b8: + r3= page[(r29+312)>>>2]; addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x43fa4; - run_43e00(); return; + pc=0x529a4; + run_52800(); return; } - case 0x438d0: + case 0x522d0: r3 = r0 + 37; - r16 = readPages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff]; + r16= page[(r29+312)>>>2]; if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x438f0; + pc=0x522f0; continue; } - /* Next insn is delay slot */ - pc=0x4395c; + pc=0x5235c; continue; - case 0x438e8: + case 0x522e8: if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x43904; + pc=0x52304; continue; } - case 0x438f0: + case 0x522f0: r16 = r16 + 1; addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x438e8; + pc=0x522e8; continue; } - case 0x43904: - r3 = readPages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff]; + case 0x52304: + r3= page[(r29+312)>>>2]; r17 = r16 - r3; if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x4395c; + pc=0x5235c; continue; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; + r3= page[(r29+312)>>>2]; r2 = r2 + r17; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; - r2 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r3; + page[(r29+152)>>>2] = r2; + r2= page[(r29+148)>>>2]; + page[(r8+0)>>>2] = r3; r2 = r2 + 1; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r2; + page[(r29+148)>>>2] = r2; r2 = r2 < 8 ? 1 : 0; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r17; + page[(r8+4)>>>2] = r17; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x43a04; - run_43a00(); return; + pc=0x52404; + continue; } r8 = r8 + 8; - case 0x4394c: - r3 = readPages[(r29+200)>>>12][((r29+200)>>>2)&0x3ff]; + case 0x5234c: + r3= page[(r29+200)>>>2]; r3 = r3 + r17; - writePages[(r29+200)>>>12][((r29+200)>>>2)&0x3ff] = r3; - case 0x4395c: + page[(r29+200)>>>2] = r3; + case 0x5235c: addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x43a2c; - run_43a00(); return; + pc=0x5242c; + continue; } r16 = r16 + 1; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r5 = r0 + r0; r30 = r0 + -1; - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = r0; + page[(r29+184)>>>2] = r0; r17 = r0 + r0; r6 = r0 + 42; r7 = r0 + r0; - case 0x4398c: + case 0x5238c: addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r18 = tmp; r3 = r16 + 1; - case 0x43994: + case 0x52394: r2 = r18 + -32; r4 = (r2&0xffffffffL) < (89&0xffffffffL) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x4452c; - run_44400(); return; + pc=0x52f2c; + run_52800(); return; } - r4 = 7 << 16; + r4 = 6 << 16; r2 = r2 << 2; - r4 = r4 + 280; + r4 = r4 + 13820; r2 = r4 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ + r2= page[(r2+0)>>>2]; pc=r2; return; - case 0x439c4: + case 0x523c4: r17 = r17 | 16; - case 0x439c8: + case 0x523c8: r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x4398c; + pc=0x5238c; continue; - case 0x439d4: - r4 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; - r7 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; + case 0x523d4: + r4= page[(r29+316)>>>2]; + r7= page[(r4+0)>>>2]; r2 = r4 + 4; if(r7 >= 0) { - /* Next insn is delay slot */ - pc=0x4451c; - run_44400(); return; + pc=0x52f1c; + run_52800(); return; } r7 = r0 - r7; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r2; - case 0x439f4: + page[(r29+316)>>>2] = r2; + case 0x523f4: r17 = r17 | 4; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x4398c; + pc=0x5238c; continue; - case 0x43a00: - pc=0x43a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_43a00() throws ExecutionException { /* 0x43a00 - 0x43c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x43a00: - case 0x43a04: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + case 0x52404: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x43a18; - pc=0x5fe00; - run_5fe00(); return; - case 0x43a18: + r31=0x52418; + pc=0x5ca00; + run_5c800(); return; + case 0x52418: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; + pc=0x52450; continue; } r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x4394c; - run_43800(); return; - case 0x43a2c: - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; + pc=0x5234c; + continue; + case 0x5242c: + r2= page[(r29+152)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x43a50; + pc=0x52450; continue; } - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x43a50; - pc=0x5fe00; - run_5fe00(); return; - case 0x43a50: + r31=0x52450; + pc=0x5ca00; + run_5c800(); return; + case 0x52450: addr=r22+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r2 = r2 & 64; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x43a9c; + pc=0x5249c; continue; } r2 = r0 + -1; - case 0x43a68: - r31 = readPages[(r29+300)>>>12][((r29+300)>>>2)&0x3ff]; - r30 = readPages[(r29+296)>>>12][((r29+296)>>>2)&0x3ff]; - r23 = readPages[(r29+292)>>>12][((r29+292)>>>2)&0x3ff]; - r22 = readPages[(r29+288)>>>12][((r29+288)>>>2)&0x3ff]; - r21 = readPages[(r29+284)>>>12][((r29+284)>>>2)&0x3ff]; - r20 = readPages[(r29+280)>>>12][((r29+280)>>>2)&0x3ff]; - r19 = readPages[(r29+276)>>>12][((r29+276)>>>2)&0x3ff]; - r18 = readPages[(r29+272)>>>12][((r29+272)>>>2)&0x3ff]; - r17 = readPages[(r29+268)>>>12][((r29+268)>>>2)&0x3ff]; - r16 = readPages[(r29+264)>>>12][((r29+264)>>>2)&0x3ff]; + case 0x52468: + r31= page[(r29+300)>>>2]; + r30= page[(r29+296)>>>2]; + r23= page[(r29+292)>>>2]; + r22= page[(r29+288)>>>2]; + r21= page[(r29+284)>>>2]; + r20= page[(r29+280)>>>2]; + r19= page[(r29+276)>>>2]; + r18= page[(r29+272)>>>2]; + r17= page[(r29+268)>>>2]; + r16= page[(r29+264)>>>2]; r29 = r29 + 304; - /* Next insn is delay slot */ pc=r31; return; - case 0x43a9c: - r2 = readPages[(r29+200)>>>12][((r29+200)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x43a68; + case 0x5249c: + r2= page[(r29+200)>>>2]; + pc=0x52468; continue; - case 0x43aa8: + case 0x524a8: r5 = r0 + 43; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x4398c; - run_43800(); return; - case 0x43ab8: - writePages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = r7; - r16 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + pc=0x5238c; + continue; + case 0x524b8: + page[(r29+312)>>>2] = r3; + r3= page[(r29+316)>>>2]; + page[(r29+184)>>>2] = r7; + r16= page[(r3+0)>>>2]; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r20 = r3 + 4; if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x4560c; - run_45600(); return; + pc=0x5400c; + run_54000(); return; } r4 = r16 + r0; if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x454e0; - run_45400(); return; + pc=0x53ee0; + run_53800(); return; } r5 = r0 + r0; r6 = r30 + r0; - writePages[(r29+260)>>>12][((r29+260)>>>2)&0x3ff] = r8; - /* Next insn is delay slot */ - r31=0x43af8; - pc=0x5b400; - run_5b400(); return; - case 0x43af8: - r8 = readPages[(r29+260)>>>12][((r29+260)>>>2)&0x3ff]; + page[(r29+260)>>>2] = r8; + r31=0x524f8; + pc=0x5ac00; + run_5a800(); return; + case 0x524f8: + r8= page[(r29+260)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x458ac; - run_45800(); return; + pc=0x542ac; + run_54000(); return; } r2 = r2 - r16; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r2; + page[(r29+196)>>>2] = r2; r2 = r30 < r2 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x43b1c; + pc=0x5251c; continue; } - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r30; - case 0x43b1c: - r2 = readPages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff]; + page[(r29+196)>>>2] = r30; + case 0x5251c: + r2= page[(r29+196)>>>2]; if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x454fc; - run_45400(); return; + pc=0x53efc; + run_53800(); return; } - case 0x43b2c: + case 0x5252c: addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - writePages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff] = r2; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r20; + page[(r29+188)>>>2] = r2; + page[(r29+316)>>>2] = r20; r30 = r0 + r0; - writePages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff] = r0; - case 0x43b40: + page[(r29+208)>>>2] = r0; + case 0x52540: if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x43b58; + pc=0x52558; continue; } - case 0x43b48: - r2 = readPages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff]; + case 0x52548: + r2= page[(r29+188)>>>2]; r2 = r2 + 1; - writePages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff] = r2; - case 0x43b58: + page[(r29+188)>>>2] = r2; + case 0x52558: r4 = r17 & 2; - writePages[(r29+192)>>>12][((r29+192)>>>2)&0x3ff] = r4; + page[(r29+192)>>>2] = r4; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x43b78; + pc=0x52578; continue; } - r5 = readPages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff]; + r5= page[(r29+188)>>>2]; r5 = r5 + 2; - writePages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff] = r5; - case 0x43b78: + page[(r29+188)>>>2] = r5; + case 0x52578: r2 = r17 & 132; - writePages[(r29+204)>>>12][((r29+204)>>>2)&0x3ff] = r2; + page[(r29+204)>>>2] = r2; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x44550; - run_44400(); return; + pc=0x52f50; + run_52800(); return; } - r4 = readPages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff]; - r5 = readPages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff]; + r4= page[(r29+184)>>>2]; + r5= page[(r29+188)>>>2]; r20 = r4 - r5; if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x44550; - run_44400(); return; + pc=0x52f50; + run_52800(); return; } r2 = r20 < 17 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45548; - run_45400(); return; + pc=0x53f48; + run_53800(); return; } r4 = r20 + r0; - writePages[(r29+244)>>>12][((r29+244)>>>2)&0x3ff] = r16; + page[(r29+244)>>>2] = r16; r20 = r17 + r0; - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - writePages[(r29+220)>>>12][((r29+220)>>>2)&0x3ff] = r19; + r2= page[(r29+152)>>>2]; + r3= page[(r29+148)>>>2]; + page[(r29+220)>>>2] = r19; r23 = r0 + 16; - r16 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + r16= page[(r29+304)>>>2]; r17 = r4 + r0; - /* Next insn is delay slot */ - pc=0x43bec; + pc=0x525ec; continue; - case 0x43bd8: + case 0x525d8: r17 = r17 + -16; r4 = r17 < 17 ? 1 : 0; r8 = r8 + 8; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x43c48; - run_43c00(); return; + pc=0x52648; + continue; } - case 0x43bec: + case 0x525ec: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r19; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r23; - case 0x43c00: - pc=0x43c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_43c00() throws ExecutionException { /* 0x43c00 - 0x43e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x43c00: - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r19; + page[(r8+4)>>>2] = r23; + page[(r29+152)>>>2] = r2; + page[(r29+148)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x43bd8; - run_43a00(); return; + pc=0x525d8; + continue; } r4 = r16 + r0; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x43c24; - pc=0x5fe00; - run_5fe00(); return; - case 0x43c24: + r31=0x52624; + pc=0x5ca00; + run_5c800(); return; + case 0x52624: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + continue; } r17 = r17 + -16; r4 = r17 < 17 ? 1 : 0; - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; + r3= page[(r29+148)>>>2]; r8 = r21 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x43bec; - run_43a00(); return; + pc=0x525ec; + continue; } - case 0x43c48: + case 0x52648: r4 = r17 + r0; - r16 = readPages[(r29+244)>>>12][((r29+244)>>>2)&0x3ff]; + r16= page[(r29+244)>>>2]; r17 = r20 + r0; r20 = r4 + r0; - case 0x43c58: + case 0x52658: r3 = r3 + 1; - r4 = readPages[(r29+220)>>>12][((r29+220)>>>2)&0x3ff]; + r4= page[(r29+220)>>>2]; r2 = r20 + r2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+148)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r4; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r20; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r4; + page[(r8+4)>>>2] = r20; + page[(r29+152)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x44c1c; - run_44c00(); return; + pc=0x5361c; + run_53000(); return; } addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; r8 = r8 + 8; - case 0x43c88: + case 0x52688: if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x43cc4; + pc=0x526c4; continue; } r3 = r29 + 182; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r3; r3 = r0 + 1; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + page[(r8+4)>>>2] = r3; + r3= page[(r29+148)>>>2]; r2 = r2 + 1; r3 = r3 + 1; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+148)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + page[(r29+152)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x44a50; - run_44a00(); return; + pc=0x53450; + run_53000(); return; } r8 = r8 + 8; - case 0x43cc4: - r3 = readPages[(r29+192)>>>12][((r29+192)>>>2)&0x3ff]; + case 0x526c4: + r3= page[(r29+192)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x43d08; + pc=0x52708; continue; } r3 = r29 + 180; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r3; r3 = r0 + 2; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + page[(r8+4)>>>2] = r3; + r3= page[(r29+148)>>>2]; r2 = r2 + 2; r3 = r3 + 1; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+148)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + page[(r29+152)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x44a7c; - run_44a00(); return; + pc=0x5347c; + run_53000(); return; } r8 = r8 + 8; - case 0x43d08: - r4 = readPages[(r29+204)>>>12][((r29+204)>>>2)&0x3ff]; + case 0x52708: + r4= page[(r29+204)>>>2]; r3 = r0 + 128; if(r4 == r3) { - /* Next insn is delay slot */ - pc=0x448bc; - run_44800(); return; + pc=0x532bc; + run_53000(); return; } - case 0x43d18: - r3 = readPages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff]; + case 0x52718: + r3= page[(r29+196)>>>2]; r20 = r30 - r3; if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x43e14; - run_43e00(); return; + pc=0x52814; + run_52800(); return; } r3 = r20 < 17 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x450c0; - run_45000(); return; + pc=0x53ac0; + run_53800(); return; } - r5 = 7 << 16; - r23 = r5 + 636; + r5 = 6 << 16; + r23 = r5 + 14176; r4 = r23 + r0; - writePages[(r29+192)>>>12][((r29+192)>>>2)&0x3ff] = r16; + page[(r29+192)>>>2] = r16; r23 = r20 + r0; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r3= page[(r29+148)>>>2]; r20 = r17 + r0; r30 = r0 + 16; - r16 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + r16= page[(r29+304)>>>2]; r17 = r4 + r0; - /* Next insn is delay slot */ - pc=0x43d7c; + pc=0x5277c; continue; - case 0x43d68: + case 0x52768: r23 = r23 + -16; r4 = r23 < 17 ? 1 : 0; r8 = r8 + 8; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x43dd8; + pc=0x527d8; continue; } - case 0x43d7c: + case 0x5277c: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r17; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r30; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r17; + page[(r8+4)>>>2] = r30; + page[(r29+152)>>>2] = r2; + page[(r29+148)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x43d68; + pc=0x52768; continue; } r4 = r16 + r0; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x43db4; - pc=0x5fe00; - run_5fe00(); return; - case 0x43db4: + r31=0x527b4; + pc=0x5ca00; + run_5c800(); return; + case 0x527b4: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + continue; } r23 = r23 + -16; r4 = r23 < 17 ? 1 : 0; - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; + r3= page[(r29+148)>>>2]; r8 = r21 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x43d7c; + pc=0x5277c; continue; } - case 0x43dd8: + case 0x527d8: r4 = r17 + r0; - r16 = readPages[(r29+192)>>>12][((r29+192)>>>2)&0x3ff]; + r16= page[(r29+192)>>>2]; r17 = r20 + r0; r20 = r23 + r0; r23 = r4 + r0; - case 0x43dec: + case 0x527ec: r3 = r3 + 1; r2 = r2 + r20; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+148)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - case 0x43e00: - pc=0x43e00; + page[(r8+0)>>>2] = r23; + case 0x52800: + pc=0x52800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_43e00() throws ExecutionException { /* 0x43e00 - 0x44000 */ + private final void run_52800() throws ExecutionException { /* 0x52800 - 0x53000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x43e00: - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r20; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + case 0x52800: + page[(r8+4)>>>2] = r20; + page[(r29+152)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x44a24; - run_44a00(); return; + pc=0x53424; + run_53000(); return; } r8 = r8 + 8; - case 0x43e14: + case 0x52814: r3 = r17 & 256; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x44750; - run_44600(); return; + pc=0x53150; + run_53000(); return; } - r3 = readPages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff]; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r16; + r3= page[(r29+196)>>>2]; + page[(r8+0)>>>2] = r16; r2 = r2 + r3; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + page[(r8+4)>>>2] = r3; + r3= page[(r29+148)>>>2]; + page[(r29+152)>>>2] = r2; r3 = r3 + 1; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+148)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x44654; - run_44600(); return; + pc=0x53054; + run_53000(); return; } - case 0x43e4c: + case 0x5284c: r8 = r8 + 8; - case 0x43e50: + case 0x52850: r17 = r17 & 4; if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x43f50; + pc=0x52950; continue; } - r3 = readPages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff]; - r4 = readPages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff]; + r3= page[(r29+184)>>>2]; + r4= page[(r29+188)>>>2]; r16 = r3 - r4; if(r16 <= 0) { - /* Next insn is delay slot */ - pc=0x43f50; + pc=0x52950; continue; } r3 = r16 < 17 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x455fc; - run_45400(); return; + pc=0x53ffc; + run_53800(); return; } - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - writePages[(r29+220)>>>12][((r29+220)>>>2)&0x3ff] = r19; + r3= page[(r29+148)>>>2]; + page[(r29+220)>>>2] = r19; r17 = r0 + 16; - r18 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x43eac; + r18= page[(r29+304)>>>2]; + pc=0x528ac; continue; - case 0x43e98: + case 0x52898: r16 = r16 + -16; r4 = r16 < 17 ? 1 : 0; r8 = r8 + 8; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x43f08; + pc=0x52908; continue; } - case 0x43eac: + case 0x528ac: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r19; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r17; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r19; + page[(r8+4)>>>2] = r17; + page[(r29+152)>>>2] = r2; + page[(r29+148)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x43e98; + pc=0x52898; continue; } r4 = r18 + r0; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x43ee4; - pc=0x5fe00; - run_5fe00(); return; - case 0x43ee4: + r31=0x528e4; + pc=0x5ca00; + run_5c800(); return; + case 0x528e4: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } r16 = r16 + -16; r4 = r16 < 17 ? 1 : 0; - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; + r3= page[(r29+148)>>>2]; r8 = r21 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x43eac; + pc=0x528ac; continue; } - case 0x43f08: + case 0x52908: r3 = r3 + 1; - r5 = readPages[(r29+220)>>>12][((r29+220)>>>2)&0x3ff]; + r5= page[(r29+220)>>>2]; r2 = r2 + r16; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+148)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r5; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r16; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r5; + page[(r8+4)>>>2] = r16; + page[(r29+152)>>>2] = r2; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x43f50; + pc=0x52950; continue; } - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x43f44; - pc=0x5fe00; - run_5fe00(); return; - case 0x43f44: + r31=0x52944; + pc=0x5ca00; + run_5c800(); return; + case 0x52944: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - case 0x43f50: - r3 = readPages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff]; - r5 = readPages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; + case 0x52950: + r3= page[(r29+188)>>>2]; + r5= page[(r29+184)>>>2]; r4 = r3 < r5 ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x43f6c; + pc=0x5296c; continue; } r3 = r5 + r0; - case 0x43f6c: - r4 = readPages[(r29+200)>>>12][((r29+200)>>>2)&0x3ff]; + case 0x5296c: + r4= page[(r29+200)>>>2]; r4 = r4 + r3; - writePages[(r29+200)>>>12][((r29+200)>>>2)&0x3ff] = r4; + page[(r29+200)>>>2] = r4; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x44680; - run_44600(); return; + pc=0x53080; + run_53000(); return; } - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r0; + page[(r29+148)>>>2] = r0; r8 = r21 + r0; - case 0x43f8c: - r3 = readPages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff]; + case 0x5298c: + r3= page[(r29+312)>>>2]; addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x438d0; - run_43800(); return; + pc=0x522d0; + run_52000(); return; } - case 0x43fa4: - r16 = readPages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x4395c; - run_43800(); return; - case 0x43fb0: + case 0x529a4: + r16= page[(r29+312)>>>2]; + pc=0x5235c; + run_52000(); return; + case 0x529b0: if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x439c8; - run_43800(); return; + pc=0x523c8; + run_52000(); return; } r5 = r0 + 32; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x4398c; - run_43800(); return; - case 0x43fc8: + pc=0x5238c; + run_52000(); return; + case 0x529c8: addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r18 = tmp; r4 = r3 + 1; if(r18 == r6) { - /* Next insn is delay slot */ - pc=0x45b04; - run_45a00(); return; + pc=0x54504; + run_54000(); return; } r2 = r18 + -48; r3 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; r30 = r0 + r0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x4401c; - run_44000(); return; + pc=0x52a1c; + continue; } - case 0x43fec: + case 0x529ec: r4 = r4 + 1; r3 = r30 << 1; addr=r4+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r18 = tmp; r30 = r30 << 3; r30 = r3 + r30; - case 0x44000: - pc=0x44000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_44000() throws ExecutionException { /* 0x44000 - 0x44200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x44000: r30 = r2 + r30; r2 = r18 + -48; r3 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x43fec; - run_43e00(); return; + pc=0x529ec; + continue; } if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x45454; - run_45400(); return; + pc=0x53e54; + run_53800(); return; } - case 0x4401c: + case 0x52a1c: r3 = r4 + r0; - /* Next insn is delay slot */ - pc=0x43994; - run_43800(); return; - case 0x44028: + pc=0x52394; + run_52000(); return; + case 0x52a28: r17 = r17 | 128; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x4398c; - run_43800(); return; - case 0x44038: + pc=0x5238c; + run_52000(); return; + case 0x52a38: r7 = r0 + r0; r2 = r18 + -48; - case 0x44040: + case 0x52a40: r3 = r3 + 1; r4 = r7 << 1; addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r18 = tmp; r7 = r7 << 3; r7 = r4 + r7; @@ -51655,2824 +59534,2397 @@ public final class AcmeCrossAssembler extends UnixRuntime { r2 = r18 + -48; r4 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x44040; + pc=0x52a40; continue; } - /* Next insn is delay slot */ - pc=0x43994; - run_43800(); return; - case 0x44070: + pc=0x52394; + run_52000(); return; + case 0x52a70: r17 = r17 | 16; r2 = r17 & 16; - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = r7; - writePages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff] = r3; + page[(r29+184)>>>2] = r7; + page[(r29+312)>>>2] = r3; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x444ec; - run_44400(); return; + pc=0x52eec; + continue; } - case 0x44088: - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; + case 0x52a88: + r3= page[(r29+316)>>>2]; r4 = r0 + r0; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + r2= page[(r3+0)>>>2]; r3 = r3 + 4; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; + page[(r29+316)>>>2] = r3; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - case 0x440a4: + case 0x52aa4: if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x440b4; + pc=0x52ab4; continue; } r5 = r0 + -129; r17 = r17 & r5; - case 0x440b4: + case 0x52ab4: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x446ac; - run_44600(); return; + pc=0x530ac; + run_53000(); return; } if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x446ac; - run_44600(); return; + pc=0x530ac; + run_53000(); return; } if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x44ad0; - run_44a00(); return; + pc=0x534d0; + run_53000(); return; } r2 = r17 & 1; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x44ad0; - run_44a00(); return; + pc=0x534d0; + run_53000(); return; } r2 = r0 + 48; addr=r29+143; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r0 + 1; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r2; + page[(r29+196)>>>2] = r2; r16 = r29 + 143; - case 0x440ec: - r2 = readPages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff]; + case 0x52aec: + r2= page[(r29+196)>>>2]; r4 = r2 < r30 ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x44104; + pc=0x52b04; continue; } r2 = r30 + r0; - case 0x44104: - writePages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff] = r2; - writePages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x43b40; - run_43a00(); return; - case 0x44114: + case 0x52b04: + page[(r29+188)>>>2] = r2; + page[(r29+208)>>>2] = r0; + pc=0x52540; + run_52000(); return; + case 0x52b14: r17 = r17 | 16; r2 = r17 & 16; - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = r7; - writePages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff] = r3; + page[(r29+184)>>>2] = r7; + page[(r29+312)>>>2] = r3; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x444a8; - run_44400(); return; + pc=0x52ea8; + continue; } - case 0x4412c: - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; + case 0x52b2c: + r3= page[(r29+316)>>>2]; r4 = r0 + 1; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + r2= page[(r3+0)>>>2]; r3 = r3 + 4; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; + page[(r29+316)>>>2] = r3; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x440a4; + pc=0x52aa4; continue; - case 0x44150: - r2 = 7 << 16; - r2 = r2 + 228; - writePages[(r29+240)>>>12][((r29+240)>>>2)&0x3ff] = r2; + case 0x52b50: + r2 = 6 << 16; + r2 = r2 + 13772; + page[(r29+240)>>>2] = r2; r2 = r17 & 16; - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = r7; - writePages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff] = r3; + page[(r29+184)>>>2] = r7; + page[(r29+312)>>>2] = r3; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x44390; - run_44200(); return; + pc=0x52d90; + continue; } - case 0x44174: - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + case 0x52b74: + r3= page[(r29+316)>>>2]; + r2= page[(r3+0)>>>2]; r3 = r3 + 4; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; - case 0x44188: + page[(r29+316)>>>2] = r3; + case 0x52b88: r3 = r17 & 1; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x44ae0; - run_44a00(); return; + pc=0x534e0; + run_53000(); return; } if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x44ae0; - run_44a00(); return; + pc=0x534e0; + run_53000(); return; } r3 = r0 + 48; addr=r29+180; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; addr=r29+181; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r17 = r17 | 2; r4 = r0 + 2; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x440a4; + pc=0x52aa4; continue; - case 0x441c0: + case 0x52bc0: r2 = r17 & 16; - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = r7; - writePages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff] = r3; + page[(r29+184)>>>2] = r7; + page[(r29+312)>>>2] = r3; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x4432c; - run_44200(); return; + pc=0x52d2c; + continue; } - case 0x441d8: - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + case 0x52bd8: + r3= page[(r29+316)>>>2]; + r2= page[(r3+0)>>>2]; r3 = r3 + 4; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; - case 0x441ec: + page[(r29+316)>>>2] = r3; + case 0x52bec: if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x44350; - run_44200(); return; + pc=0x52d50; + continue; } - case 0x441f4: + case 0x52bf4: addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; r4 = r0 + 1; - /* Next insn is delay slot */ - pc=0x440a4; + pc=0x52aa4; continue; - case 0x44200: - pc=0x44200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_44200() throws ExecutionException { /* 0x44200 - 0x44400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x44200: - case 0x44204: + case 0x52c04: r17 = r17 | 64; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x4398c; - run_43800(); return; - case 0x44214: - writePages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = r7; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + pc=0x5238c; + run_52000(); return; + case 0x52c14: + page[(r29+312)>>>2] = r3; + r3= page[(r29+316)>>>2]; + page[(r29+184)>>>2] = r7; + r2= page[(r3+0)>>>2]; r3 = r3 + 4; addr=r29+104; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; - case 0x44234: + page[(addr)>>>2] = tmp; + page[(r29+316)>>>2] = r3; + case 0x52c34: r4 = r0 + 1; r5 = r0 + 1; r3 = r0 + r0; - writePages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff] = r4; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r5; + page[(r29+188)>>>2] = r4; + page[(r29+196)>>>2] = r5; r30 = r0 + r0; - writePages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff] = r0; + page[(r29+208)>>>2] = r0; r16 = r29 + 104; - /* Next insn is delay slot */ - pc=0x43b58; - run_43a00(); return; - case 0x4425c: + pc=0x52558; + run_52000(); return; + case 0x52c5c: r17 = r17 | 1; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x4398c; - run_43800(); return; - case 0x4426c: + pc=0x5238c; + run_52000(); return; + case 0x52c6c: r2 = r17 & 16; - writePages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff] = r3; + page[(r29+312)>>>2] = r3; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x44d6c; - run_44c00(); return; + pc=0x5376c; + run_53000(); return; } r17 = r17 & 64; if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x44d6c; - run_44c00(); return; + pc=0x5376c; + run_53000(); return; } - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = readPages[(r29+200)>>>12][((r29+200)>>>2)&0x3ff]; + r3= page[(r29+316)>>>2]; + r2= page[(r3+0)>>>2]; + r3= page[(r29+200)>>>2]; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r3= page[(r29+316)>>>2]; r3 = r3 + 4; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x438b8; - run_43800(); return; - case 0x442bc: - writePages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = r7; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + page[(r29+316)>>>2] = r3; + pc=0x522b8; + run_52000(); return; + case 0x52cbc: + page[(r29+312)>>>2] = r3; + r3= page[(r29+316)>>>2]; + page[(r29+184)>>>2] = r7; + r2= page[(r3+0)>>>2]; r3 = r0 + 48; addr=r29+180; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + 120; addr=r29+181; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r3= page[(r29+316)>>>2]; r17 = r17 | 2; r3 = r3 + 4; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; - r3 = 7 << 16; - r3 = r3 + 248; - writePages[(r29+240)>>>12][((r29+240)>>>2)&0x3ff] = r3; + page[(r29+316)>>>2] = r3; + r3 = 6 << 16; + r3 = r3 + 13792; + page[(r29+240)>>>2] = r3; r4 = r0 + 2; r18 = r0 + 120; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x440a4; - run_44000(); return; - case 0x44310: + pc=0x52aa4; + continue; + case 0x52d10: r17 = r17 | 16; r2 = r17 & 16; - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = r7; - writePages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff] = r3; + page[(r29+184)>>>2] = r7; + page[(r29+312)>>>2] = r3; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x441d8; - run_44000(); return; + pc=0x52bd8; + continue; } - case 0x4432c: + case 0x52d2c: r2 = r17 & 64; - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; + r3= page[(r29+316)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x4506c; - run_45000(); return; + pc=0x53a6c; + run_53800(); return; } addr=r3+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r2 = tmp; r3 = r3 + 4; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; + page[(r29+316)>>>2] = r3; if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x441f4; - run_44000(); return; + pc=0x52bf4; + continue; } - case 0x44350: + case 0x52d50: r3 = r0 + 45; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r0 - r2; r3 = r0 + 45; r4 = r0 + 1; - /* Next insn is delay slot */ - pc=0x440a4; - run_44000(); return; - case 0x4436c: - writePages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff] = r3; - r3 = 7 << 16; - r3 = r3 + 248; + pc=0x52aa4; + continue; + case 0x52d6c: + page[(r29+312)>>>2] = r3; + r3 = 6 << 16; + r3 = r3 + 13792; r2 = r17 & 16; - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = r7; + page[(r29+184)>>>2] = r7; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+240)>>>12][((r29+240)>>>2)&0x3ff] = r3; + page[(addr)>>>2] = tmp; + page[(r29+240)>>>2] = r3; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x44174; - run_44000(); return; + pc=0x52b74; + continue; } - case 0x44390: + case 0x52d90: r2 = r17 & 64; - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; + r3= page[(r29+316)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x45058; - run_45000(); return; + pc=0x53a58; + run_53800(); return; } addr=r3+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r3 = r3 + 4; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x44188; - run_44000(); return; - case 0x443b4: + page[(r29+316)>>>2] = r3; + pc=0x52b88; + continue; + case 0x52db4: r2 = r17 & 8; - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = r7; - writePages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff] = r3; + page[(r29+184)>>>2] = r7; + page[(r29+312)>>>2] = r3; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x45044; - run_45000(); return; + pc=0x53a44; + run_53800(); return; } - r4 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; + r4= page[(r29+316)>>>2]; r3 = r4 + 7; - case 0x443d8: + case 0x52dd8: r2 = r0 + -8; r2 = r3 & r2; r3 = r2 + 8; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; - f0 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - f1 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - writePages[(r29+260)>>>12][((r29+260)>>>2)&0x3ff] = r8; - writePages[(r29+228)>>>12][((r29+228)>>>2)&0x3ff] = f0; - f12 = readPages[(r29+228)>>>12][((r29+228)>>>2)&0x3ff]; - case 0x44400: - pc=0x44400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_44400() throws ExecutionException { /* 0x44400 - 0x44600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x44400: - writePages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff] = f1; - f13 = readPages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x44410; - pc=0x37a00; - run_37a00(); return; - case 0x44410: + page[(r29+316)>>>2] = r3; + f0= page[(r2+4)>>>2]; + f1= page[(r2+0)>>>2]; + page[(r29+260)>>>2] = r8; + page[(r29+228)>>>2] = f0; + f12= page[(r29+228)>>>2]; + page[(r29+224)>>>2] = f1; + f13= page[(r29+224)>>>2]; + r31=0x52e10; + pc=0x48600; + run_48000(); return; + case 0x52e10: r3 = r0 + 1; - r8 = readPages[(r29+260)>>>12][((r29+260)>>>2)&0x3ff]; + r8= page[(r29+260)>>>2]; if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x44fe4; - run_44e00(); return; + pc=0x539e4; + run_53800(); return; } f0 = r0; - f2 = readPages[(r29+228)>>>12][((r29+228)>>>2)&0x3ff]; + f2= page[(r29+228)>>>2]; f1 = r0; - f3 = readPages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff]; + f3= page[(r29+224)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x456e0; - run_45600(); return; + pc=0x540e0; + run_54000(); return; } addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - case 0x44448: + case 0x52e48: r2 = r18 < 72 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45444; - run_45400(); return; + pc=0x53e44; + run_53800(); return; } - r16 = 7 << 16; - r16 = r16 + 216; - case 0x4445c: + r16 = 6 << 16; + r16 = r16 + 13760; + case 0x52e5c: r2 = r0 + -129; r17 = r17 & r2; r4 = r0 + 3; r2 = r0 + 3; - writePages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff] = r2; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r4; + page[(r29+188)>>>2] = r2; + page[(r29+196)>>>2] = r4; r30 = r0 + r0; - writePages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x43b40; - run_43a00(); return; - case 0x44484: + page[(r29+208)>>>2] = r0; + pc=0x52540; + run_52000(); return; + case 0x52e84: r17 = r17 | 8; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x4398c; - run_43800(); return; - case 0x44494: + pc=0x5238c; + run_52000(); return; + case 0x52e94: r2 = r17 & 16; - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = r7; - writePages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff] = r3; + page[(r29+184)>>>2] = r7; + page[(r29+312)>>>2] = r3; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x4412c; - run_44000(); return; + pc=0x52b2c; + continue; } - case 0x444a8: + case 0x52ea8: r2 = r17 & 64; - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; + r3= page[(r29+316)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x45080; - run_45000(); return; + pc=0x53a80; + run_53800(); return; } addr=r3+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r3 = r3 + 4; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; + page[(r29+316)>>>2] = r3; r4 = r0 + 1; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x440a4; - run_44000(); return; - case 0x444d8: + pc=0x52aa4; + continue; + case 0x52ed8: r2 = r17 & 16; - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = r7; - writePages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff] = r3; + page[(r29+184)>>>2] = r7; + page[(r29+312)>>>2] = r3; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x44088; - run_44000(); return; + pc=0x52a88; + continue; } - case 0x444ec: + case 0x52eec: r2 = r17 & 64; - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; + r3= page[(r29+316)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x450a0; - run_45000(); return; + pc=0x53aa0; + run_53800(); return; } addr=r3+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r3 = r3 + 4; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; + page[(r29+316)>>>2] = r3; r4 = r0 + r0; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x440a4; - run_44000(); return; - case 0x4451c: - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r2; + pc=0x52aa4; + continue; + case 0x52f1c: + page[(r29+316)>>>2] = r2; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x4398c; - run_43800(); return; - case 0x4452c: - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = r7; - writePages[(r29+312)>>>12][((r29+312)>>>2)&0x3ff] = r3; + pc=0x5238c; + run_52000(); return; + case 0x52f2c: + page[(r29+184)>>>2] = r7; + page[(r29+312)>>>2] = r3; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x43a2c; - run_43a00(); return; + pc=0x5242c; + run_52000(); return; } addr=r29+104; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x44234; - run_44200(); return; - case 0x44550: - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x43c88; - run_43c00(); return; - case 0x4455c: - r4 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + pc=0x52c34; + continue; + case 0x52f50: + r2= page[(r29+152)>>>2]; + pc=0x52688; + run_52000(); return; + case 0x52f5c: + r4= page[(r29+212)>>>2]; r3 = r0 + 1; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r3; + page[(r8+4)>>>2] = r3; r2 = r2 + 1; r3 = r4 < 2 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r16; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r16; + page[(r29+152)>>>2] = r2; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x449cc; - run_44800(); return; + pc=0x533cc; + run_53000(); return; } - case 0x44580: - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + case 0x52f80: + r3= page[(r29+148)>>>2]; r3 = r3 + 1; r4 = r3 < 8 ? 1 : 0; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+148)>>>2] = r3; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x44f34; - run_44e00(); return; + pc=0x53934; + run_53800(); return; } - r4 = readPages[(r29+232)>>>12][((r29+232)>>>2)&0x3ff]; + r4= page[(r29+232)>>>2]; r8 = r8 + 8; r3 = r3 + 1; - r5 = readPages[(r29+216)>>>12][((r29+216)>>>2)&0x3ff]; + r5= page[(r29+216)>>>2]; r2 = r2 + r4; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r4; + page[(r8+4)>>>2] = r4; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r5; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r5; + page[(r29+152)>>>2] = r2; + page[(r29+148)>>>2] = r3; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x44f88; - run_44e00(); return; + pc=0x53988; + run_53800(); return; } - case 0x445cc: + case 0x52fcc: r8 = r8 + 8; - case 0x445d0: + case 0x52fd0: f0 = r0; - f2 = readPages[(r29+228)>>>12][((r29+228)>>>2)&0x3ff]; + f2= page[(r29+228)>>>2]; f1 = r0; - f3 = readPages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff]; + f3= page[(r29+224)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x44c4c; - run_44c00(); return; + pc=0x5364c; + run_53000(); return; } - r5 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; + r5= page[(r29+212)>>>2]; r16 = r16 + 1; r4 = r5 + -1; - case 0x44600: - pc=0x44600; + case 0x53000: + pc=0x53000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_44600() throws ExecutionException { /* 0x44600 - 0x44800 */ + private final void run_53000() throws ExecutionException { /* 0x53000 - 0x53800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x44600: - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r16; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r4; + case 0x53000: + page[(r8+0)>>>2] = r16; + page[(r8+4)>>>2] = r4; r2 = r2 + r4; - case 0x4460c: + case 0x5300c: r3 = r3 + 1; r4 = r3 < 8 ? 1 : 0; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+152)>>>2] = r2; + page[(r29+148)>>>2] = r3; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x449f4; - run_44800(); return; + pc=0x533f4; + continue; } - case 0x44624: + case 0x53024: r8 = r8 + 8; - case 0x44628: - r5 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; + case 0x53028: + r5= page[(r29+236)>>>2]; r4 = r29 + 164; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r4; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r5; + page[(r8+0)>>>2] = r4; + page[(r8+4)>>>2] = r5; r2 = r5 + r2; - case 0x4463c: + case 0x5303c: r3 = r3 + 1; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+148)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + page[(r29+152)>>>2] = r2; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x43e4c; - run_43e00(); return; + pc=0x5284c; + run_52800(); return; } - case 0x44654: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + case 0x53054: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x44668; - pc=0x5fe00; - run_5fe00(); return; - case 0x44668: + r31=0x53068; + pc=0x5ca00; + run_5c800(); return; + case 0x53068: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x43e50; - run_43e00(); return; - case 0x44680: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + pc=0x52850; + run_52800(); return; + case 0x53080: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x44694; - pc=0x5fe00; - run_5fe00(); return; - case 0x44694: + r31=0x53094; + pc=0x5ca00; + run_5c800(); return; + case 0x53094: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r0; + page[(r29+148)>>>2] = r0; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x43f8c; - run_43e00(); return; - case 0x446ac: + pc=0x5298c; + run_52800(); return; + case 0x530ac: r5 = r0 + 1; if(r4 == r5) { - /* Next insn is delay slot */ - pc=0x44aa8; - run_44a00(); return; + pc=0x534a8; + continue; } r6 = r29 + 144; r5 = r0 + 2; r16 = r6 + r0; if(r4 != r5) { - /* Next insn is delay slot */ - pc=0x44700; + pc=0x53100; continue; } - r5 = readPages[(r29+240)>>>12][((r29+240)>>>2)&0x3ff]; - case 0x446d0: + r5= page[(r29+240)>>>2]; + case 0x530d0: r4 = r2 & 15; r4 = r5 + r4; addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r4 = tmp; r16 = r16 + -1; r2 = r2 >>> 4; addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x446d0; + pc=0x530d0; continue; } - case 0x446f0: + case 0x530f0: r6 = r6 - r16; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - pc=0x440ec; - run_44000(); return; - case 0x44700: + page[(r29+196)>>>2] = r6; + pc=0x52aec; + run_52800(); return; + case 0x53100: r4 = r2 & 7; r16 = r16 + -1; r4 = r4 + 48; r2 = r2 >>> 3; addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x44700; + pc=0x53100; continue; } r2 = r17 & 1; r5 = r16 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x446f0; + pc=0x530f0; continue; } r2 = r0 + 48; if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x446f0; + pc=0x530f0; continue; } r16 = r16 + -1; r6 = r6 - r16; addr=r5+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - pc=0x440ec; - run_44000(); return; - case 0x44750: + page[(addr)>>>2] = tmp; + page[(r29+196)>>>2] = r6; + pc=0x52aec; + run_52800(); return; + case 0x53150: r18 = r18 < 102 ? 1 : 0; if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x4455c; - run_44400(); return; + pc=0x52f5c; + run_52800(); return; } f0 = r0; - f2 = readPages[(r29+228)>>>12][((r29+228)>>>2)&0x3ff]; + f2= page[(r29+228)>>>2]; f1 = r0; - f3 = readPages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff]; + f3= page[(r29+224)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x44af4; - run_44a00(); return; + pc=0x534f4; + continue; } - r3 = 7 << 16; - r3 = r3 + 276; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r3; + r3 = 6 << 16; + r3 = r3 + 6368; + page[(r8+0)>>>2] = r3; r3 = r0 + 1; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + page[(r8+4)>>>2] = r3; + r3= page[(r29+148)>>>2]; r2 = r2 + 1; r3 = r3 + 1; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+148)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + page[(r29+152)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x450d4; - run_45000(); return; + pc=0x53ad4; + run_53800(); return; } r8 = r8 + 8; - case 0x447b8: - r3 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; - r4 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; + case 0x531b8: + r3= page[(r29+176)>>>2]; + r4= page[(r29+212)>>>2]; r3 = r3 < r4 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x447dc; + pc=0x531dc; continue; } r3 = r17 & 1; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x43e50; - run_43e00(); return; + pc=0x52850; + run_52800(); return; } - case 0x447dc: - r3 = readPages[(r29+216)>>>12][((r29+216)>>>2)&0x3ff]; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+232)>>>12][((r29+232)>>>2)&0x3ff]; + case 0x531dc: + r3= page[(r29+216)>>>2]; + page[(r8+0)>>>2] = r3; + r3= page[(r29+232)>>>2]; r2 = r2 + r3; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; - case 0x44800: - pc=0x44800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_44800() throws ExecutionException { /* 0x44800 - 0x44a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x44800: + page[(r8+4)>>>2] = r3; + r3= page[(r29+148)>>>2]; + page[(r29+152)>>>2] = r2; r3 = r3 + 1; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+148)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x45418; - run_45400(); return; + pc=0x53e18; + run_53800(); return; } r8 = r8 + 8; - case 0x44818: - r3 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; + case 0x53218: + r3= page[(r29+212)>>>2]; r16 = r3 + -1; if(r16 <= 0) { - /* Next insn is delay slot */ - pc=0x43e50; - run_43e00(); return; + pc=0x52850; + run_52800(); return; } r3 = r16 < 17 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x44d08; - run_44c00(); return; + pc=0x53708; + continue; } - r5 = 7 << 16; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - r23 = r5 + 636; + r5 = 6 << 16; + r3= page[(r29+148)>>>2]; + r23 = r5 + 14176; r18 = r0 + 16; - r20 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x44868; + r20= page[(r29+304)>>>2]; + pc=0x53268; continue; - case 0x44854: + case 0x53254: r8 = r8 + 8; - case 0x44858: + case 0x53258: r16 = r16 + -16; r4 = r16 < 17 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x44d14; - run_44c00(); return; + pc=0x53714; + continue; } - case 0x44868: + case 0x53268: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r18; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r18; + page[(r29+152)>>>2] = r2; + page[(r29+148)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x44854; + pc=0x53254; continue; } r4 = r20 + r0; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x448a0; - pc=0x5fe00; - run_5fe00(); return; - case 0x448a0: + r31=0x532a0; + pc=0x5ca00; + run_5c800(); return; + case 0x532a0: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; + r3= page[(r29+148)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x44858; + pc=0x53258; continue; - case 0x448bc: - r3 = readPages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff]; - r4 = readPages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff]; + case 0x532bc: + r3= page[(r29+184)>>>2]; + r4= page[(r29+188)>>>2]; r20 = r3 - r4; if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x43d18; - run_43c00(); return; + pc=0x52718; + run_52000(); return; } r3 = r20 < 17 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x4572c; - run_45600(); return; + pc=0x5412c; + run_54000(); return; } - r4 = 7 << 16; - r23 = r4 + 636; + r4 = 6 << 16; + r23 = r4 + 14176; r4 = r23 + r0; - writePages[(r29+192)>>>12][((r29+192)>>>2)&0x3ff] = r16; + page[(r29+192)>>>2] = r16; r23 = r20 + r0; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r3= page[(r29+148)>>>2]; r20 = r17 + r0; r7 = r0 + 16; - r16 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + r16= page[(r29+304)>>>2]; r17 = r4 + r0; - /* Next insn is delay slot */ - pc=0x44924; + pc=0x53324; continue; - case 0x44910: + case 0x53310: r23 = r23 + -16; r4 = r23 < 17 ? 1 : 0; r8 = r8 + 8; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x44988; + pc=0x53388; continue; } - case 0x44924: + case 0x53324: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r17; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r7; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r17; + page[(r8+4)>>>2] = r7; + page[(r29+152)>>>2] = r2; + page[(r29+148)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x44910; + pc=0x53310; continue; } r4 = r16 + r0; r5 = r22 + r0; r6 = r29 + 144; - writePages[(r29+256)>>>12][((r29+256)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x44960; - pc=0x5fe00; - run_5fe00(); return; - case 0x44960: - r7 = readPages[(r29+256)>>>12][((r29+256)>>>2)&0x3ff]; + page[(r29+256)>>>2] = r7; + r31=0x53360; + pc=0x5ca00; + run_5c800(); return; + case 0x53360: + r7= page[(r29+256)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } r23 = r23 + -16; r4 = r23 < 17 ? 1 : 0; - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; + r3= page[(r29+148)>>>2]; r8 = r21 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x44924; + pc=0x53324; continue; } - case 0x44988: + case 0x53388: r4 = r17 + r0; - r16 = readPages[(r29+192)>>>12][((r29+192)>>>2)&0x3ff]; + r16= page[(r29+192)>>>2]; r17 = r20 + r0; r20 = r23 + r0; r23 = r4 + r0; - case 0x4499c: + case 0x5339c: r3 = r3 + 1; r2 = r2 + r20; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+148)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r20; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r20; + page[(r29+152)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x44fb8; - run_44e00(); return; + pc=0x539b8; + run_53800(); return; } r8 = r8 + 8; - /* Next insn is delay slot */ - pc=0x43d18; - run_43c00(); return; - case 0x449cc: + pc=0x52718; + run_52000(); return; + case 0x533cc: r3 = r17 & 1; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x44580; - run_44400(); return; + pc=0x52f80; + run_52800(); return; } - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r3= page[(r29+148)>>>2]; r3 = r3 + 1; r4 = r3 < 8 ? 1 : 0; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+148)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x44624; - run_44600(); return; + pc=0x53024; + continue; } - case 0x449f4: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + case 0x533f4: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - case 0x44a00: - pc=0x44a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_44a00() throws ExecutionException { /* 0x44a00 - 0x44c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x44a00: - /* Next insn is delay slot */ - r31=0x44a08; - pc=0x5fe00; - run_5fe00(); return; - case 0x44a08: + r31=0x53408; + pc=0x5ca00; + run_5c800(); return; + case 0x53408: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; + r3= page[(r29+148)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x44628; - run_44600(); return; - case 0x44a24: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + pc=0x53028; + continue; + case 0x53424: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x44a38; - pc=0x5fe00; - run_5fe00(); return; - case 0x44a38: + r31=0x53438; + pc=0x5ca00; + run_5c800(); return; + case 0x53438: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x43e14; - run_43e00(); return; - case 0x44a50: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + pc=0x52814; + run_52800(); return; + case 0x53450: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x44a64; - pc=0x5fe00; - run_5fe00(); return; - case 0x44a64: + r31=0x53464; + pc=0x5ca00; + run_5c800(); return; + case 0x53464: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x43cc4; - run_43c00(); return; - case 0x44a7c: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + pc=0x526c4; + run_52000(); return; + case 0x5347c: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x44a90; - pc=0x5fe00; - run_5fe00(); return; - case 0x44a90: + r31=0x53490; + pc=0x5ca00; + run_5c800(); return; + case 0x53490: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x43d08; - run_43c00(); return; - case 0x44aa8: + pc=0x52708; + run_52000(); return; + case 0x534a8: r4 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x44d28; - run_44c00(); return; + pc=0x53728; + continue; } r2 = r2 + 48; r4 = r0 + 1; addr=r29+143; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r4; + page[(addr)>>>2] = tmp; + page[(r29+196)>>>2] = r4; r16 = r29 + 143; - /* Next insn is delay slot */ - pc=0x440ec; - run_44000(); return; - case 0x44ad0: - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r0; + pc=0x52aec; + run_52800(); return; + case 0x534d0: + page[(r29+196)>>>2] = r0; r16 = r29 + 144; - /* Next insn is delay slot */ - pc=0x440ec; - run_44000(); return; - case 0x44ae0: + pc=0x52aec; + run_52800(); return; + case 0x534e0: r4 = r0 + 2; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x440a4; - run_44000(); return; - case 0x44af4: - r3 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; + pc=0x52aa4; + run_52800(); return; + case 0x534f4: + r3= page[(r29+176)>>>2]; if(r3 <= 0) { - /* Next insn is delay slot */ - pc=0x45100; - run_45000(); return; + pc=0x53b00; + run_53800(); return; } - r3 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; - r4 = readPages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff]; + r3= page[(r29+212)>>>2]; + r4= page[(r29+208)>>>2]; r18 = r16 + r3; r20 = r18 - r16; r3 = r4 < r20 ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x44b24; + pc=0x53524; continue; } r20 = r4 + r0; - case 0x44b24: + case 0x53524: if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x44b58; + pc=0x53558; continue; } - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r3= page[(r29+148)>>>2]; r2 = r2 + r20; r3 = r3 + 1; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+148)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r16; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r20; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r16; + page[(r8+4)>>>2] = r20; + page[(r29+152)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x45568; - run_45400(); return; + pc=0x53f68; + run_53800(); return; } r8 = r8 + 8; - case 0x44b58: + case 0x53558: if(r20 < 0) { - /* Next insn is delay slot */ - pc=0x4555c; - run_45400(); return; + pc=0x53f5c; + run_53800(); return; } - case 0x44b60: - r3 = readPages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff]; + case 0x53560: + r3= page[(r29+208)>>>2]; r20 = r3 - r20; if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x44ddc; - run_44c00(); return; + pc=0x537dc; + continue; } r3 = r20 < 17 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x45a94; - run_45a00(); return; + pc=0x54494; + run_54000(); return; } - r5 = 7 << 16; - r23 = r5 + 636; + r5 = 6 << 16; + r23 = r5 + 14176; r4 = r23 + r0; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r16; + page[(r29+196)>>>2] = r16; r23 = r20 + r0; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r3= page[(r29+148)>>>2]; r20 = r18 + r0; r30 = r0 + 16; r18 = r17 + r0; - r16 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + r16= page[(r29+304)>>>2]; r17 = r4 + r0; - /* Next insn is delay slot */ - pc=0x44bc8; + pc=0x535c8; continue; - case 0x44bb4: + case 0x535b4: r8 = r8 + 8; - case 0x44bb8: + case 0x535b8: r23 = r23 + -16; r4 = r23 < 17 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x44d9c; - run_44c00(); return; + pc=0x5379c; + continue; } - case 0x44bc8: + case 0x535c8: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r17; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r30; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r17; + page[(r8+4)>>>2] = r30; + page[(r29+152)>>>2] = r2; + page[(r29+148)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x44bb4; + pc=0x535b4; continue; } r4 = r16 + r0; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x44c00; - pc=0x5fe00; - run_5fe00(); return; - case 0x44c00: - pc=0x44c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_44c00() throws ExecutionException { /* 0x44c00 - 0x44e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x44c00: + r31=0x53600; + pc=0x5ca00; + run_5c800(); return; + case 0x53600: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; + r3= page[(r29+148)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x44bb8; - run_44a00(); return; - case 0x44c1c: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + pc=0x535b8; + continue; + case 0x5361c: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x44c30; - pc=0x5fe00; - run_5fe00(); return; - case 0x44c30: + r31=0x53630; + pc=0x5ca00; + run_5c800(); return; + case 0x53630: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x43c88; - run_43c00(); return; - case 0x44c4c: - r4 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; + pc=0x52688; + run_52000(); return; + case 0x5364c: + r4= page[(r29+212)>>>2]; r16 = r4 + -1; if(r16 <= 0) { - /* Next insn is delay slot */ - pc=0x44628; - run_44600(); return; + pc=0x53028; + continue; } r4 = r16 < 17 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x45a84; - run_45a00(); return; + pc=0x54484; + run_54000(); return; } - r4 = 7 << 16; - r23 = r4 + 636; + r4 = 6 << 16; + r23 = r4 + 14176; r18 = r0 + 16; - r20 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x44c98; + r20= page[(r29+304)>>>2]; + pc=0x53698; continue; - case 0x44c84: + case 0x53684: r16 = r16 + -16; r4 = r16 < 17 ? 1 : 0; r8 = r8 + 8; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x44cf4; + pc=0x536f4; continue; } - case 0x44c98: + case 0x53698: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r18; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r18; + page[(r29+152)>>>2] = r2; + page[(r29+148)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x44c84; + pc=0x53684; continue; } r4 = r20 + r0; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x44cd0; - pc=0x5fe00; - run_5fe00(); return; - case 0x44cd0: + r31=0x536d0; + pc=0x5ca00; + run_5c800(); return; + case 0x536d0: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } r16 = r16 + -16; r4 = r16 < 17 ? 1 : 0; - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; + r3= page[(r29+148)>>>2]; r8 = r21 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x44c98; + pc=0x53698; continue; } - case 0x44cf4: - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r16; + case 0x536f4: + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r16; r2 = r2 + r16; - /* Next insn is delay slot */ - pc=0x4460c; - run_44600(); return; - case 0x44d08: - r4 = 7 << 16; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - r23 = r4 + 636; - case 0x44d14: - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r16; + pc=0x5300c; + continue; + case 0x53708: + r4 = 6 << 16; + r3= page[(r29+148)>>>2]; + r23 = r4 + 14176; + case 0x53714: + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r16; r2 = r2 + r16; - /* Next insn is delay slot */ - pc=0x4463c; - run_44600(); return; - case 0x44d28: + pc=0x5303c; + continue; + case 0x53728: r6 = r29 + 144; r16 = r6 + r0; r4 = r0 + 10; - case 0x44d34: + case 0x53734: if(r4 != r0) { - /* Next insn is delay slot */ if(r4!=0) { hi = (int)((r2 & 0xffffffffL) % (r4 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r4 & 0xffffffffL)); } - pc=0x44d40; + pc=0x53740; continue; } if(r4!=0) { hi = (int)((r2 & 0xffffffffL) % (r4 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r4 & 0xffffffffL)); } throw new ExecutionException("Break"); - case 0x44d40: + case 0x53740: r16 = r16 + -1; r5 = hi; r5 = r5 + 48; addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = lo; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x44d34; + pc=0x53734; continue; } r6 = r6 - r16; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - pc=0x440ec; - run_44000(); return; - case 0x44d6c: - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = readPages[(r29+200)>>>12][((r29+200)>>>2)&0x3ff]; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; + page[(r29+196)>>>2] = r6; + pc=0x52aec; + run_52800(); return; + case 0x5376c: + r3= page[(r29+316)>>>2]; + r2= page[(r3+0)>>>2]; + r3= page[(r29+200)>>>2]; + page[(r2+0)>>>2] = r3; + r3= page[(r29+316)>>>2]; r3 = r3 + 4; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x438b8; - run_43800(); return; - case 0x44d9c: + page[(r29+316)>>>2] = r3; + pc=0x522b8; + run_52000(); return; + case 0x5379c: r4 = r17 + r0; - r16 = readPages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff]; + r16= page[(r29+196)>>>2]; r17 = r18 + r0; r18 = r20 + r0; r20 = r23 + r0; r23 = r4 + r0; - case 0x44db4: + case 0x537b4: r3 = r3 + 1; r2 = r2 + r20; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+148)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r20; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r20; + page[(r29+152)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x45650; - run_45600(); return; + pc=0x54050; + run_54000(); return; } r8 = r8 + 8; - case 0x44ddc: - r3 = readPages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff]; - r5 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; + case 0x537dc: + r3= page[(r29+208)>>>2]; + r5= page[(r29+212)>>>2]; r16 = r16 + r3; - r3 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; + r3= page[(r29+176)>>>2]; r4 = r3 < r5 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x44e08; - run_44e00(); return; + pc=0x53808; + run_53800(); return; } r4 = r17 & 1; - case 0x44e00: - pc=0x44e00; + case 0x53800: + pc=0x53800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_44e00() throws ExecutionException { /* 0x44e00 - 0x45000 */ + private final void run_53800() throws ExecutionException { /* 0x53800 - 0x54000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x44e00: + case 0x53800: if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x44e3c; + pc=0x5383c; continue; } - case 0x44e08: - r4 = readPages[(r29+216)>>>12][((r29+216)>>>2)&0x3ff]; - r5 = readPages[(r29+232)>>>12][((r29+232)>>>2)&0x3ff]; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r4; - r4 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + case 0x53808: + r4= page[(r29+216)>>>2]; + r5= page[(r29+232)>>>2]; + page[(r8+0)>>>2] = r4; + r4= page[(r29+148)>>>2]; r2 = r2 + r5; r4 = r4 + 1; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r4; + page[(r29+148)>>>2] = r4; r4 = r4 < 8 ? 1 : 0; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r5; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + page[(r8+4)>>>2] = r5; + page[(r29+152)>>>2] = r2; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x455cc; - run_45400(); return; + pc=0x53fcc; + continue; } r8 = r8 + 8; - case 0x44e3c: - r4 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; + case 0x5383c: + r4= page[(r29+212)>>>2]; r18 = r18 - r16; r3 = r4 - r3; r4 = r18 < r3 ? 1 : 0; r20 = r3 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x44e5c; + pc=0x5385c; continue; } r20 = r18 + r0; - case 0x44e5c: + case 0x5385c: if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x44e90; + pc=0x53890; continue; } - r4 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r4= page[(r29+148)>>>2]; r2 = r2 + r20; r4 = r4 + 1; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r4; + page[(r29+148)>>>2] = r4; r4 = r4 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r16; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r20; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r16; + page[(r8+4)>>>2] = r20; + page[(r29+152)>>>2] = r2; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x4567c; - run_45600(); return; + pc=0x5407c; + run_54000(); return; } r8 = r8 + 8; - case 0x44e90: + case 0x53890: if(r20 < 0) { - /* Next insn is delay slot */ - pc=0x456b4; - run_45600(); return; + pc=0x540b4; + run_54000(); return; } - case 0x44e98: + case 0x53898: r16 = r3 - r20; if(r16 <= 0) { - /* Next insn is delay slot */ - pc=0x43e50; - run_43e00(); return; + pc=0x52850; + run_52800(); return; } r3 = r16 < 17 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x44d08; - run_44c00(); return; + pc=0x53708; + run_53000(); return; } - r5 = 7 << 16; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - r23 = r5 + 636; + r5 = 6 << 16; + r3= page[(r29+148)>>>2]; + r23 = r5 + 14176; r18 = r0 + 16; - r20 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x44ee0; + r20= page[(r29+304)>>>2]; + pc=0x538e0; continue; - case 0x44ecc: + case 0x538cc: r8 = r8 + 8; - case 0x44ed0: + case 0x538d0: r16 = r16 + -16; r4 = r16 < 17 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x44d14; - run_44c00(); return; + pc=0x53714; + run_53000(); return; } - case 0x44ee0: + case 0x538e0: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r18; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r18; + page[(r29+152)>>>2] = r2; + page[(r29+148)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x44ecc; + pc=0x538cc; continue; } r4 = r20 + r0; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x44f18; - pc=0x5fe00; - run_5fe00(); return; - case 0x44f18: + r31=0x53918; + pc=0x5ca00; + run_5c800(); return; + case 0x53918: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; + r3= page[(r29+148)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x44ed0; + pc=0x538d0; continue; - case 0x44f34: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + case 0x53934: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x44f48; - pc=0x5fe00; - run_5fe00(); return; - case 0x44f48: + r31=0x53948; + pc=0x5ca00; + run_5c800(); return; + case 0x53948: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - r4 = readPages[(r29+232)>>>12][((r29+232)>>>2)&0x3ff]; - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; + r3= page[(r29+148)>>>2]; + r4= page[(r29+232)>>>2]; + r2= page[(r29+152)>>>2]; r8 = r21 + r0; r3 = r3 + 1; - r5 = readPages[(r29+216)>>>12][((r29+216)>>>2)&0x3ff]; + r5= page[(r29+216)>>>2]; r2 = r2 + r4; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r4; + page[(r8+4)>>>2] = r4; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r5; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r5; + page[(r29+152)>>>2] = r2; + page[(r29+148)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x445cc; - run_44400(); return; + pc=0x52fcc; + run_52800(); return; } - case 0x44f88: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + case 0x53988: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x44f9c; - pc=0x5fe00; - run_5fe00(); return; - case 0x44f9c: + r31=0x5399c; + pc=0x5ca00; + run_5c800(); return; + case 0x5399c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; + r3= page[(r29+148)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x445d0; - run_44400(); return; - case 0x44fb8: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + pc=0x52fd0; + run_52800(); return; + case 0x539b8: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x44fcc; - pc=0x5fe00; - run_5fe00(); return; - case 0x44fcc: + r31=0x539cc; + pc=0x5ca00; + run_5c800(); return; + case 0x539cc: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x43d18; - run_43c00(); return; - case 0x44fe4: - f12 = readPages[(r29+228)>>>12][((r29+228)>>>2)&0x3ff]; - writePages[(r29+260)>>>12][((r29+260)>>>2)&0x3ff] = r8; - f13 = readPages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x44ff8; - pc=0x37a00; - run_37a00(); return; - case 0x44ff8: - r8 = readPages[(r29+260)>>>12][((r29+260)>>>2)&0x3ff]; + pc=0x52718; + run_52000(); return; + case 0x539e4: + f12= page[(r29+228)>>>2]; + page[(r29+260)>>>2] = r8; + f13= page[(r29+224)>>>2]; + r31=0x539f8; + pc=0x48600; + run_48000(); return; + case 0x539f8: + r8= page[(r29+260)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45234; - run_45200(); return; + pc=0x53c34; + continue; } - case 0x45000: - pc=0x45000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_45000() throws ExecutionException { /* 0x45000 - 0x45200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x45000: r2 = r18 < 72 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45494; - run_45400(); return; + pc=0x53e94; + continue; } - r16 = 7 << 16; - r16 = r16 + 224; - case 0x45018: + r16 = 6 << 16; + r16 = r16 + 13768; + case 0x53a18: r2 = r0 + -129; r17 = r17 & r2; r5 = r0 + 3; r2 = r0 + 3; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - writePages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff] = r5; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r2; + page[(r29+188)>>>2] = r5; + page[(r29+196)>>>2] = r2; r30 = r0 + r0; - writePages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x43b40; - run_43a00(); return; - case 0x45044: - r2 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; + page[(r29+208)>>>2] = r0; + pc=0x52540; + run_52000(); return; + case 0x53a44: + r2= page[(r29+316)>>>2]; r3 = r2 + 7; - /* Next insn is delay slot */ - pc=0x443d8; - run_44200(); return; - case 0x45058: - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + pc=0x52dd8; + run_52800(); return; + case 0x53a58: + r2= page[(r3+0)>>>2]; r3 = r3 + 4; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x44188; - run_44000(); return; - case 0x4506c: - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + page[(r29+316)>>>2] = r3; + pc=0x52b88; + run_52800(); return; + case 0x53a6c: + r2= page[(r3+0)>>>2]; r3 = r3 + 4; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x441ec; - run_44000(); return; - case 0x45080: - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + page[(r29+316)>>>2] = r3; + pc=0x52bec; + run_52800(); return; + case 0x53a80: + r2= page[(r3+0)>>>2]; r3 = r3 + 4; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; + page[(r29+316)>>>2] = r3; r4 = r0 + 1; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x440a4; - run_44000(); return; - case 0x450a0: - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + pc=0x52aa4; + run_52800(); return; + case 0x53aa0: + r2= page[(r3+0)>>>2]; r3 = r3 + 4; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r3; + page[(r29+316)>>>2] = r3; r4 = r0 + r0; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x440a4; - run_44000(); return; - case 0x450c0: - r4 = 7 << 16; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - r23 = r4 + 636; - /* Next insn is delay slot */ - pc=0x43dec; - run_43c00(); return; - case 0x450d4: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + pc=0x52aa4; + run_52800(); return; + case 0x53ac0: + r4 = 6 << 16; + r3= page[(r29+148)>>>2]; + r23 = r4 + 14176; + pc=0x527ec; + run_52000(); return; + case 0x53ad4: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x450e8; - pc=0x5fe00; - run_5fe00(); return; - case 0x450e8: + r31=0x53ae8; + pc=0x5ca00; + run_5c800(); return; + case 0x53ae8: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x447b8; - run_44600(); return; - case 0x45100: - r4 = 7 << 16; - r4 = r4 + 276; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r4; + pc=0x531b8; + run_53000(); return; + case 0x53b00: + r4 = 6 << 16; + r4 = r4 + 6368; + page[(r8+0)>>>2] = r4; r4 = r0 + 1; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r4; - r4 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + page[(r8+4)>>>2] = r4; + r4= page[(r29+148)>>>2]; r2 = r2 + 1; r4 = r4 + 1; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r4; + page[(r29+148)>>>2] = r4; r4 = r4 < 8 ? 1 : 0; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + page[(r29+152)>>>2] = r2; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x454a4; - run_45400(); return; + pc=0x53ea4; + continue; } r8 = r8 + 8; r18 = r3 + r0; - case 0x4513c: + case 0x53b3c: if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x45160; + pc=0x53b60; continue; } - r3 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; + r3= page[(r29+212)>>>2]; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x45160; + pc=0x53b60; continue; } r3 = r17 & 1; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x43e50; - run_43e00(); return; + pc=0x52850; + run_52800(); return; } - case 0x45160: - r3 = readPages[(r29+216)>>>12][((r29+216)>>>2)&0x3ff]; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+232)>>>12][((r29+232)>>>2)&0x3ff]; + case 0x53b60: + r3= page[(r29+216)>>>2]; + page[(r8+0)>>>2] = r3; + r3= page[(r29+232)>>>2]; r2 = r2 + r3; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; + page[(r8+4)>>>2] = r3; + r3= page[(r29+148)>>>2]; + page[(r29+152)>>>2] = r2; r3 = r3 + 1; r4 = r3 < 8 ? 1 : 0; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r29+148)>>>2] = r3; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x458e0; - run_45800(); return; + pc=0x542e0; + run_54000(); return; } r8 = r8 + 8; - case 0x4519c: + case 0x53b9c: r18 = r0 - r18; if(r18 <= 0) { - /* Next insn is delay slot */ - pc=0x45530; - run_45400(); return; + pc=0x53f30; + continue; } r4 = r18 < 17 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x45594; - run_45400(); return; + pc=0x53f94; + continue; } - r5 = 7 << 16; - r23 = r5 + 636; + r5 = 6 << 16; + r23 = r5 + 14176; r20 = r0 + 16; - r30 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x451e0; + r30= page[(r29+304)>>>2]; + pc=0x53be0; continue; - case 0x451cc: + case 0x53bcc: r8 = r8 + 8; - case 0x451d0: + case 0x53bd0: r18 = r18 + -16; r4 = r18 < 17 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x4559c; - run_45400(); return; + pc=0x53f9c; + continue; } - case 0x451e0: + case 0x53be0: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r20; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r20; + page[(r29+152)>>>2] = r2; + page[(r29+148)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x451cc; + pc=0x53bcc; continue; } - case 0x45200: - pc=0x45200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_45200() throws ExecutionException { /* 0x45200 - 0x45400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x45200: r4 = r30 + r0; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x45218; - pc=0x5fe00; - run_5fe00(); return; - case 0x45218: + r31=0x53c18; + pc=0x5ca00; + run_5c800(); return; + case 0x53c18: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; + r3= page[(r29+148)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x451d0; - run_45000(); return; - case 0x45234: + pc=0x53bd0; + continue; + case 0x53c34: r9 = r0 + -33; r2 = r0 + -1; r20 = r18 & r9; if(r30 == r2) { - /* Next insn is delay slot */ - pc=0x454d4; - run_45400(); return; + pc=0x53ed4; + continue; } r2 = r0 + 71; if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x458cc; - run_45800(); return; + pc=0x542cc; + run_54000(); return; } - case 0x45254: - r2 = readPages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff]; + case 0x53c54: + r2= page[(r29+224)>>>2]; r23 = r17 | 256; if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x45914; - run_45800(); return; + pc=0x54314; + run_54000(); return; } - f0 = readPages[(r29+228)>>>12][((r29+228)>>>2)&0x3ff]; - writePages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff] = r0; - f1 = readPages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff]; - writePages[(r29+252)>>>12][((r29+252)>>>2)&0x3ff] = f0; - writePages[(r29+248)>>>12][((r29+248)>>>2)&0x3ff] = f1; - case 0x4527c: + f0= page[(r29+228)>>>2]; + page[(r29+188)>>>2] = r0; + f1= page[(r29+224)>>>2]; + page[(r29+252)>>>2] = f0; + page[(r29+248)>>>2] = f1; + case 0x53c7c: r2 = r0 + 102; if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x45740; - run_45600(); return; + pc=0x54140; + run_54000(); return; } r2 = r0 + 70; if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x45740; - run_45600(); return; + pc=0x54140; + run_54000(); return; } r2 = r0 + 69; if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x4593c; - run_45800(); return; + pc=0x5433c; + run_54000(); return; } r5 = r30 + r0; - case 0x452a4: + case 0x53ca4: r2 = r0 + 2; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; + page[(r29+16)>>>2] = r2; r2 = r29 + 176; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; + page[(r29+24)>>>2] = r2; r2 = r29 + 172; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r2; - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + page[(r29+28)>>>2] = r2; + r4= page[(r29+304)>>>2]; r2 = r29 + 156; - r7 = readPages[(r29+252)>>>12][((r29+252)>>>2)&0x3ff]; - r6 = readPages[(r29+248)>>>12][((r29+248)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r5; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; - writePages[(r29+256)>>>12][((r29+256)>>>2)&0x3ff] = r5; - writePages[(r29+260)>>>12][((r29+260)>>>2)&0x3ff] = r8; - /* Next insn is delay slot */ - r31=0x452e4; - pc=0x57400; - run_57400(); return; - case 0x452e4: + r7= page[(r29+252)>>>2]; + r6= page[(r29+248)>>>2]; + page[(r29+20)>>>2] = r5; + page[(r29+32)>>>2] = r2; + page[(r29+256)>>>2] = r5; + page[(r29+260)>>>2] = r8; + r31=0x53ce4; + pc=0x57e00; + run_57800(); return; + case 0x53ce4: r16 = r2 + r0; r2 = r0 + 103; - r5 = readPages[(r29+256)>>>12][((r29+256)>>>2)&0x3ff]; - r8 = readPages[(r29+260)>>>12][((r29+260)>>>2)&0x3ff]; + r5= page[(r29+256)>>>2]; + r8= page[(r29+260)>>>2]; if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x45308; + pc=0x53d08; continue; } r2 = r0 + 71; if(r18 != r2) { - /* Next insn is delay slot */ - pc=0x45314; + pc=0x53d14; continue; } - case 0x45308: + case 0x53d08: r2 = r17 & 1; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x45a6c; - run_45a00(); return; + pc=0x5446c; + run_54000(); return; } - case 0x45314: + case 0x53d14: r2 = r0 + 70; r4 = r16 + r5; if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x4584c; - run_45800(); return; + pc=0x5424c; + run_54000(); return; } - case 0x45324: + case 0x53d24: f0 = r0; - f2 = readPages[(r29+252)>>>12][((r29+252)>>>2)&0x3ff]; + f2= page[(r29+252)>>>2]; f1 = r0; - f3 = readPages[(r29+248)>>>12][((r29+248)>>>2)&0x3ff]; + f3= page[(r29+248)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x45720; - run_45600(); return; + pc=0x54120; + run_54000(); return; } - r2 = readPages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff]; + r2= page[(r29+156)>>>2]; r3 = ((r2 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x45380; + pc=0x53d80; continue; } r5 = r0 + 48; - case 0x45360: + case 0x53d60: r3 = r2 + 1; - writePages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff] = r3; + page[(r29+156)>>>2] = r3; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r2= page[(r29+156)>>>2]; r3 = ((r2 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x45360; + pc=0x53d60; continue; } - case 0x45380: + case 0x53d80: r2 = r2 - r16; - writePages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff] = r2; + page[(r29+212)>>>2] = r2; r2 = r0 + 71; if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x456f4; - run_45600(); return; + pc=0x540f4; + run_54000(); return; } r2 = r18 < 102 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45b80; - run_45a00(); return; + pc=0x54580; + run_54000(); return; } - r3 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; + r3= page[(r29+176)>>>2]; r2 = r0 + 102; - writePages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff] = r3; + page[(r29+208)>>>2] = r3; if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x459ac; - run_45800(); return; + pc=0x543ac; + run_54000(); return; } - case 0x453b4: - r3 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; - r4 = readPages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff]; + case 0x53db4: + r3= page[(r29+212)>>>2]; + r4= page[(r29+208)>>>2]; r2 = r4 < r3 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45948; - run_45800(); return; + pc=0x54348; + run_54000(); return; } r17 = r17 & 1; if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x45980; - run_45800(); return; + pc=0x54380; + run_54000(); return; } r2 = r4 + r0; if(r4 < 0) { - /* Next insn is delay slot */ - pc=0x45b64; - run_45a00(); return; + pc=0x54564; + run_54000(); return; } - case 0x453e4: - r3 = readPages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff]; + case 0x53de4: + r3= page[(r29+208)>>>2]; r18 = r0 + 103; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r3; - case 0x453f0: - r5 = readPages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff]; + page[(r29+196)>>>2] = r3; + case 0x53df0: + r5= page[(r29+188)>>>2]; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x456c0; - run_45600(); return; + pc=0x540c0; + run_54000(); return; } - case 0x45400: - pc=0x45400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_45400() throws ExecutionException { /* 0x45400 - 0x45600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x45400: addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - writePages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff] = r2; + page[(r29+188)>>>2] = r2; r17 = r23 + r0; r30 = r0 + r0; - /* Next insn is delay slot */ - pc=0x43b40; - run_43a00(); return; - case 0x45418: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + pc=0x52540; + run_52000(); return; + case 0x53e18: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x4542c; - pc=0x5fe00; - run_5fe00(); return; - case 0x4542c: + r31=0x53e2c; + pc=0x5ca00; + run_5c800(); return; + case 0x53e2c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x44818; - run_44800(); return; - case 0x45444: - r16 = 7 << 16; - r16 = r16 + 212; - /* Next insn is delay slot */ - pc=0x4445c; - run_44400(); return; - case 0x45454: + pc=0x53218; + run_53000(); return; + case 0x53e44: + r16 = 6 << 16; + r16 = r16 + 13756; + pc=0x52e5c; + run_52800(); return; + case 0x53e54: r30 = r0 + -1; r3 = r4 + r0; - /* Next insn is delay slot */ - pc=0x43994; - run_43800(); return; - case 0x45464: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + pc=0x52394; + run_52000(); return; + case 0x53e64: + r4= page[(r29+304)>>>2]; r5 = r0 + 64; - /* Next insn is delay slot */ - r31=0x45474; - pc=0x3ec00; - run_3ec00(); return; - case 0x45474: - writePages[(r22+0)>>>12][((r22+0)>>>2)&0x3ff] = r2; - writePages[(r22+16)>>>12][((r22+16)>>>2)&0x3ff] = r2; + r31=0x53e74; + pc=0x4e200; + run_4e000(); return; + case 0x53e74: + page[(r22+0)>>>2] = r2; + page[(r22+16)>>>2] = r2; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x45b8c; - run_45a00(); return; + pc=0x5458c; + run_54000(); return; } r2 = r0 + 64; - writePages[(r22+20)>>>12][((r22+20)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x43884; - run_43800(); return; - case 0x45494: - r16 = 7 << 16; - r16 = r16 + 220; - /* Next insn is delay slot */ - pc=0x45018; - run_45000(); return; - case 0x454a4: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + page[(r22+20)>>>2] = r2; + pc=0x52284; + run_52000(); return; + case 0x53e94: + r16 = 6 << 16; + r16 = r16 + 13764; + pc=0x53a18; + continue; + case 0x53ea4: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x454b8; - pc=0x5fe00; - run_5fe00(); return; - case 0x454b8: + r31=0x53eb8; + pc=0x5ca00; + run_5c800(); return; + case 0x53eb8: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r18 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; + r18= page[(r29+176)>>>2]; + r2= page[(r29+152)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x4513c; - run_45000(); return; - case 0x454d4: + pc=0x53b3c; + continue; + case 0x53ed4: r30 = r0 + 6; - /* Next insn is delay slot */ - pc=0x45254; - run_45200(); return; - case 0x454e0: - writePages[(r29+260)>>>12][((r29+260)>>>2)&0x3ff] = r8; - /* Next insn is delay slot */ - r31=0x454ec; + pc=0x53c54; + continue; + case 0x53ee0: + page[(r29+260)>>>2] = r8; + r31=0x53eec; pc=0x10268; - run_10200(); return; - case 0x454ec: - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r2; - r8 = readPages[(r29+260)>>>12][((r29+260)>>>2)&0x3ff]; + run_10000(); return; + case 0x53eec: + page[(r29+196)>>>2] = r2; + r8= page[(r29+260)>>>2]; if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x43b2c; - run_43a00(); return; + pc=0x5252c; + run_52000(); return; } - case 0x454fc: + case 0x53efc: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x43b2c; - run_43a00(); return; - case 0x45508: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + pc=0x5252c; + run_52000(); return; + case 0x53f08: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x4551c; - pc=0x5fe00; - run_5fe00(); return; - case 0x4551c: + r31=0x53f1c; + pc=0x5ca00; + run_5c800(); return; + case 0x53f1c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; + r3= page[(r29+148)>>>2]; r8 = r21 + r0; - case 0x45530: - r4 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r16; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r4; + case 0x53f30: + r4= page[(r29+212)>>>2]; + page[(r8+0)>>>2] = r16; + page[(r8+4)>>>2] = r4; r2 = r4 + r2; - /* Next insn is delay slot */ - pc=0x4463c; - run_44600(); return; - case 0x45548: - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - writePages[(r29+220)>>>12][((r29+220)>>>2)&0x3ff] = r19; - /* Next insn is delay slot */ - pc=0x43c58; - run_43c00(); return; - case 0x4555c: + pc=0x5303c; + run_53000(); return; + case 0x53f48: + r2= page[(r29+152)>>>2]; + r3= page[(r29+148)>>>2]; + page[(r29+220)>>>2] = r19; + pc=0x52658; + run_52000(); return; + case 0x53f5c: r20 = r0 + r0; - /* Next insn is delay slot */ - pc=0x44b60; - run_44a00(); return; - case 0x45568: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + pc=0x53560; + run_53000(); return; + case 0x53f68: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x4557c; - pc=0x5fe00; - run_5fe00(); return; - case 0x4557c: + r31=0x53f7c; + pc=0x5ca00; + run_5c800(); return; + case 0x53f7c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x44b58; - run_44a00(); return; - case 0x45594: - r4 = 7 << 16; - r23 = r4 + 636; - case 0x4559c: + pc=0x53558; + run_53000(); return; + case 0x53f94: + r4 = 6 << 16; + r23 = r4 + 14176; + case 0x53f9c: r3 = r3 + 1; r2 = r2 + r18; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r18; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r18; + page[(r29+152)>>>2] = r2; + page[(r29+148)>>>2] = r3; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x45508; + pc=0x53f08; continue; } r8 = r8 + 8; - /* Next insn is delay slot */ - pc=0x45530; + pc=0x53f30; continue; - case 0x455cc: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + case 0x53fcc: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x455e0; - pc=0x5fe00; - run_5fe00(); return; - case 0x455e0: + r31=0x53fe0; + pc=0x5ca00; + run_5c800(); return; + case 0x53fe0: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r3 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; + r3= page[(r29+176)>>>2]; + r2= page[(r29+152)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x44e3c; - run_44e00(); return; - case 0x455fc: - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - case 0x45600: - pc=0x45600; + pc=0x5383c; + continue; + case 0x53ffc: + r3= page[(r29+148)>>>2]; + case 0x54000: + pc=0x54000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_45600() throws ExecutionException { /* 0x45600 - 0x45800 */ + private final void run_54000() throws ExecutionException { /* 0x54000 - 0x54800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x45600: - writePages[(r29+220)>>>12][((r29+220)>>>2)&0x3ff] = r19; - /* Next insn is delay slot */ - pc=0x43f08; - run_43e00(); return; - case 0x4560c: + case 0x54000: + page[(r29+220)>>>2] = r19; + pc=0x52908; + run_52800(); return; + case 0x5400c: r3 = (r30&0xffffffffL) < (7&0xffffffffL) ? 1 : 0; r2 = r30 + r0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x45620; + pc=0x54020; continue; } r2 = r0 + 6; - case 0x45620: - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r2; + case 0x54020: + page[(r29+196)>>>2] = r2; if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x45a78; - run_45a00(); return; + pc=0x54478; + continue; } - case 0x4562c: - r16 = 7 << 16; - writePages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff] = r2; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r20; + case 0x5402c: + r16 = 6 << 16; + page[(r29+188)>>>2] = r2; + page[(r29+316)>>>2] = r20; r3 = r0 + r0; r30 = r0 + r0; - writePages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff] = r0; - r16 = r16 + 268; - /* Next insn is delay slot */ - pc=0x43b58; - run_43a00(); return; - case 0x45650: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + page[(r29+208)>>>2] = r0; + r16 = r16 + 13812; + pc=0x52558; + run_52000(); return; + case 0x54050: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x45664; - pc=0x5fe00; - run_5fe00(); return; - case 0x45664: + r31=0x54064; + pc=0x5ca00; + run_5c800(); return; + case 0x54064: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; + r2= page[(r29+152)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x44ddc; - run_44c00(); return; - case 0x4567c: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + pc=0x537dc; + run_53000(); return; + case 0x5407c: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x45690; - pc=0x5fe00; - run_5fe00(); return; - case 0x45690: + r31=0x54090; + pc=0x5ca00; + run_5c800(); return; + case 0x54090: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r3 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; - r5 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; + r3= page[(r29+176)>>>2]; + r5= page[(r29+212)>>>2]; + r2= page[(r29+152)>>>2]; r3 = r5 - r3; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x44e90; - run_44e00(); return; - case 0x456b4: + pc=0x53890; + run_53800(); return; + case 0x540b4: r20 = r0 + r0; - /* Next insn is delay slot */ - pc=0x44e98; - run_44e00(); return; - case 0x456c0: + pc=0x53898; + run_53800(); return; + case 0x540c0: r3 = r0 + 45; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff] = r2; + page[(addr)>>>2] = tmp; + page[(r29+188)>>>2] = r2; r17 = r23 + r0; r3 = r0 + 45; r30 = r0 + r0; - /* Next insn is delay slot */ - pc=0x43b48; - run_43a00(); return; - case 0x456e0: + pc=0x52548; + run_52000(); return; + case 0x540e0: r2 = r0 + 45; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + 45; - /* Next insn is delay slot */ - pc=0x44448; - run_44400(); return; - case 0x456f4: - r2 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; + pc=0x52e48; + run_52800(); return; + case 0x540f4: + r2= page[(r29+176)>>>2]; r3 = r2 < -3 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x45790; + pc=0x54190; continue; } r3 = r30 < r2 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x45790; + pc=0x54190; continue; } - writePages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x453b4; - run_45200(); return; - case 0x45720: + page[(r29+208)>>>2] = r2; + pc=0x53db4; + run_53800(); return; + case 0x54120: r2 = r4 + r0; - /* Next insn is delay slot */ - pc=0x45380; - run_45200(); return; - case 0x4572c: - r5 = 7 << 16; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - r23 = r5 + 636; - /* Next insn is delay slot */ - pc=0x4499c; - run_44800(); return; - case 0x45740: + pc=0x53d80; + run_53800(); return; + case 0x5412c: + r5 = 6 << 16; + r3= page[(r29+148)>>>2]; + r23 = r5 + 14176; + pc=0x5339c; + run_53000(); return; + case 0x54140: r2 = r0 + 3; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; + page[(r29+16)>>>2] = r2; r2 = r29 + 176; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; + page[(r29+24)>>>2] = r2; r2 = r29 + 172; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r2; - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + page[(r29+28)>>>2] = r2; + r4= page[(r29+304)>>>2]; r2 = r29 + 156; - r7 = readPages[(r29+252)>>>12][((r29+252)>>>2)&0x3ff]; - r6 = readPages[(r29+248)>>>12][((r29+248)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r30; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; - writePages[(r29+260)>>>12][((r29+260)>>>2)&0x3ff] = r8; - /* Next insn is delay slot */ - r31=0x4577c; - pc=0x57400; - run_57400(); return; - case 0x4577c: + r7= page[(r29+252)>>>2]; + r6= page[(r29+248)>>>2]; + page[(r29+20)>>>2] = r30; + page[(r29+32)>>>2] = r2; + page[(r29+260)>>>2] = r8; + r31=0x5417c; + pc=0x57e00; + run_57800(); return; + case 0x5417c: r16 = r2 + r0; r5 = r30 + r0; - r8 = readPages[(r29+260)>>>12][((r29+260)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x45314; - run_45200(); return; - case 0x45790: + r8= page[(r29+260)>>>2]; + pc=0x53d14; + run_53800(); return; + case 0x54190: r18 = r18 + -2; - case 0x45794: + case 0x54194: r2 = r2 + -1; - writePages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff] = r2; + page[(r29+176)>>>2] = r2; addr=r29+164; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x45b34; - run_45a00(); return; + pc=0x54534; + continue; } r3 = r0 + 43; addr=r29+165; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x457b0: + page[(addr)>>>2] = tmp; + case 0x541b0: r3 = r2 < 10 ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x459d8; - run_45800(); return; + pc=0x543d8; + continue; } r2 = r2 + 48; r3 = r0 + 48; addr=r29+167; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; addr=r29+166; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r29 + 168; r4 = r29 + 164; - case 0x457d4: - r3 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; + case 0x541d4: + r3= page[(r29+212)>>>2]; r4 = r2 - r4; r3 = r3 + r4; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r4; + page[(r29+196)>>>2] = r3; + r3= page[(r29+212)>>>2]; + page[(r29+236)>>>2] = r4; r2 = r3 < 2 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45820; - run_45800(); return; + pc=0x54220; + continue; } - case 0x457f8: - r3 = readPages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff]; - case 0x45800: - pc=0x45800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_45800() throws ExecutionException { /* 0x45800 - 0x45a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x45800: + case 0x541f8: + r3= page[(r29+196)>>>2]; r3 = r3 + 1; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r3; + page[(r29+196)>>>2] = r3; r2 = r3 + r0; if(r3 < 0) { - /* Next insn is delay slot */ - pc=0x4583c; + pc=0x5423c; continue; } - case 0x45814: - writePages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x453f0; - run_45200(); return; - case 0x45820: + case 0x54214: + page[(r29+208)>>>2] = r0; + pc=0x53df0; + run_53800(); return; + case 0x54220: r17 = r17 & 1; if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x457f8; - run_45600(); return; - } - r2 = readPages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff]; - if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x45814; + pc=0x541f8; continue; } - case 0x4583c: + r2= page[(r29+196)>>>2]; + if(r2 >= 0) { + pc=0x54214; + continue; + } + case 0x5423c: r2 = r0 + r0; - writePages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x453f0; - run_45200(); return; - case 0x4584c: + page[(r29+208)>>>2] = r0; + pc=0x53df0; + run_53800(); return; + case 0x5424c: addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; r2 = r0 + 48; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x45870; + pc=0x54270; continue; } - case 0x4585c: - r2 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; + case 0x5425c: + r2= page[(r29+176)>>>2]; r4 = r4 + r2; - /* Next insn is delay slot */ - pc=0x45324; - run_45200(); return; - case 0x45870: + pc=0x53d24; + run_53800(); return; + case 0x54270: f0 = r0; - f2 = readPages[(r29+252)>>>12][((r29+252)>>>2)&0x3ff]; + f2= page[(r29+252)>>>2]; f1 = r0; - f3 = readPages[(r29+248)>>>12][((r29+248)>>>2)&0x3ff]; + f3= page[(r29+248)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x4585c; + pc=0x5425c; continue; } r2 = r0 + 1; r2 = r2 - r5; - writePages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff] = r2; + page[(r29+176)>>>2] = r2; r4 = r4 + r2; - /* Next insn is delay slot */ - pc=0x45324; - run_45200(); return; - case 0x458ac: - writePages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff] = r30; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r30; + pc=0x53d24; + run_53800(); return; + case 0x542ac: + page[(r29+188)>>>2] = r30; + page[(r29+196)>>>2] = r30; addr=r29+182; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r20; + page[(r29+316)>>>2] = r20; r30 = r0 + r0; - writePages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x43b40; - run_43a00(); return; - case 0x458cc: + page[(r29+208)>>>2] = r0; + pc=0x52540; + run_52000(); return; + case 0x542cc: if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x45254; - run_45200(); return; + pc=0x53c54; + run_53800(); return; } r30 = r0 + 1; - /* Next insn is delay slot */ - pc=0x45254; - run_45200(); return; - case 0x458e0: - r4 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + pc=0x53c54; + run_53800(); return; + case 0x542e0: + r4= page[(r29+304)>>>2]; r5 = r22 + r0; r6 = r29 + 144; - /* Next insn is delay slot */ - r31=0x458f4; - pc=0x5fe00; - run_5fe00(); return; - case 0x458f4: + r31=0x542f4; + pc=0x5ca00; + run_5c800(); return; + case 0x542f4: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x43a50; - run_43a00(); return; + pc=0x52450; + run_52000(); return; } - r18 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; - r2 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + r18= page[(r29+176)>>>2]; + r2= page[(r29+152)>>>2]; + r3= page[(r29+148)>>>2]; r8 = r21 + r0; - /* Next insn is delay slot */ - pc=0x4519c; - run_45000(); return; - case 0x45914: - r3 = readPages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff]; + pc=0x53b9c; + run_53800(); return; + case 0x54314: + r3= page[(r29+224)>>>2]; r2 = 32768 << 16; - r4 = readPages[(r29+228)>>>12][((r29+228)>>>2)&0x3ff]; + r4= page[(r29+228)>>>2]; r2 = r3 ^ r2; r5 = r0 + 45; - writePages[(r29+248)>>>12][((r29+248)>>>2)&0x3ff] = r2; - writePages[(r29+252)>>>12][((r29+252)>>>2)&0x3ff] = r4; - writePages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=0x4527c; - run_45200(); return; - case 0x4593c: + page[(r29+248)>>>2] = r2; + page[(r29+252)>>>2] = r4; + page[(r29+188)>>>2] = r5; + pc=0x53c7c; + run_53800(); return; + case 0x5433c: r5 = r30 + 1; - /* Next insn is delay slot */ - pc=0x452a4; - run_45200(); return; - case 0x45948: - r3 = readPages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff]; + pc=0x53ca4; + run_53800(); return; + case 0x54348: + r3= page[(r29+208)>>>2]; if(r3 <= 0) { - /* Next insn is delay slot */ - pc=0x45af4; - run_45a00(); return; + pc=0x544f4; + continue; } r2 = r0 + 1; - case 0x4595c: - r3 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; + case 0x5435c: + r3= page[(r29+212)>>>2]; r2 = r2 + r3; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r2; + page[(r29+196)>>>2] = r2; if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x4599c; + pc=0x5439c; continue; } - case 0x45974: + case 0x54374: r18 = r0 + 103; - /* Next insn is delay slot */ - pc=0x453f0; - run_45200(); return; - case 0x45980: - r3 = readPages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff]; + pc=0x53df0; + run_53800(); return; + case 0x54380: + r3= page[(r29+208)>>>2]; r3 = r3 + 1; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r3; + page[(r29+196)>>>2] = r3; r2 = r3 + r0; if(r3 >= 0) { - /* Next insn is delay slot */ - pc=0x45974; + pc=0x54374; continue; } - case 0x4599c: + case 0x5439c: r2 = r0 + r0; r18 = r0 + 103; - /* Next insn is delay slot */ - pc=0x453f0; - run_45200(); return; - case 0x459ac: + pc=0x53df0; + run_53800(); return; + case 0x543ac: if(r3 <= 0) { - /* Next insn is delay slot */ - pc=0x45acc; - run_45a00(); return; + pc=0x544cc; + continue; } if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x45aa8; - run_45a00(); return; + pc=0x544a8; + continue; } r17 = r17 & 1; if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x45aa8; - run_45a00(); return; + pc=0x544a8; + continue; } r2 = r3 + r0; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x453f0; - run_45200(); return; - case 0x459d8: + page[(r29+196)>>>2] = r3; + pc=0x53df0; + run_53800(); return; + case 0x543d8: r6 = r29 + 163; r3 = r6 + r0; r4 = r0 + 10; - case 0x459e4: + case 0x543e4: if(r4 != r0) { - /* Next insn is delay slot */ hi = r2%r4; lo = r2/r4; - pc=0x459f0; + pc=0x543f0; continue; } hi = r2%r4; lo = r2/r4; throw new ExecutionException("Break"); - case 0x459f0: + case 0x543f0: r3 = r3 + -1; r5 = hi; r5 = r5 + 48; addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x45a00: - pc=0x45a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_45a00() throws ExecutionException { /* 0x45a00 - 0x45c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x45a00: + page[(addr)>>>2] = tmp; r2 = lo; r5 = r2 < 10 ? 1 : 0; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x459e4; - run_45800(); return; + pc=0x543e4; + continue; } r2 = r2 + 48; r5 = r2 << 24; @@ -54480,1171 +61932,1000 @@ public final class AcmeCrossAssembler extends UnixRuntime { r5 = r5 >> 24; r2 = ((r4 & 0xffffffffL) < (r6 & 0xffffffffL)) ? 1 : 0; addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x45b70; + pc=0x54570; continue; } r2 = r29 + 166; - /* Next insn is delay slot */ - pc=0x45a40; + pc=0x54440; continue; - case 0x45a3c: + case 0x5443c: addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r5 = tmp; - case 0x45a40: + case 0x54440: r2 = r2 + 1; r4 = r4 + 1; addr=r2+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r4 != r6) { - /* Next insn is delay slot */ - pc=0x45a3c; + pc=0x5443c; continue; } r4 = r29 + 164; r2 = r4 - r3; r3 = r29 + 166; r2 = r3 + r2; - /* Next insn is delay slot */ - pc=0x457d4; - run_45600(); return; - case 0x45a6c: - r2 = readPages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x45380; - run_45200(); return; - case 0x45a78: + pc=0x541d4; + continue; + case 0x5446c: + r2= page[(r29+156)>>>2]; + pc=0x53d80; + run_53800(); return; + case 0x54478: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x4562c; - run_45600(); return; - case 0x45a84: - r5 = 7 << 16; - r23 = r5 + 636; - /* Next insn is delay slot */ - pc=0x44cf4; - run_44c00(); return; - case 0x45a94: - r4 = 7 << 16; - r3 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - r23 = r4 + 636; - /* Next insn is delay slot */ - pc=0x44db4; - run_44c00(); return; - case 0x45aa8: - r3 = readPages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff]; + pc=0x5402c; + continue; + case 0x54484: + r5 = 6 << 16; + r23 = r5 + 14176; + pc=0x536f4; + run_53000(); return; + case 0x54494: + r4 = 6 << 16; + r3= page[(r29+148)>>>2]; + r23 = r4 + 14176; + pc=0x537b4; + run_53000(); return; + case 0x544a8: + r3= page[(r29+208)>>>2]; r2 = r30 + 1; r2 = r3 + r2; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r2; + page[(r29+196)>>>2] = r2; if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x453f0; - run_45200(); return; + pc=0x53df0; + run_53800(); return; } - case 0x45ac0: + case 0x544c0: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x453f0; - run_45200(); return; - case 0x45acc: + pc=0x53df0; + run_53800(); return; + case 0x544cc: if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x45b48; + pc=0x54548; continue; } r17 = r17 & 1; if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x45b48; + pc=0x54548; continue; } r3 = r0 + 1; r2 = r0 + 1; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x453f0; - run_45200(); return; - case 0x45af4: + page[(r29+196)>>>2] = r3; + pc=0x53df0; + run_53800(); return; + case 0x544f4: r2 = r0 + 2; r2 = r2 - r3; - /* Next insn is delay slot */ - pc=0x4595c; - run_45800(); return; - case 0x45b04: - r3 = readPages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff]; - r30 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + pc=0x5435c; + continue; + case 0x54504: + r3= page[(r29+316)>>>2]; + r30= page[(r3+0)>>>2]; r2 = r3 + 4; r3 = r4 + r0; if(r30 >= 0) { - /* Next insn is delay slot */ - pc=0x4451c; - run_44400(); return; + pc=0x52f1c; + run_52800(); return; } - writePages[(r29+316)>>>12][((r29+316)>>>2)&0x3ff] = r2; + page[(r29+316)>>>2] = r2; r30 = r0 + -1; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x4398c; - run_43800(); return; - case 0x45b34: + pc=0x5238c; + run_52000(); return; + case 0x54534: r3 = r0 + 45; r2 = r0 - r2; addr=r29+165; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x457b0; - run_45600(); return; - case 0x45b48: + page[(addr)>>>2] = tmp; + pc=0x541b0; + continue; + case 0x54548: r30 = r30 + 2; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r30; + page[(r29+196)>>>2] = r30; r2 = r30 + r0; if(r30 >= 0) { - /* Next insn is delay slot */ - pc=0x453f0; - run_45200(); return; + pc=0x53df0; + run_53800(); return; } - /* Next insn is delay slot */ - pc=0x45ac0; + pc=0x544c0; continue; - case 0x45b64: + case 0x54564: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x453e4; - run_45200(); return; - case 0x45b70: + pc=0x53de4; + run_53800(); return; + case 0x54570: r2 = r29 + 166; r4 = r29 + 164; - /* Next insn is delay slot */ - pc=0x457d4; - run_45600(); return; - case 0x45b80: - r2 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x45794; - run_45600(); return; - case 0x45b8c: - r3 = readPages[(r29+304)>>>12][((r29+304)>>>2)&0x3ff]; + pc=0x541d4; + continue; + case 0x54580: + r2= page[(r29+176)>>>2]; + pc=0x54194; + continue; + case 0x5458c: + r3= page[(r29+304)>>>2]; r2 = r0 + 12; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; + page[(r3+0)>>>2] = r2; r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x43a68; - run_43a00(); return; - case 0x45c00: - pc=0x45c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_45c00() throws ExecutionException { /* 0x45c00 - 0x45e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x45c00: + pc=0x52468; + run_52000(); return; + case 0x54600: r29 = r29 + -1328; - writePages[(r29+1324)>>>12][((r29+1324)>>>2)&0x3ff] = r31; - writePages[(r29+1312)>>>12][((r29+1312)>>>2)&0x3ff] = r22; - writePages[(r29+1308)>>>12][((r29+1308)>>>2)&0x3ff] = r21; + page[(r29+1324)>>>2] = r31; + page[(r29+1312)>>>2] = r22; + page[(r29+1308)>>>2] = r21; r22 = r5 + r0; r21 = r4 + r0; - writePages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff] = r6; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r7; - writePages[(r29+1320)>>>12][((r29+1320)>>>2)&0x3ff] = r30; - writePages[(r29+1316)>>>12][((r29+1316)>>>2)&0x3ff] = r23; - writePages[(r29+1304)>>>12][((r29+1304)>>>2)&0x3ff] = r20; - writePages[(r29+1300)>>>12][((r29+1300)>>>2)&0x3ff] = r19; - writePages[(r29+1296)>>>12][((r29+1296)>>>2)&0x3ff] = r18; - writePages[(r29+1292)>>>12][((r29+1292)>>>2)&0x3ff] = r17; - writePages[(r29+1288)>>>12][((r29+1288)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x45c44; - pc=0x5ae00; - run_5ae00(); return; - case 0x45c44: - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; + page[(r29+1336)>>>2] = r6; + page[(r29+1340)>>>2] = r7; + page[(r29+1320)>>>2] = r30; + page[(r29+1316)>>>2] = r23; + page[(r29+1304)>>>2] = r20; + page[(r29+1300)>>>2] = r19; + page[(r29+1296)>>>2] = r18; + page[(r29+1292)>>>2] = r17; + page[(r29+1288)>>>2] = r16; + r31=0x54644; + pc=0x5aa00; + run_5a800(); return; + case 0x54644: + r2= page[(r2+0)>>>2]; r4 = r2 + r0; - writePages[(r29+1236)>>>12][((r29+1236)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x45c5c; + page[(r29+1236)>>>2] = r2; + r31=0x5465c; pc=0x10268; - run_10200(); return; - case 0x45c5c: - writePages[(r29+1256)>>>12][((r29+1256)>>>2)&0x3ff] = r2; + run_10000(); return; + case 0x5465c: + page[(r29+1256)>>>2] = r2; if(r21 == r0) { - /* Next insn is delay slot */ - pc=0x45c78; + pc=0x54678; continue; } - r2 = readPages[(r21+56)>>>12][((r21+56)>>>2)&0x3ff]; + r2= page[(r21+56)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x45fec; - run_45e00(); return; + pc=0x549ec; + run_54800(); return; } - case 0x45c78: + case 0x54678: addr=r22+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r3 = tmp; r2 = r3 & 65535; r4 = r2 & 8192; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x45cac; + pc=0x546ac; continue; } - r4 = readPages[(r22+100)>>>12][((r22+100)>>>2)&0x3ff]; + r4= page[(r22+100)>>>2]; r2 = r0 + -8193; r3 = r3 | 8192; r2 = r4 & r2; - writePages[(r22+100)>>>12][((r22+100)>>>2)&0x3ff] = r2; + page[(r22+100)>>>2] = r2; addr=r22+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r3 & 65535; - case 0x45cac: + case 0x546ac: r4 = r2 & 8; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x45e58; - run_45e00(); return; + pc=0x54858; + run_54800(); return; } - r4 = readPages[(r22+16)>>>12][((r22+16)>>>2)&0x3ff]; + r4= page[(r22+16)>>>2]; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x45e58; - run_45e00(); return; + pc=0x54858; + run_54800(); return; } r2 = r2 & 26; r4 = r0 + 10; if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x45e88; - run_45e00(); return; + pc=0x54888; + run_54800(); return; } - case 0x45cd8: + case 0x546d8: r3 = r29 + 40; - r2 = 7 << 16; - writePages[(r29+1168)>>>12][((r29+1168)>>>2)&0x3ff] = r3; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r0; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r0; - writePages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff] = r0; - writePages[(r29+1252)>>>12][((r29+1252)>>>2)&0x3ff] = r0; - writePages[(r29+1248)>>>12][((r29+1248)>>>2)&0x3ff] = r0; - writePages[(r29+1264)>>>12][((r29+1264)>>>2)&0x3ff] = r0; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r0; - writePages[(r29+1220)>>>12][((r29+1220)>>>2)&0x3ff] = r0; + r2 = 6 << 16; + page[(r29+1168)>>>2] = r3; + page[(r29+1176)>>>2] = r0; + page[(r29+1172)>>>2] = r0; + page[(r29+1240)>>>2] = r0; + page[(r29+1252)>>>2] = r0; + page[(r29+1248)>>>2] = r0; + page[(r29+1264)>>>2] = r0; + page[(r29+1260)>>>2] = r0; + page[(r29+1220)>>>2] = r0; r8 = r3 + r0; - r19 = r2 + 1040; - case 0x45d0c: - r3 = readPages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff]; + r19 = r2 + 14580; + case 0x5470c: + r3= page[(r29+1336)>>>2]; addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x464a4; - run_46400(); return; + pc=0x54ea4; + run_54800(); return; } - case 0x45d24: + case 0x54724: r3 = r0 + 37; - r16 = readPages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff]; + r16= page[(r29+1336)>>>2]; if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x45d44; + pc=0x54744; continue; } - /* Next insn is delay slot */ - pc=0x45db0; + pc=0x547b0; continue; - case 0x45d3c: + case 0x5473c: if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x45d58; + pc=0x54758; continue; } - case 0x45d44: + case 0x54744: r16 = r16 + 1; addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45d3c; + pc=0x5473c; continue; } - case 0x45d58: - r3 = readPages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff]; + case 0x54758: + r3= page[(r29+1336)>>>2]; r17 = r16 - r3; if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x45db0; + pc=0x547b0; continue; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1336)>>>2]; r2 = r2 + r17; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; - r2 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r3; + page[(r29+1176)>>>2] = r2; + r2= page[(r29+1172)>>>2]; + page[(r8+0)>>>2] = r3; r2 = r2 + 1; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r2; + page[(r29+1172)>>>2] = r2; r2 = r2 < 8 ? 1 : 0; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r17; + page[(r8+4)>>>2] = r17; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x45f80; - run_45e00(); return; + pc=0x54980; + run_54800(); return; } r8 = r8 + 8; - case 0x45da0: - r3 = readPages[(r29+1220)>>>12][((r29+1220)>>>2)&0x3ff]; + case 0x547a0: + r3= page[(r29+1220)>>>2]; r3 = r3 + r17; - writePages[(r29+1220)>>>12][((r29+1220)>>>2)&0x3ff] = r3; - case 0x45db0: + page[(r29+1220)>>>2] = r3; + case 0x547b0: addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x45fa8; - run_45e00(); return; + pc=0x549a8; + run_54800(); return; } r16 = r16 + 1; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r5 = r0 + r0; r30 = r0 + -1; - writePages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff] = r0; + page[(r29+1208)>>>2] = r0; r17 = r0 + r0; r6 = r0 + 42; r7 = r0 + r0; - case 0x45de0: + case 0x547e0: addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r18 = tmp; r3 = r16 + 1; - case 0x45de8: + case 0x547e8: r2 = r18 + -32; r4 = (r2&0xffffffffL) < (89&0xffffffffL) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x46a10; - run_46a00(); return; + pc=0x55410; + run_55000(); return; } - r4 = 7 << 16; + r4 = 6 << 16; r2 = r2 << 2; - case 0x45e00: - pc=0x45e00; + case 0x54800: + pc=0x54800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_45e00() throws ExecutionException { /* 0x45e00 - 0x46000 */ + private final void run_54800() throws ExecutionException { /* 0x54800 - 0x55000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x45e00: - r4 = r4 + 668; + case 0x54800: + r4 = r4 + 14208; r2 = r4 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ + r2= page[(r2+0)>>>2]; pc=r2; return; - case 0x45e18: + case 0x54818: r17 = r17 | 16; - case 0x45e1c: + case 0x5481c: r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x45de0; - run_45c00(); return; - case 0x45e28: - r4 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; - r7 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; + pc=0x547e0; + run_54000(); return; + case 0x54828: + r4= page[(r29+1340)>>>2]; + r7= page[(r4+0)>>>2]; r2 = r4 + 4; if(r7 >= 0) { - /* Next insn is delay slot */ - pc=0x46a00; - run_46a00(); return; + pc=0x55400; + run_55000(); return; } r7 = r0 - r7; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r2; - case 0x45e48: + page[(r29+1340)>>>2] = r2; + case 0x54848: r17 = r17 | 4; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x45de0; - run_45c00(); return; - case 0x45e58: + pc=0x547e0; + run_54000(); return; + case 0x54858: r4 = r21 + r0; r5 = r22 + r0; - /* Next insn is delay slot */ - r31=0x45e68; - pc=0x48600; - run_48600(); return; - case 0x45e68: + r31=0x54868; + pc=0x56c00; + run_56800(); return; + case 0x54868: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45f48; + pc=0x54948; continue; } addr=r22+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r3 = tmp; r4 = r0 + 10; r2 = r3 & 65535; r2 = r2 & 26; if(r2 != r4) { - /* Next insn is delay slot */ - pc=0x45cd8; - run_45c00(); return; + pc=0x546d8; + run_54000(); return; } - case 0x45e88: + case 0x54888: addr=r22+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r2 = tmp; if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x45cd8; - run_45c00(); return; + pc=0x546d8; + run_54000(); return; } addr=r29+1078; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r22+28)>>>12][((r22+28)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r2= page[(r22+28)>>>2]; r4 = r0 + -3; - writePages[(r29+1092)>>>12][((r29+1092)>>>2)&0x3ff] = r2; - r2 = readPages[(r22+36)>>>12][((r22+36)>>>2)&0x3ff]; + page[(r29+1092)>>>2] = r2; + r2= page[(r22+36)>>>2]; r3 = r3 & r4; addr=r29+1076; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+1100)>>>12][((r29+1100)>>>2)&0x3ff] = r2; - r3 = readPages[(r22+100)>>>12][((r22+100)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + page[(r29+1100)>>>2] = r2; + r3= page[(r22+100)>>>2]; r2 = r29 + 40; - r6 = readPages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff]; - r7 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; - writePages[(r29+1064)>>>12][((r29+1064)>>>2)&0x3ff] = r2; - writePages[(r29+1080)>>>12][((r29+1080)>>>2)&0x3ff] = r2; + r6= page[(r29+1336)>>>2]; + r7= page[(r29+1340)>>>2]; + page[(r29+1064)>>>2] = r2; + page[(r29+1080)>>>2] = r2; r4 = r21 + r0; r2 = r0 + 1024; r5 = r29 + 1064; - writePages[(r29+1164)>>>12][((r29+1164)>>>2)&0x3ff] = r3; - writePages[(r29+1072)>>>12][((r29+1072)>>>2)&0x3ff] = r2; - writePages[(r29+1084)>>>12][((r29+1084)>>>2)&0x3ff] = r2; - writePages[(r29+1088)>>>12][((r29+1088)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - r31=0x45ef4; - pc=0x45c00; - run_45c00(); return; - case 0x45ef4: + page[(r29+1164)>>>2] = r3; + page[(r29+1072)>>>2] = r2; + page[(r29+1084)>>>2] = r2; + page[(r29+1088)>>>2] = r0; + r31=0x548f4; + pc=0x54600; + run_54000(); return; + case 0x548f4: r16 = r2 + r0; if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x45f18; + pc=0x54918; continue; } r4 = r21 + r0; r5 = r29 + 1064; - /* Next insn is delay slot */ - r31=0x45f10; - pc=0x39800; - run_39800(); return; - case 0x45f10: + r31=0x54910; + pc=0x4a400; + run_4a000(); return; + case 0x54910: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x47f78; - run_47e00(); return; + pc=0x56978; + run_56800(); return; } - case 0x45f18: + case 0x54918: addr=r29+1076; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r2 = r2 & 64; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x45f3c; + pc=0x5493c; continue; } addr=r22+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r2 = r2 | 64; addr=r22+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x45f3c: + page[(addr)>>>2] = tmp; + case 0x5493c: r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x45f4c; + pc=0x5494c; continue; - case 0x45f48: + case 0x54948: r2 = r0 + -1; - case 0x45f4c: - r31 = readPages[(r29+1324)>>>12][((r29+1324)>>>2)&0x3ff]; - r30 = readPages[(r29+1320)>>>12][((r29+1320)>>>2)&0x3ff]; - r23 = readPages[(r29+1316)>>>12][((r29+1316)>>>2)&0x3ff]; - r22 = readPages[(r29+1312)>>>12][((r29+1312)>>>2)&0x3ff]; - r21 = readPages[(r29+1308)>>>12][((r29+1308)>>>2)&0x3ff]; - r20 = readPages[(r29+1304)>>>12][((r29+1304)>>>2)&0x3ff]; - r19 = readPages[(r29+1300)>>>12][((r29+1300)>>>2)&0x3ff]; - r18 = readPages[(r29+1296)>>>12][((r29+1296)>>>2)&0x3ff]; - r17 = readPages[(r29+1292)>>>12][((r29+1292)>>>2)&0x3ff]; - r16 = readPages[(r29+1288)>>>12][((r29+1288)>>>2)&0x3ff]; + case 0x5494c: + r31= page[(r29+1324)>>>2]; + r30= page[(r29+1320)>>>2]; + r23= page[(r29+1316)>>>2]; + r22= page[(r29+1312)>>>2]; + r21= page[(r29+1308)>>>2]; + r20= page[(r29+1304)>>>2]; + r19= page[(r29+1300)>>>2]; + r18= page[(r29+1296)>>>2]; + r17= page[(r29+1292)>>>2]; + r16= page[(r29+1288)>>>2]; r29 = r29 + 1328; - /* Next insn is delay slot */ pc=r31; return; - case 0x45f80: + case 0x54980: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x45f94; - pc=0x63400; - run_63400(); return; - case 0x45f94: + r31=0x54994; + pc=0x5d200; + run_5d000(); return; + case 0x54994: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; + pc=0x549cc; continue; } r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x45da0; - run_45c00(); return; - case 0x45fa8: - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; + pc=0x547a0; + run_54000(); return; + case 0x549a8: + r2= page[(r29+1176)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x45fcc; + pc=0x549cc; continue; } r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x45fcc; - pc=0x63400; - run_63400(); return; - case 0x45fcc: + r31=0x549cc; + pc=0x5d200; + run_5d000(); return; + case 0x549cc: addr=r22+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r2 = r2 & 64; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45f48; + pc=0x54948; continue; } - r2 = readPages[(r29+1220)>>>12][((r29+1220)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x45f4c; + r2= page[(r29+1220)>>>2]; + pc=0x5494c; continue; - case 0x45fec: + case 0x549ec: r4 = r21 + r0; - /* Next insn is delay slot */ - r31=0x45ff8; - pc=0x3a600; - run_3a600(); return; - case 0x45ff8: - /* Next insn is delay slot */ - pc=0x45c78; - run_45c00(); return; - case 0x46000: - pc=0x46000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_46000() throws ExecutionException { /* 0x46000 - 0x46200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x46000: + r31=0x549f8; + pc=0x4ac00; + run_4a800(); return; + case 0x549f8: + pc=0x54678; + run_54000(); return; + case 0x54a00: r5 = r0 + 43; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x45de0; - run_45c00(); return; - case 0x46010: - writePages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; - writePages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff] = r7; - r16 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + pc=0x547e0; + run_54000(); return; + case 0x54a10: + page[(r29+1336)>>>2] = r3; + r3= page[(r29+1340)>>>2]; + page[(r29+1208)>>>2] = r7; + r16= page[(r3+0)>>>2]; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r20 = r3 + 4; if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x47aa4; - run_47a00(); return; + pc=0x564a4; + run_56000(); return; } r4 = r16 + r0; if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x47984; - run_47800(); return; + pc=0x56384; + run_56000(); return; } r5 = r0 + r0; r6 = r30 + r0; - writePages[(r29+1284)>>>12][((r29+1284)>>>2)&0x3ff] = r8; - /* Next insn is delay slot */ - r31=0x46050; - pc=0x5b400; - run_5b400(); return; - case 0x46050: - r8 = readPages[(r29+1284)>>>12][((r29+1284)>>>2)&0x3ff]; + page[(r29+1284)>>>2] = r8; + r31=0x54a50; + pc=0x5ac00; + run_5a800(); return; + case 0x54a50: + r8= page[(r29+1284)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x47c38; - run_47c00(); return; + pc=0x56638; + run_56000(); return; } r2 = r2 - r16; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r2; + page[(r29+1216)>>>2] = r2; r2 = r30 < r2 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x4787c; - run_47800(); return; + pc=0x5627c; + run_56000(); return; } - case 0x46070: - r2 = readPages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff]; + case 0x54a70: + r2= page[(r29+1216)>>>2]; if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x479a0; - run_47800(); return; + pc=0x563a0; + run_56000(); return; } - case 0x46080: + case 0x54a80: addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - writePages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff] = r2; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r20; + page[(r29+1212)>>>2] = r2; + page[(r29+1340)>>>2] = r20; r30 = r0 + r0; - writePages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff] = r0; - case 0x46094: + page[(r29+1232)>>>2] = r0; + case 0x54a94: if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x460ac; + pc=0x54aac; continue; } - case 0x4609c: - r2 = readPages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff]; + case 0x54a9c: + r2= page[(r29+1212)>>>2]; r2 = r2 + 1; - writePages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff] = r2; - case 0x460ac: + page[(r29+1212)>>>2] = r2; + case 0x54aac: r4 = r17 & 2; - writePages[(r29+1224)>>>12][((r29+1224)>>>2)&0x3ff] = r4; + page[(r29+1224)>>>2] = r4; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x460cc; + pc=0x54acc; continue; } - r5 = readPages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff]; + r5= page[(r29+1212)>>>2]; r5 = r5 + 2; - writePages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff] = r5; - case 0x460cc: + page[(r29+1212)>>>2] = r5; + case 0x54acc: r2 = r17 & 132; - writePages[(r29+1228)>>>12][((r29+1228)>>>2)&0x3ff] = r2; + page[(r29+1228)>>>2] = r2; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x46a64; - run_46a00(); return; + pc=0x55464; + run_55000(); return; } - r4 = readPages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff]; - r5 = readPages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff]; + r4= page[(r29+1208)>>>2]; + r5= page[(r29+1212)>>>2]; r20 = r4 - r5; if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x46a64; - run_46a00(); return; + pc=0x55464; + run_55000(); return; } r2 = r20 < 17 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x479ac; - run_47800(); return; + pc=0x563ac; + run_56000(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - writePages[(r29+1244)>>>12][((r29+1244)>>>2)&0x3ff] = r19; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; + page[(r29+1244)>>>2] = r19; r23 = r0 + 16; - /* Next insn is delay slot */ - pc=0x4612c; + pc=0x54b2c; continue; - case 0x46118: + case 0x54b18: r20 = r20 + -16; r4 = r20 < 17 ? 1 : 0; r8 = r8 + 8; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x46188; + pc=0x54b88; continue; } - case 0x4612c: + case 0x54b2c: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r19; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r23; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r19; + page[(r8+4)>>>2] = r23; + page[(r29+1176)>>>2] = r2; + page[(r29+1172)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x46118; + pc=0x54b18; continue; } r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x46164; - pc=0x63400; - run_63400(); return; - case 0x46164: + r31=0x54b64; + pc=0x5d200; + run_5d000(); return; + case 0x54b64: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + continue; } r20 = r20 + -16; r4 = r20 < 17 ? 1 : 0; - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; r8 = r29 + 40; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x4612c; + pc=0x54b2c; continue; } - case 0x46188: + case 0x54b88: r3 = r3 + 1; - r4 = readPages[(r29+1244)>>>12][((r29+1244)>>>2)&0x3ff]; + r4= page[(r29+1244)>>>2]; r2 = r20 + r2; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1172)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r4; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r20; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r4; + page[(r8+4)>>>2] = r20; + page[(r29+1176)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x470e4; - run_47000(); return; + pc=0x55ae4; + run_55800(); return; } addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; r8 = r8 + 8; - case 0x461b8: + case 0x54bb8: if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x461f4; + pc=0x54bf4; continue; } r3 = r29 + 1206; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r3; r3 = r0 + 1; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + page[(r8+4)>>>2] = r3; + r3= page[(r29+1172)>>>2]; r2 = r2 + 1; r3 = r3 + 1; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1172)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r29+1176)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x46f60; - run_46e00(); return; + pc=0x55960; + run_55800(); return; } r8 = r8 + 8; - case 0x461f4: - r3 = readPages[(r29+1224)>>>12][((r29+1224)>>>2)&0x3ff]; + case 0x54bf4: + r3= page[(r29+1224)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x46238; - run_46200(); return; + pc=0x54c38; + continue; } - case 0x46200: - pc=0x46200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_46200() throws ExecutionException { /* 0x46200 - 0x46400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x46200: r3 = r29 + 1204; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r3; r3 = r0 + 2; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + page[(r8+4)>>>2] = r3; + r3= page[(r29+1172)>>>2]; r2 = r2 + 2; r3 = r3 + 1; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1172)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r29+1176)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x46f34; - run_46e00(); return; + pc=0x55934; + run_55800(); return; } r8 = r8 + 8; - case 0x46238: - r4 = readPages[(r29+1228)>>>12][((r29+1228)>>>2)&0x3ff]; + case 0x54c38: + r4= page[(r29+1228)>>>2]; r3 = r0 + 128; if(r4 == r3) { - /* Next insn is delay slot */ - pc=0x46dcc; - run_46c00(); return; + pc=0x557cc; + run_55000(); return; } - case 0x46248: - r3 = readPages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff]; + case 0x54c48: + r3= page[(r29+1216)>>>2]; r20 = r30 - r3; if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x46318; + pc=0x54d18; continue; } r3 = r20 < 17 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x4770c; - run_47600(); return; + pc=0x5610c; + run_56000(); return; } - r5 = 7 << 16; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r23 = r5 + 1024; + r5 = 6 << 16; + r3= page[(r29+1172)>>>2]; + r23 = r5 + 14564; r30 = r0 + 16; - /* Next insn is delay slot */ - pc=0x46294; + pc=0x54c94; continue; - case 0x46280: + case 0x54c80: r20 = r20 + -16; r4 = r20 < 17 ? 1 : 0; r8 = r8 + 8; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x462f0; + pc=0x54cf0; continue; } - case 0x46294: + case 0x54c94: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r30; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r30; + page[(r29+1176)>>>2] = r2; + page[(r29+1172)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x46280; + pc=0x54c80; continue; } r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x462cc; - pc=0x63400; - run_63400(); return; - case 0x462cc: + r31=0x54ccc; + pc=0x5d200; + run_5d000(); return; + case 0x54ccc: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + continue; } r20 = r20 + -16; r4 = r20 < 17 ? 1 : 0; - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; r8 = r29 + 40; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x46294; + pc=0x54c94; continue; } - case 0x462f0: + case 0x54cf0: r3 = r3 + 1; r2 = r2 + r20; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1172)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r20; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r20; + page[(r29+1176)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x46f08; - run_46e00(); return; + pc=0x55908; + run_55800(); return; } r8 = r8 + 8; - case 0x46318: + case 0x54d18: r3 = r17 & 256; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x46c64; - run_46c00(); return; + pc=0x55664; + run_55000(); return; } - r3 = readPages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff]; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r16; + r3= page[(r29+1216)>>>2]; + page[(r8+0)>>>2] = r16; r2 = r2 + r3; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r8+4)>>>2] = r3; + r3= page[(r29+1172)>>>2]; + page[(r29+1176)>>>2] = r2; r3 = r3 + 1; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1172)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x46b68; - run_46a00(); return; + pc=0x55568; + run_55000(); return; } - case 0x46350: + case 0x54d50: r8 = r8 + 8; - case 0x46354: + case 0x54d54: r17 = r17 & 4; if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x46450; - run_46400(); return; + pc=0x54e50; + continue; } - r3 = readPages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff]; - r4 = readPages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff]; + r3= page[(r29+1208)>>>2]; + r4= page[(r29+1212)>>>2]; r16 = r3 - r4; if(r16 <= 0) { - /* Next insn is delay slot */ - pc=0x46450; - run_46400(); return; + pc=0x54e50; + continue; } r3 = r16 < 17 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x47ae8; - run_47a00(); return; + pc=0x564e8; + run_56000(); return; } - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - writePages[(r29+1244)>>>12][((r29+1244)>>>2)&0x3ff] = r19; + r3= page[(r29+1172)>>>2]; + page[(r29+1244)>>>2] = r19; r17 = r0 + 16; - /* Next insn is delay slot */ - pc=0x463ac; + pc=0x54dac; continue; - case 0x46398: + case 0x54d98: r16 = r16 + -16; r4 = r16 < 17 ? 1 : 0; r8 = r8 + 8; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x46408; - run_46400(); return; + pc=0x54e08; + continue; } - case 0x463ac: + case 0x54dac: r3 = r3 + 1; r2 = r2 + 16; r6 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r19; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r17; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r19; + page[(r8+4)>>>2] = r17; + page[(r29+1176)>>>2] = r2; + page[(r29+1172)>>>2] = r3; if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x46398; + pc=0x54d98; continue; } r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x463e4; - pc=0x63400; - run_63400(); return; - case 0x463e4: + r31=0x54de4; + pc=0x5d200; + run_5d000(); return; + case 0x54de4: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + continue; } r16 = r16 + -16; r4 = r16 < 17 ? 1 : 0; - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; r8 = r29 + 40; - case 0x46400: - pc=0x46400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_46400() throws ExecutionException { /* 0x46400 - 0x46600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x46400: if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x463ac; - run_46200(); return; + pc=0x54dac; + continue; } - case 0x46408: + case 0x54e08: r3 = r3 + 1; - r5 = readPages[(r29+1244)>>>12][((r29+1244)>>>2)&0x3ff]; + r5= page[(r29+1244)>>>2]; r2 = r2 + r16; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1172)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r5; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r16; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r5; + page[(r8+4)>>>2] = r16; + page[(r29+1176)>>>2] = r2; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x46450; + pc=0x54e50; continue; } r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x46444; - pc=0x63400; - run_63400(); return; - case 0x46444: + r31=0x54e44; + pc=0x5d200; + run_5d000(); return; + case 0x54e44: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + continue; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - case 0x46450: - r3 = readPages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff]; - r5 = readPages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; + case 0x54e50: + r3= page[(r29+1212)>>>2]; + r5= page[(r29+1208)>>>2]; r4 = r3 < r5 ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x4646c; + pc=0x54e6c; continue; } r3 = r5 + r0; - case 0x4646c: - r4 = readPages[(r29+1220)>>>12][((r29+1220)>>>2)&0x3ff]; + case 0x54e6c: + r4= page[(r29+1220)>>>2]; r4 = r4 + r3; - writePages[(r29+1220)>>>12][((r29+1220)>>>2)&0x3ff] = r4; + page[(r29+1220)>>>2] = r4; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x46b94; - run_46a00(); return; + pc=0x55594; + run_55000(); return; } - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r0; + page[(r29+1172)>>>2] = r0; r8 = r29 + 40; - case 0x4648c: - r3 = readPages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff]; + case 0x54e8c: + r3= page[(r29+1336)>>>2]; addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45d24; - run_45c00(); return; + pc=0x54724; + run_54000(); return; } - case 0x464a4: - r16 = readPages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x45db0; - run_45c00(); return; - case 0x464b0: + case 0x54ea4: + r16= page[(r29+1336)>>>2]; + pc=0x547b0; + run_54000(); return; + case 0x54eb0: if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x45e1c; - run_45e00(); return; + pc=0x5481c; + continue; } r5 = r0 + 32; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x45de0; - run_45c00(); return; - case 0x464c8: + pc=0x547e0; + run_54000(); return; + case 0x54ec8: r17 = r17 | 1; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x45de0; - run_45c00(); return; - case 0x464d8: + pc=0x547e0; + run_54000(); return; + case 0x54ed8: addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r18 = tmp; r4 = r3 + 1; if(r18 == r6) { - /* Next insn is delay slot */ - pc=0x47efc; - run_47e00(); return; + pc=0x568fc; + run_56800(); return; } r2 = r18 + -48; r3 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; r30 = r0 + r0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x4652c; + pc=0x54f2c; continue; } - case 0x464fc: + case 0x54efc: r4 = r4 + 1; r3 = r30 << 1; addr=r4+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r18 = tmp; r30 = r30 << 3; r30 = r3 + r30; @@ -55652,141 +62933,127 @@ public final class AcmeCrossAssembler extends UnixRuntime { r2 = r18 + -48; r3 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x464fc; + pc=0x54efc; continue; } if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x478d8; - run_47800(); return; + pc=0x562d8; + run_56000(); return; } - case 0x4652c: + case 0x54f2c: r3 = r4 + r0; - /* Next insn is delay slot */ - pc=0x45de8; - run_45c00(); return; - case 0x46538: + pc=0x547e8; + run_54000(); return; + case 0x54f38: r17 = r17 | 16; r2 = r17 & 16; - writePages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff] = r7; - writePages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff] = r3; + page[(r29+1208)>>>2] = r7; + page[(r29+1336)>>>2] = r3; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x4698c; - run_46800(); return; + pc=0x5538c; + run_55000(); return; } - case 0x46550: - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; + case 0x54f50: + r3= page[(r29+1340)>>>2]; r4 = r0 + r0; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + r2= page[(r3+0)>>>2]; r3 = r3 + 4; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; + page[(r29+1340)>>>2] = r3; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - case 0x4656c: + case 0x54f6c: if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x4657c; + pc=0x54f7c; continue; } r5 = r0 + -129; r17 = r17 & r5; - case 0x4657c: + case 0x54f7c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x46bc0; - run_46a00(); return; + pc=0x555c0; + run_55000(); return; } if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x46bc0; - run_46a00(); return; + pc=0x555c0; + run_55000(); return; } if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x46fb4; - run_46e00(); return; + pc=0x559b4; + run_55800(); return; } r2 = r17 & 1; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x46fb4; - run_46e00(); return; + pc=0x559b4; + run_55800(); return; } r2 = r0 + 48; addr=r29+1103; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r0 + 1; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r2; + page[(r29+1216)>>>2] = r2; r16 = r29 + 1103; - case 0x465b4: - r2 = readPages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff]; + case 0x54fb4: + r2= page[(r29+1216)>>>2]; r4 = r2 < r30 ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x465cc; + pc=0x54fcc; continue; } r2 = r30 + r0; - case 0x465cc: - writePages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff] = r2; - writePages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x46094; - run_46000(); return; - case 0x465dc: + case 0x54fcc: + page[(r29+1212)>>>2] = r2; + page[(r29+1232)>>>2] = r0; + pc=0x54a94; + continue; + case 0x54fdc: r17 = r17 | 16; r2 = r17 & 16; - writePages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff] = r7; - writePages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff] = r3; + page[(r29+1208)>>>2] = r7; + page[(r29+1336)>>>2] = r3; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x469d0; - run_46800(); return; + pc=0x553d0; + run_55000(); return; } - case 0x465f4: - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; + case 0x54ff4: + r3= page[(r29+1340)>>>2]; r4 = r0 + 1; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - case 0x46600: - pc=0x46600; + r2= page[(r3+0)>>>2]; + case 0x55000: + pc=0x55000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_46600() throws ExecutionException { /* 0x46600 - 0x46800 */ + private final void run_55000() throws ExecutionException { /* 0x55000 - 0x55800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x46600: + case 0x55000: r3 = r3 + 4; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; + page[(r29+1340)>>>2] = r3; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x4656c; - run_46400(); return; - case 0x46618: + pc=0x54f6c; + run_54800(); return; + case 0x55018: r7 = r0 + r0; r2 = r18 + -48; - case 0x46620: + case 0x55020: r3 = r3 + 1; r4 = r7 << 1; addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r18 = tmp; r7 = r7 << 3; r7 = r4 + r7; @@ -55794,2661 +63061,2258 @@ public final class AcmeCrossAssembler extends UnixRuntime { r2 = r18 + -48; r4 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x46620; + pc=0x55020; continue; } - /* Next insn is delay slot */ - pc=0x45de8; - run_45c00(); return; - case 0x46650: + pc=0x547e8; + run_54000(); return; + case 0x55050: r2 = r17 & 16; - writePages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff] = r7; - writePages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff] = r3; + page[(r29+1208)>>>2] = r7; + page[(r29+1336)>>>2] = r3; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x468bc; - run_46800(); return; + pc=0x552bc; + continue; } - case 0x46668: - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + case 0x55068: + r3= page[(r29+1340)>>>2]; + r2= page[(r3+0)>>>2]; r3 = r3 + 4; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; - case 0x4667c: + page[(r29+1340)>>>2] = r3; + case 0x5507c: if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x47434; - run_47400(); return; + pc=0x55e34; + run_55800(); return; } addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; r4 = r0 + 1; - /* Next insn is delay slot */ - pc=0x4656c; - run_46400(); return; - case 0x46694: + pc=0x54f6c; + run_54800(); return; + case 0x55094: r17 = r17 | 64; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x45de0; - run_45c00(); return; - case 0x466a4: + pc=0x547e0; + run_54000(); return; + case 0x550a4: r17 = r17 | 128; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x45de0; - run_45c00(); return; - case 0x466b4: - writePages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; - writePages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff] = r7; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + pc=0x547e0; + run_54000(); return; + case 0x550b4: + page[(r29+1336)>>>2] = r3; + r3= page[(r29+1340)>>>2]; + page[(r29+1208)>>>2] = r7; + r2= page[(r3+0)>>>2]; r3 = r0 + 48; addr=r29+1204; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + 120; addr=r29+1205; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r3= page[(r29+1340)>>>2]; r17 = r17 | 2; r3 = r3 + 4; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; - r3 = 7 << 16; - r3 = r3 + 248; - writePages[(r29+1264)>>>12][((r29+1264)>>>2)&0x3ff] = r3; + page[(r29+1340)>>>2] = r3; + r3 = 6 << 16; + r3 = r3 + 13792; + page[(r29+1264)>>>2] = r3; r4 = r0 + 2; r18 = r0 + 120; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x4656c; - run_46400(); return; - case 0x46708: + pc=0x54f6c; + run_54800(); return; + case 0x55108: r2 = r17 & 8; - writePages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff] = r7; - writePages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff] = r3; + page[(r29+1208)>>>2] = r7; + page[(r29+1336)>>>2] = r3; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x47668; - run_47600(); return; + pc=0x56068; + run_56000(); return; } - r4 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; + r4= page[(r29+1340)>>>2]; r3 = r4 + 7; - case 0x4672c: + case 0x5512c: r2 = r0 + -8; r2 = r3 & r2; r3 = r2 + 8; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; - f0 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - f1 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - writePages[(r29+1284)>>>12][((r29+1284)>>>2)&0x3ff] = r8; - writePages[(r29+1252)>>>12][((r29+1252)>>>2)&0x3ff] = f0; - f12 = readPages[(r29+1252)>>>12][((r29+1252)>>>2)&0x3ff]; - writePages[(r29+1248)>>>12][((r29+1248)>>>2)&0x3ff] = f1; - f13 = readPages[(r29+1248)>>>12][((r29+1248)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x46764; - pc=0x37a00; - run_37a00(); return; - case 0x46764: + page[(r29+1340)>>>2] = r3; + f0= page[(r2+4)>>>2]; + f1= page[(r2+0)>>>2]; + page[(r29+1284)>>>2] = r8; + page[(r29+1252)>>>2] = f0; + f12= page[(r29+1252)>>>2]; + page[(r29+1248)>>>2] = f1; + f13= page[(r29+1248)>>>2]; + r31=0x55164; + pc=0x48600; + run_48000(); return; + case 0x55164: r3 = r0 + 1; - r8 = readPages[(r29+1284)>>>12][((r29+1284)>>>2)&0x3ff]; + r8= page[(r29+1284)>>>2]; if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x47450; - run_47400(); return; + pc=0x55e50; + run_55800(); return; } f0 = r0; - f2 = readPages[(r29+1252)>>>12][((r29+1252)>>>2)&0x3ff]; + f2= page[(r29+1252)>>>2]; f1 = r0; - f3 = readPages[(r29+1248)>>>12][((r29+1248)>>>2)&0x3ff]; + f3= page[(r29+1248)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x47b44; - run_47a00(); return; + pc=0x56544; + run_56000(); return; } addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - case 0x4679c: + case 0x5519c: r2 = r18 < 72 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x478c8; - run_47800(); return; + pc=0x562c8; + run_56000(); return; } - r16 = 7 << 16; - r16 = r16 + 212; - case 0x467b0: + r16 = 6 << 16; + r16 = r16 + 13756; + case 0x551b0: r2 = r0 + -129; r17 = r17 & r2; r4 = r0 + 3; r2 = r0 + 3; - writePages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff] = r2; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r4; + page[(r29+1212)>>>2] = r2; + page[(r29+1216)>>>2] = r4; r30 = r0 + r0; - writePages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x46094; - run_46000(); return; - case 0x467d8: + page[(r29+1232)>>>2] = r0; + pc=0x54a94; + run_54800(); return; + case 0x551d8: r17 = r17 | 8; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x45de0; - run_45c00(); return; - case 0x467e8: - r2 = 7 << 16; - r2 = r2 + 228; - writePages[(r29+1264)>>>12][((r29+1264)>>>2)&0x3ff] = r2; + pc=0x547e0; + run_54000(); return; + case 0x551e8: + r2 = 6 << 16; + r2 = r2 + 13772; + page[(r29+1264)>>>2] = r2; r2 = r17 & 16; - writePages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff] = r7; - writePages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff] = r3; - case 0x46800: - pc=0x46800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_46800() throws ExecutionException { /* 0x46800 - 0x46a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x46800: + page[(r29+1208)>>>2] = r7; + page[(r29+1336)>>>2] = r3; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x46904; + pc=0x55304; continue; } - case 0x4680c: - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + case 0x5520c: + r3= page[(r29+1340)>>>2]; + r2= page[(r3+0)>>>2]; r3 = r3 + 4; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; - case 0x46820: + page[(r29+1340)>>>2] = r3; + case 0x55220: r3 = r17 & 1; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x46fc4; - run_46e00(); return; + pc=0x559c4; + run_55800(); return; } if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x46fc4; - run_46e00(); return; + pc=0x559c4; + run_55800(); return; } r3 = r0 + 48; addr=r29+1204; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; addr=r29+1205; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r17 = r17 | 2; r4 = r0 + 2; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x4656c; - run_46400(); return; - case 0x46858: - writePages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; - writePages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff] = r7; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + pc=0x54f6c; + run_54800(); return; + case 0x55258: + page[(r29+1336)>>>2] = r3; + r3= page[(r29+1340)>>>2]; + page[(r29+1208)>>>2] = r7; + r2= page[(r3+0)>>>2]; r3 = r3 + 4; addr=r29+1064; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; - case 0x46878: + page[(addr)>>>2] = tmp; + page[(r29+1340)>>>2] = r3; + case 0x55278: r4 = r0 + 1; r5 = r0 + 1; r3 = r0 + r0; - writePages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff] = r4; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r5; + page[(r29+1212)>>>2] = r4; + page[(r29+1216)>>>2] = r5; r30 = r0 + r0; - writePages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff] = r0; + page[(r29+1232)>>>2] = r0; r16 = r29 + 1064; - /* Next insn is delay slot */ - pc=0x460ac; - run_46000(); return; - case 0x468a0: + pc=0x54aac; + run_54800(); return; + case 0x552a0: r17 = r17 | 16; r2 = r17 & 16; - writePages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff] = r7; - writePages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff] = r3; + page[(r29+1208)>>>2] = r7; + page[(r29+1336)>>>2] = r3; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x46668; - run_46600(); return; - } - case 0x468bc: - r2 = r17 & 64; - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x4769c; - run_47600(); return; - } - addr=r3+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ - r2 = tmp; - r3 = r3 + 4; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x4667c; - run_46600(); return; - case 0x468e0: - writePages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff] = r3; - r3 = 7 << 16; - r3 = r3 + 248; - r2 = r17 & 16; - writePages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff] = r7; - addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+1264)>>>12][((r29+1264)>>>2)&0x3ff] = r3; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x4680c; + pc=0x55068; continue; } - case 0x46904: + case 0x552bc: r2 = r17 & 64; - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; + r3= page[(r29+1340)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x47654; - run_47600(); return; + pc=0x5609c; + run_56000(); return; } addr=r3+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + if((tmp&0x8000)!=0) tmp |= 0xffff0000; + r2 = tmp; + r3 = r3 + 4; + page[(r29+1340)>>>2] = r3; + pc=0x5507c; + continue; + case 0x552e0: + page[(r29+1336)>>>2] = r3; + r3 = 6 << 16; + r3 = r3 + 13792; + r2 = r17 & 16; + page[(r29+1208)>>>2] = r7; + addr=r29+1206; + tmp= page[(addr)>>>2]; + tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); + page[(addr)>>>2] = tmp; + page[(r29+1264)>>>2] = r3; + if(r2 != r0) { + pc=0x5520c; + continue; + } + case 0x55304: + r2 = r17 & 64; + r3= page[(r29+1340)>>>2]; + if(r2 == r0) { + pc=0x56054; + run_56000(); return; + } + addr=r3+2; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r3 = r3 + 4; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x46820; + page[(r29+1340)>>>2] = r3; + pc=0x55220; continue; - case 0x46928: + case 0x55328: r2 = r17 & 16; - writePages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff] = r3; + page[(r29+1336)>>>2] = r3; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x46a34; - run_46a00(); return; + pc=0x55434; + continue; } r17 = r17 & 64; if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x46a34; - run_46a00(); return; + pc=0x55434; + continue; } - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = readPages[(r29+1220)>>>12][((r29+1220)>>>2)&0x3ff]; + r3= page[(r29+1340)>>>2]; + r2= page[(r3+0)>>>2]; + r3= page[(r29+1220)>>>2]; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r3= page[(r29+1340)>>>2]; r3 = r3 + 4; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x45d0c; - run_45c00(); return; - case 0x46978: + page[(r29+1340)>>>2] = r3; + pc=0x5470c; + run_54000(); return; + case 0x55378: r2 = r17 & 16; - writePages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff] = r7; - writePages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff] = r3; + page[(r29+1208)>>>2] = r7; + page[(r29+1336)>>>2] = r3; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x46550; - run_46400(); return; + pc=0x54f50; + run_54800(); return; } - case 0x4698c: + case 0x5538c: r2 = r17 & 64; - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; + r3= page[(r29+1340)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x4767c; - run_47600(); return; + pc=0x5607c; + run_56000(); return; } addr=r3+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r3 = r3 + 4; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; + page[(r29+1340)>>>2] = r3; r4 = r0 + r0; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x4656c; - run_46400(); return; - case 0x469bc: + pc=0x54f6c; + run_54800(); return; + case 0x553bc: r2 = r17 & 16; - writePages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff] = r7; - writePages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff] = r3; + page[(r29+1208)>>>2] = r7; + page[(r29+1336)>>>2] = r3; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x465f4; - run_46400(); return; + pc=0x54ff4; + run_54800(); return; } - case 0x469d0: + case 0x553d0: r2 = r17 & 64; - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; + r3= page[(r29+1340)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x476b0; - run_47600(); return; + pc=0x560b0; + run_56000(); return; } addr=r3+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r3 = r3 + 4; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; + page[(r29+1340)>>>2] = r3; r4 = r0 + 1; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x4656c; - run_46400(); return; - case 0x46a00: - pc=0x46a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_46a00() throws ExecutionException { /* 0x46a00 - 0x46c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x46a00: - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r2; + pc=0x54f6c; + run_54800(); return; + case 0x55400: + page[(r29+1340)>>>2] = r2; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x45de0; - run_45c00(); return; - case 0x46a10: - writePages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff] = r7; - writePages[(r29+1336)>>>12][((r29+1336)>>>2)&0x3ff] = r3; + pc=0x547e0; + run_54000(); return; + case 0x55410: + page[(r29+1208)>>>2] = r7; + page[(r29+1336)>>>2] = r3; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x45fa8; - run_45e00(); return; + pc=0x549a8; + run_54800(); return; } addr=r29+1064; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x46878; - run_46800(); return; - case 0x46a34: - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = readPages[(r29+1220)>>>12][((r29+1220)>>>2)&0x3ff]; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + pc=0x55278; + continue; + case 0x55434: + r3= page[(r29+1340)>>>2]; + r2= page[(r3+0)>>>2]; + r3= page[(r29+1220)>>>2]; + page[(r2+0)>>>2] = r3; + r3= page[(r29+1340)>>>2]; r3 = r3 + 4; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x45d0c; - run_45c00(); return; - case 0x46a64: - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x461b8; - run_46000(); return; - case 0x46a70: - r4 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; + page[(r29+1340)>>>2] = r3; + pc=0x5470c; + run_54000(); return; + case 0x55464: + r2= page[(r29+1176)>>>2]; + pc=0x54bb8; + run_54800(); return; + case 0x55470: + r4= page[(r29+1240)>>>2]; r3 = r0 + 1; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r3; + page[(r8+4)>>>2] = r3; r2 = r2 + 1; r3 = r4 < 2 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r16; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r16; + page[(r29+1176)>>>2] = r2; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x46eb0; - run_46e00(); return; + pc=0x558b0; + run_55800(); return; } - case 0x46a94: - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + case 0x55494: + r3= page[(r29+1172)>>>2]; r3 = r3 + 1; r4 = r3 < 8 ? 1 : 0; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1172)>>>2] = r3; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x4738c; - run_47200(); return; + pc=0x55d8c; + run_55800(); return; } r8 = r8 + 8; - case 0x46ab4: - r4 = readPages[(r29+1256)>>>12][((r29+1256)>>>2)&0x3ff]; + case 0x554b4: + r4= page[(r29+1256)>>>2]; r3 = r3 + 1; - r5 = readPages[(r29+1236)>>>12][((r29+1236)>>>2)&0x3ff]; + r5= page[(r29+1236)>>>2]; r2 = r2 + r4; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r4; + page[(r8+4)>>>2] = r4; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r5; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r5; + page[(r29+1176)>>>2] = r2; + page[(r29+1172)>>>2] = r3; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x473bc; - run_47200(); return; + pc=0x55dbc; + run_55800(); return; } r8 = r8 + 8; - case 0x46ae4: + case 0x554e4: f0 = r0; - f2 = readPages[(r29+1252)>>>12][((r29+1252)>>>2)&0x3ff]; + f2= page[(r29+1252)>>>2]; f1 = r0; - f3 = readPages[(r29+1248)>>>12][((r29+1248)>>>2)&0x3ff]; + f3= page[(r29+1248)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x47114; - run_47000(); return; + pc=0x55b14; + run_55800(); return; } - r5 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; + r5= page[(r29+1240)>>>2]; r16 = r16 + 1; r4 = r5 + -1; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r16; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r4; + page[(r8+0)>>>2] = r16; + page[(r8+4)>>>2] = r4; r2 = r2 + r4; - case 0x46b20: + case 0x55520: r3 = r3 + 1; r4 = r3 < 8 ? 1 : 0; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1176)>>>2] = r2; + page[(r29+1172)>>>2] = r3; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x46ed8; - run_46e00(); return; + pc=0x558d8; + run_55800(); return; } - case 0x46b38: + case 0x55538: r8 = r8 + 8; - case 0x46b3c: - r5 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; + case 0x5553c: + r5= page[(r29+1260)>>>2]; r4 = r29 + 1188; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r4; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r5; + page[(r8+0)>>>2] = r4; + page[(r8+4)>>>2] = r5; r2 = r5 + r2; - case 0x46b50: + case 0x55550: r3 = r3 + 1; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1172)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r29+1176)>>>2] = r2; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x46350; - run_46200(); return; + pc=0x54d50; + run_54800(); return; } - case 0x46b68: + case 0x55568: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x46b7c; - pc=0x63400; - run_63400(); return; - case 0x46b7c: + r31=0x5557c; + pc=0x5d200; + run_5d000(); return; + case 0x5557c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x46354; - run_46200(); return; - case 0x46b94: + pc=0x54d54; + run_54800(); return; + case 0x55594: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x46ba8; - pc=0x63400; - run_63400(); return; - case 0x46ba8: + r31=0x555a8; + pc=0x5d200; + run_5d000(); return; + case 0x555a8: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r0; + page[(r29+1172)>>>2] = r0; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x4648c; - run_46400(); return; - case 0x46bc0: + pc=0x54e8c; + run_54800(); return; + case 0x555c0: r5 = r0 + 1; if(r4 == r5) { - /* Next insn is delay slot */ - pc=0x46f8c; - run_46e00(); return; + pc=0x5598c; + run_55800(); return; } r6 = r29 + 1104; r5 = r0 + 2; r16 = r6 + r0; if(r4 != r5) { - /* Next insn is delay slot */ - pc=0x46c14; - run_46c00(); return; + pc=0x55614; + continue; } - r5 = readPages[(r29+1264)>>>12][((r29+1264)>>>2)&0x3ff]; - case 0x46be4: + r5= page[(r29+1264)>>>2]; + case 0x555e4: r4 = r2 & 15; r4 = r5 + r4; addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r4 = tmp; r16 = r16 + -1; r2 = r2 >>> 4; addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x46be4; + pc=0x555e4; continue; } - case 0x46c00: - pc=0x46c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_46c00() throws ExecutionException { /* 0x46c00 - 0x46e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x46c00: - case 0x46c04: + case 0x55604: r6 = r6 - r16; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - pc=0x465b4; - run_46400(); return; - case 0x46c14: + page[(r29+1216)>>>2] = r6; + pc=0x54fb4; + run_54800(); return; + case 0x55614: r4 = r2 & 7; r16 = r16 + -1; r4 = r4 + 48; r2 = r2 >>> 3; addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x46c14; + pc=0x55614; continue; } r2 = r17 & 1; r5 = r16 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x46c04; + pc=0x55604; continue; } r2 = r0 + 48; if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x46c04; + pc=0x55604; continue; } r16 = r16 + -1; r6 = r6 - r16; addr=r5+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - pc=0x465b4; - run_46400(); return; - case 0x46c64: + page[(addr)>>>2] = tmp; + page[(r29+1216)>>>2] = r6; + pc=0x54fb4; + run_54800(); return; + case 0x55664: r18 = r18 < 102 ? 1 : 0; if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x46a70; - run_46a00(); return; + pc=0x55470; + continue; } f0 = r0; - f2 = readPages[(r29+1252)>>>12][((r29+1252)>>>2)&0x3ff]; + f2= page[(r29+1252)>>>2]; f1 = r0; - f3 = readPages[(r29+1248)>>>12][((r29+1248)>>>2)&0x3ff]; + f3= page[(r29+1248)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x46fd8; - run_46e00(); return; + pc=0x559d8; + run_55800(); return; } - r3 = 7 << 16; - r3 = r3 + 276; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r3; + r3 = 6 << 16; + r3 = r3 + 6368; + page[(r8+0)>>>2] = r3; r3 = r0 + 1; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + page[(r8+4)>>>2] = r3; + r3= page[(r29+1172)>>>2]; r2 = r2 + 1; r3 = r3 + 1; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1172)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r29+1176)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x47720; - run_47600(); return; + pc=0x56120; + run_56000(); return; } r8 = r8 + 8; - case 0x46ccc: - r3 = readPages[(r29+1200)>>>12][((r29+1200)>>>2)&0x3ff]; - r4 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; + case 0x556cc: + r3= page[(r29+1200)>>>2]; + r4= page[(r29+1240)>>>2]; r3 = r3 < r4 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x46cf0; + pc=0x556f0; continue; } r3 = r17 & 1; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x46354; - run_46200(); return; + pc=0x54d54; + run_54800(); return; } - case 0x46cf0: - r3 = readPages[(r29+1236)>>>12][((r29+1236)>>>2)&0x3ff]; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+1256)>>>12][((r29+1256)>>>2)&0x3ff]; + case 0x556f0: + r3= page[(r29+1236)>>>2]; + page[(r8+0)>>>2] = r3; + r3= page[(r29+1256)>>>2]; r2 = r2 + r3; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r8+4)>>>2] = r3; + r3= page[(r29+1172)>>>2]; + page[(r29+1176)>>>2] = r2; r3 = r3 + 1; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1172)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x47918; - run_47800(); return; + pc=0x56318; + run_56000(); return; } r8 = r8 + 8; - case 0x46d2c: - r3 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; + case 0x5572c: + r3= page[(r29+1240)>>>2]; r16 = r3 + -1; if(r16 <= 0) { - /* Next insn is delay slot */ - pc=0x46354; - run_46200(); return; + pc=0x54d54; + run_54800(); return; } r3 = r16 < 17 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x471b0; - run_47000(); return; + pc=0x55bb0; + run_55800(); return; } - r5 = 7 << 16; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r23 = r5 + 1024; + r5 = 6 << 16; + r3= page[(r29+1172)>>>2]; + r23 = r5 + 14564; r18 = r0 + 16; - /* Next insn is delay slot */ - pc=0x46d78; + pc=0x55778; continue; - case 0x46d64: + case 0x55764: r8 = r8 + 8; - case 0x46d68: + case 0x55768: r16 = r16 + -16; r4 = r16 < 17 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x471bc; - run_47000(); return; + pc=0x55bbc; + run_55800(); return; } - case 0x46d78: + case 0x55778: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r18; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r18; + page[(r29+1176)>>>2] = r2; + page[(r29+1172)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x46d64; + pc=0x55764; continue; } r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x46db0; - pc=0x63400; - run_63400(); return; - case 0x46db0: + r31=0x557b0; + pc=0x5d200; + run_5d000(); return; + case 0x557b0: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x46d68; + pc=0x55768; continue; - case 0x46dcc: - r3 = readPages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff]; - r4 = readPages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff]; + case 0x557cc: + r3= page[(r29+1208)>>>2]; + r4= page[(r29+1212)>>>2]; r20 = r3 - r4; if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x46248; - run_46200(); return; + pc=0x54c48; + run_54800(); return; } r3 = r20 < 17 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x47bb8; - run_47a00(); return; + pc=0x565b8; + run_56000(); return; } - r4 = 7 << 16; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r23 = r4 + 1024; + r4 = 6 << 16; + r3= page[(r29+1172)>>>2]; + r23 = r4 + 14564; r7 = r0 + 16; - case 0x46e00: - pc=0x46e00; + case 0x55800: + pc=0x55800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_46e00() throws ExecutionException { /* 0x46e00 - 0x47000 */ + private final void run_55800() throws ExecutionException { /* 0x55800 - 0x56000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x46e00: - /* Next insn is delay slot */ - pc=0x46e1c; + case 0x55800: + pc=0x5581c; continue; - case 0x46e08: + case 0x55808: r20 = r20 + -16; r4 = r20 < 17 ? 1 : 0; r8 = r8 + 8; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x46e80; + pc=0x55880; continue; } - case 0x46e1c: + case 0x5581c: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r7; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r7; + page[(r29+1176)>>>2] = r2; + page[(r29+1172)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x46e08; + pc=0x55808; continue; } r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - writePages[(r29+1280)>>>12][((r29+1280)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x46e58; - pc=0x63400; - run_63400(); return; - case 0x46e58: - r7 = readPages[(r29+1280)>>>12][((r29+1280)>>>2)&0x3ff]; + page[(r29+1280)>>>2] = r7; + r31=0x55858; + pc=0x5d200; + run_5d000(); return; + case 0x55858: + r7= page[(r29+1280)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } r20 = r20 + -16; r4 = r20 < 17 ? 1 : 0; - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; r8 = r29 + 40; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x46e1c; + pc=0x5581c; continue; } - case 0x46e80: + case 0x55880: r3 = r3 + 1; r2 = r2 + r20; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1172)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r20; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r20; + page[(r29+1176)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x47408; - run_47400(); return; + pc=0x55e08; + continue; } r8 = r8 + 8; - /* Next insn is delay slot */ - pc=0x46248; - run_46200(); return; - case 0x46eb0: + pc=0x54c48; + run_54800(); return; + case 0x558b0: r3 = r17 & 1; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x46a94; - run_46a00(); return; + pc=0x55494; + run_55000(); return; } - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r3= page[(r29+1172)>>>2]; r3 = r3 + 1; r4 = r3 < 8 ? 1 : 0; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1172)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x46b38; - run_46a00(); return; + pc=0x55538; + run_55000(); return; } - case 0x46ed8: + case 0x558d8: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x46eec; - pc=0x63400; - run_63400(); return; - case 0x46eec: + r31=0x558ec; + pc=0x5d200; + run_5d000(); return; + case 0x558ec: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x46b3c; - run_46a00(); return; - case 0x46f08: + pc=0x5553c; + run_55000(); return; + case 0x55908: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x46f1c; - pc=0x63400; - run_63400(); return; - case 0x46f1c: + r31=0x5591c; + pc=0x5d200; + run_5d000(); return; + case 0x5591c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x46318; - run_46200(); return; - case 0x46f34: + pc=0x54d18; + run_54800(); return; + case 0x55934: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x46f48; - pc=0x63400; - run_63400(); return; - case 0x46f48: + r31=0x55948; + pc=0x5d200; + run_5d000(); return; + case 0x55948: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x46238; - run_46200(); return; - case 0x46f60: + pc=0x54c38; + run_54800(); return; + case 0x55960: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x46f74; - pc=0x63400; - run_63400(); return; - case 0x46f74: + r31=0x55974; + pc=0x5d200; + run_5d000(); return; + case 0x55974: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x461f4; - run_46000(); return; - case 0x46f8c: + pc=0x54bf4; + run_54800(); return; + case 0x5598c: r4 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x471d0; - run_47000(); return; + pc=0x55bd0; + continue; } r2 = r2 + 48; r4 = r0 + 1; addr=r29+1103; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r4; + page[(addr)>>>2] = tmp; + page[(r29+1216)>>>2] = r4; r16 = r29 + 1103; - /* Next insn is delay slot */ - pc=0x465b4; - run_46400(); return; - case 0x46fb4: - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r0; + pc=0x54fb4; + run_54800(); return; + case 0x559b4: + page[(r29+1216)>>>2] = r0; r16 = r29 + 1104; - /* Next insn is delay slot */ - pc=0x465b4; - run_46400(); return; - case 0x46fc4: + pc=0x54fb4; + run_54800(); return; + case 0x559c4: r4 = r0 + 2; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x4656c; - run_46400(); return; - case 0x46fd8: - r3 = readPages[(r29+1200)>>>12][((r29+1200)>>>2)&0x3ff]; + pc=0x54f6c; + run_54800(); return; + case 0x559d8: + r3= page[(r29+1200)>>>2]; if(r3 <= 0) { - /* Next insn is delay slot */ - pc=0x4774c; - run_47600(); return; + pc=0x5614c; + run_56000(); return; } - r3 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; - r4 = readPages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff]; + r3= page[(r29+1240)>>>2]; + r4= page[(r29+1232)>>>2]; r18 = r16 + r3; r20 = r18 - r16; r3 = r4 < r20 ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x47008; - run_47000(); return; - } - case 0x47000: - pc=0x47000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_47000() throws ExecutionException { /* 0x47000 - 0x47200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x47000: - r20 = r4 + r0; - case 0x47008: - if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x4703c; + pc=0x55a08; continue; } - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r20 = r4 + r0; + case 0x55a08: + if(r20 <= 0) { + pc=0x55a3c; + continue; + } + r3= page[(r29+1172)>>>2]; r2 = r2 + r20; r3 = r3 + 1; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1172)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r16; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r20; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r16; + page[(r8+4)>>>2] = r20; + page[(r29+1176)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x479cc; - run_47800(); return; + pc=0x563cc; + run_56000(); return; } r8 = r8 + 8; - case 0x4703c: + case 0x55a3c: if(r20 < 0) { - /* Next insn is delay slot */ - pc=0x479c0; - run_47800(); return; + pc=0x563c0; + run_56000(); return; } - case 0x47044: - r3 = readPages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff]; + case 0x55a44: + r3= page[(r29+1232)>>>2]; r20 = r3 - r20; if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x47238; - run_47200(); return; + pc=0x55c38; + continue; } r3 = r20 < 17 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x476d0; - run_47600(); return; + pc=0x560d0; + run_56000(); return; } - r5 = 7 << 16; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r23 = r5 + 1024; + r5 = 6 << 16; + r3= page[(r29+1172)>>>2]; + r23 = r5 + 14564; r30 = r0 + 16; - /* Next insn is delay slot */ - pc=0x47090; + pc=0x55a90; continue; - case 0x4707c: + case 0x55a7c: r8 = r8 + 8; - case 0x47080: + case 0x55a80: r20 = r20 + -16; r4 = r20 < 17 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x476dc; - run_47600(); return; + pc=0x560dc; + run_56000(); return; } - case 0x47090: + case 0x55a90: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r30; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r30; + page[(r29+1176)>>>2] = r2; + page[(r29+1172)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x4707c; + pc=0x55a7c; continue; } r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x470c8; - pc=0x63400; - run_63400(); return; - case 0x470c8: + r31=0x55ac8; + pc=0x5d200; + run_5d000(); return; + case 0x55ac8: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x47080; + pc=0x55a80; continue; - case 0x470e4: + case 0x55ae4: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x470f8; - pc=0x63400; - run_63400(); return; - case 0x470f8: + r31=0x55af8; + pc=0x5d200; + run_5d000(); return; + case 0x55af8: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x461b8; - run_46000(); return; - case 0x47114: - r4 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; + pc=0x54bb8; + run_54800(); return; + case 0x55b14: + r4= page[(r29+1240)>>>2]; r16 = r4 + -1; if(r16 <= 0) { - /* Next insn is delay slot */ - pc=0x46b3c; - run_46a00(); return; + pc=0x5553c; + run_55000(); return; } r4 = r16 < 17 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x473ec; - run_47200(); return; + pc=0x55dec; + continue; } - r4 = 7 << 16; - r23 = r4 + 1024; + r4 = 6 << 16; + r23 = r4 + 14564; r18 = r0 + 16; - /* Next insn is delay slot */ - pc=0x4715c; + pc=0x55b5c; continue; - case 0x47148: + case 0x55b48: r8 = r8 + 8; - case 0x4714c: + case 0x55b4c: r16 = r16 + -16; r4 = r16 < 17 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x473f4; - run_47200(); return; + pc=0x55df4; + continue; } - case 0x4715c: + case 0x55b5c: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r18; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r18; + page[(r29+1176)>>>2] = r2; + page[(r29+1172)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x47148; + pc=0x55b48; continue; } r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x47194; - pc=0x63400; - run_63400(); return; - case 0x47194: + r31=0x55b94; + pc=0x5d200; + run_5d000(); return; + case 0x55b94: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x4714c; + pc=0x55b4c; continue; - case 0x471b0: - r4 = 7 << 16; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r23 = r4 + 1024; - case 0x471bc: - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r16; + case 0x55bb0: + r4 = 6 << 16; + r3= page[(r29+1172)>>>2]; + r23 = r4 + 14564; + case 0x55bbc: + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r16; r2 = r2 + r16; - /* Next insn is delay slot */ - pc=0x46b50; - run_46a00(); return; - case 0x471d0: + pc=0x55550; + run_55000(); return; + case 0x55bd0: r6 = r29 + 1104; r16 = r6 + r0; r4 = r0 + 10; - case 0x471dc: + case 0x55bdc: if(r4 != r0) { - /* Next insn is delay slot */ if(r4!=0) { hi = (int)((r2 & 0xffffffffL) % (r4 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r4 & 0xffffffffL)); } - pc=0x471e8; + pc=0x55be8; continue; } if(r4!=0) { hi = (int)((r2 & 0xffffffffL) % (r4 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r4 & 0xffffffffL)); } throw new ExecutionException("Break"); - case 0x471e8: + case 0x55be8: r16 = r16 + -1; r5 = hi; r5 = r5 + 48; addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = lo; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x471dc; + pc=0x55bdc; continue; } - case 0x47200: - pc=0x47200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_47200() throws ExecutionException { /* 0x47200 - 0x47400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x47200: r6 = r6 - r16; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - pc=0x465b4; - run_46400(); return; - case 0x47214: + page[(r29+1216)>>>2] = r6; + pc=0x54fb4; + run_54800(); return; + case 0x55c14: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x47228; - pc=0x63400; - run_63400(); return; - case 0x47228: + r31=0x55c28; + pc=0x5d200; + run_5d000(); return; + case 0x55c28: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; r8 = r29 + 40; - case 0x47238: - r3 = readPages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff]; - r5 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; + case 0x55c38: + r3= page[(r29+1232)>>>2]; + r5= page[(r29+1240)>>>2]; r16 = r16 + r3; - r3 = readPages[(r29+1200)>>>12][((r29+1200)>>>2)&0x3ff]; + r3= page[(r29+1200)>>>2]; r4 = r3 < r5 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x47264; + pc=0x55c64; continue; } r4 = r17 & 1; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x47298; + pc=0x55c98; continue; } - case 0x47264: - r4 = readPages[(r29+1236)>>>12][((r29+1236)>>>2)&0x3ff]; - r5 = readPages[(r29+1256)>>>12][((r29+1256)>>>2)&0x3ff]; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r4; - r4 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + case 0x55c64: + r4= page[(r29+1236)>>>2]; + r5= page[(r29+1256)>>>2]; + page[(r8+0)>>>2] = r4; + r4= page[(r29+1172)>>>2]; r2 = r2 + r5; r4 = r4 + 1; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r4; + page[(r29+1172)>>>2] = r4; r4 = r4 < 8 ? 1 : 0; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r5; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r8+4)>>>2] = r5; + page[(r29+1176)>>>2] = r2; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x479f8; - run_47800(); return; + pc=0x563f8; + run_56000(); return; } r8 = r8 + 8; - case 0x47298: - r4 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; + case 0x55c98: + r4= page[(r29+1240)>>>2]; r18 = r18 - r16; r3 = r4 - r3; r4 = r18 < r3 ? 1 : 0; r20 = r3 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x472b8; + pc=0x55cb8; continue; } r20 = r18 + r0; - case 0x472b8: + case 0x55cb8: if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x472ec; + pc=0x55cec; continue; } - r4 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r4= page[(r29+1172)>>>2]; r2 = r2 + r20; r4 = r4 + 1; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r4; + page[(r29+1172)>>>2] = r4; r4 = r4 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r16; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r20; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r16; + page[(r8+4)>>>2] = r20; + page[(r29+1176)>>>2] = r2; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x47a6c; - run_47a00(); return; + pc=0x5646c; + run_56000(); return; } r8 = r8 + 8; - case 0x472ec: + case 0x55cec: if(r20 < 0) { - /* Next insn is delay slot */ - pc=0x47a60; - run_47a00(); return; + pc=0x56460; + run_56000(); return; } - case 0x472f4: + case 0x55cf4: r16 = r3 - r20; if(r16 <= 0) { - /* Next insn is delay slot */ - pc=0x46354; - run_46200(); return; + pc=0x54d54; + run_54800(); return; } r3 = r16 < 17 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x471b0; - run_47000(); return; + pc=0x55bb0; + continue; } - r5 = 7 << 16; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r23 = r5 + 1024; + r5 = 6 << 16; + r3= page[(r29+1172)>>>2]; + r23 = r5 + 14564; r18 = r0 + 16; - /* Next insn is delay slot */ - pc=0x47338; + pc=0x55d38; continue; - case 0x47324: + case 0x55d24: r8 = r8 + 8; - case 0x47328: + case 0x55d28: r16 = r16 + -16; r4 = r16 < 17 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x471bc; - run_47000(); return; + pc=0x55bbc; + continue; } - case 0x47338: + case 0x55d38: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r18; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r18; + page[(r29+1176)>>>2] = r2; + page[(r29+1172)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x47324; + pc=0x55d24; continue; } r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x47370; - pc=0x63400; - run_63400(); return; - case 0x47370: + r31=0x55d70; + pc=0x5d200; + run_5d000(); return; + case 0x55d70: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x47328; + pc=0x55d28; continue; - case 0x4738c: + case 0x55d8c: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x473a0; - pc=0x63400; - run_63400(); return; - case 0x473a0: + r31=0x55da0; + pc=0x5d200; + run_5d000(); return; + case 0x55da0: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x46ab4; - run_46a00(); return; - case 0x473bc: + pc=0x554b4; + run_55000(); return; + case 0x55dbc: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x473d0; - pc=0x63400; - run_63400(); return; - case 0x473d0: + r31=0x55dd0; + pc=0x5d200; + run_5d000(); return; + case 0x55dd0: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x46ae4; - run_46a00(); return; - case 0x473ec: - r5 = 7 << 16; - r23 = r5 + 1024; - case 0x473f4: - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r16; + pc=0x554e4; + run_55000(); return; + case 0x55dec: + r5 = 6 << 16; + r23 = r5 + 14564; + case 0x55df4: + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r16; r2 = r2 + r16; - case 0x47400: - pc=0x47400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_47400() throws ExecutionException { /* 0x47400 - 0x47600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x47400: - /* Next insn is delay slot */ - pc=0x46b20; - run_46a00(); return; - case 0x47408: + pc=0x55520; + run_55000(); return; + case 0x55e08: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x4741c; - pc=0x63400; - run_63400(); return; - case 0x4741c: + r31=0x55e1c; + pc=0x5d200; + run_5d000(); return; + case 0x55e1c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x46248; - run_46200(); return; - case 0x47434: + pc=0x54c48; + run_54800(); return; + case 0x55e34: r3 = r0 + 45; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r0 - r2; r3 = r0 + 45; r4 = r0 + 1; - /* Next insn is delay slot */ - pc=0x4656c; - run_46400(); return; - case 0x47450: - f12 = readPages[(r29+1252)>>>12][((r29+1252)>>>2)&0x3ff]; - writePages[(r29+1284)>>>12][((r29+1284)>>>2)&0x3ff] = r8; - f13 = readPages[(r29+1248)>>>12][((r29+1248)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x47464; - pc=0x37a00; - run_37a00(); return; - case 0x47464: - r8 = readPages[(r29+1284)>>>12][((r29+1284)>>>2)&0x3ff]; + pc=0x54f6c; + run_54800(); return; + case 0x55e50: + f12= page[(r29+1252)>>>2]; + page[(r29+1284)>>>2] = r8; + f13= page[(r29+1248)>>>2]; + r31=0x55e64; + pc=0x48600; + run_48000(); return; + case 0x55e64: + r8= page[(r29+1284)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x47888; - run_47800(); return; + pc=0x56288; + run_56000(); return; } r9 = r0 + -33; r2 = r0 + -1; r20 = r18 & r9; if(r30 == r2) { - /* Next insn is delay slot */ - pc=0x47df4; - run_47c00(); return; + pc=0x567f4; + run_56000(); return; } r2 = r0 + 71; if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x47d14; - run_47c00(); return; + pc=0x56714; + run_56000(); return; } - case 0x47490: - r2 = readPages[(r29+1248)>>>12][((r29+1248)>>>2)&0x3ff]; + case 0x55e90: + r2= page[(r29+1248)>>>2]; r23 = r17 | 256; if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x47d68; - run_47c00(); return; + pc=0x56768; + run_56000(); return; } - f0 = readPages[(r29+1252)>>>12][((r29+1252)>>>2)&0x3ff]; - writePages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff] = r0; - f1 = readPages[(r29+1248)>>>12][((r29+1248)>>>2)&0x3ff]; - writePages[(r29+1276)>>>12][((r29+1276)>>>2)&0x3ff] = f0; - writePages[(r29+1272)>>>12][((r29+1272)>>>2)&0x3ff] = f1; - case 0x474b8: + f0= page[(r29+1252)>>>2]; + page[(r29+1212)>>>2] = r0; + f1= page[(r29+1248)>>>2]; + page[(r29+1276)>>>2] = f0; + page[(r29+1272)>>>2] = f1; + case 0x55eb8: r2 = r0 + 102; if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x47b68; - run_47a00(); return; + pc=0x56568; + run_56000(); return; } r2 = r0 + 70; if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x47b68; - run_47a00(); return; + pc=0x56568; + run_56000(); return; } r2 = r0 + 69; if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x47d5c; - run_47c00(); return; + pc=0x5675c; + run_56000(); return; } r5 = r30 + r0; - case 0x474e0: + case 0x55ee0: r2 = r0 + 2; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; + page[(r29+16)>>>2] = r2; r2 = r29 + 1200; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; + page[(r29+24)>>>2] = r2; r2 = r29 + 1196; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r2; - r7 = readPages[(r29+1276)>>>12][((r29+1276)>>>2)&0x3ff]; + page[(r29+28)>>>2] = r2; + r7= page[(r29+1276)>>>2]; r2 = r29 + 1180; - r6 = readPages[(r29+1272)>>>12][((r29+1272)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r5; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; + r6= page[(r29+1272)>>>2]; + page[(r29+20)>>>2] = r5; + page[(r29+32)>>>2] = r2; r4 = r21 + r0; - writePages[(r29+1280)>>>12][((r29+1280)>>>2)&0x3ff] = r5; - writePages[(r29+1284)>>>12][((r29+1284)>>>2)&0x3ff] = r8; - /* Next insn is delay slot */ - r31=0x47520; - pc=0x57400; - run_57400(); return; - case 0x47520: + page[(r29+1280)>>>2] = r5; + page[(r29+1284)>>>2] = r8; + r31=0x55f20; + pc=0x57e00; + run_57800(); return; + case 0x55f20: r16 = r2 + r0; r2 = r0 + 103; - r5 = readPages[(r29+1280)>>>12][((r29+1280)>>>2)&0x3ff]; - r8 = readPages[(r29+1284)>>>12][((r29+1284)>>>2)&0x3ff]; + r5= page[(r29+1280)>>>2]; + r8= page[(r29+1284)>>>2]; if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x47544; + pc=0x55f44; continue; } r2 = r0 + 71; if(r18 != r2) { - /* Next insn is delay slot */ - pc=0x47550; + pc=0x55f50; continue; } - case 0x47544: + case 0x55f44: r2 = r17 & 1; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x47e00; - run_47e00(); return; + pc=0x56800; + run_56800(); return; } - case 0x47550: + case 0x55f50: r2 = r0 + 70; r4 = r16 + r5; if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x47bd8; - run_47a00(); return; + pc=0x565d8; + run_56000(); return; } - case 0x47560: + case 0x55f60: f0 = r0; - f2 = readPages[(r29+1276)>>>12][((r29+1276)>>>2)&0x3ff]; + f2= page[(r29+1276)>>>2]; f1 = r0; - f3 = readPages[(r29+1272)>>>12][((r29+1272)>>>2)&0x3ff]; + f3= page[(r29+1272)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x47bcc; - run_47a00(); return; + pc=0x565cc; + run_56000(); return; } - r2 = readPages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff]; + r2= page[(r29+1180)>>>2]; r3 = ((r2 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x475bc; + pc=0x55fbc; continue; } r5 = r0 + 48; - case 0x4759c: + case 0x55f9c: r3 = r2 + 1; - writePages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff] = r3; + page[(r29+1180)>>>2] = r3; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r2= page[(r29+1180)>>>2]; r3 = ((r2 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x4759c; + pc=0x55f9c; continue; } - case 0x475bc: + case 0x55fbc: r2 = r2 - r16; - writePages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff] = r2; + page[(r29+1240)>>>2] = r2; r2 = r0 + 71; if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x47b18; - run_47a00(); return; + pc=0x56518; + run_56000(); return; } r2 = r18 < 102 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x47fa0; - run_47e00(); return; + pc=0x569a0; + run_56800(); return; } - r3 = readPages[(r29+1200)>>>12][((r29+1200)>>>2)&0x3ff]; + r3= page[(r29+1200)>>>2]; r2 = r0 + 102; - writePages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff] = r3; + page[(r29+1232)>>>2] = r3; if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x47e0c; - run_47e00(); return; + pc=0x5680c; + run_56800(); return; } - case 0x475f0: - r3 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; - r4 = readPages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff]; + case 0x55ff0: + r3= page[(r29+1240)>>>2]; + r4= page[(r29+1232)>>>2]; r2 = r4 < r3 ? 1 : 0; - case 0x47600: - pc=0x47600; + case 0x56000: + pc=0x56000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_47600() throws ExecutionException { /* 0x47600 - 0x47800 */ + private final void run_56000() throws ExecutionException { /* 0x56000 - 0x56800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x47600: + case 0x56000: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x47d90; - run_47c00(); return; + pc=0x56790; + continue; } r17 = r17 & 1; if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x47dc8; - run_47c00(); return; + pc=0x567c8; + continue; } r2 = r4 + r0; if(r4 < 0) { - /* Next insn is delay slot */ - pc=0x47fbc; - run_47e00(); return; + pc=0x569bc; + run_56800(); return; } - case 0x47620: - r3 = readPages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff]; + case 0x56020: + r3= page[(r29+1232)>>>2]; r18 = r0 + 103; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r3; - case 0x4762c: - r5 = readPages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff]; + page[(r29+1216)>>>2] = r3; + case 0x5602c: + r5= page[(r29+1212)>>>2]; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x47af8; - run_47a00(); return; + pc=0x564f8; + continue; } addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - writePages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff] = r2; + page[(r29+1212)>>>2] = r2; r17 = r23 + r0; r30 = r0 + r0; - /* Next insn is delay slot */ - pc=0x46094; - run_46000(); return; - case 0x47654: - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + pc=0x54a94; + run_54800(); return; + case 0x56054: + r2= page[(r3+0)>>>2]; r3 = r3 + 4; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x46820; - run_46800(); return; - case 0x47668: - r2 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; + page[(r29+1340)>>>2] = r3; + pc=0x55220; + run_55000(); return; + case 0x56068: + r2= page[(r29+1340)>>>2]; r3 = r2 + 7; - /* Next insn is delay slot */ - pc=0x4672c; - run_46600(); return; - case 0x4767c: - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + pc=0x5512c; + run_55000(); return; + case 0x5607c: + r2= page[(r3+0)>>>2]; r3 = r3 + 4; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; + page[(r29+1340)>>>2] = r3; r4 = r0 + r0; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x4656c; - run_46400(); return; - case 0x4769c: - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + pc=0x54f6c; + run_54800(); return; + case 0x5609c: + r2= page[(r3+0)>>>2]; r3 = r3 + 4; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x4667c; - run_46600(); return; - case 0x476b0: - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + page[(r29+1340)>>>2] = r3; + pc=0x5507c; + run_55000(); return; + case 0x560b0: + r2= page[(r3+0)>>>2]; r3 = r3 + 4; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r3; + page[(r29+1340)>>>2] = r3; r4 = r0 + 1; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x4656c; - run_46400(); return; - case 0x476d0: - r4 = 7 << 16; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r23 = r4 + 1024; - case 0x476dc: + pc=0x54f6c; + run_54800(); return; + case 0x560d0: + r4 = 6 << 16; + r3= page[(r29+1172)>>>2]; + r23 = r4 + 14564; + case 0x560dc: r3 = r3 + 1; r2 = r2 + r20; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1172)>>>2] = r3; r3 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r20; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r20; + page[(r29+1176)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x47214; - run_47200(); return; + pc=0x55c14; + run_55800(); return; } r8 = r8 + 8; - /* Next insn is delay slot */ - pc=0x47238; - run_47200(); return; - case 0x4770c: - r4 = 7 << 16; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r23 = r4 + 1024; - /* Next insn is delay slot */ - pc=0x462f0; - run_46200(); return; - case 0x47720: + pc=0x55c38; + run_55800(); return; + case 0x5610c: + r4 = 6 << 16; + r3= page[(r29+1172)>>>2]; + r23 = r4 + 14564; + pc=0x54cf0; + run_54800(); return; + case 0x56120: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x47734; - pc=0x63400; - run_63400(); return; - case 0x47734: + r31=0x56134; + pc=0x5d200; + run_5d000(); return; + case 0x56134: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x46ccc; - run_46c00(); return; - case 0x4774c: - r4 = 7 << 16; - r4 = r4 + 276; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r4; + pc=0x556cc; + run_55000(); return; + case 0x5614c: + r4 = 6 << 16; + r4 = r4 + 6368; + page[(r8+0)>>>2] = r4; r4 = r0 + 1; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r4; - r4 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + page[(r8+4)>>>2] = r4; + r4= page[(r29+1172)>>>2]; r2 = r2 + 1; r4 = r4 + 1; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r4; + page[(r29+1172)>>>2] = r4; r4 = r4 < 8 ? 1 : 0; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r29+1176)>>>2] = r2; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x478e8; - run_47800(); return; + pc=0x562e8; + continue; } r8 = r8 + 8; r18 = r3 + r0; - case 0x47788: + case 0x56188: if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x477ac; + pc=0x561ac; continue; } - r3 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; + r3= page[(r29+1240)>>>2]; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x477ac; + pc=0x561ac; continue; } r3 = r17 & 1; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x46354; - run_46200(); return; + pc=0x54d54; + run_54800(); return; } - case 0x477ac: - r3 = readPages[(r29+1236)>>>12][((r29+1236)>>>2)&0x3ff]; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+1256)>>>12][((r29+1256)>>>2)&0x3ff]; + case 0x561ac: + r3= page[(r29+1236)>>>2]; + page[(r8+0)>>>2] = r3; + r3= page[(r29+1256)>>>2]; r2 = r2 + r3; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; + page[(r8+4)>>>2] = r3; + r3= page[(r29+1172)>>>2]; + page[(r29+1176)>>>2] = r2; r3 = r3 + 1; r4 = r3 < 8 ? 1 : 0; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r29+1172)>>>2] = r3; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x47d28; - run_47c00(); return; + pc=0x56728; + continue; } r8 = r8 + 8; - case 0x477e8: + case 0x561e8: r18 = r0 - r18; if(r18 <= 0) { - /* Next insn is delay slot */ - pc=0x4796c; - run_47800(); return; + pc=0x5636c; + continue; } r4 = r18 < 17 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x47a28; - run_47a00(); return; + pc=0x56428; + continue; } - case 0x47800: - pc=0x47800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_47800() throws ExecutionException { /* 0x47800 - 0x47a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x47800: - r5 = 7 << 16; - r23 = r5 + 1024; + r5 = 6 << 16; + r23 = r5 + 14564; r20 = r0 + 16; - /* Next insn is delay slot */ - pc=0x47828; + pc=0x56228; continue; - case 0x47814: + case 0x56214: r8 = r8 + 8; - case 0x47818: + case 0x56218: r18 = r18 + -16; r4 = r18 < 17 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x47a30; - run_47a00(); return; + pc=0x56430; + continue; } - case 0x47828: + case 0x56228: r3 = r3 + 1; r2 = r2 + 16; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r20; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r20; + page[(r29+1176)>>>2] = r2; + page[(r29+1172)>>>2] = r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x47814; + pc=0x56214; continue; } r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x47860; - pc=0x63400; - run_63400(); return; - case 0x47860: + r31=0x56260; + pc=0x5d200; + run_5d000(); return; + case 0x56260: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x47818; + pc=0x56218; continue; - case 0x4787c: - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r30; - /* Next insn is delay slot */ - pc=0x46070; - run_46000(); return; - case 0x47888: + case 0x5627c: + page[(r29+1216)>>>2] = r30; + pc=0x54a70; + run_54800(); return; + case 0x56288: r2 = r18 < 72 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x47b58; - run_47a00(); return; + pc=0x56558; + continue; } - r16 = 7 << 16; - r16 = r16 + 220; - case 0x4789c: + r16 = 6 << 16; + r16 = r16 + 13764; + case 0x5629c: r2 = r0 + -129; r17 = r17 & r2; r5 = r0 + 3; r2 = r0 + 3; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - writePages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff] = r5; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r2; + page[(r29+1212)>>>2] = r5; + page[(r29+1216)>>>2] = r2; r30 = r0 + r0; - writePages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x46094; - run_46000(); return; - case 0x478c8: - r16 = 7 << 16; - r16 = r16 + 216; - /* Next insn is delay slot */ - pc=0x467b0; - run_46600(); return; - case 0x478d8: + page[(r29+1232)>>>2] = r0; + pc=0x54a94; + run_54800(); return; + case 0x562c8: + r16 = 6 << 16; + r16 = r16 + 13760; + pc=0x551b0; + run_55000(); return; + case 0x562d8: r30 = r0 + -1; r3 = r4 + r0; - /* Next insn is delay slot */ - pc=0x45de8; - run_45c00(); return; - case 0x478e8: + pc=0x547e8; + run_54000(); return; + case 0x562e8: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x478fc; - pc=0x63400; - run_63400(); return; - case 0x478fc: + r31=0x562fc; + pc=0x5d200; + run_5d000(); return; + case 0x562fc: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r18 = readPages[(r29+1200)>>>12][((r29+1200)>>>2)&0x3ff]; - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; + r18= page[(r29+1200)>>>2]; + r2= page[(r29+1176)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x47788; - run_47600(); return; - case 0x47918: + pc=0x56188; + continue; + case 0x56318: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x4792c; - pc=0x63400; - run_63400(); return; - case 0x4792c: + r31=0x5632c; + pc=0x5d200; + run_5d000(); return; + case 0x5632c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x46d2c; - run_46c00(); return; - case 0x47944: + pc=0x5572c; + run_55000(); return; + case 0x56344: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x47958; - pc=0x63400; - run_63400(); return; - case 0x47958: + r31=0x56358; + pc=0x5d200; + run_5d000(); return; + case 0x56358: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; r8 = r29 + 40; - case 0x4796c: - r4 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r16; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r4; + case 0x5636c: + r4= page[(r29+1240)>>>2]; + page[(r8+0)>>>2] = r16; + page[(r8+4)>>>2] = r4; r2 = r4 + r2; - /* Next insn is delay slot */ - pc=0x46b50; - run_46a00(); return; - case 0x47984: - writePages[(r29+1284)>>>12][((r29+1284)>>>2)&0x3ff] = r8; - /* Next insn is delay slot */ - r31=0x47990; + pc=0x55550; + run_55000(); return; + case 0x56384: + page[(r29+1284)>>>2] = r8; + r31=0x56390; pc=0x10268; - run_10200(); return; - case 0x47990: - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r2; - r8 = readPages[(r29+1284)>>>12][((r29+1284)>>>2)&0x3ff]; + run_10000(); return; + case 0x56390: + page[(r29+1216)>>>2] = r2; + r8= page[(r29+1284)>>>2]; if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x46080; - run_46000(); return; + pc=0x54a80; + run_54800(); return; } - case 0x479a0: + case 0x563a0: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x46080; - run_46000(); return; - case 0x479ac: - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - writePages[(r29+1244)>>>12][((r29+1244)>>>2)&0x3ff] = r19; - /* Next insn is delay slot */ - pc=0x46188; - run_46000(); return; - case 0x479c0: + pc=0x54a80; + run_54800(); return; + case 0x563ac: + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; + page[(r29+1244)>>>2] = r19; + pc=0x54b88; + run_54800(); return; + case 0x563c0: r20 = r0 + r0; - /* Next insn is delay slot */ - pc=0x47044; - run_47000(); return; - case 0x479cc: + pc=0x55a44; + run_55800(); return; + case 0x563cc: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x479e0; - pc=0x63400; - run_63400(); return; - case 0x479e0: + r31=0x563e0; + pc=0x5d200; + run_5d000(); return; + case 0x563e0: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; + r2= page[(r29+1176)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x4703c; - run_47000(); return; - case 0x479f8: + pc=0x55a3c; + run_55800(); return; + case 0x563f8: r4 = r21 + r0; r5 = r22 + r0; - case 0x47a00: - pc=0x47a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_47a00() throws ExecutionException { /* 0x47a00 - 0x47c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x47a00: r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x47a0c; - pc=0x63400; - run_63400(); return; - case 0x47a0c: + r31=0x5640c; + pc=0x5d200; + run_5d000(); return; + case 0x5640c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r3 = readPages[(r29+1200)>>>12][((r29+1200)>>>2)&0x3ff]; - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; + r3= page[(r29+1200)>>>2]; + r2= page[(r29+1176)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x47298; - run_47200(); return; - case 0x47a28: - r4 = 7 << 16; - r23 = r4 + 1024; - case 0x47a30: + pc=0x55c98; + run_55800(); return; + case 0x56428: + r4 = 6 << 16; + r23 = r4 + 14564; + case 0x56430: r3 = r3 + 1; r2 = r2 + r18; r4 = r3 < 8 ? 1 : 0; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r23; - writePages[(r8+4)>>>12][((r8+4)>>>2)&0x3ff] = r18; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r2; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r23; + page[(r8+4)>>>2] = r18; + page[(r29+1176)>>>2] = r2; + page[(r29+1172)>>>2] = r3; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x47944; - run_47800(); return; + pc=0x56344; + continue; } r8 = r8 + 8; - /* Next insn is delay slot */ - pc=0x4796c; - run_47800(); return; - case 0x47a60: + pc=0x5636c; + continue; + case 0x56460: r20 = r0 + r0; - /* Next insn is delay slot */ - pc=0x472f4; - run_47200(); return; - case 0x47a6c: + pc=0x55cf4; + run_55800(); return; + case 0x5646c: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x47a80; - pc=0x63400; - run_63400(); return; - case 0x47a80: + r31=0x56480; + pc=0x5d200; + run_5d000(); return; + case 0x56480: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r3 = readPages[(r29+1200)>>>12][((r29+1200)>>>2)&0x3ff]; - r5 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; + r3= page[(r29+1200)>>>2]; + r5= page[(r29+1240)>>>2]; + r2= page[(r29+1176)>>>2]; r3 = r5 - r3; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x472ec; - run_47200(); return; - case 0x47aa4: + pc=0x55cec; + run_55800(); return; + case 0x564a4: r3 = (r30&0xffffffffL) < (7&0xffffffffL) ? 1 : 0; r2 = r30 + r0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x47ab8; + pc=0x564b8; continue; } r2 = r0 + 6; - case 0x47ab8: - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r2; + case 0x564b8: + page[(r29+1216)>>>2] = r2; if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x47ef0; - run_47e00(); return; + pc=0x568f0; + run_56800(); return; } - case 0x47ac4: - r16 = 7 << 16; - writePages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff] = r2; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r20; + case 0x564c4: + r16 = 6 << 16; + page[(r29+1212)>>>2] = r2; + page[(r29+1340)>>>2] = r20; r3 = r0 + r0; r30 = r0 + r0; - writePages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff] = r0; - r16 = r16 + 268; - /* Next insn is delay slot */ - pc=0x460ac; - run_46000(); return; - case 0x47ae8: - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - writePages[(r29+1244)>>>12][((r29+1244)>>>2)&0x3ff] = r19; - /* Next insn is delay slot */ - pc=0x46408; - run_46400(); return; - case 0x47af8: + page[(r29+1232)>>>2] = r0; + r16 = r16 + 13812; + pc=0x54aac; + run_54800(); return; + case 0x564e8: + r3= page[(r29+1172)>>>2]; + page[(r29+1244)>>>2] = r19; + pc=0x54e08; + run_54800(); return; + case 0x564f8: r3 = r0 + 45; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff] = r2; + page[(addr)>>>2] = tmp; + page[(r29+1212)>>>2] = r2; r17 = r23 + r0; r3 = r0 + 45; r30 = r0 + r0; - /* Next insn is delay slot */ - pc=0x4609c; - run_46000(); return; - case 0x47b18: - r2 = readPages[(r29+1200)>>>12][((r29+1200)>>>2)&0x3ff]; + pc=0x54a9c; + run_54800(); return; + case 0x56518: + r2= page[(r29+1200)>>>2]; r3 = r2 < -3 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x47c58; - run_47c00(); return; + pc=0x56658; + continue; } r3 = r30 < r2 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x47c58; - run_47c00(); return; + pc=0x56658; + continue; } - writePages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x475f0; - run_47400(); return; - case 0x47b44: + page[(r29+1232)>>>2] = r2; + pc=0x55ff0; + run_55800(); return; + case 0x56544: r2 = r0 + 45; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r3 = r0 + 45; - /* Next insn is delay slot */ - pc=0x4679c; - run_46600(); return; - case 0x47b58: - r16 = 7 << 16; - r16 = r16 + 224; - /* Next insn is delay slot */ - pc=0x4789c; - run_47800(); return; - case 0x47b68: + pc=0x5519c; + run_55000(); return; + case 0x56558: + r16 = 6 << 16; + r16 = r16 + 13768; + pc=0x5629c; + continue; + case 0x56568: r2 = r0 + 3; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; + page[(r29+16)>>>2] = r2; r2 = r29 + 1200; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; + page[(r29+24)>>>2] = r2; r2 = r29 + 1196; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r2; - r7 = readPages[(r29+1276)>>>12][((r29+1276)>>>2)&0x3ff]; + page[(r29+28)>>>2] = r2; + r7= page[(r29+1276)>>>2]; r2 = r29 + 1180; - r6 = readPages[(r29+1272)>>>12][((r29+1272)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r30; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; + r6= page[(r29+1272)>>>2]; + page[(r29+20)>>>2] = r30; + page[(r29+32)>>>2] = r2; r4 = r21 + r0; - writePages[(r29+1284)>>>12][((r29+1284)>>>2)&0x3ff] = r8; - /* Next insn is delay slot */ - r31=0x47ba4; - pc=0x57400; - run_57400(); return; - case 0x47ba4: + page[(r29+1284)>>>2] = r8; + r31=0x565a4; + pc=0x57e00; + run_57800(); return; + case 0x565a4: r16 = r2 + r0; r5 = r30 + r0; - r8 = readPages[(r29+1284)>>>12][((r29+1284)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x47550; - run_47400(); return; - case 0x47bb8: - r5 = 7 << 16; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r23 = r5 + 1024; - /* Next insn is delay slot */ - pc=0x46e80; - run_46e00(); return; - case 0x47bcc: + r8= page[(r29+1284)>>>2]; + pc=0x55f50; + run_55800(); return; + case 0x565b8: + r5 = 6 << 16; + r3= page[(r29+1172)>>>2]; + r23 = r5 + 14564; + pc=0x55880; + run_55800(); return; + case 0x565cc: r2 = r4 + r0; - /* Next insn is delay slot */ - pc=0x475bc; - run_47400(); return; - case 0x47bd8: + pc=0x55fbc; + run_55800(); return; + case 0x565d8: addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; r2 = r0 + 48; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x47bfc; + pc=0x565fc; continue; } - case 0x47be8: - r2 = readPages[(r29+1200)>>>12][((r29+1200)>>>2)&0x3ff]; + case 0x565e8: + r2= page[(r29+1200)>>>2]; r4 = r4 + r2; - /* Next insn is delay slot */ - pc=0x47560; - run_47400(); return; - case 0x47bfc: + pc=0x55f60; + run_55800(); return; + case 0x565fc: f0 = r0; - case 0x47c00: - pc=0x47c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_47c00() throws ExecutionException { /* 0x47c00 - 0x47e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x47c00: - f2 = readPages[(r29+1276)>>>12][((r29+1276)>>>2)&0x3ff]; + f2= page[(r29+1276)>>>2]; f1 = r0; - f3 = readPages[(r29+1272)>>>12][((r29+1272)>>>2)&0x3ff]; + f3= page[(r29+1272)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x47be8; - run_47a00(); return; + pc=0x565e8; + continue; } r2 = r0 + 1; r2 = r2 - r5; - writePages[(r29+1200)>>>12][((r29+1200)>>>2)&0x3ff] = r2; + page[(r29+1200)>>>2] = r2; r4 = r4 + r2; - /* Next insn is delay slot */ - pc=0x47560; - run_47400(); return; - case 0x47c38: - writePages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff] = r30; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r30; + pc=0x55f60; + run_55800(); return; + case 0x56638: + page[(r29+1212)>>>2] = r30; + page[(r29+1216)>>>2] = r30; addr=r29+1206; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r20; + page[(r29+1340)>>>2] = r20; r30 = r0 + r0; - writePages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x46094; - run_46000(); return; - case 0x47c58: + page[(r29+1232)>>>2] = r0; + pc=0x54a94; + run_54800(); return; + case 0x56658: r18 = r18 + -2; - case 0x47c5c: + case 0x5665c: r2 = r2 + -1; - writePages[(r29+1200)>>>12][((r29+1200)>>>2)&0x3ff] = r2; + page[(r29+1200)>>>2] = r2; addr=r29+1188; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x47f3c; - run_47e00(); return; + pc=0x5693c; + run_56800(); return; } r3 = r0 + 43; addr=r29+1189; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x47c78: + page[(addr)>>>2] = tmp; + case 0x56678: r3 = r2 < 10 ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x47e38; - run_47e00(); return; + pc=0x56838; + run_56800(); return; } r2 = r2 + 48; r3 = r0 + 48; addr=r29+1191; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; addr=r29+1190; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r29 + 1192; r4 = r29 + 1188; - case 0x47c9c: - r3 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; + case 0x5669c: + r3= page[(r29+1240)>>>2]; r4 = r2 - r4; r3 = r3 + r4; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r4; + page[(r29+1216)>>>2] = r3; + r3= page[(r29+1240)>>>2]; + page[(r29+1260)>>>2] = r4; r2 = r3 < 2 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x47ce8; + pc=0x566e8; continue; } - case 0x47cc0: - r3 = readPages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff]; + case 0x566c0: + r3= page[(r29+1216)>>>2]; r3 = r3 + 1; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r3; + page[(r29+1216)>>>2] = r3; r2 = r3 + r0; if(r3 < 0) { - /* Next insn is delay slot */ - pc=0x47d04; + pc=0x56704; continue; } - case 0x47cdc: - writePages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x4762c; - run_47600(); return; - case 0x47ce8: + case 0x566dc: + page[(r29+1232)>>>2] = r0; + pc=0x5602c; + continue; + case 0x566e8: r17 = r17 & 1; if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x47cc0; + pc=0x566c0; continue; } - r2 = readPages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff]; + r2= page[(r29+1216)>>>2]; if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x47cdc; + pc=0x566dc; continue; } - case 0x47d04: + case 0x56704: r2 = r0 + r0; - writePages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x4762c; - run_47600(); return; - case 0x47d14: + page[(r29+1232)>>>2] = r0; + pc=0x5602c; + continue; + case 0x56714: if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x47490; - run_47400(); return; + pc=0x55e90; + run_55800(); return; } r30 = r0 + 1; - /* Next insn is delay slot */ - pc=0x47490; - run_47400(); return; - case 0x47d28: + pc=0x55e90; + run_55800(); return; + case 0x56728: r4 = r21 + r0; r5 = r22 + r0; r6 = r29 + 1168; - /* Next insn is delay slot */ - r31=0x47d3c; - pc=0x63400; - run_63400(); return; - case 0x47d3c: + r31=0x5673c; + pc=0x5d200; + run_5d000(); return; + case 0x5673c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x45fcc; - run_45e00(); return; + pc=0x549cc; + run_54800(); return; } - r18 = readPages[(r29+1200)>>>12][((r29+1200)>>>2)&0x3ff]; - r2 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r3 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; + r18= page[(r29+1200)>>>2]; + r2= page[(r29+1176)>>>2]; + r3= page[(r29+1172)>>>2]; r8 = r29 + 40; - /* Next insn is delay slot */ - pc=0x477e8; - run_47600(); return; - case 0x47d5c: + pc=0x561e8; + continue; + case 0x5675c: r5 = r30 + 1; - /* Next insn is delay slot */ - pc=0x474e0; - run_47400(); return; - case 0x47d68: - r3 = readPages[(r29+1248)>>>12][((r29+1248)>>>2)&0x3ff]; + pc=0x55ee0; + run_55800(); return; + case 0x56768: + r3= page[(r29+1248)>>>2]; r2 = 32768 << 16; - r4 = readPages[(r29+1252)>>>12][((r29+1252)>>>2)&0x3ff]; + r4= page[(r29+1252)>>>2]; r2 = r3 ^ r2; r5 = r0 + 45; - writePages[(r29+1272)>>>12][((r29+1272)>>>2)&0x3ff] = r2; - writePages[(r29+1276)>>>12][((r29+1276)>>>2)&0x3ff] = r4; - writePages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=0x474b8; - run_47400(); return; - case 0x47d90: - r3 = readPages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff]; + page[(r29+1272)>>>2] = r2; + page[(r29+1276)>>>2] = r4; + page[(r29+1212)>>>2] = r5; + pc=0x55eb8; + run_55800(); return; + case 0x56790: + r3= page[(r29+1232)>>>2]; if(r3 <= 0) { - /* Next insn is delay slot */ - pc=0x47f2c; - run_47e00(); return; + pc=0x5692c; + run_56800(); return; } r2 = r0 + 1; - case 0x47da4: - r3 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; + case 0x567a4: + r3= page[(r29+1240)>>>2]; r2 = r2 + r3; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r2; + page[(r29+1216)>>>2] = r2; if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x47de4; + pc=0x567e4; continue; } - case 0x47dbc: + case 0x567bc: r18 = r0 + 103; - /* Next insn is delay slot */ - pc=0x4762c; - run_47600(); return; - case 0x47dc8: - r3 = readPages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff]; + pc=0x5602c; + continue; + case 0x567c8: + r3= page[(r29+1232)>>>2]; r3 = r3 + 1; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r3; + page[(r29+1216)>>>2] = r3; r2 = r3 + r0; if(r3 >= 0) { - /* Next insn is delay slot */ - pc=0x47dbc; + pc=0x567bc; continue; } - case 0x47de4: + case 0x567e4: r2 = r0 + r0; r18 = r0 + 103; - /* Next insn is delay slot */ - pc=0x4762c; - run_47600(); return; - case 0x47df4: + pc=0x5602c; + continue; + case 0x567f4: r30 = r0 + 6; - /* Next insn is delay slot */ - pc=0x47490; - run_47400(); return; - case 0x47e00: - pc=0x47e00; + pc=0x55e90; + run_55800(); return; + case 0x56800: + pc=0x56800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_47e00() throws ExecutionException { /* 0x47e00 - 0x48000 */ + private final void run_56800() throws ExecutionException { /* 0x56800 - 0x57000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x47e00: - r2 = readPages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x475bc; - run_47400(); return; - case 0x47e0c: + case 0x56800: + r2= page[(r29+1180)>>>2]; + pc=0x55fbc; + run_55800(); return; + case 0x5680c: if(r3 <= 0) { - /* Next insn is delay slot */ - pc=0x47f50; + pc=0x56950; continue; } if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x47ecc; + pc=0x568cc; continue; } r17 = r17 & 1; if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x47ecc; + pc=0x568cc; continue; } r2 = r3 + r0; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x4762c; - run_47600(); return; - case 0x47e38: + page[(r29+1216)>>>2] = r3; + pc=0x5602c; + run_56000(); return; + case 0x56838: r6 = r29 + 1187; r3 = r6 + r0; r4 = r0 + 10; - case 0x47e44: + case 0x56844: if(r4 != r0) { - /* Next insn is delay slot */ hi = r2%r4; lo = r2/r4; - pc=0x47e50; + pc=0x56850; continue; } hi = r2%r4; lo = r2/r4; throw new ExecutionException("Break"); - case 0x47e50: + case 0x56850: r3 = r3 + -1; r5 = hi; r5 = r5 + 48; addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = lo; r5 = r2 < 10 ? 1 : 0; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x47e44; + pc=0x56844; continue; } r2 = r2 + 48; @@ -58457,8850 +65321,885 @@ public final class AcmeCrossAssembler extends UnixRuntime { r5 = r5 >> 24; r2 = ((r4 & 0xffffffffL) < (r6 & 0xffffffffL)) ? 1 : 0; addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x47fac; + pc=0x569ac; continue; } r2 = r29 + 1190; - /* Next insn is delay slot */ - pc=0x47ea0; + pc=0x568a0; continue; - case 0x47e9c: + case 0x5689c: addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r5 = tmp; - case 0x47ea0: + case 0x568a0: r2 = r2 + 1; r4 = r4 + 1; addr=r2+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r4 != r6) { - /* Next insn is delay slot */ - pc=0x47e9c; + pc=0x5689c; continue; } r4 = r29 + 1188; r2 = r4 - r3; r3 = r29 + 1190; r2 = r3 + r2; - /* Next insn is delay slot */ - pc=0x47c9c; - run_47c00(); return; - case 0x47ecc: - r3 = readPages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff]; + pc=0x5669c; + run_56000(); return; + case 0x568cc: + r3= page[(r29+1232)>>>2]; r2 = r30 + 1; r2 = r3 + r2; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r2; + page[(r29+1216)>>>2] = r2; if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x4762c; - run_47600(); return; + pc=0x5602c; + run_56000(); return; } - case 0x47ee4: + case 0x568e4: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x4762c; - run_47600(); return; - case 0x47ef0: + pc=0x5602c; + run_56000(); return; + case 0x568f0: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x47ac4; - run_47a00(); return; - case 0x47efc: - r3 = readPages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff]; - r30 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + pc=0x564c4; + run_56000(); return; + case 0x568fc: + r3= page[(r29+1340)>>>2]; + r30= page[(r3+0)>>>2]; r2 = r3 + 4; r3 = r4 + r0; if(r30 >= 0) { - /* Next insn is delay slot */ - pc=0x46a00; - run_46a00(); return; + pc=0x55400; + run_55000(); return; } - writePages[(r29+1340)>>>12][((r29+1340)>>>2)&0x3ff] = r2; + page[(r29+1340)>>>2] = r2; r30 = r0 + -1; r16 = r3 + r0; - /* Next insn is delay slot */ - pc=0x45de0; - run_45c00(); return; - case 0x47f2c: + pc=0x547e0; + run_54000(); return; + case 0x5692c: r2 = r0 + 2; r2 = r2 - r3; - /* Next insn is delay slot */ - pc=0x47da4; - run_47c00(); return; - case 0x47f3c: + pc=0x567a4; + run_56000(); return; + case 0x5693c: r3 = r0 + 45; r2 = r0 - r2; addr=r29+1189; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x47c78; - run_47c00(); return; - case 0x47f50: + page[(addr)>>>2] = tmp; + pc=0x56678; + run_56000(); return; + case 0x56950: if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x47f84; + pc=0x56984; continue; } r17 = r17 & 1; if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x47f84; + pc=0x56984; continue; } r3 = r0 + 1; r2 = r0 + 1; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x4762c; - run_47600(); return; - case 0x47f78: + page[(r29+1216)>>>2] = r3; + pc=0x5602c; + run_56000(); return; + case 0x56978: r16 = r0 + -1; - /* Next insn is delay slot */ - pc=0x45f18; - run_45e00(); return; - case 0x47f84: + pc=0x54918; + run_54800(); return; + case 0x56984: r30 = r30 + 2; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r30; + page[(r29+1216)>>>2] = r30; r2 = r30 + r0; if(r30 >= 0) { - /* Next insn is delay slot */ - pc=0x4762c; - run_47600(); return; + pc=0x5602c; + run_56000(); return; } - /* Next insn is delay slot */ - pc=0x47ee4; + pc=0x568e4; continue; - case 0x47fa0: - r2 = readPages[(r29+1200)>>>12][((r29+1200)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x47c5c; - run_47c00(); return; - case 0x47fac: + case 0x569a0: + r2= page[(r29+1200)>>>2]; + pc=0x5665c; + run_56000(); return; + case 0x569ac: r2 = r29 + 1190; r4 = r29 + 1188; - /* Next insn is delay slot */ - pc=0x47c9c; - run_47c00(); return; - case 0x47fbc: + pc=0x5669c; + run_56000(); return; + case 0x569bc: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x47620; - run_47600(); return; - case 0x48000: - pc=0x48000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_48000() throws ExecutionException { /* 0x48000 - 0x48200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x48000: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x45c00; - run_45c00(); return; - case 0x48200: - pc=0x48200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_48200() throws ExecutionException { /* 0x48200 - 0x48400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x48200: + pc=0x56020; + run_56000(); return; + case 0x56a00: r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; + page[(r29+24)>>>2] = r18; + page[(r29+20)>>>2] = r17; + page[(r29+16)>>>2] = r16; + page[(r29+28)>>>2] = r31; r17 = r4 + r0; r18 = r5 + r0; r16 = r6 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x48238; + pc=0x56a38; continue; } - r2 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; + r2= page[(r4+56)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x483e4; + pc=0x56be4; continue; } - case 0x48238: - r2 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; + case 0x56a38: + r2= page[(r16+24)>>>2]; + page[(r16+8)>>>2] = r2; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r2 = tmp; r3 = r2 & 65535; r4 = r3 & 8; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x483b8; + pc=0x56bb8; continue; } - r4 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; + r4= page[(r16+16)>>>2]; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x483b8; + pc=0x56bb8; continue; } - case 0x4826c: + case 0x56a6c: r3 = r3 & 8192; r18 = r18 & 255; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x482f4; + pc=0x56af4; continue; } - r3 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; + r3= page[(r16+0)>>>2]; + r2= page[(r16+20)>>>2]; r4 = r3 - r4; r2 = r4 < r2 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x48324; + pc=0x56b24; continue; } - case 0x48294: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; + case 0x56a94: + r2= page[(r16+8)>>>2]; r4 = r4 + 1; r2 = r2 + -1; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; + page[(r16+8)>>>2] = r2; r2 = r3 + 1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; + page[(r16+0)>>>2] = r2; addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r2= page[(r16+20)>>>2]; if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x48368; + pc=0x56b68; continue; } - case 0x482c0: + case 0x56ac0: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r2 = r2 & 1; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x4838c; + pc=0x56b8c; continue; } - case 0x482d4: + case 0x56ad4: r2 = r18 + r0; - case 0x482d8: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + case 0x56ad8: + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x482f4: - r3 = readPages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff]; + case 0x56af4: + r3= page[(r16+100)>>>2]; r2 = r2 | 8192; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r0 + -8193; r2 = r3 & r2; - r3 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - writePages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; + r3= page[(r16+0)>>>2]; + page[(r16+100)>>>2] = r2; + r2= page[(r16+20)>>>2]; r4 = r3 - r4; r2 = r4 < r2 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x48294; + pc=0x56a94; continue; } - case 0x48324: + case 0x56b24: r4 = r17 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x48334; - pc=0x39800; - run_39800(); return; - case 0x48334: + r31=0x56b34; + pc=0x4a400; + run_4a000(); return; + case 0x56b34: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x48380; + pc=0x56b80; continue; } - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r3 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + r2= page[(r16+8)>>>2]; + r3= page[(r16+0)>>>2]; r2 = r2 + -1; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; + page[(r16+8)>>>2] = r2; r2 = r3 + 1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; + page[(r16+0)>>>2] = r2; addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r2= page[(r16+20)>>>2]; r4 = r0 + 1; if(r2 != r4) { - /* Next insn is delay slot */ - pc=0x482c0; + pc=0x56ac0; continue; } - case 0x48368: + case 0x56b68: r4 = r17 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x48378; - pc=0x39800; - run_39800(); return; - case 0x48378: + r31=0x56b78; + pc=0x4a400; + run_4a000(); return; + case 0x56b78: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x482d4; + pc=0x56ad4; continue; } - case 0x48380: + case 0x56b80: r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x482d8; + pc=0x56ad8; continue; - case 0x4838c: + case 0x56b8c: r2 = r0 + 10; if(r18 != r2) { - /* Next insn is delay slot */ - pc=0x482d4; + pc=0x56ad4; continue; } r4 = r17 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x483a8; - pc=0x39800; - run_39800(); return; - case 0x483a8: + r31=0x56ba8; + pc=0x4a400; + run_4a000(); return; + case 0x56ba8: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x482d4; + pc=0x56ad4; continue; } - /* Next insn is delay slot */ - pc=0x48380; + pc=0x56b80; continue; - case 0x483b8: + case 0x56bb8: r4 = r17 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x483c8; - pc=0x48600; - run_48600(); return; - case 0x483c8: + r31=0x56bc8; + pc=0x56c00; + continue; + case 0x56bc8: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x48380; + pc=0x56b80; continue; } addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r2 = tmp; - r4 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; + r4= page[(r16+16)>>>2]; r3 = r2 & 65535; - /* Next insn is delay slot */ - pc=0x4826c; + pc=0x56a6c; continue; - case 0x483e4: - /* Next insn is delay slot */ - r31=0x483ec; - pc=0x3a600; - run_3a600(); return; - case 0x483ec: - /* Next insn is delay slot */ - pc=0x48238; + case 0x56be4: + r31=0x56bec; + pc=0x4ac00; + run_4a800(); return; + case 0x56bec: + pc=0x56a38; continue; - case 0x48400: - pc=0x48400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_48400() throws ExecutionException { /* 0x48400 - 0x48600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x48400: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x48200; - run_48200(); return; - case 0x48600: - pc=0x48600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_48600() throws ExecutionException { /* 0x48600 - 0x48800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x48600: + case 0x56c00: r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; + page[(r29+24)>>>2] = r17; r17 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; + r4= page[(r28+-31512)>>>2]; + page[(r29+20)>>>2] = r16; + page[(r29+28)>>>2] = r31; r16 = r5 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x48634; + pc=0x56c34; continue; } - r3 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; + r3= page[(r4+56)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x48744; + pc=0x56d44; continue; } - case 0x48634: + case 0x56c34: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r6 = tmp; r2 = r6 & 65535; r3 = r2 & 8; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x486a4; + pc=0x56ca4; continue; } - r3 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; + r3= page[(r16+16)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x486d4; + pc=0x56cd4; continue; } - case 0x4865c: + case 0x56c5c: r4 = r2 & 1; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x48704; + pc=0x56d04; continue; } r2 = r2 & 2; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x48754; + pc=0x56d54; continue; } - r2 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - case 0x48680: + r2= page[(r16+20)>>>2]; + page[(r16+8)>>>2] = r2; + case 0x56c80: if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x4871c; + pc=0x56d1c; continue; } - case 0x48688: + case 0x56c88: r2 = r0 + r0; - case 0x4868c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + case 0x56c8c: + r31= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x486a4: + case 0x56ca4: r3 = r2 & 16; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x487b0; + pc=0x56db0; continue; } r2 = r2 & 4; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x48764; + pc=0x56d64; continue; } - r3 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - case 0x486c0: + r3= page[(r16+16)>>>2]; + case 0x56cc0: r2 = r6 | 8; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r2 & 65535; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x4865c; + pc=0x56c5c; continue; } - case 0x486d4: + case 0x56cd4: r5 = r2 & 640; r4 = r0 + 512; if(r5 == r4) { - /* Next insn is delay slot */ - pc=0x4865c; + pc=0x56c5c; continue; } r4 = r17 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x486f4; - pc=0x3e600; - run_3e600(); return; - case 0x486f4: + r31=0x56cf4; + pc=0x4dc00; + run_4d800(); return; + case 0x56cf4: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; - r3 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x4865c; + r3= page[(r16+16)>>>2]; + pc=0x56c5c; continue; - case 0x48704: - r2 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r0; + case 0x56d04: + r2= page[(r16+20)>>>2]; + page[(r16+8)>>>2] = r0; r2 = r0 - r2; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r2; + page[(r16+24)>>>2] = r2; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x48688; + pc=0x56c88; continue; } - case 0x4871c: + case 0x56d1c: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r3 = tmp; r2 = r0 + r0; r4 = r3 & 128; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x4868c; + pc=0x56c8c; continue; } r3 = r3 | 64; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x4868c; + pc=0x56c8c; continue; - case 0x48744: - /* Next insn is delay slot */ - r31=0x4874c; - pc=0x3a600; - run_3a600(); return; - case 0x4874c: - /* Next insn is delay slot */ - pc=0x48634; + case 0x56d44: + r31=0x56d4c; + pc=0x4ac00; + run_4a800(); return; + case 0x56d4c: + pc=0x56c34; continue; - case 0x48754: + case 0x56d54: r2 = r0 + r0; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x48680; + page[(r16+8)>>>2] = r2; + pc=0x56c80; continue; - case 0x48764: - r5 = readPages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff]; + case 0x56d64: + r5= page[(r16+48)>>>2]; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x48794; + pc=0x56d94; continue; } r2 = r16 + 64; if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x48790; + pc=0x56d90; continue; } r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x4878c; - pc=0x3ca00; - run_3ca00(); return; - case 0x4878c: + r31=0x56d8c; + pc=0x4c400; + run_4c000(); return; + case 0x56d8c: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r6 = tmp; - case 0x48790: - writePages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff] = r0; - case 0x48794: - r3 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; + case 0x56d90: + page[(r16+48)>>>2] = r0; + case 0x56d94: + r3= page[(r16+16)>>>2]; r2 = r0 + -37; r6 = r6 & r2; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r0; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x486c0; + page[(r16+4)>>>2] = r0; + page[(r16+0)>>>2] = r3; + pc=0x56cc0; continue; - case 0x487b0: + case 0x56db0: r2 = r0 + 9; r6 = r6 | 64; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r2; + page[(r17+0)>>>2] = r2; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r6&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x4868c; + pc=0x56c8c; continue; - case 0x48800: - pc=0x48800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_48800() throws ExecutionException { /* 0x48800 - 0x48a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x48800: + case 0x56e00: r2 = r0 + 1; - pc = 0x48804; + pc = 0x56e04; r2 = syscall(r2,r4,r5,r6,r7,r8,r9); if (state != RUNNING) { - pc = 0x48808; + pc = 0x56e08; return; } - case 0x48808: - /* Next insn is delay slot */ + case 0x56e08: pc=r31; return; - case 0x48810: - r2 = r0 + 2; - pc = 0x48814; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48818; - return; - } - case 0x48818: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48820: + case 0x56e10: r2 = r0 + 3; r10 = r4 + r0; r4 = r5 + r0; r5 = r6 + r0; r6 = r7 + r0; - pc = 0x48834; + pc = 0x56e24; r2 = syscall(r2,r4,r5,r6,r7,r8,r9); if (state != RUNNING) { - pc = 0x48838; + pc = 0x56e28; return; } - case 0x48838: + case 0x56e28: r11 = r2 + 255; r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48850; + pc=0x56e40; continue; } - /* Next insn is delay slot */ pc=r31; return; - case 0x48850: + case 0x56e40: r4 = r10 + r0; r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48860: + pc=0x57000; + run_57000(); return; + case 0x56e50: r2 = r0 + 4; r10 = r4 + r0; r4 = r5 + r0; r5 = r6 + r0; r6 = r7 + r0; - pc = 0x48874; + pc = 0x56e64; r2 = syscall(r2,r4,r5,r6,r7,r8,r9); if (state != RUNNING) { - pc = 0x48878; + pc = 0x56e68; return; } - case 0x48878: + case 0x56e68: r11 = r2 + 255; r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48890; + pc=0x56e80; continue; } - /* Next insn is delay slot */ pc=r31; return; - case 0x48890: + case 0x56e80: r4 = r10 + r0; r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x488a0: + pc=0x57000; + run_57000(); return; + case 0x56e90: r2 = r0 + 5; r10 = r4 + r0; r4 = r5 + r0; r5 = r6 + r0; r6 = r7 + r0; - pc = 0x488b4; + pc = 0x56ea4; r2 = syscall(r2,r4,r5,r6,r7,r8,r9); if (state != RUNNING) { - pc = 0x488b8; + pc = 0x56ea8; return; } - case 0x488b8: + case 0x56ea8: r11 = r2 + 255; r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x488d0; + pc=0x56ec0; continue; } - /* Next insn is delay slot */ pc=r31; return; - case 0x488d0: + case 0x56ec0: r4 = r10 + r0; r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x488e0: + pc=0x57000; + run_57000(); return; + case 0x56ed0: r2 = r0 + 6; r10 = r4 + r0; r4 = r5 + r0; r5 = r6 + r0; r6 = r7 + r0; - pc = 0x488f4; + pc = 0x56ee4; r2 = syscall(r2,r4,r5,r6,r7,r8,r9); if (state != RUNNING) { - pc = 0x488f8; + pc = 0x56ee8; return; } - case 0x488f8: + case 0x56ee8: r11 = r2 + 255; r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48910; + pc=0x56f00; continue; } - /* Next insn is delay slot */ pc=r31; return; - case 0x48910: + case 0x56f00: r4 = r10 + r0; r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48920: + pc=0x57000; + run_57000(); return; + case 0x56f10: r2 = r0 + 7; r10 = r4 + r0; r4 = r5 + r0; r5 = r6 + r0; r6 = r7 + r0; - pc = 0x48934; + pc = 0x56f24; r2 = syscall(r2,r4,r5,r6,r7,r8,r9); if (state != RUNNING) { - pc = 0x48938; + pc = 0x56f28; return; } - case 0x48938: + case 0x56f28: r11 = r2 + 255; r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48950; + pc=0x56f40; continue; } - /* Next insn is delay slot */ pc=r31; return; - case 0x48950: + case 0x56f40: r4 = r10 + r0; r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48960: + pc=0x57000; + run_57000(); return; + case 0x56f50: r2 = r0 + 8; r10 = r4 + r0; r4 = r5 + r0; r5 = r6 + r0; r6 = r7 + r0; - pc = 0x48974; + pc = 0x56f64; r2 = syscall(r2,r4,r5,r6,r7,r8,r9); if (state != RUNNING) { - pc = 0x48978; + pc = 0x56f68; return; } - case 0x48978: + case 0x56f68: r11 = r2 + 255; r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48990; + pc=0x56f80; continue; } - /* Next insn is delay slot */ pc=r31; return; - case 0x48990: + case 0x56f80: r4 = r10 + r0; r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x489a0: + pc=0x57000; + run_57000(); return; + case 0x56f90: r2 = r0 + 10; r10 = r4 + r0; r4 = r5 + r0; r5 = r6 + r0; r6 = r7 + r0; - pc = 0x489b4; + pc = 0x56fa4; r2 = syscall(r2,r4,r5,r6,r7,r8,r9); if (state != RUNNING) { - pc = 0x489b8; + pc = 0x56fa8; return; } - case 0x489b8: + case 0x56fa8: r11 = r2 + 255; r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x489d0; + pc=0x56fc0; continue; } - /* Next insn is delay slot */ pc=r31; return; - case 0x489d0: + case 0x56fc0: r4 = r10 + r0; r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x489e0: - r2 = r0 + 11; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x489f4; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x489f8; - return; - } - case 0x489f8: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - case 0x48a00: - pc=0x48a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_48a00() throws ExecutionException { /* 0x48a00 - 0x48c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x48a00: - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48a10; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48a10: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48a20: - r2 = r0 + 12; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48a34; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48a38; - return; - } - case 0x48a38: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48a50; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48a50: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48a60: - r2 = r0 + 13; - pc = 0x48a64; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48a68; - return; - } - case 0x48a68: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48a70: - r2 = r0 + 14; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48a84; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48a88; - return; - } - case 0x48a88: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48aa0; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48aa0: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48ab0: - r2 = r0 + 15; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48ac4; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48ac8; - return; - } - case 0x48ac8: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48ae0; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48ae0: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48af0: - r2 = r0 + 16; - pc = 0x48af4; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48af8; - return; - } - case 0x48af8: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48b00: - r2 = r0 + 17; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48b14; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48b18; - return; - } - case 0x48b18: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48b30; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48b30: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48b40: - r2 = r0 + 18; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48b54; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48b58; - return; - } - case 0x48b58: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48b70; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48b70: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48b80: + pc=0x57000; + run_57000(); return; + case 0x56fd0: r2 = r0 + 19; - pc = 0x48b84; + pc = 0x56fd4; r2 = syscall(r2,r4,r5,r6,r7,r8,r9); if (state != RUNNING) { - pc = 0x48b88; + pc = 0x56fd8; return; } - case 0x48b88: - /* Next insn is delay slot */ + case 0x56fd8: pc=r31; return; - case 0x48b90: - r2 = r0 + 20; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48ba4; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48ba8; - return; - } - case 0x48ba8: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48bc0; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48bc0: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48bd0: - r2 = r0 + 21; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48be4; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48be8; - return; - } - case 0x48be8: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48c00; - run_48c00(); return; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48c00: - pc=0x48c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_48c00() throws ExecutionException { /* 0x48c00 - 0x48e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x48c00: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48c10: - r2 = r0 + 22; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48c24; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48c28; - return; - } - case 0x48c28: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48c40; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48c40: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48c50: - r2 = r0 + 23; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48c64; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48c68; - return; - } - case 0x48c68: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48c80; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48c80: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48c90: - r2 = r0 + 24; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48ca4; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48ca8; - return; - } - case 0x48ca8: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48cc0; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48cc0: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48cd0: - r2 = r0 + 25; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48ce4; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48ce8; - return; - } - case 0x48ce8: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48d00; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48d00: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48d10: - r2 = r0 + 26; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48d24; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48d28; - return; - } - case 0x48d28: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48d40; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48d40: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48d50: - r2 = r0 + 27; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48d64; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48d68; - return; - } - case 0x48d68: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48d80; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48d80: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48d90: - r2 = r0 + 28; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48da4; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48da8; - return; - } - case 0x48da8: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48dc0; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48dc0: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48dd0: - r2 = r0 + 29; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48de4; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48de8; - return; - } - case 0x48de8: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48e00; - run_48e00(); return; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48e00: - pc=0x48e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_48e00() throws ExecutionException { /* 0x48e00 - 0x49000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x48e00: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48e10: - r2 = r0 + 30; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48e24; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48e28; - return; - } - case 0x48e28: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48e40; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48e40: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48e50: - r2 = r0 + 31; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48e64; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48e68; - return; - } - case 0x48e68: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48e80; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48e80: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48e90: - r2 = r0 + 32; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48ea4; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48ea8; - return; - } - case 0x48ea8: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48ec0; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48ec0: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48ed0: - r2 = r0 + 33; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48ee4; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48ee8; - return; - } - case 0x48ee8: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48f00; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48f00: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48f10: - r2 = r0 + 34; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48f24; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48f28; - return; - } - case 0x48f28: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48f40; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48f40: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48f50: - r2 = r0 + 35; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x48f64; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48f68; - return; - } - case 0x48f68: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48f80; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48f80: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48f90: - r2 = r0 + 36; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - r7 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r8 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r9 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - pc = 0x48fb0; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x48fb4; - return; - } - case 0x48fb4: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x48fcc; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x48fcc: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x48fdc: + case 0x56fe0: r2 = r0 + 37; - pc = 0x48fe0; + pc = 0x56fe4; r2 = syscall(r2,r4,r5,r6,r7,r8,r9); if (state != RUNNING) { - pc = 0x48fe4; + pc = 0x56fe8; return; } - case 0x48fe4: - /* Next insn is delay slot */ + case 0x56fe8: pc=r31; return; - case 0x48fec: + case 0x56ff0: r2 = r0 + 38; - pc = 0x48ff0; + pc = 0x56ff4; r2 = syscall(r2,r4,r5,r6,r7,r8,r9); if (state != RUNNING) { - pc = 0x48ff4; + pc = 0x56ff8; return; } - case 0x48ff4: - /* Next insn is delay slot */ + case 0x56ff8: pc=r31; return; - case 0x48ffc: - r2 = r0 + 39; - case 0x49000: - pc=0x49000; + case 0x57000: + pc=0x57000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_49000() throws ExecutionException { /* 0x49000 - 0x49200 */ + private final void run_57000() throws ExecutionException { /* 0x57000 - 0x57800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x49000: - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49010; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49014; - return; - } - case 0x49014: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x4902c; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4902c: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x4903c: - r2 = r0 + 40; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49050; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49054; - return; - } - case 0x49054: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x4906c; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4906c: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x4907c: - r2 = r0 + 41; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49090; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49094; - return; - } - case 0x49094: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x490ac; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x490ac: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x490bc: - r2 = r0 + 42; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x490d0; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x490d4; - return; - } - case 0x490d4: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x490ec; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x490ec: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x490fc: - r2 = r0 + 43; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49110; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49114; - return; - } - case 0x49114: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x4912c; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4912c: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x4913c: - r2 = r0 + 44; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49150; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49154; - return; - } - case 0x49154: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x4916c; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4916c: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x4917c: - r2 = r0 + 45; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49190; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49194; - return; - } - case 0x49194: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x491ac; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x491ac: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x491bc: - r2 = r0 + 46; - pc = 0x491c0; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x491c4; - return; - } - case 0x491c4: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x491cc: - r2 = r0 + 47; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x491e0; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x491e4; - return; - } - case 0x491e4: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x491fc; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x491fc: - r4 = r10 + r0; - case 0x49200: - pc=0x49200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_49200() throws ExecutionException { /* 0x49200 - 0x49400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x49200: - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x4920c: - r2 = r0 + 51; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49220; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49224; - return; - } - case 0x49224: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x4923c; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4923c: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x4924c: - r2 = r0 + 52; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49260; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49264; - return; - } - case 0x49264: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x4927c; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4927c: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x4928c: - r2 = r0 + 53; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - r7 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r8 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r9 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - pc = 0x492ac; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x492b0; - return; - } - case 0x492b0: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x492c8; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x492c8: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x492d8: - r2 = r0 + 55; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x492ec; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x492f0; - return; - } - case 0x492f0: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49308; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49308: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49318: - r2 = r0 + 54; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x4932c; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49330; - return; - } - case 0x49330: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49348; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49348: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49358: - r2 = r0 + 56; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x4936c; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49370; - return; - } - case 0x49370: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49388; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49388: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49398: - r2 = r0 + 57; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x493ac; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x493b0; - return; - } - case 0x493b0: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x493c8; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x493c8: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x493d8: - r2 = r0 + 58; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x493ec; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x493f0; - return; - } - case 0x493f0: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49408; - run_49400(); return; - } - case 0x49400: - pc=0x49400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_49400() throws ExecutionException { /* 0x49400 - 0x49600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x49400: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49408: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49418: - r2 = r0 + 59; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x4942c; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49430; - return; - } - case 0x49430: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49448; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49448: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49458: - r2 = r0 + 60; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - r7 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r8 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r9 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - pc = 0x49478; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x4947c; - return; - } - case 0x4947c: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49494; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49494: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x494a4: - r2 = r0 + 61; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - r7 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r8 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r9 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - pc = 0x494c4; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x494c8; - return; - } - case 0x494c8: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x494e0; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x494e0: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x494f0: - r2 = r0 + 62; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49504; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49508; - return; - } - case 0x49508: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49520; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49520: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49530: - r2 = r0 + 63; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49544; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49548; - return; - } - case 0x49548: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49560; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49560: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49570: - r2 = r0 + 64; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49584; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49588; - return; - } - case 0x49588: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x495a0; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x495a0: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x495b0: - r2 = r0 + 65; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - r7 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r8 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r9 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - pc = 0x495d0; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x495d4; - return; - } - case 0x495d4: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x495ec; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x495ec: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x495fc: - r2 = r0 + 66; - case 0x49600: - pc=0x49600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_49600() throws ExecutionException { /* 0x49600 - 0x49800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x49600: - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - r7 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r8 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r9 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - pc = 0x4961c; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49620; - return; - } - case 0x49620: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49638; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49638: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49648: - r2 = r0 + 67; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - r7 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r8 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r9 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - pc = 0x49668; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x4966c; - return; - } - case 0x4966c: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49684; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49684: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49694: - r2 = r0 + 73; - pc = 0x49698; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x4969c; - return; - } - case 0x4969c: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x496a4: - r2 = r0 + 68; - pc = 0x496a8; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x496ac; - return; - } - case 0x496ac: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x496b4: - r2 = r0 + 70; - pc = 0x496b8; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x496bc; - return; - } - case 0x496bc: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x496c4: - r2 = r0 + 69; - pc = 0x496c8; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x496cc; - return; - } - case 0x496cc: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x496d4: - r2 = r0 + 71; - pc = 0x496d8; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x496dc; - return; - } - case 0x496dc: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x496e4: - r2 = r0 + 82; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x496f8; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x496fc; - return; - } - case 0x496fc: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49714; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49714: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49724: - r2 = r0 + 83; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49738; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x4973c; - return; - } - case 0x4973c: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49754; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49754: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49764: - r2 = r0 + 84; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49778; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x4977c; - return; - } - case 0x4977c: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49794; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49794: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x497a4: - r2 = r0 + 85; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x497b8; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x497bc; - return; - } - case 0x497bc: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x497d4; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x497d4: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x497e4: - r2 = r0 + 80; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x497f8; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x497fc; - return; - } - case 0x497fc: - r11 = r2 + 255; - case 0x49800: - pc=0x49800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_49800() throws ExecutionException { /* 0x49800 - 0x49a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x49800: - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49814; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49814: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49824: - r2 = r0 + 86; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49838; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x4983c; - return; - } - case 0x4983c: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49854; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49854: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49864: - r2 = r0 + 81; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49878; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x4987c; - return; - } - case 0x4987c: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49894; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49894: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x498a4: - r2 = r0 + 87; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x498b8; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x498bc; - return; - } - case 0x498bc: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x498d4; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x498d4: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x498e4: - r2 = r0 + 88; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x498f8; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x498fc; - return; - } - case 0x498fc: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49914; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49914: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49924: - r2 = r0 + 78; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49938; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x4993c; - return; - } - case 0x4993c: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49954; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49954: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49964: - r2 = r0 + 76; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49978; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x4997c; - return; - } - case 0x4997c: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49994; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49994: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x499a4: - r2 = r0 + 77; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x499b8; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x499bc; - return; - } - case 0x499bc: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x499d4; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x499d4: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x499e4: - r2 = r0 + 74; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x499f8; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x499fc; - return; - } - case 0x499fc: - r11 = r2 + 255; - case 0x49a00: - pc=0x49a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_49a00() throws ExecutionException { /* 0x49a00 - 0x49c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x49a00: - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49a14; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49a14: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49a24: - r2 = r0 + 75; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49a38; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49a3c; - return; - } - case 0x49a3c: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49a54; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49a54: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49a64: - r2 = r0 + 79; - pc = 0x49a68; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49a6c; - return; - } - case 0x49a6c: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49a74: - r2 = r0 + 72; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49a88; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49a8c; - return; - } - case 0x49a8c: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49aa4; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49aa4: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49ab4: - r2 = r0 + 90; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49ac8; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49acc; - return; - } - case 0x49acc: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49ae4; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49ae4: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49af4: - r2 = r0 + 89; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49b08; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49b0c; - return; - } - case 0x49b0c: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49b24; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49b24: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49b34: - r2 = r0 + 91; - r10 = r4 + r0; - r4 = r5 + r0; - r5 = r6 + r0; - r6 = r7 + r0; - pc = 0x49b48; - r2 = syscall(r2,r4,r5,r6,r7,r8,r9); - if (state != RUNNING) { - pc = 0x49b4c; - return; - } - case 0x49b4c: - r11 = r2 + 255; - r11 = (r11&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x49b64; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x49b64: - r4 = r10 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49c00; - run_49c00(); return; - case 0x49c00: - pc=0x49c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_49c00() throws ExecutionException { /* 0x49c00 - 0x49e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x49c00: + case 0x57000: r5 = r0 - r5; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; + page[(r4+0)>>>2] = r5; r2 = r0 + -1; - /* Next insn is delay slot */ pc=r31; return; - case 0x49e00: - pc=0x49e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_49e00() throws ExecutionException { /* 0x49e00 - 0x4a000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x49e00: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x48b40; - run_48a00(); return; - case 0x4a000: - pc=0x4a000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4a000() throws ExecutionException { /* 0x4a000 - 0x4a200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4a000: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49924; - run_49800(); return; - case 0x4a200: - pc=0x4a200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4a200() throws ExecutionException { /* 0x4a200 - 0x4a400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4a200: - r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x48e10; - run_48e00(); return; - case 0x4a400: - pc=0x4a400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4a400() throws ExecutionException { /* 0x4a400 - 0x4a600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4a400: - r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x48e50; - run_48e00(); return; - case 0x4a600: - pc=0x4a600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4a600() throws ExecutionException { /* 0x4a600 - 0x4a800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4a600: - r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x48c10; - run_48c00(); return; - case 0x4a800: - pc=0x4a800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4a800() throws ExecutionException { /* 0x4a800 - 0x4aa00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4a800: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x48bd0; - run_48a00(); return; - case 0x4aa00: - pc=0x4aa00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4aa00() throws ExecutionException { /* 0x4aa00 - 0x4ac00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4aa00: - r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x48c50; - run_48c00(); return; - case 0x4ac00: - pc=0x4ac00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4ac00() throws ExecutionException { /* 0x4ac00 - 0x4ae00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4ac00: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x48c90; - run_48c00(); return; - case 0x4ae00: - pc=0x4ae00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4ae00() throws ExecutionException { /* 0x4ae00 - 0x4b000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4ae00: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x48d10; - run_48c00(); return; - case 0x4b000: - pc=0x4b000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4b000() throws ExecutionException { /* 0x4b000 - 0x4b200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4b000: - r29 = r29 + -40; - r2 = r4 + r0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - r18 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x4b070; - continue; - } - r6 = r5 + r0; - r4 = r18 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - r31=0x4b040; - pc=0x48d50; - run_48c00(); return; - case 0x4b040: - r3 = r0 + -1; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x4b0c4; - continue; - } - case 0x4b04c: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4b070: - r16 = r0 + 256; - r19 = r0 + -1; - r20 = r0 + 34; - case 0x4b07c: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x4b088; - pc=0x3e800; - run_3e800(); return; - case 0x4b088: - r5 = r2 + r0; - r4 = r18 + r0; - r6 = r16 + r0; - r17 = r2 + r0; - /* Next insn is delay slot */ - r31=0x4b0a0; - pc=0x48d50; - run_48c00(); return; - case 0x4b0a0: - if(r2 != r19) { - /* Next insn is delay slot */ - pc=0x4b04c; - continue; - } - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x4b0b4; - pc=0x3ea00; - run_3ea00(); return; - case 0x4b0b4: - r2 = readPages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff]; - r16 = r16 << 1; - if(r2 == r20) { - /* Next insn is delay slot */ - pc=0x4b07c; - continue; - } - case 0x4b0c4: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4b200: - pc=0x4b200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4b200() throws ExecutionException { /* 0x4b200 - 0x4b400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4b200: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x48d50; - run_48c00(); return; - case 0x4b400: - pc=0x4b400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4b400() throws ExecutionException { /* 0x4b400 - 0x4b600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4b400: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x48f10; - run_48e00(); return; - case 0x4b600: - pc=0x4b600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4b600() throws ExecutionException { /* 0x4b600 - 0x4b800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4b600: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x48e90; - run_48e00(); return; - case 0x4b800: - pc=0x4b800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4b800() throws ExecutionException { /* 0x4b800 - 0x4ba00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4b800: - r3 = r4 + r0; - r2 = r5 & 65535; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 & 65535; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49964; - run_49800(); return; - case 0x4ba00: - pc=0x4ba00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4ba00() throws ExecutionException { /* 0x4ba00 - 0x4bc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4ba00: - r3 = r4 + r0; - r2 = r5 & 65535; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 & 65535; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x499a4; - run_49800(); return; - case 0x4bc00: - pc=0x4bc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4bc00() throws ExecutionException { /* 0x4bc00 - 0x4be00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4bc00: - r3 = r4 + r0; - r2 = r5 & 65535; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 & 65535; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x490fc; - run_49000(); return; - case 0x4be00: - pc=0x4be00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4be00() throws ExecutionException { /* 0x4be00 - 0x4c000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4be00: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x499e4; - run_49800(); return; - case 0x4c000: - pc=0x4c000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4c000() throws ExecutionException { /* 0x4c000 - 0x4c200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4c000: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49a24; - run_49a00(); return; - case 0x4c200: - pc=0x4c200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4c200() throws ExecutionException { /* 0x4c200 - 0x4c400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4c200: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x48ed0; - run_48e00(); return; - case 0x4c400: - pc=0x4c400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4c400() throws ExecutionException { /* 0x4c400 - 0x4c600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4c400: - r29 = r29 + -32; - r8 = r4 + r0; - r3 = r5 + r0; - r2 = r6 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r8 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - r6 = r3 + r0; - r7 = r2 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x4c430; - pc=0x48f90; - run_48e00(); return; - case 0x4c430: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4c600: - pc=0x4c600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4c600() throws ExecutionException { /* 0x4c600 - 0x4c800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4c600: - r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x48ffc; - run_48e00(); return; - case 0x4c800: - pc=0x4c800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4c800() throws ExecutionException { /* 0x4c800 - 0x4ca00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4c800: - r29 = r29 + -24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - r16 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r4 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r5 = 7 << 16; - r5 = r5 + 1056; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x4c828; - pc=0x3bc00; - run_3bc00(); return; - case 0x4c828: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 22; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r0 + -1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4ca00: - pc=0x4ca00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4ca00() throws ExecutionException { /* 0x4ca00 - 0x4cc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4ca00: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x4903c; - run_49000(); return; - case 0x4cc00: - pc=0x4cc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4cc00() throws ExecutionException { /* 0x4cc00 - 0x4ce00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4cc00: - r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x4907c; - run_49000(); return; - case 0x4ce00: - pc=0x4ce00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4ce00() throws ExecutionException { /* 0x4ce00 - 0x4d000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4ce00: - r3 = r4 + r0; - r2 = r5 + r0; - r7 = r6 << 16; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r7 >> 16; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x490bc; - run_49000(); return; - case 0x4d000: - pc=0x4d000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4d000() throws ExecutionException { /* 0x4d000 - 0x4d200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4d000: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x4913c; - run_49000(); return; - case 0x4d200: - pc=0x4d200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4d200() throws ExecutionException { /* 0x4d200 - 0x4d400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4d200: - r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x4917c; - run_49000(); return; - case 0x4d400: - pc=0x4d400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4d400() throws ExecutionException { /* 0x4d400 - 0x4d600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4d400: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x491cc; - run_49000(); return; - case 0x4d600: - pc=0x4d600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4d600() throws ExecutionException { /* 0x4d600 - 0x4d800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4d600: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x4920c; - run_49200(); return; - case 0x4d800: - pc=0x4d800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4d800() throws ExecutionException { /* 0x4d800 - 0x4da00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4d800: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x4924c; - run_49200(); return; - case 0x4da00: - pc=0x4da00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4da00() throws ExecutionException { /* 0x4da00 - 0x4dc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4da00: - r29 = r29 + -40; - r8 = r4 + r0; - r4 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r3 = r5 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r4; - r4 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r2 = r6 + r0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r4; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - r5 = r8 + r0; - r6 = r3 + r0; - r7 = r2 + r0; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x4da40; - pc=0x4928c; - run_49200(); return; - case 0x4da40: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4dc00: - pc=0x4dc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4dc00() throws ExecutionException { /* 0x4dc00 - 0x4de00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4dc00: - r2 = r4 + r0; - r4 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r29 = r29 + -40; - r3 = r0 + 8; - r8 = r5 + r0; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - r16 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x4dc64; - continue; - } - r3 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x4dca8; - continue; - } - r3 = r0 + 2; - if(r5 == r3) { - /* Next insn is delay slot */ - pc=0x4dcc8; - continue; - } - case 0x4dc44: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r2 = r0 + 22; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - r16 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r2 = r0 + -1; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4dc64: - r3 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r9 = r6 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r3; - r4 = r16 + r0; - r5 = r2 + r0; - r6 = r8 + r0; - r7 = r9 + r0; - /* Next insn is delay slot */ - r31=0x4dc94; - pc=0x4928c; - run_49200(); return; - case 0x4dc94: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r16 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4dca8: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r2 = r0 + 1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - r16 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r2 = r0 + -1; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4dcc8: - r4 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r5 = 7 << 16; - r6 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r5 = r5 + 1096; - /* Next insn is delay slot */ - r31=0x4dce0; - pc=0x3bc00; - run_3bc00(); return; - case 0x4dce0: - /* Next insn is delay slot */ - pc=0x4dc44; - continue; - case 0x4de00: - pc=0x4de00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4de00() throws ExecutionException { /* 0x4de00 - 0x4e000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4de00: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x492d8; - run_49200(); return; - case 0x4e000: - pc=0x4e000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4e000() throws ExecutionException { /* 0x4e000 - 0x4e200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4e000: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49318; - run_49200(); return; - case 0x4e200: - pc=0x4e200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4e200() throws ExecutionException { /* 0x4e200 - 0x4e400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4e200: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49398; - run_49200(); return; - case 0x4e400: - pc=0x4e400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4e400() throws ExecutionException { /* 0x4e400 - 0x4e600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4e400: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49358; - run_49200(); return; - case 0x4e600: - pc=0x4e600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4e600() throws ExecutionException { /* 0x4e600 - 0x4e800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4e600: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x493d8; - run_49200(); return; - case 0x4e800: - pc=0x4e800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4e800() throws ExecutionException { /* 0x4e800 - 0x4ea00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4e800: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49af4; - run_49a00(); return; - case 0x4ea00: - pc=0x4ea00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4ea00() throws ExecutionException { /* 0x4ea00 - 0x4ec00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4ea00: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49418; - run_49400(); return; - case 0x4ec00: - pc=0x4ec00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4ec00() throws ExecutionException { /* 0x4ec00 - 0x4ee00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4ec00: - r29 = r29 + -32; - r8 = r4 + r0; - r4 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r3 = r5 + r0; - r2 = r6 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r4; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - r5 = r8 + r0; - r6 = r3 + r0; - r7 = r2 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x4ec38; - pc=0x494a4; - run_49400(); return; - case 0x4ec38: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4ee00: - pc=0x4ee00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4ee00() throws ExecutionException { /* 0x4ee00 - 0x4f000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4ee00: - r29 = r29 + -32; - r8 = r4 + r0; - r4 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r3 = r5 + r0; - r2 = r6 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r4; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - r5 = r8 + r0; - r6 = r3 + r0; - r7 = r2 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x4ee38; - pc=0x49458; - run_49400(); return; - case 0x4ee38: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4f000: - pc=0x4f000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4f000() throws ExecutionException { /* 0x4f000 - 0x4f200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4f000: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49530; - run_49400(); return; - case 0x4f200: - pc=0x4f200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4f200() throws ExecutionException { /* 0x4f200 - 0x4f400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4f200: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x494f0; - run_49400(); return; - case 0x4f400: - pc=0x4f400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4f400() throws ExecutionException { /* 0x4f400 - 0x4f600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4f400: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49570; - run_49400(); return; - case 0x4f600: - pc=0x4f600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4f600() throws ExecutionException { /* 0x4f600 - 0x4f800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4f600: - r29 = r29 + -40; - r8 = r4 + r0; - r4 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r3 = r5 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r4; - r4 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r2 = r6 + r0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r4; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - r5 = r8 + r0; - r6 = r3 + r0; - r7 = r2 + r0; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x4f640; - pc=0x495b0; - run_49400(); return; - case 0x4f640: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4f800: - pc=0x4f800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4f800() throws ExecutionException { /* 0x4f800 - 0x4fa00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4f800: - r29 = r29 + -40; - r8 = r4 + r0; - r4 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r3 = r5 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r4; - r4 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r2 = r6 + r0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r4; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - r5 = r8 + r0; - r6 = r3 + r0; - r7 = r2 + r0; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x4f840; - pc=0x495fc; - run_49400(); return; - case 0x4f840: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4fa00: - pc=0x4fa00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4fa00() throws ExecutionException { /* 0x4fa00 - 0x4fc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4fa00: - r29 = r29 + -32; - r8 = r4 + r0; - r4 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r3 = r5 + r0; - r2 = r6 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r4; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - r5 = r8 + r0; - r6 = r3 + r0; - r7 = r2 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x4fa38; - pc=0x49648; - run_49600(); return; - case 0x4fa38: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4fc00: - pc=0x4fc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4fc00() throws ExecutionException { /* 0x4fc00 - 0x4fe00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4fc00: - r29 = r29 + -32; - r8 = r4 + r0; - r3 = r5 + r0; - r2 = r6 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r8 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - r6 = r3 + r0; - r7 = r2 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x4fc30; - pc=0x496e4; - run_49600(); return; - case 0x4fc30: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x4fe00: - pc=0x4fe00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_4fe00() throws ExecutionException { /* 0x4fe00 - 0x50000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x4fe00: - r29 = r29 + -32; - r8 = r4 + r0; - r3 = r5 + r0; - r2 = r6 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r8 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - r6 = r3 + r0; - r7 = r2 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x4fe30; - pc=0x49724; - run_49600(); return; - case 0x4fe30: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x50000: - pc=0x50000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_50000() throws ExecutionException { /* 0x50000 - 0x50200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x50000: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49a74; - run_49a00(); return; - case 0x50200: - pc=0x50200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_50200() throws ExecutionException { /* 0x50200 - 0x50400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x50200: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x49764; - run_49600(); return; - case 0x50400: - pc=0x50400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_50400() throws ExecutionException { /* 0x50400 - 0x50600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x50400: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x497a4; - run_49600(); return; - case 0x50600: - pc=0x50600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_50600() throws ExecutionException { /* 0x50600 - 0x50800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x50600: - r5 = r4 & 65535; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x497e4; - run_49600(); return; - case 0x50800: - pc=0x50800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_50800() throws ExecutionException { /* 0x50800 - 0x50a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x50800: - r5 = r4 & 65535; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x49824; - run_49800(); return; - case 0x50a00: - pc=0x50a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_50a00() throws ExecutionException { /* 0x50a00 - 0x50c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x50a00: - r5 = r4 & 65535; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x49864; - run_49800(); return; - case 0x50c00: - pc=0x50c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_50c00() throws ExecutionException { /* 0x50c00 - 0x50e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x50c00: - r5 = r4 & 65535; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x498a4; - run_49800(); return; - case 0x50e00: - pc=0x50e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_50e00() throws ExecutionException { /* 0x50e00 - 0x51000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x50e00: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x498e4; - run_49800(); return; - case 0x51000: - pc=0x51000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_51000() throws ExecutionException { /* 0x51000 - 0x51200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x51000: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x49ab4; - run_49a00(); return; - case 0x51200: - pc=0x51200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_51200() throws ExecutionException { /* 0x51200 - 0x51400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x51200: - r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x49b34; - run_49a00(); return; - case 0x51400: - pc=0x51400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_51400() throws ExecutionException { /* 0x51400 - 0x51600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x51400: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x48d90; - run_48c00(); return; - case 0x51600: - pc=0x51600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_51600() throws ExecutionException { /* 0x51600 - 0x51800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x51600: - r29 = r29 + -40; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x5165c; - continue; - } - /* Next insn is delay slot */ - r31=0x5162c; - pc=0x48d50; - run_48c00(); return; - case 0x5162c: - r3 = r0 + -1; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x516b4; - continue; - } - case 0x51638: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5165c: - r18 = r4 + r0; - r16 = r0 + 256; - r19 = r0 + -1; - r20 = r0 + 34; - case 0x5166c: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x51678; - pc=0x3e800; - run_3e800(); return; - case 0x51678: - r5 = r2 + r0; - r4 = r18 + r0; - r6 = r16 + r0; - r17 = r2 + r0; - /* Next insn is delay slot */ - r31=0x51690; - pc=0x48d50; - run_48c00(); return; - case 0x51690: - if(r2 != r19) { - /* Next insn is delay slot */ - pc=0x51638; - continue; - } - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x516a4; - pc=0x3ea00; - run_3ea00(); return; - case 0x516a4: - r2 = readPages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff]; - r16 = r16 << 1; - if(r2 == r20) { - /* Next insn is delay slot */ - pc=0x5166c; - continue; - } - case 0x516b4: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x51800: - pc=0x51800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_51800() throws ExecutionException { /* 0x51800 - 0x51a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x51800: - r6 = r5 + r0; - r7 = r0 + r0; - r5 = r0 + -1; - /* Next insn is delay slot */ - pc=0x48d10; - run_48c00(); return; - case 0x51a00: - pc=0x51a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_51a00() throws ExecutionException { /* 0x51a00 - 0x51c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x51a00: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r29 = r29 + -24; - r5 = 7 << 16; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - r16 = r4 + r0; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r5 = r5 + 1056; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x51a28; - pc=0x3bc00; - run_3bc00(); return; - case 0x51a28: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 22; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r0 + -1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x51c00: - pc=0x51c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_51c00() throws ExecutionException { /* 0x51c00 - 0x51e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x51c00: - r8 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r29 = r29 + -24; - r3 = r0 + 8; - r2 = r5 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - r9 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - if(r8 != r3) { - /* Next insn is delay slot */ - pc=0x51c5c; - continue; - } - r16 = r4 + r0; - if(r9 != r0) { - /* Next insn is delay slot */ - pc=0x51c74; - continue; - } - r3 = r0 + 2; - if(r6 == r3) { - /* Next insn is delay slot */ - pc=0x51c94; - continue; - } - case 0x51c3c: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 22; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r0 + -1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x51c5c: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=0x4928c; - run_49200(); return; - case 0x51c74: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 1; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r2; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r0 + -1; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x51c94: - r3 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = 7 << 16; - r4 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r6 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r5 = r5 + 1096; - /* Next insn is delay slot */ - r31=0x51cb0; - pc=0x3bc00; - run_3bc00(); return; - case 0x51cb0: - /* Next insn is delay slot */ - pc=0x51c3c; - continue; - case 0x51e00: - pc=0x51e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_51e00() throws ExecutionException { /* 0x51e00 - 0x52000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x51e00: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x52000: - pc=0x52000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_52000() throws ExecutionException { /* 0x52000 - 0x52200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x52000: - r29 = r29 + -24; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x52010; - pc=0x5a200; - run_5a200(); return; - case 0x52010: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x52030; - continue; - } - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = 7 << 16; - r2 = r2 + 1132; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x52030: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x52200: - pc=0x52200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_52200() throws ExecutionException { /* 0x52200 - 0x52400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x52200: - r29 = r29 + -32; - r2 = r5 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - r16 = r6 + r0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x522b8; - continue; - } - r3 = readPages[(r5+8)>>>12][((r5+8)>>>2)&0x3ff]; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x52288; - continue; - } - r5 = readPages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff]; - r3 = r0 + -1; - if(r5 != r3) { - /* Next insn is delay slot */ - pc=0x52288; - continue; - } - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x52250; - pc=0x5ea00; - run_5ea00(); return; - case 0x52250: - r17 = r2 + r0; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x52268; - continue; - } - case 0x5225c: - r2 = r0 + -1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r17; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - case 0x52268: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x52288: - /* Next insn is delay slot */ - r31=0x52290; - pc=0x38c00; - run_38c00(); return; - case 0x52290: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r3 = r0 + 22; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r0 + -1; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x522b8: - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x52268; - continue; - } - r18 = r4 + r0; - /* Next insn is delay slot */ - r31=0x522cc; - pc=0x5ea00; - run_5ea00(); return; - case 0x522cc: - r5 = r2 + r0; - r4 = r18 + r0; - r17 = r2 + r0; - /* Next insn is delay slot */ - r31=0x522e0; - pc=0x5ea00; - run_5ea00(); return; - case 0x522e0: - /* Next insn is delay slot */ - pc=0x5225c; - continue; - case 0x52400: - pc=0x52400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_52400() throws ExecutionException { /* 0x52400 - 0x52600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x52400: - r29 = r29 + -96; - r5 = r0 + r0; - writePages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff] = r17; - writePages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff] = r31; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x5241c; - pc=0x63000; - run_63000(); return; - case 0x5241c: - r17 = r2 + r0; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x524ec; - continue; - } - r4 = r2 + r0; - r5 = r29 + 16; - /* Next insn is delay slot */ - r31=0x52438; - pc=0x62e00; - run_62e00(); return; - case 0x52438: - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x524b4; - continue; - } - r3 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r2 = r0 + 16384; - r3 = r3 & 61440; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x524b4; - continue; - } - r4 = r0 + 20; - /* Next insn is delay slot */ - r31=0x52460; - pc=0x3e800; - run_3e800(); return; - case 0x52460: - r16 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x524f8; - continue; - } - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r17; - r4 = r0 + 4096; - /* Next insn is delay slot */ - r31=0x5247c; - pc=0x3e800; - run_3e800(); return; - case 0x5247c: - r3 = r0 + 4096; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = r3; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x52520; - continue; - } - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r0; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r0; - r2 = r16 + r0; - case 0x5249c: - r31 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - r17 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r16 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r29 = r29 + 96; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x524b4: - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x524c0; - pc=0x62a00; - run_62a00(); return; - case 0x524c0: - /* Next insn is delay slot */ - r31=0x524c8; - pc=0x38c00; - run_38c00(); return; - case 0x524c8: - r31 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - r3 = r0 + 20; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r17 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r16 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 96; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x524ec: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5249c; - continue; - case 0x524f8: - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x52504; - pc=0x62a00; - run_62a00(); return; - case 0x52504: - /* Next insn is delay slot */ - r31=0x5250c; - pc=0x38c00; - run_38c00(); return; - case 0x5250c: - r3 = r0 + 12; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5249c; - continue; - case 0x52520: - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x5252c; - pc=0x62a00; - run_62a00(); return; - case 0x5252c: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x52538; - pc=0x3ea00; - run_3ea00(); return; - case 0x52538: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5249c; - continue; - case 0x52600: - pc=0x52600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_52600() throws ExecutionException { /* 0x52600 - 0x52800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x52600: - r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - r16 = r4 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x52618; - pc=0x38c00; - run_38c00(); return; - case 0x52618: - r3 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x52684; - continue; - } - r5 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - if(r3 == r5) { - /* Next insn is delay slot */ - pc=0x52684; - continue; - } - r6 = r3 + r0; - case 0x5263c: - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = r2 + r6; - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x526c4; - continue; - } - r3 = r5 - r3; - r3 = ((r3 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x526c4; - continue; - } - r4 = r6 + r4; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r4; - case 0x52670: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x52684: - r5 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r6 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r7 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - r31=0x526a0; - pc=0x48f90; - run_48e00(); return; - case 0x526a0: - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r2; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r0; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x526dc; - continue; - } - r5 = r2 + r0; - r6 = r0 + r0; - r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5263c; - continue; - case 0x526c4: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x526dc: - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r0; - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x52670; - continue; - case 0x52800: - pc=0x52800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_52800() throws ExecutionException { /* 0x52800 - 0x52a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x52800: - r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r17 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r16 = r4 + r0; - r4 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x52824; - pc=0x3ea00; - run_3ea00(); return; - case 0x52824: - r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x52830; - pc=0x3ea00; - run_3ea00(); return; - case 0x52830: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r4 = r17 + r0; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x62a00; - run_62a00(); return; - case 0x52a00: - pc=0x52a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_52a00() throws ExecutionException { /* 0x52a00 - 0x52c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x52a00: - r2 = r4 >>> 16; - r29 = r29 + -40; - r2 = r2 & 255; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r2 = r4 >>> 8; - r2 = r2 & 255; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - r16 = 7 << 16; - r2 = r4 & 255; - r7 = r4 + r0; - r6 = 7 << 16; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - r4 = r16 + 23428; - r5 = r0 + 18; - r6 = r6 + 1148; - r7 = r7 >>> 24; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x52a50; - pc=0x41c00; - run_41c00(); return; - case 0x52a50: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r2 = r16 + 23428; - r16 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x52c00: - pc=0x52c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_52c00() throws ExecutionException { /* 0x52c00 - 0x52e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x52c00: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x52e00: - pc=0x52e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_52e00() throws ExecutionException { /* 0x52e00 - 0x53000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x52e00: - r2 = (r4&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x52e28; - continue; - } - r2 = 7 << 16; - r2 = r2 + 1396; - r4 = r4 << 2; - r4 = r4 + r2; - r2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x52e28: - r2 = 7 << 16; - r2 = r2 + 1160; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x53000: - pc=0x53000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_53000() throws ExecutionException { /* 0x53000 - 0x53200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x53000: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r4 + r0; - r4 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r2 = readPages[(r28+-30568)>>>12][((r28+-30568)>>>2)&0x3ff]; - r3 = (r2&0xffffffffL) < (5&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x53044; - continue; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + 1396; - r2 = r2 + r3; - r5 = 7 << 16; - r7 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r5 = r5 + 1176; - /* Next insn is delay slot */ - pc=0x3bc00; - run_3bc00(); return; - case 0x53044: - r7 = 7 << 16; - r5 = 7 << 16; - r7 = r7 + 1160; - r5 = r5 + 1176; - /* Next insn is delay slot */ - pc=0x3bc00; - run_3bc00(); return; - case 0x53200: - pc=0x53200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_53200() throws ExecutionException { /* 0x53200 - 0x53400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x53200: - r29 = r29 + -40; - r2 = r0 + 2; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - r16 = r6 + r0; - if(r6 != r2) { - /* Next insn is delay slot */ - pc=0x532d4; - continue; - } - r2 = r0 + 4; - r17 = r5 + r0; - if(r5 != r2) { - /* Next insn is delay slot */ - pc=0x532d4; - continue; - } - r18 = r4 + r0; - r5 = r18 + r0; - r4 = r29 + 16; - r6 = r0 + 4; - /* Next insn is delay slot */ - r31=0x5324c; - pc=0x48fdc; - run_48e00(); return; - case 0x5324c: - r5 = r18 + r0; - r4 = r28 + -30624; - r6 = r0 + 4; - /* Next insn is delay slot */ - r31=0x53260; - pc=0x48fdc; - run_48e00(); return; - case 0x53260: - r18 = 7 << 16; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r6 = r18 + 23300; - r7 = r0 + 128; - /* Next insn is delay slot */ - r31=0x5327c; - pc=0x49af4; - run_49a00(); return; - case 0x5327c: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x532f4; - continue; - } - r2 = 7 << 16; - r18 = r18 + 23300; - writePages[(r2+23280)>>>12][((r2+23280)>>>2)&0x3ff] = r18; - r3 = r28 + -30628; - r2 = r2 + 23280; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r3 = r28 + -30632; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r3; - r3 = r28 + -30624; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r16; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r17; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - writePages[(r28+-30628)>>>12][((r28+-30628)>>>2)&0x3ff] = r0; - writePages[(r28+-30632)>>>12][((r28+-30632)>>>2)&0x3ff] = r3; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x532d4: - r2 = r0 + r0; - case 0x532d8: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x532f4: - writePages[(r28+-30568)>>>12][((r28+-30568)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x532d8; - continue; - case 0x53400: - pc=0x53400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_53400() throws ExecutionException { /* 0x53400 - 0x53600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x53400: - r29 = r29 + -1064; - writePages[(r29+1056)>>>12][((r29+1056)>>>2)&0x3ff] = r18; - r18 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r2 = r0 + 1024; - r5 = r18 + r0; - r6 = r29 + 16; - r7 = r29 + 1040; - writePages[(r29+1060)>>>12][((r29+1060)>>>2)&0x3ff] = r31; - writePages[(r29+1052)>>>12][((r29+1052)>>>2)&0x3ff] = r17; - writePages[(r29+1048)>>>12][((r29+1048)>>>2)&0x3ff] = r16; - writePages[(r29+1040)>>>12][((r29+1040)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x53438; - pc=0x493d8; - run_49200(); return; - case 0x53438: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5351c; - continue; - } - r17 = readPages[(r29+1040)>>>12][((r29+1040)>>>2)&0x3ff]; - r9 = 7 << 16; - r9 = r9 + 22256; - r4 = r9 + r0; - r5 = r29 + 16; - r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x53460; - pc=0x48fdc; - run_48e00(); return; - case 0x53460: - r9 = r2 + r0; - if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x53540; - continue; - } - r16 = 7 << 16; - r3 = r0 + r0; - r7 = r0 + r0; - r2 = r0 + r0; - r16 = r16 + 21228; - /* Next insn is delay slot */ - pc=0x5348c; - continue; - case 0x53488: - r3 = r2 + r0; - case 0x5348c: - r8 = r16 + r3; - r2 = r9 + r2; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r2; - r2 = r3 + 4; - r3 = ((r2 & 0xffffffffL) < (r17 & 0xffffffffL)) ? 1 : 0; - r7 = r7 + 1; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x53488; - continue; - } - case 0x534ac: - r2 = r7 << 2; - r17 = 7 << 16; - r2 = r16 + r2; - r4 = r17 + 21100; - r5 = r18 + r0; - r6 = r0 + 128; - r17 = r17 + 21100; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - r31=0x534d4; - pc=0x5f400; - run_5f400(); return; - case 0x534d4: - r2 = 7 << 16; - writePages[(r2+21080)>>>12][((r2+21080)>>>2)&0x3ff] = r17; - r3 = r28 + -30636; - r2 = r2 + 21080; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r3; - r31 = readPages[(r29+1060)>>>12][((r29+1060)>>>2)&0x3ff]; - r3 = r0 + 2; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r3; - r3 = r0 + 4; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r16; - r18 = readPages[(r29+1056)>>>12][((r29+1056)>>>2)&0x3ff]; - r17 = readPages[(r29+1052)>>>12][((r29+1052)>>>2)&0x3ff]; - r16 = readPages[(r29+1048)>>>12][((r29+1048)>>>2)&0x3ff]; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - writePages[(r28+-30636)>>>12][((r28+-30636)>>>2)&0x3ff] = r0; - r29 = r29 + 1064; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5351c: - r31 = readPages[(r29+1060)>>>12][((r29+1060)>>>2)&0x3ff]; - r18 = readPages[(r29+1056)>>>12][((r29+1056)>>>2)&0x3ff]; - r17 = readPages[(r29+1052)>>>12][((r29+1052)>>>2)&0x3ff]; - r16 = readPages[(r29+1048)>>>12][((r29+1048)>>>2)&0x3ff]; - writePages[(r28+-30568)>>>12][((r28+-30568)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - r29 = r29 + 1064; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x53540: - r16 = 7 << 16; - r7 = r0 + r0; - r16 = r16 + 21228; - /* Next insn is delay slot */ - pc=0x534ac; - continue; - case 0x53600: - pc=0x53600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_53600() throws ExecutionException { /* 0x53600 - 0x53800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x53600: - r29 = r29 + -1088; - r5 = 7 << 16; - writePages[(r29+1080)>>>12][((r29+1080)>>>2)&0x3ff] = r30; - r30 = r4 + r0; - r4 = 7 << 16; - r4 = r4 + 1184; - r5 = r5 + -632; - writePages[(r29+1052)>>>12][((r29+1052)>>>2)&0x3ff] = r17; - writePages[(r29+1084)>>>12][((r29+1084)>>>2)&0x3ff] = r31; - writePages[(r29+1076)>>>12][((r29+1076)>>>2)&0x3ff] = r23; - writePages[(r29+1072)>>>12][((r29+1072)>>>2)&0x3ff] = r22; - writePages[(r29+1068)>>>12][((r29+1068)>>>2)&0x3ff] = r21; - writePages[(r29+1064)>>>12][((r29+1064)>>>2)&0x3ff] = r20; - writePages[(r29+1060)>>>12][((r29+1060)>>>2)&0x3ff] = r19; - writePages[(r29+1056)>>>12][((r29+1056)>>>2)&0x3ff] = r18; - writePages[(r29+1048)>>>12][((r29+1048)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x53648; - pc=0x3b800; - run_3b800(); return; - case 0x53648: - r17 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x53728; - continue; - } - r21 = 7 << 16; - r22 = 7 << 16; - r21 = r21 + 24472; - r23 = 7 << 16; - r22 = r22 + 1196; - r18 = 7 << 16; - r20 = 7 << 16; - r19 = r21 + r0; - case 0x53674: - r16 = r0 + 35; - case 0x53678: - r4 = r29 + 24; - r5 = r0 + 1024; - r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x5368c; - pc=0x59400; - run_59400(); return; - case 0x5368c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5371c; - continue; - } - addr=r29+24; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x53678; - continue; - } - r2 = r23 + 30624; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r4 = r29 + 24; - r5 = r22 + r0; - r6 = r21 + r0; - r7 = r18 + 23448; - /* Next insn is delay slot */ - r31=0x536c4; - pc=0x5f000; - run_5f000(); return; - case 0x536c4: - r2 = r2 < 3 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5371c; - continue; - } - r16 = r20 + 30616; - r2 = r18 + 23448; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - r4 = r30 + r0; - r2 = r28 + -30620; - r5 = r19 + r0; - writePages[(r20+30616)>>>12][((r20+30616)>>>2)&0x3ff] = r19; - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = r2; - writePages[(r28+-30620)>>>12][((r28+-30620)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - r31=0x536fc; - pc=0x42c00; - run_42c00(); return; - case 0x536fc: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x53674; - continue; - } - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x53710; - pc=0x39200; - run_39200(); return; - case 0x53710: - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x5372c; - continue; - case 0x5371c: - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x53728; - pc=0x39200; - run_39200(); return; - case 0x53728: - r2 = r0 + r0; - case 0x5372c: - r31 = readPages[(r29+1084)>>>12][((r29+1084)>>>2)&0x3ff]; - r30 = readPages[(r29+1080)>>>12][((r29+1080)>>>2)&0x3ff]; - r23 = readPages[(r29+1076)>>>12][((r29+1076)>>>2)&0x3ff]; - r22 = readPages[(r29+1072)>>>12][((r29+1072)>>>2)&0x3ff]; - r21 = readPages[(r29+1068)>>>12][((r29+1068)>>>2)&0x3ff]; - r20 = readPages[(r29+1064)>>>12][((r29+1064)>>>2)&0x3ff]; - r19 = readPages[(r29+1060)>>>12][((r29+1060)>>>2)&0x3ff]; - r18 = readPages[(r29+1056)>>>12][((r29+1056)>>>2)&0x3ff]; - r17 = readPages[(r29+1052)>>>12][((r29+1052)>>>2)&0x3ff]; - r16 = readPages[(r29+1048)>>>12][((r29+1048)>>>2)&0x3ff]; - r29 = r29 + 1088; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x53800: - pc=0x53800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_53800() throws ExecutionException { /* 0x53800 - 0x53a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x53800: - r29 = r29 + -1088; - r5 = 7 << 16; - writePages[(r29+1076)>>>12][((r29+1076)>>>2)&0x3ff] = r23; - r23 = r4 & 65535; - r4 = 7 << 16; - r4 = r4 + 1184; - r5 = r5 + -632; - writePages[(r29+1052)>>>12][((r29+1052)>>>2)&0x3ff] = r17; - writePages[(r29+1084)>>>12][((r29+1084)>>>2)&0x3ff] = r31; - writePages[(r29+1080)>>>12][((r29+1080)>>>2)&0x3ff] = r30; - writePages[(r29+1072)>>>12][((r29+1072)>>>2)&0x3ff] = r22; - writePages[(r29+1068)>>>12][((r29+1068)>>>2)&0x3ff] = r21; - writePages[(r29+1064)>>>12][((r29+1064)>>>2)&0x3ff] = r20; - writePages[(r29+1060)>>>12][((r29+1060)>>>2)&0x3ff] = r19; - writePages[(r29+1056)>>>12][((r29+1056)>>>2)&0x3ff] = r18; - writePages[(r29+1048)>>>12][((r29+1048)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x53848; - pc=0x3b800; - run_3b800(); return; - case 0x53848: - r17 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5391c; - continue; - } - r20 = 7 << 16; - r21 = 7 << 16; - r20 = r20 + 24472; - r22 = 7 << 16; - r21 = r21 + 1196; - r18 = 7 << 16; - r19 = 7 << 16; - r30 = r20 + r0; - case 0x53874: - r16 = r0 + 35; - case 0x53878: - r4 = r29 + 24; - r5 = r0 + 1024; - r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x5388c; - pc=0x59400; - run_59400(); return; - case 0x5388c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x53910; - continue; - } - addr=r29+24; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x53878; - continue; - } - r2 = r22 + 30624; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r4 = r29 + 24; - r5 = r21 + r0; - r6 = r20 + r0; - r7 = r18 + 23448; - /* Next insn is delay slot */ - r31=0x538c4; - pc=0x5f000; - run_5f000(); return; - case 0x538c4: - r2 = r2 < 3 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x53910; - continue; - } - r16 = r19 + 30616; - r2 = r18 + 23448; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - r2 = r28 + -30620; - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = r2; - addr=r16+8; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - writePages[(r19+30616)>>>12][((r19+30616)>>>2)&0x3ff] = r30; - writePages[(r28+-30620)>>>12][((r28+-30620)>>>2)&0x3ff] = r0; - if(r2 != r23) { - /* Next insn is delay slot */ - pc=0x53874; - continue; - } - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x53904; - pc=0x39200; - run_39200(); return; - case 0x53904: - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x53920; - continue; - case 0x53910: - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x5391c; - pc=0x39200; - run_39200(); return; - case 0x5391c: - r2 = r0 + r0; - case 0x53920: - r31 = readPages[(r29+1084)>>>12][((r29+1084)>>>2)&0x3ff]; - r30 = readPages[(r29+1080)>>>12][((r29+1080)>>>2)&0x3ff]; - r23 = readPages[(r29+1076)>>>12][((r29+1076)>>>2)&0x3ff]; - r22 = readPages[(r29+1072)>>>12][((r29+1072)>>>2)&0x3ff]; - r21 = readPages[(r29+1068)>>>12][((r29+1068)>>>2)&0x3ff]; - r20 = readPages[(r29+1064)>>>12][((r29+1064)>>>2)&0x3ff]; - r19 = readPages[(r29+1060)>>>12][((r29+1060)>>>2)&0x3ff]; - r18 = readPages[(r29+1056)>>>12][((r29+1056)>>>2)&0x3ff]; - r17 = readPages[(r29+1052)>>>12][((r29+1052)>>>2)&0x3ff]; - r16 = readPages[(r29+1048)>>>12][((r29+1048)>>>2)&0x3ff]; - r29 = r29 + 1088; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x53a00: - pc=0x53a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_53a00() throws ExecutionException { /* 0x53a00 - 0x53c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x53a00: - r6 = readPages[(r28+-30616)>>>12][((r28+-30616)>>>2)&0x3ff]; - r29 = r29 + -2088; - writePages[(r29+2084)>>>12][((r29+2084)>>>2)&0x3ff] = r31; - writePages[(r29+2080)>>>12][((r29+2080)>>>2)&0x3ff] = r17; - writePages[(r29+2076)>>>12][((r29+2076)>>>2)&0x3ff] = r16; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x53b0c; - continue; - } - r4 = r29 + 1048; - r5 = r0 + 1024; - /* Next insn is delay slot */ - r31=0x53a2c; - pc=0x59400; - run_59400(); return; - case 0x53a2c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x53b0c; - continue; - } - addr=r29+1048; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r16 = tmp; - r2 = r0 + 35; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x53abc; - continue; - } - r2 = 7 << 16; - r2 = r2 + 30624; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r4 = r29 + 1048; - case 0x53a54: - r5 = 7 << 16; - r17 = 7 << 16; - r16 = 7 << 16; - r5 = r5 + 1196; - r6 = r17 + 24472; - r7 = r16 + 23448; - /* Next insn is delay slot */ - r31=0x53a74; - pc=0x5f000; - run_5f000(); return; - case 0x53a74: - r2 = r2 < 3 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x53b0c; - continue; - } - r2 = 7 << 16; - r17 = r17 + 24472; - writePages[(r2+30616)>>>12][((r2+30616)>>>2)&0x3ff] = r17; - r16 = r16 + 23448; - r2 = r2 + 30616; - r3 = r28 + -30620; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r16; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - writePages[(r28+-30620)>>>12][((r28+-30620)>>>2)&0x3ff] = r0; - case 0x53aa4: - r31 = readPages[(r29+2084)>>>12][((r29+2084)>>>2)&0x3ff]; - r17 = readPages[(r29+2080)>>>12][((r29+2080)>>>2)&0x3ff]; - r16 = readPages[(r29+2076)>>>12][((r29+2076)>>>2)&0x3ff]; - r29 = r29 + 2088; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x53abc: - r6 = readPages[(r28+-30616)>>>12][((r28+-30616)>>>2)&0x3ff]; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x53b0c; - continue; - } - r4 = r29 + 24; - r5 = r0 + 1024; - /* Next insn is delay slot */ - r31=0x53adc; - pc=0x59400; - run_59400(); return; - case 0x53adc: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x53b0c; - continue; - } - addr=r29+24; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x53b28; - continue; - } - r2 = 7 << 16; - r2 = r2 + 30624; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r4 = r29 + 24; - /* Next insn is delay slot */ - pc=0x53a54; - continue; - case 0x53b0c: - r31 = readPages[(r29+2084)>>>12][((r29+2084)>>>2)&0x3ff]; - r17 = readPages[(r29+2080)>>>12][((r29+2080)>>>2)&0x3ff]; - r16 = readPages[(r29+2076)>>>12][((r29+2076)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 2088; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x53b28: - /* Next insn is delay slot */ - r31=0x53b30; - pc=0x53a00; - continue; - case 0x53b30: - /* Next insn is delay slot */ - pc=0x53aa4; - continue; - case 0x53c00: - pc=0x53c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_53c00() throws ExecutionException { /* 0x53c00 - 0x53e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x53c00: - r4 = readPages[(r28+-30616)>>>12][((r28+-30616)>>>2)&0x3ff]; - r29 = r29 + -24; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x53c1c; - continue; - } - /* Next insn is delay slot */ - r31=0x53c1c; - pc=0x39200; - run_39200(); return; - case 0x53c1c: - r4 = 7 << 16; - r5 = 7 << 16; - r4 = r4 + 1184; - r5 = r5 + -632; - /* Next insn is delay slot */ - r31=0x53c34; - pc=0x3b800; - run_3b800(); return; - case 0x53c34: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r28+-30616)>>>12][((r28+-30616)>>>2)&0x3ff] = r2; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x53e00: - pc=0x53e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_53e00() throws ExecutionException { /* 0x53e00 - 0x54000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x53e00: - r4 = readPages[(r28+-30616)>>>12][((r28+-30616)>>>2)&0x3ff]; - r29 = r29 + -24; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x53e1c; - continue; - } - /* Next insn is delay slot */ - r31=0x53e1c; - pc=0x39200; - run_39200(); return; - case 0x53e1c: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r28+-30616)>>>12][((r28+-30616)>>>2)&0x3ff] = r0; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x54000: - pc=0x54000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_54000() throws ExecutionException { /* 0x54000 - 0x54200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x54000: - r29 = r29 + -1104; - r5 = 7 << 16; - writePages[(r29+1104)>>>12][((r29+1104)>>>2)&0x3ff] = r4; - r4 = 7 << 16; - r4 = r4 + 1212; - r5 = r5 + -632; - writePages[(r29+1068)>>>12][((r29+1068)>>>2)&0x3ff] = r17; - writePages[(r29+1100)>>>12][((r29+1100)>>>2)&0x3ff] = r31; - writePages[(r29+1096)>>>12][((r29+1096)>>>2)&0x3ff] = r30; - writePages[(r29+1092)>>>12][((r29+1092)>>>2)&0x3ff] = r23; - writePages[(r29+1088)>>>12][((r29+1088)>>>2)&0x3ff] = r22; - writePages[(r29+1084)>>>12][((r29+1084)>>>2)&0x3ff] = r21; - writePages[(r29+1080)>>>12][((r29+1080)>>>2)&0x3ff] = r20; - writePages[(r29+1076)>>>12][((r29+1076)>>>2)&0x3ff] = r19; - writePages[(r29+1072)>>>12][((r29+1072)>>>2)&0x3ff] = r18; - writePages[(r29+1064)>>>12][((r29+1064)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x54048; - pc=0x3b800; - run_3b800(); return; - case 0x54048: - r17 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x54160; - continue; - } - r20 = 7 << 16; - r20 = r20 + 29592; - r19 = 7 << 16; - r18 = r20 + r0; - case 0x54064: - r16 = r0 + 35; - case 0x54068: - r4 = r29 + 40; - r5 = r0 + 1024; - r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x5407c; - pc=0x59400; - run_59400(); return; - case 0x5407c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x54154; - continue; - } - addr=r29+40; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x54068; - continue; - } - r3 = 7 << 16; - r2 = r3 + 30640; - r3 = 7 << 16; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r22 = r3 + 27544; - r8 = 7 << 16; - r3 = 7 << 16; - r2 = 7 << 16; - r2 = r2 + 30642; - r21 = r8 + 26520; - r30 = r3 + 25496; - r5 = 7 << 16; - r23 = 7 << 16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r22; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r21; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r30; - r4 = r29 + 40; - r5 = r5 + 1224; - r6 = r20 + r0; - r7 = r23 + 28568; - /* Next insn is delay slot */ - r31=0x540f0; - pc=0x5f000; - run_5f000(); return; - case 0x540f0: - r2 = r2 < 7 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x54154; - continue; - } - r2 = 7 << 16; - r4 = readPages[(r29+1104)>>>12][((r29+1104)>>>2)&0x3ff]; - r16 = r19 + 30632; - r10 = r23 + 28568; - r2 = r2 + -12264; - r5 = r18 + r0; - writePages[(r19+30632)>>>12][((r19+30632)>>>2)&0x3ff] = r18; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r10; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r22; - writePages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff] = r21; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r30; - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x54134; - pc=0x42c00; - run_42c00(); return; - case 0x54134: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x54064; - continue; - } - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x54148; - pc=0x39200; - run_39200(); return; - case 0x54148: - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x54164; - continue; - case 0x54154: - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x54160; - pc=0x39200; - run_39200(); return; - case 0x54160: - r2 = r0 + r0; - case 0x54164: - r31 = readPages[(r29+1100)>>>12][((r29+1100)>>>2)&0x3ff]; - r30 = readPages[(r29+1096)>>>12][((r29+1096)>>>2)&0x3ff]; - r23 = readPages[(r29+1092)>>>12][((r29+1092)>>>2)&0x3ff]; - r22 = readPages[(r29+1088)>>>12][((r29+1088)>>>2)&0x3ff]; - r21 = readPages[(r29+1084)>>>12][((r29+1084)>>>2)&0x3ff]; - r20 = readPages[(r29+1080)>>>12][((r29+1080)>>>2)&0x3ff]; - r19 = readPages[(r29+1076)>>>12][((r29+1076)>>>2)&0x3ff]; - r18 = readPages[(r29+1072)>>>12][((r29+1072)>>>2)&0x3ff]; - r17 = readPages[(r29+1068)>>>12][((r29+1068)>>>2)&0x3ff]; - r16 = readPages[(r29+1064)>>>12][((r29+1064)>>>2)&0x3ff]; - r29 = r29 + 1104; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x54200: - pc=0x54200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_54200() throws ExecutionException { /* 0x54200 - 0x54400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x54200: - r29 = r29 + -1112; - r4 = r4 & 65535; - r5 = 7 << 16; - writePages[(r29+1064)>>>12][((r29+1064)>>>2)&0x3ff] = r4; - r4 = 7 << 16; - r4 = r4 + 1212; - r5 = r5 + -632; - writePages[(r29+1076)>>>12][((r29+1076)>>>2)&0x3ff] = r17; - writePages[(r29+1108)>>>12][((r29+1108)>>>2)&0x3ff] = r31; - writePages[(r29+1104)>>>12][((r29+1104)>>>2)&0x3ff] = r30; - writePages[(r29+1100)>>>12][((r29+1100)>>>2)&0x3ff] = r23; - writePages[(r29+1096)>>>12][((r29+1096)>>>2)&0x3ff] = r22; - writePages[(r29+1092)>>>12][((r29+1092)>>>2)&0x3ff] = r21; - writePages[(r29+1088)>>>12][((r29+1088)>>>2)&0x3ff] = r20; - writePages[(r29+1084)>>>12][((r29+1084)>>>2)&0x3ff] = r19; - writePages[(r29+1080)>>>12][((r29+1080)>>>2)&0x3ff] = r18; - writePages[(r29+1072)>>>12][((r29+1072)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x5424c; - pc=0x3b800; - run_3b800(); return; - case 0x5424c: - r17 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x54360; - continue; - } - r19 = 7 << 16; - r22 = 7 << 16; - r19 = r19 + 29592; - r18 = 7 << 16; - case 0x54268: - r16 = r0 + 35; - case 0x5426c: - r4 = r29 + 40; - r5 = r0 + 1024; - r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x54280; - pc=0x59400; - run_59400(); return; - case 0x54280: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x54354; - continue; - } - addr=r29+40; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x5426c; - continue; - } - r2 = r22 + 30640; - r3 = 7 << 16; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r20 = r3 + 27544; - r8 = 7 << 16; - r3 = 7 << 16; - r2 = 7 << 16; - r2 = r2 + 30642; - r23 = r8 + 26520; - r30 = r3 + 25496; - r5 = 7 << 16; - r21 = 7 << 16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r23; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r30; - r4 = r29 + 40; - r5 = r5 + 1224; - r6 = r19 + r0; - r7 = r21 + 28568; - /* Next insn is delay slot */ - r31=0x542f0; - pc=0x5f000; - run_5f000(); return; - case 0x542f0: - r2 = r2 < 7 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x54354; - continue; - } - r2 = 7 << 16; - r2 = r2 + 29592; - writePages[(r18+30632)>>>12][((r18+30632)>>>2)&0x3ff] = r2; - r2 = 7 << 16; - r16 = r18 + 30632; - r2 = r2 + -12264; - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = r2; - r3 = readPages[(r29+1064)>>>12][((r29+1064)>>>2)&0x3ff]; - addr=r16+8; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r10 = r21 + 28568; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r10; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r20; - writePages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff] = r23; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r30; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x54268; - continue; - } - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x54348; - pc=0x39200; - run_39200(); return; - case 0x54348: - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x54364; - continue; - case 0x54354: - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x54360; - pc=0x39200; - run_39200(); return; - case 0x54360: - r2 = r0 + r0; - case 0x54364: - r31 = readPages[(r29+1108)>>>12][((r29+1108)>>>2)&0x3ff]; - r30 = readPages[(r29+1104)>>>12][((r29+1104)>>>2)&0x3ff]; - r23 = readPages[(r29+1100)>>>12][((r29+1100)>>>2)&0x3ff]; - r22 = readPages[(r29+1096)>>>12][((r29+1096)>>>2)&0x3ff]; - r21 = readPages[(r29+1092)>>>12][((r29+1092)>>>2)&0x3ff]; - r20 = readPages[(r29+1088)>>>12][((r29+1088)>>>2)&0x3ff]; - r19 = readPages[(r29+1084)>>>12][((r29+1084)>>>2)&0x3ff]; - r18 = readPages[(r29+1080)>>>12][((r29+1080)>>>2)&0x3ff]; - r17 = readPages[(r29+1076)>>>12][((r29+1076)>>>2)&0x3ff]; - r16 = readPages[(r29+1072)>>>12][((r29+1072)>>>2)&0x3ff]; - r29 = r29 + 1112; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x54400: - pc=0x54400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_54400() throws ExecutionException { /* 0x54400 - 0x54600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x54400: - r6 = readPages[(r28+-30612)>>>12][((r28+-30612)>>>2)&0x3ff]; - r29 = r29 + -2112; - writePages[(r29+2108)>>>12][((r29+2108)>>>2)&0x3ff] = r31; - writePages[(r29+2104)>>>12][((r29+2104)>>>2)&0x3ff] = r20; - writePages[(r29+2100)>>>12][((r29+2100)>>>2)&0x3ff] = r19; - writePages[(r29+2096)>>>12][((r29+2096)>>>2)&0x3ff] = r18; - writePages[(r29+2092)>>>12][((r29+2092)>>>2)&0x3ff] = r17; - writePages[(r29+2088)>>>12][((r29+2088)>>>2)&0x3ff] = r16; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x54590; - continue; - } - r4 = r29 + 1064; - r5 = r0 + 1024; - /* Next insn is delay slot */ - r31=0x54438; - pc=0x59400; - run_59400(); return; - case 0x54438: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x54590; - continue; - } - addr=r29+1064; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r16 = tmp; - r2 = r0 + 35; - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x54510; - continue; - } - r2 = 7 << 16; - r2 = r2 + 30640; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r18 = 7 << 16; - r2 = 7 << 16; - r17 = 7 << 16; - r16 = 7 << 16; - r2 = r2 + 30642; - r18 = r18 + 27544; - r17 = r17 + 26520; - r16 = r16 + 25496; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r16; - r4 = r29 + 1064; - case 0x54490: - r5 = 7 << 16; - r20 = 7 << 16; - r19 = 7 << 16; - r5 = r5 + 1224; - r6 = r20 + 29592; - r7 = r19 + 28568; - /* Next insn is delay slot */ - r31=0x544b0; - pc=0x5f000; - run_5f000(); return; - case 0x544b0: - r2 = r2 < 7 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x54590; - continue; - } - r2 = 7 << 16; - r20 = r20 + 29592; - r3 = 7 << 16; - writePages[(r2+30632)>>>12][((r2+30632)>>>2)&0x3ff] = r20; - r19 = r19 + 28568; - r2 = r2 + 30632; - r3 = r3 + -12264; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r19; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r18; - writePages[(r2+20)>>>12][((r2+20)>>>2)&0x3ff] = r17; - writePages[(r2+24)>>>12][((r2+24)>>>2)&0x3ff] = r16; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r3; - case 0x544ec: - r31 = readPages[(r29+2108)>>>12][((r29+2108)>>>2)&0x3ff]; - r20 = readPages[(r29+2104)>>>12][((r29+2104)>>>2)&0x3ff]; - r19 = readPages[(r29+2100)>>>12][((r29+2100)>>>2)&0x3ff]; - r18 = readPages[(r29+2096)>>>12][((r29+2096)>>>2)&0x3ff]; - r17 = readPages[(r29+2092)>>>12][((r29+2092)>>>2)&0x3ff]; - r16 = readPages[(r29+2088)>>>12][((r29+2088)>>>2)&0x3ff]; - r29 = r29 + 2112; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x54510: - r6 = readPages[(r28+-30612)>>>12][((r28+-30612)>>>2)&0x3ff]; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x54590; - continue; - } - r4 = r29 + 40; - r5 = r0 + 1024; - /* Next insn is delay slot */ - r31=0x54530; - pc=0x59400; - run_59400(); return; - case 0x54530: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x54590; - continue; - } - addr=r29+40; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x545b8; - continue; - } - r2 = 7 << 16; - r2 = r2 + 30640; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r18 = 7 << 16; - r2 = 7 << 16; - r17 = 7 << 16; - r16 = 7 << 16; - r2 = r2 + 30642; - r18 = r18 + 27544; - r17 = r17 + 26520; - r16 = r16 + 25496; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r16; - r4 = r29 + 40; - /* Next insn is delay slot */ - pc=0x54490; - continue; - case 0x54590: - r31 = readPages[(r29+2108)>>>12][((r29+2108)>>>2)&0x3ff]; - r20 = readPages[(r29+2104)>>>12][((r29+2104)>>>2)&0x3ff]; - r19 = readPages[(r29+2100)>>>12][((r29+2100)>>>2)&0x3ff]; - r18 = readPages[(r29+2096)>>>12][((r29+2096)>>>2)&0x3ff]; - r17 = readPages[(r29+2092)>>>12][((r29+2092)>>>2)&0x3ff]; - r16 = readPages[(r29+2088)>>>12][((r29+2088)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 2112; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x545b8: - /* Next insn is delay slot */ - r31=0x545c0; - pc=0x54400; - continue; - case 0x545c0: - /* Next insn is delay slot */ - pc=0x544ec; - continue; - case 0x54600: - pc=0x54600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_54600() throws ExecutionException { /* 0x54600 - 0x54800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x54600: - r4 = readPages[(r28+-30612)>>>12][((r28+-30612)>>>2)&0x3ff]; - r29 = r29 + -24; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5461c; - continue; - } - /* Next insn is delay slot */ - r31=0x5461c; - pc=0x39200; - run_39200(); return; - case 0x5461c: - r4 = 7 << 16; - r5 = 7 << 16; - r4 = r4 + 1184; - r5 = r5 + -632; - /* Next insn is delay slot */ - r31=0x54634; - pc=0x3b800; - run_3b800(); return; - case 0x54634: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r28+-30612)>>>12][((r28+-30612)>>>2)&0x3ff] = r2; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x54800: - pc=0x54800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_54800() throws ExecutionException { /* 0x54800 - 0x54a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x54800: - r4 = readPages[(r28+-30612)>>>12][((r28+-30612)>>>2)&0x3ff]; - r29 = r29 + -24; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5481c; - continue; - } - /* Next insn is delay slot */ - r31=0x5481c; - pc=0x39200; - run_39200(); return; - case 0x5481c: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r28+-30612)>>>12][((r28+-30612)>>>2)&0x3ff] = r0; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x54a00: - pc=0x54a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_54a00() throws ExecutionException { /* 0x54a00 - 0x54c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x54a00: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r29 = r29 + -32; - r5 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - /* Next insn is delay slot */ - r31=0x54a20; - pc=0x59a00; - run_59a00(); return; - case 0x54a20: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r16 = 7 << 16; - r4 = readPages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x54a34; - pc=0x39a00; - run_39a00(); return; - case 0x54a34: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r4 = r16 + 20056; - r6 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r5 = r0 + 1024; - /* Next insn is delay slot */ - r31=0x54a4c; - pc=0x59400; - run_59400(); return; - case 0x54a4c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x54ab8; - continue; - } - r4 = r16 + 20056; - /* Next insn is delay slot */ - r31=0x54a60; - pc=0x10268; - run_10200(); return; - case 0x54a60: - r17 = r2 + -1; - r16 = r16 + 20056; - r3 = r16 + r17; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r3 = r0 + 10; - if(r4 == r3) { - /* Next insn is delay slot */ - pc=0x54a80; - continue; - } - r17 = r2 + r0; - case 0x54a80: - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r17 = r16 + r17; - r5 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r4 = r0 + 10; - /* Next insn is delay slot */ - r31=0x54a98; - pc=0x3c000; - run_3c000(); return; - case 0x54a98: - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r16 + r0; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x54ab8: - r17 = r0 + r0; - r16 = r16 + 20056; - /* Next insn is delay slot */ - pc=0x54a80; - continue; - case 0x54c00: - pc=0x54c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_54c00() throws ExecutionException { /* 0x54c00 - 0x54e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x54c00: - r29 = r29 + -32; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - r16 = r4 + r0; - r4 = r0 + 128; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r18 = r5 + r0; - r17 = r6 + r0; - /* Next insn is delay slot */ - r31=0x54c2c; - pc=0x3e800; - run_3e800(); return; - case 0x54c2c: - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x54cbc; - continue; - } - r4 = r2 + r0; - r5 = r0 + 128; - r6 = r18 + r0; - r7 = r17 + r0; - /* Next insn is delay slot */ - r31=0x54c50; - pc=0x64e00; - run_64e00(); return; - case 0x54c50: - r3 = r2 < 128 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x54c78; - continue; - } - case 0x54c5c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x54c78: - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r5 = r2 + 1; - /* Next insn is delay slot */ - r31=0x54c88; - pc=0x40600; - run_40600(); return; - case 0x54c88: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x54cc8; - continue; - } - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - r5 = r18 + r0; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r6 = r17 + r0; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r4 = r2 + r0; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x65200; - run_65200(); return; - case 0x54cbc: - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x54c5c; - continue; - case 0x54cc8: - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x54cd4; - pc=0x3ea00; - run_3ea00(); return; - case 0x54cd4: - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x54c5c; - continue; - case 0x54e00: - pc=0x54e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_54e00() throws ExecutionException { /* 0x54e00 - 0x55000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x54e00: - r4 = 7 << 16; - r4 = r4 + 1260; - /* Next insn is delay slot */ - pc=0x3e000; - run_3e000(); return; - case 0x55000: - pc=0x55000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_55000() throws ExecutionException { /* 0x55000 - 0x55200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x55000: - r29 = r29 + -32; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - r16 = r4 + r0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x550b4; - continue; - } - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x550b4; - continue; - } - /* Next insn is delay slot */ - r31=0x55038; - pc=0x10268; - run_10200(); return; - case 0x55038: - r2 = r2 + -1; - r2 = r16 + r2; - r3 = ((r16 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5510c; - continue; - } - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r3 = r0 + 47; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x550e0; - continue; - } - r4 = r0 + 47; - /* Next insn is delay slot */ - pc=0x55078; - continue; - case 0x55068: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 != r4) { - /* Next insn is delay slot */ - pc=0x550e0; - continue; - } - case 0x55078: - r2 = r2 + -1; - if(r2 != r16) { - /* Next insn is delay slot */ - pc=0x55068; - continue; - } - case 0x55084: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 47; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x551b4; - continue; - } - r3 = 7 << 16; - r3 = r3 + -9052; - case 0x5509c: - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r3 = tmp; - r2 = 7 << 16; - addr=r2+19032; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r2 + 19032; - /* Next insn is delay slot */ - pc=0x550c4; - continue; - case 0x550b4: - r2 = 7 << 16; - r3 = r0 + 11776; - addr=r2+19032; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r2 + 19032; - case 0x550c4: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x550e0: - r4 = r0 + 47; - /* Next insn is delay slot */ - pc=0x550fc; - continue; - case 0x550ec: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x5510c; - continue; - } - case 0x550fc: - r2 = r2 + -1; - r3 = ((r16 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x550ec; - continue; - } - case 0x5510c: - r4 = r0 + 47; - if(r2 != r16) { - /* Next insn is delay slot */ - pc=0x55130; - continue; - } - /* Next insn is delay slot */ - pc=0x55084; - continue; - case 0x55120: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 != r4) { - /* Next insn is delay slot */ - pc=0x55140; - continue; - } - case 0x55130: - r2 = r2 + -1; - r3 = ((r16 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x55120; - continue; - } - case 0x55140: - r2 = r2 - r16; - r3 = r2 + 2; - r3 = (r3&0xffffffffL) < (1025&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x55198; - continue; - } - r17 = r2 + 1; - r18 = 7 << 16; - r4 = r18 + 19032; - r5 = r16 + r0; - r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x55170; - pc=0x5f400; - run_5f400(); return; - case 0x55170: - r2 = r18 + 19032; - r17 = r17 + r2; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x55198: - /* Next insn is delay slot */ - r31=0x551a0; - pc=0x38c00; - run_38c00(); return; - case 0x551a0: - r3 = r0 + 91; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x550c4; - continue; - case 0x551b4: - r3 = 7 << 16; - r3 = r3 + 1268; - /* Next insn is delay slot */ - pc=0x5509c; - continue; - case 0x55200: - pc=0x55200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_55200() throws ExecutionException { /* 0x55200 - 0x55400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x55200: - r29 = r29 + -32; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - r16 = r4 + r0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5534c; - continue; - } - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5534c; - continue; - } - /* Next insn is delay slot */ - r31=0x55234; - pc=0x10268; - run_10200(); return; - case 0x55234: - r2 = r2 + -1; - r2 = r16 + r2; - r3 = ((r16 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5538c; - continue; - } - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r3 = r0 + 47; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x552e0; - continue; - } - r4 = r0 + 47; - /* Next insn is delay slot */ - pc=0x55274; - continue; - case 0x55264: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 != r4) { - /* Next insn is delay slot */ - pc=0x552d4; - continue; - } - case 0x55274: - r2 = r2 + -1; - if(r2 != r16) { - /* Next insn is delay slot */ - pc=0x55264; - continue; - } - case 0x55280: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r3 = r0 + 47; - if(r4 == r3) { - /* Next insn is delay slot */ - pc=0x55374; - continue; - } - case 0x55290: - r5 = r2 + r0; - r2 = r0 + r0; - case 0x55298: - r16 = r2 + 1; - r17 = 7 << 16; - r6 = r16 + r0; - r4 = r17 + 18008; - /* Next insn is delay slot */ - r31=0x552b0; - pc=0x5f400; - run_5f400(); return; - case 0x552b0: - r2 = r17 + 18008; - r16 = r16 + r2; - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x552bc: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x552d4: - r3 = ((r16 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x55290; - continue; - } - case 0x552e0: - addr=r2+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r6 = tmp; - r3 = r0 + 47; - r5 = r2 + r0; - r4 = r0 + 47; - if(r6 != r3) { - /* Next insn is delay slot */ - pc=0x55310; - continue; - } - /* Next insn is delay slot */ - pc=0x55290; - continue; - case 0x55300: - addr=r5+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x5531c; - continue; - } - case 0x55310: - r5 = r5 + -1; - if(r5 != r16) { - /* Next insn is delay slot */ - pc=0x55300; - continue; - } - case 0x5531c: - r2 = r2 - r5; - r3 = r2 + 2; - r3 = (r3&0xffffffffL) < (1025&0xffffffffL) ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x55298; - continue; - } - /* Next insn is delay slot */ - r31=0x55338; - pc=0x38c00; - run_38c00(); return; - case 0x55338: - r3 = r0 + 91; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x552bc; - continue; - case 0x5534c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = 7 << 16; - r3 = r0 + 11776; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - addr=r2+18008; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r2 + 18008; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x55374: - r2 = 7 << 16; - r3 = r0 + 12032; - addr=r2+18008; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r2 + 18008; - /* Next insn is delay slot */ - pc=0x552bc; - continue; - case 0x5538c: - if(r16 == r2) { - /* Next insn is delay slot */ - pc=0x55280; - continue; - } - r5 = r2 + r0; - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x55298; - continue; - case 0x55400: - pc=0x55400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_55400() throws ExecutionException { /* 0x55400 - 0x55600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x55400: - r29 = r29 + -72; - r2 = r0 + 1; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - r2 = r0 + 32; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r18; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r17; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r16; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = r31; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r20; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r19; - r17 = r4 + r0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x5543c; - pc=0x38c00; - run_38c00(); return; - case 0x5543c: - r3 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r2 = r0 + 8; - r16 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x55498; - continue; - } - r4 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r5 = 7 << 16; - r6 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r5 = r5 + 1096; - /* Next insn is delay slot */ - r31=0x5546c; - pc=0x3bc00; - run_3bc00(); return; - case 0x5546c: - r2 = r0 + 22; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - case 0x55474: - /* Next insn is delay slot */ - r31=0x5547c; - pc=0x38c00; - run_38c00(); return; - case 0x5547c: - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r2 = r0 + 12; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x5585c; - run_55800(); return; - } - r18 = r0 + -1; - /* Next insn is delay slot */ - pc=0x554d0; - continue; - case 0x55498: - r2 = r29 + 40; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r0; - r4 = r16 + r0; - r5 = r29 + 32; - r6 = r0 + 2; - r7 = r17 + r0; - /* Next insn is delay slot */ - r31=0x554c0; - pc=0x4928c; - run_49200(); return; - case 0x554c0: - r3 = r0 + -1; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x55474; - continue; - } - case 0x554cc: - r18 = r0 + r0; - case 0x554d0: - r2 = r0 + 1; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; - r2 = r0 + 10; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - addr=r17+31; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r0 + 32; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x554f4; - pc=0x38c00; - run_38c00(); return; - case 0x554f4: - r3 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r2 = r0 + 8; - r16 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x55550; - continue; - } - r4 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r5 = 7 << 16; - r6 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r5 = r5 + 1096; - /* Next insn is delay slot */ - r31=0x55524; - pc=0x3bc00; - run_3bc00(); return; - case 0x55524: - r2 = r0 + 22; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - case 0x5552c: - /* Next insn is delay slot */ - r31=0x55534; - pc=0x38c00; - run_38c00(); return; - case 0x55534: - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r2 = r0 + 12; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x55870; - run_55800(); return; - } - r18 = r0 + -1; - /* Next insn is delay slot */ - pc=0x55584; - continue; - case 0x55550: - r2 = r29 + 40; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r0; - r4 = r16 + r0; - r5 = r29 + 32; - r6 = r0 + 2; - r7 = r17 + 32; - /* Next insn is delay slot */ - r31=0x55578; - pc=0x4928c; - run_49200(); return; - case 0x55578: - r3 = r0 + -1; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x5552c; - continue; - } - case 0x55584: - r2 = r0 + 1; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; - r2 = r0 + 2; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - addr=r17+63; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r0 + 32; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x555a8; - pc=0x38c00; - run_38c00(); return; - case 0x555a8: - r3 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r2 = r0 + 8; - r16 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x55604; - run_55600(); return; - } - r4 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r5 = 7 << 16; - r6 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r5 = r5 + 1096; - /* Next insn is delay slot */ - r31=0x555d8; - pc=0x3bc00; - run_3bc00(); return; - case 0x555d8: - r2 = r0 + 22; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - case 0x555e0: - /* Next insn is delay slot */ - r31=0x555e8; - pc=0x38c00; - run_38c00(); return; - case 0x555e8: - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r2 = r0 + 12; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x55884; - run_55800(); return; - } - r18 = r0 + -1; - /* Next insn is delay slot */ - pc=0x55638; - run_55600(); return; - case 0x55600: - pc=0x55600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_55600() throws ExecutionException { /* 0x55600 - 0x55800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x55600: - case 0x55604: - r2 = r29 + 40; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r0; - r4 = r16 + r0; - r5 = r29 + 32; - r6 = r0 + 2; - r7 = r17 + 64; - /* Next insn is delay slot */ - r31=0x5562c; - pc=0x4928c; - run_49200(); return; - case 0x5562c: - r3 = r0 + -1; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x555e0; - run_55400(); return; - } - case 0x55638: - r2 = r0 + 1; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; - r2 = r0 + 4; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - addr=r17+95; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r0 + 32; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x5565c; - pc=0x38c00; - run_38c00(); return; - case 0x5565c: - r3 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r20 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r2 = r0 + 8; - r16 = r17 + 96; - r19 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x556bc; - continue; - } - r4 = readPages[(r19+12)>>>12][((r19+12)>>>2)&0x3ff]; - r5 = 7 << 16; - r6 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r5 = r5 + 1096; - /* Next insn is delay slot */ - r31=0x55690; - pc=0x3bc00; - run_3bc00(); return; - case 0x55690: - r2 = r0 + 22; - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = r2; - case 0x55698: - /* Next insn is delay slot */ - r31=0x556a0; - pc=0x38c00; - run_38c00(); return; - case 0x556a0: - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r2 = r0 + 12; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x55898; - run_55800(); return; - } - r18 = r0 + -1; - /* Next insn is delay slot */ - pc=0x556f0; - continue; - case 0x556bc: - r2 = r29 + 40; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r0; - r4 = r19 + r0; - r5 = r29 + 32; - r6 = r0 + 2; - r7 = r16 + r0; - /* Next insn is delay slot */ - r31=0x556e4; - pc=0x4928c; - run_49200(); return; - case 0x556e4: - r3 = r0 + -1; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x55698; - continue; - } - case 0x556f0: - r2 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - addr=r17+127; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = r2 + -1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x55760; - continue; - } - r4 = r0 + 32; - r6 = r0 + -1; - /* Next insn is delay slot */ - pc=0x55724; - continue; - case 0x55714: - r3 = r3 + -1; - r16 = r16 + 1; - if(r3 == r6) { - /* Next insn is delay slot */ - pc=0x55760; - continue; - } - case 0x55724: - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r5 = tmp; - r5 = r5 + -9; - r5 = r5 & 255; - r5 = (r5&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x55714; - continue; - } - r2 = (r3&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x557e4; - continue; - } - r3 = r3 + -1; - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r16 = r16 + 1; - if(r3 != r6) { - /* Next insn is delay slot */ - pc=0x55724; - continue; - } - case 0x55760: - r2 = r0 + 6; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; - r2 = r0 + 1; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - r2 = r0 + 32; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x55780; - pc=0x38c00; - run_38c00(); return; - case 0x55780: - r3 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r2 = r0 + 8; - r16 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x557f0; - continue; - } - r4 = readPages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff]; - r5 = 7 << 16; - r6 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r5 = r5 + 1096; - /* Next insn is delay slot */ - r31=0x557b0; - pc=0x3bc00; - run_3bc00(); return; - case 0x557b0: - r2 = r0 + 22; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - case 0x557b8: - /* Next insn is delay slot */ - r31=0x557c0; - pc=0x38c00; - run_38c00(); return; - case 0x557c0: - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r2 = r0 + 12; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x55850; - run_55800(); return; - } - /* Next insn is delay slot */ - r31=0x557d8; - pc=0x38c00; - run_38c00(); return; - case 0x557d8: - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r19; - /* Next insn is delay slot */ - pc=0x55824; - run_55800(); return; - case 0x557e4: - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x55714; - continue; - case 0x557f0: - r2 = r29 + 40; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r0; - case 0x55800: - pc=0x55800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_55800() throws ExecutionException { /* 0x55800 - 0x55a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x55800: - r4 = r16 + r0; - r5 = r29 + 32; - r6 = r0 + 2; - r7 = r17 + 128; - /* Next insn is delay slot */ - r31=0x55818; - pc=0x4928c; - run_49200(); return; - case 0x55818: - r3 = r0 + -1; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x557b8; - run_55600(); return; - } - case 0x55824: - r31 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r2 = r18 + r0; - r20 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r19 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r18 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r16 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - addr=r17+159; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r17 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r29 = r29 + 72; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x55850: - r18 = r0 + -1; - /* Next insn is delay slot */ - pc=0x55824; - continue; - case 0x5585c: - /* Next insn is delay slot */ - r31=0x55864; - pc=0x38c00; - run_38c00(); return; - case 0x55864: - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r18; - /* Next insn is delay slot */ - pc=0x554cc; - run_55400(); return; - case 0x55870: - /* Next insn is delay slot */ - r31=0x55878; - pc=0x38c00; - run_38c00(); return; - case 0x55878: - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r19; - /* Next insn is delay slot */ - pc=0x55584; - run_55400(); return; - case 0x55884: - /* Next insn is delay slot */ - r31=0x5588c; - pc=0x38c00; - run_38c00(); return; - case 0x5588c: - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r19; - /* Next insn is delay slot */ - pc=0x55638; - run_55600(); return; - case 0x55898: - /* Next insn is delay slot */ - r31=0x558a0; - pc=0x38c00; - run_38c00(); return; - case 0x558a0: - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r20; - /* Next insn is delay slot */ - pc=0x556f0; - run_55600(); return; - case 0x55a00: - pc=0x55a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_55a00() throws ExecutionException { /* 0x55a00 - 0x55c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x55a00: - r29 = r29 + -56; - r2 = r0 + 1; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; - r2 = r0 + 10; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - r7 = r4 + r0; - r2 = r29 + 40; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r5; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r0; - r5 = r29 + 32; - r6 = r0 + 2; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x55a44; - pc=0x4928c; - run_49200(); return; - case 0x55a44: - r2 = r2 + 1; - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r2 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - r2 = r0 - r2; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x55c00: - pc=0x55c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_55c00() throws ExecutionException { /* 0x55c00 - 0x55e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x55c00: - r29 = r29 + -40; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - r19 = r4 + r0; - r18 = r5 + r0; - r17 = r0 + -1; - /* Next insn is delay slot */ - r31=0x55c2c; - pc=0x62c00; - run_62c00(); return; - case 0x55c2c: - r16 = r2 + r0; - if(r2 == r17) { - /* Next insn is delay slot */ - pc=0x55c64; - continue; - } - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x55c88; - continue; - } - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x55c4c; - pc=0x49ab4; - run_49a00(); return; - case 0x55c4c: - if(r2 == r17) { - /* Next insn is delay slot */ - pc=0x55d3c; - continue; - } - if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x55d18; - continue; - } - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x55c94; - continue; - } - case 0x55c64: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r2 = r16 + r0; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x55c88: - r4 = r0 + r0; - /* Next insn is delay slot */ - r31=0x55c94; - pc=0x48800; - run_48800(); return; - case 0x55c94: - r4 = 7 << 16; - r4 = r4 + 1272; - r5 = r0 + 2; - r6 = r0 + r0; - /* Next insn is delay slot */ - r31=0x55cac; - pc=0x63000; - run_63000(); return; - case 0x55cac: - r17 = r2 + r0; - r2 = r0 + -1; - if(r17 == r2) { - /* Next insn is delay slot */ - pc=0x55c64; - continue; - } - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r17 + r0; - r6 = r0 + r0; - /* Next insn is delay slot */ - r31=0x55cd0; - pc=0x48c90; - run_48c00(); return; - case 0x55cd0: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r17 + r0; - r6 = r0 + 1; - /* Next insn is delay slot */ - r31=0x55ce4; - pc=0x48c90; - run_48c00(); return; - case 0x55ce4: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r17 + r0; - r6 = r0 + 2; - /* Next insn is delay slot */ - r31=0x55cf8; - pc=0x48c90; - run_48c00(); return; - case 0x55cf8: - r2 = r17 < 3 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x55c64; - continue; - } - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x55d10; - pc=0x62a00; - run_62a00(); return; - case 0x55d10: - /* Next insn is delay slot */ - pc=0x55c64; - continue; - case 0x55d18: - r5 = 7 << 16; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r5 + 1268; - /* Next insn is delay slot */ - r31=0x55d2c; - pc=0x48c10; - run_48c00(); return; - case 0x55d2c: - if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x55c64; - continue; - } - /* Next insn is delay slot */ - pc=0x55c94; - continue; - case 0x55d3c: - r16 = r0 + -1; - /* Next insn is delay slot */ - pc=0x55c64; - continue; - case 0x55e00: - pc=0x55e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_55e00() throws ExecutionException { /* 0x55e00 - 0x56000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x55e00: - r29 = r29 + -80; - writePages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff] = r31; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r23; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = r22; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r21; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r20; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r19; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r18; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r17; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r16; - r23 = r4 + r0; - r22 = r5 + r0; - /* Next insn is delay slot */ - r31=0x55e38; - pc=0x38c00; - run_38c00(); return; - case 0x55e38: - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r0; - r4 = r23 + r0; - r5 = r29 + 32; - r6 = r0 + r0; - /* Next insn is delay slot */ - r31=0x55e50; - pc=0x5fc00; - run_5fc00(); return; - case 0x55e50: - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x55e5c; - pc=0x38c00; - run_38c00(); return; - case 0x55e5c: - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r18 = r0 + 34; - r17 = r29 + 16; - r19 = r0 + r0; - r20 = r0 + 46; - r21 = r0 + 3; - if(r2 == r18) { - /* Next insn is delay slot */ - pc=0x55ef0; - continue; - } - case 0x55e7c: - r3 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - if(r3 == r23) { - /* Next insn is delay slot */ - pc=0x55ef0; - continue; - } - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r16; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x55f44; - continue; - } - if(r4 != r20) { - /* Next insn is delay slot */ - pc=0x55f24; - continue; - } - r17 = r17 + 4; - if(r19 == r21) { - /* Next insn is delay slot */ - pc=0x55ef0; - continue; - } - r23 = r3 + 1; - /* Next insn is delay slot */ - r31=0x55ebc; - pc=0x38c00; - run_38c00(); return; - case 0x55ebc: - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r0; - r4 = r23 + r0; - r5 = r29 + 32; - r6 = r0 + r0; - /* Next insn is delay slot */ - r31=0x55ed4; - pc=0x5fc00; - run_5fc00(); return; - case 0x55ed4: - r16 = r2 + r0; - /* Next insn is delay slot */ - r31=0x55ee0; - pc=0x38c00; - run_38c00(); return; - case 0x55ee0: - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r19 = r19 + 1; - if(r2 != r18) { - /* Next insn is delay slot */ - pc=0x55e7c; - continue; - } - case 0x55ef0: - r2 = r0 + r0; - case 0x55ef4: - r31 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - r23 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r22 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r21 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r20 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r19 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r18 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r17 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r16 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r29 = r29 + 80; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x55f24: - r2 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - r4 = r4 & 255; - r4 = r2 + r4; - addr=r4+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r2 & 8; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x55ef0; - continue; - } - case 0x55f44: - r2 = r0 + 2; - if(r19 == r2) { - /* Next insn is delay slot */ - pc=0x55fe8; - continue; - } - r2 = r0 + 3; - if(r19 == r2) { - /* Next insn is delay slot */ - pc=0x55f80; - continue; - } - r2 = r0 + 1; - if(r19 == r2) { - /* Next insn is delay slot */ - pc=0x56038; - run_56000(); return; - } - case 0x55f68: - if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x5606c; - run_56000(); return; - } - writePages[(r22+0)>>>12][((r22+0)>>>2)&0x3ff] = r16; - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x55ef4; - continue; - case 0x55f80: - r2 = (r16&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x55ef0; - continue; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r3 = (r2&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x55ef0; - continue; - } - r4 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r3 = (r4&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x55ef0; - continue; - } - r3 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r5 = (r3&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x55ef0; - continue; - } - r4 = r4 << 16; - r2 = r2 << 24; - r2 = r4 | r2; - r3 = r3 << 8; - r2 = r2 | r3; - r16 = r2 | r16; - /* Next insn is delay slot */ - pc=0x55f68; - continue; - case 0x55fe8: - r2 = 1 << 16; - r2 = ((r16 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x55ef0; - continue; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - case 0x56000: - pc=0x56000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_56000() throws ExecutionException { /* 0x56000 - 0x56200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x56000: - r3 = (r2&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x55ef0; - run_55e00(); return; - } - r3 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r4 = (r3&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x55ef0; - run_55e00(); return; - } - r3 = r3 << 16; - r2 = r2 << 24; - r2 = r3 | r2; - r16 = r2 | r16; - /* Next insn is delay slot */ - pc=0x55f68; - run_55e00(); return; - case 0x56038: - r2 = 256 << 16; - r2 = ((r16 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x55ef0; - run_55e00(); return; - } - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r3 = (r2&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x55ef0; - run_55e00(); return; - } - r2 = r2 << 24; - r16 = r16 | r2; - /* Next insn is delay slot */ - pc=0x55f68; - run_55e00(); return; - case 0x5606c: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x55ef4; - run_55e00(); return; - case 0x56200: - pc=0x56200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_56200() throws ExecutionException { /* 0x56200 - 0x56400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x56200: - r29 = r29 + -32; - r5 = r29 + 16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x56214; - pc=0x55e00; - run_55e00(); return; - case 0x56214: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x56230; - continue; - } - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r0 + -1; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x56230: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x56400: - pc=0x56400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_56400() throws ExecutionException { /* 0x56400 - 0x56600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x56400: - r29 = r29 + -56; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r20; - r20 = readPages[(r7+0)>>>12][((r7+0)>>>2)&0x3ff]; - r5 = r5 & 65535; - r2 = r20 < 2 ? 1 : 0; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r22; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r23; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r21; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r17 = r4 + r0; - r19 = r6 + r0; - r22 = r7 + r0; - addr=r6+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r5&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x565cc; - continue; - } - addr=r6+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r5&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r16 = r0 + 2; - case 0x56454: - r4 = readPages[(r28+-30616)>>>12][((r28+-30616)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5646c; - continue; - } - /* Next insn is delay slot */ - r31=0x5646c; - pc=0x39200; - run_39200(); return; - case 0x5646c: - r4 = 7 << 16; - r5 = 7 << 16; - r4 = r4 + 1184; - r5 = r5 + -632; - /* Next insn is delay slot */ - r31=0x56484; - pc=0x3b800; - run_3b800(); return; - case 0x56484: - writePages[(r28+-30616)>>>12][((r28+-30616)>>>2)&0x3ff] = r2; - r21 = r0 + r0; - case 0x5648c: - /* Next insn is delay slot */ - r31=0x56494; - pc=0x53a00; - run_53a00(); return; - case 0x56494: - r18 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5656c; - continue; - } - case 0x564a0: - if(r16 <= 0) { - /* Next insn is delay slot */ - pc=0x564ec; - continue; - } - addr=r2+8; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r4 = tmp; - addr=r19+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x5648c; - continue; - } - r8 = r19 + 2; - r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x564e0; - continue; - case 0x564cc: - r8 = r8 + 2; - addr=r8+-2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x5648c; - continue; - } - case 0x564e0: - r3 = r3 + 1; - if(r3 != r16) { - /* Next insn is delay slot */ - pc=0x564cc; - continue; - } - case 0x564ec: - r23 = readPages[(r18+12)>>>12][((r18+12)>>>2)&0x3ff]; - r4 = readPages[(r23+0)>>>12][((r23+0)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5648c; - continue; - } - r23 = r23 + 4; - /* Next insn is delay slot */ - pc=0x56524; - continue; - case 0x56510: - r23 = r23 + 4; - r4 = readPages[(r23+-4)>>>12][((r23+-4)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5648c; - continue; - } - case 0x56524: - r5 = r17 + r0; - /* Next insn is delay slot */ - r31=0x56530; - pc=0x42c00; - run_42c00(); return; - case 0x56530: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x56510; - continue; - } - r2 = r16 < r20 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x565c0; - continue; - } - addr=r18+8; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r3 = tmp; - r2 = r16 << 1; - r2 = r19 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x5655c; - pc=0x53a00; - run_53a00(); return; - case 0x5655c: - r16 = r16 + 1; - r18 = r2 + r0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x564a0; - continue; - } - case 0x5656c: - r4 = readPages[(r28+-30616)>>>12][((r28+-30616)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x56584; - continue; - } - /* Next insn is delay slot */ - r31=0x56584; - pc=0x39200; - run_39200(); return; - case 0x56584: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - writePages[(r22+0)>>>12][((r22+0)>>>2)&0x3ff] = r16; - r2 = r21 + r0; - r23 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r22 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r21 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r20 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r28+-30616)>>>12][((r28+-30616)>>>2)&0x3ff] = r0; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x565c0: - r21 = r0 + -1; - /* Next insn is delay slot */ - pc=0x5648c; - continue; - case 0x565cc: - r16 = r0 + 1; - /* Next insn is delay slot */ - pc=0x56454; - continue; - case 0x56600: - pc=0x56600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_56600() throws ExecutionException { /* 0x56600 - 0x56800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x56600: - r29 = r29 + -96; - r6 = r29 + 16; - r7 = r29 + 80; - r2 = r0 + 32; - r5 = r5 & 65535; - writePages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff] = r31; - addr=r29+80; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x56624; - pc=0x56400; - run_56400(); return; - case 0x56624: - addr=r29+80; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r5 = tmp; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r29 + 16; - /* Next insn is delay slot */ - r31=0x56638; - pc=0x498e4; - run_49800(); return; - case 0x56638: - r31 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - r29 = r29 + 96; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x56800: - pc=0x56800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_56800() throws ExecutionException { /* 0x56800 - 0x56a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x56800: + case 0x57200: r4 = r5 + r0; - /* Next insn is delay slot */ - pc=0x5a200; - run_5a200(); return; - case 0x56a00: - pc=0x56a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_56a00() throws ExecutionException { /* 0x56a00 - 0x56c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x56a00: + pc=0x5a400; + run_5a000(); return; + case 0x57400: r29 = r29 + -48; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r16; - r16 = readPages[(r28+-31076)>>>12][((r28+-31076)>>>2)&0x3ff]; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r17; - r2 = readPages[(r16+328)>>>12][((r16+328)>>>2)&0x3ff]; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; + page[(r29+36)>>>2] = r16; + r16= page[(r28+-31516)>>>2]; + page[(r29+40)>>>2] = r17; + r2= page[(r16+328)>>>2]; + page[(r29+44)>>>2] = r31; r17 = r4 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x56b30; + pc=0x57530; continue; } - case 0x56a24: - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; + case 0x57424: + r3= page[(r2+4)>>>2]; r8 = r3 < 32 ? 1 : 0; if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x56aac; + pc=0x574ac; continue; } - r2 = 4 << 16; - r2 = r2 + -6144; + r2 = 5 << 16; + r2 = r2 + -8704; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x56a64; + pc=0x57464; continue; } - case 0x56a48: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r17 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r16 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + case 0x57448: + r31= page[(r29+44)>>>2]; + r17= page[(r29+40)>>>2]; + r16= page[(r29+36)>>>2]; r2 = r0 + -1; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x56a64: + case 0x57464: r4 = r0 + 400; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r5; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r6; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x56a7c; - pc=0x3e800; - run_3e800(); return; - case 0x56a7c: - r5 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r6 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r7 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + page[(r29+16)>>>2] = r5; + page[(r29+20)>>>2] = r6; + page[(r29+24)>>>2] = r7; + r31=0x5747c; + pc=0x4de00; + run_4d800(); return; + case 0x5747c: + r5= page[(r29+16)>>>2]; + r6= page[(r29+20)>>>2]; + r7= page[(r29+24)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x56a48; + pc=0x57448; continue; } - r3 = readPages[(r16+328)>>>12][((r16+328)>>>2)&0x3ff]; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r0; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - writePages[(r16+328)>>>12][((r16+328)>>>2)&0x3ff] = r2; + r3= page[(r16+328)>>>2]; + page[(r2+4)>>>2] = r0; + page[(r2+0)>>>2] = r3; + page[(r16+328)>>>2] = r2; r3 = r0 + r0; - writePages[(r2+392)>>>12][((r2+392)>>>2)&0x3ff] = r0; - writePages[(r2+396)>>>12][((r2+396)>>>2)&0x3ff] = r0; - case 0x56aac: + page[(r2+392)>>>2] = r0; + page[(r2+396)>>>2] = r0; + case 0x574ac: if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x56ae8; + pc=0x574e8; continue; } - case 0x56ab4: + case 0x574b4: r4 = r3 + 1; r3 = r3 + 2; - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + r31= page[(r29+44)>>>2]; r3 = r3 << 2; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r4; + page[(r2+4)>>>2] = r4; r2 = r2 + r3; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r5; - r17 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r16 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + page[(r2+0)>>>2] = r5; + r17= page[(r29+40)>>>2]; + r16= page[(r29+36)>>>2]; r2 = r0 + r0; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x56ae8: + case 0x574e8: r4 = r3 << 2; r4 = r2 + r4; - writePages[(r4+136)>>>12][((r4+136)>>>2)&0x3ff] = r6; - r8 = readPages[(r2+392)>>>12][((r2+392)>>>2)&0x3ff]; + page[(r4+136)>>>2] = r6; + r8= page[(r2+392)>>>2]; r6 = r0 + 1; r6 = r6 << (r3&0x1f); r8 = r8 | r6; - writePages[(r2+392)>>>12][((r2+392)>>>2)&0x3ff] = r8; - writePages[(r4+264)>>>12][((r4+264)>>>2)&0x3ff] = r7; + page[(r2+392)>>>2] = r8; + page[(r4+264)>>>2] = r7; r4 = r0 + 2; if(r17 != r4) { - /* Next insn is delay slot */ - pc=0x56ab4; + pc=0x574b4; continue; } - r4 = readPages[(r2+396)>>>12][((r2+396)>>>2)&0x3ff]; + r4= page[(r2+396)>>>2]; r6 = r4 | r6; - writePages[(r2+396)>>>12][((r2+396)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - pc=0x56ab4; + page[(r2+396)>>>2] = r6; + pc=0x574b4; continue; - case 0x56b30: + case 0x57530: r2 = r16 + 332; - writePages[(r16+328)>>>12][((r16+328)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x56a24; + page[(r16+328)>>>2] = r2; + pc=0x57424; continue; - case 0x56c00: - pc=0x56c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_56c00() throws ExecutionException { /* 0x56c00 - 0x56e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x56c00: - r2 = readPages[(r28+-31076)>>>12][((r28+-31076)>>>2)&0x3ff]; + case 0x57600: + r2= page[(r28+-31516)>>>2]; r29 = r29 + -64; r2 = r2 + 328; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r21; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r20; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r19; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r30; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r23; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r22; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r4; + page[(r29+44)>>>2] = r21; + page[(r29+40)>>>2] = r20; + page[(r29+36)>>>2] = r19; + page[(r29+60)>>>2] = r31; + page[(r29+56)>>>2] = r30; + page[(r29+52)>>>2] = r23; + page[(r29+48)>>>2] = r22; + page[(r29+32)>>>2] = r18; + page[(r29+28)>>>2] = r17; + page[(r29+24)>>>2] = r16; + page[(r29+64)>>>2] = r4; r19 = r5 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; + page[(r29+16)>>>2] = r2; r20 = r0 + 1; r21 = r0 + -1; - case 0x56c48: - r2 = readPages[(r28+-31076)>>>12][((r28+-31076)>>>2)&0x3ff]; - r23 = readPages[(r2+328)>>>12][((r2+328)>>>2)&0x3ff]; + case 0x57648: + r2= page[(r28+-31516)>>>2]; + r23= page[(r2+328)>>>2]; if(r23 == r0) { - /* Next insn is delay slot */ - pc=0x56ccc; + pc=0x576cc; continue; } - r30 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - case 0x56c64: - r3 = readPages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff]; + r30= page[(r29+16)>>>2]; + case 0x57664: + r3= page[(r23+4)>>>2]; r16 = r3 + -1; if(r16 < 0) { - /* Next insn is delay slot */ - pc=0x56cbc; + pc=0x576bc; continue; } r18 = r3 + 1; @@ -67309,213 +66208,174 @@ public final class AcmeCrossAssembler extends UnixRuntime { r18 = r18 << 2; r17 = r17 + r4; r18 = r23 + r18; - case 0x56c90: + case 0x57690: if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x56d00; + pc=0x57700; continue; } - r3 = readPages[(r17+128)>>>12][((r17+128)>>>2)&0x3ff]; + r3= page[(r17+128)>>>2]; if(r3 == r19) { - /* Next insn is delay slot */ - pc=0x56d00; + pc=0x57700; continue; } - case 0x56ca8: + case 0x576a8: r16 = r16 + -1; r17 = r17 + -4; r18 = r18 + -4; if(r16 != r21) { - /* Next insn is delay slot */ - pc=0x56c90; + pc=0x57690; continue; } - case 0x56cbc: - r2 = 4 << 16; - r2 = r2 + -5632; + case 0x576bc: + r2 = 5 << 16; + r2 = r2 + -8192; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x56db4; + pc=0x577b4; continue; } - case 0x56ccc: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r30 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r23 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r22 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r21 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r20 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r19 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + case 0x576cc: + r31= page[(r29+60)>>>2]; + r30= page[(r29+56)>>>2]; + r23= page[(r29+52)>>>2]; + r22= page[(r29+48)>>>2]; + r21= page[(r29+44)>>>2]; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; r29 = r29 + 64; - /* Next insn is delay slot */ pc=r31; return; - case 0x56d00: - r4 = readPages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff]; - r3 = readPages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff]; + case 0x57700: + r4= page[(r23+4)>>>2]; + r3= page[(r18+0)>>>2]; r4 = r4 + -1; if(r4 == r16) { - /* Next insn is delay slot */ - pc=0x56d94; + pc=0x57794; continue; } - writePages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff] = r0; - case 0x56d18: + page[(r18+0)>>>2] = r0; + case 0x57718: if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x56ca8; + pc=0x576a8; continue; } - r5 = readPages[(r23+392)>>>12][((r23+392)>>>2)&0x3ff]; + r5= page[(r23+392)>>>2]; r4 = r20 << (r16&0x1f); r5 = r4 & r5; - r22 = readPages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff]; + r22= page[(r23+4)>>>2]; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x56d84; + pc=0x57784; continue; } - r5 = readPages[(r23+396)>>>12][((r23+396)>>>2)&0x3ff]; + r5= page[(r23+396)>>>2]; r4 = r4 & r5; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x56da0; + pc=0x577a0; continue; } - r4 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r5 = readPages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ + r4= page[(r29+64)>>>2]; + r5= page[(r17+0)>>>2]; pc=r3; - r31=0x56d5c; + r31=0x5775c; return; - case 0x56d5c: - r3 = readPages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff]; + case 0x5775c: + r3= page[(r23+4)>>>2]; if(r3 != r22) { - /* Next insn is delay slot */ - pc=0x56c48; + pc=0x57648; continue; } - r3 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; + r3= page[(r30+0)>>>2]; if(r3 == r23) { - /* Next insn is delay slot */ - pc=0x56ca8; + pc=0x576a8; continue; } - /* Next insn is delay slot */ - pc=0x56c48; + pc=0x57648; continue; - case 0x56d84: - /* Next insn is delay slot */ + case 0x57784: pc=r3; - r31=0x56d8c; + r31=0x5778c; return; - case 0x56d8c: - /* Next insn is delay slot */ - pc=0x56d5c; + case 0x5778c: + pc=0x5775c; continue; - case 0x56d94: - writePages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - pc=0x56d18; + case 0x57794: + page[(r23+4)>>>2] = r16; + pc=0x57718; continue; - case 0x56da0: - r4 = readPages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ + case 0x577a0: + r4= page[(r17+0)>>>2]; pc=r3; - r31=0x56dac; + r31=0x577ac; return; - case 0x56dac: - /* Next insn is delay slot */ - pc=0x56d5c; + case 0x577ac: + pc=0x5775c; continue; - case 0x56db4: - r3 = readPages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff]; + case 0x577b4: + r3= page[(r23+4)>>>2]; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x56dfc; + pc=0x577fc; continue; } - r3 = readPages[(r23+0)>>>12][((r23+0)>>>2)&0x3ff]; + r3= page[(r23+0)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x56e10; - run_56e00(); return; + pc=0x57810; + run_57800(); return; } r4 = r23 + r0; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x56de4; - pc=0x3ea00; - run_3ea00(); return; - case 0x56de4: - r23 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - case 0x56dec: + page[(r30+0)>>>2] = r3; + r31=0x577e4; + pc=0x4e000; + run_4e000(); return; + case 0x577e4: + r23= page[(r30+0)>>>2]; + case 0x577ec: if(r23 != r0) { - /* Next insn is delay slot */ - pc=0x56c64; + pc=0x57664; continue; } - /* Next insn is delay slot */ - pc=0x56ccc; + pc=0x576cc; continue; - case 0x56dfc: - r3 = readPages[(r23+0)>>>12][((r23+0)>>>2)&0x3ff]; - case 0x56e00: - pc=0x56e00; + case 0x577fc: + r3= page[(r23+0)>>>2]; + case 0x57800: + pc=0x57800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_56e00() throws ExecutionException { /* 0x56e00 - 0x57000 */ + private final void run_57800() throws ExecutionException { /* 0x57800 - 0x58000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x56e00: + case 0x57800: r30 = r23 + r0; r23 = r3 + r0; - /* Next insn is delay slot */ - pc=0x56dec; - run_56c00(); return; - case 0x56e10: + pc=0x577ec; + run_57000(); return; + case 0x57810: r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x56e00; + pc=0x57800; continue; - case 0x57000: - pc=0x57000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_57000() throws ExecutionException { /* 0x57000 - 0x57200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x57000: + case 0x57a00: r29 = r29 + -48; - r2 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - r17 = readPages[(r5+16)>>>12][((r5+16)>>>2)&0x3ff]; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; + r2= page[(r4+16)>>>2]; + page[(r29+20)>>>2] = r17; + r17= page[(r5+16)>>>2]; + page[(r29+32)>>>2] = r20; r2 = r2 < r17 ? 1 : 0; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r22; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r21; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; + page[(r29+44)>>>2] = r31; + page[(r29+40)>>>2] = r22; + page[(r29+36)>>>2] = r21; + page[(r29+28)>>>2] = r19; + page[(r29+24)>>>2] = r18; + page[(r29+16)>>>2] = r16; r20 = r4 + r0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x57274; - run_57200(); return; + pc=0x57c74; + continue; } r17 = r17 + -1; r12 = r17 << 2; @@ -67523,45 +66383,43 @@ public final class AcmeCrossAssembler extends UnixRuntime { r18 = r16 + r12; r19 = r4 + 20; r12 = r19 + r12; - r22 = readPages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff]; - r2 = readPages[(r12+0)>>>12][((r12+0)>>>2)&0x3ff]; + r22= page[(r18+0)>>>2]; + r2= page[(r12+0)>>>2]; r22 = r22 + 1; if(r22 != r0) { - /* Next insn is delay slot */ if(r22!=0) { hi = (int)((r2 & 0xffffffffL) % (r22 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r22 & 0xffffffffL)); } - pc=0x5706c; + pc=0x57a6c; continue; } if(r22!=0) { hi = (int)((r2 & 0xffffffffL) % (r22 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r22 & 0xffffffffL)); } throw new ExecutionException("Break"); - case 0x5706c: + case 0x57a6c: r22 = lo; r21 = lo; if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x57168; + pc=0x57b68; continue; } r6 = r16 + r0; r3 = r19 + r0; r4 = r0 + r0; r2 = r0 + r0; - case 0x5708c: + case 0x57a8c: r6 = r6 + 4; - r11 = readPages[(r6+-4)>>>12][((r6+-4)>>>2)&0x3ff]; - r8 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + r11= page[(r6+-4)>>>2]; + r8= page[(r3+0)>>>2]; r10 = r11 & 65535; - { long hilo = (r22) * r10; hi = (int) (hilo >>> 32); lo = (int) hilo; } + { long hilo = (long)(r22) * ((long)r10); hi = (int) (hilo >>> 32); lo = (int) hilo; } r11 = r11 >>> 16; r3 = r3 + 4; r10 = lo; r10 = r4 + r10; r4 = r10 >>> 16; - { long hilo = (r22) * r11; hi = (int) (hilo >>> 32); lo = (int) hilo; } + { long hilo = (long)(r22) * ((long)r11); hi = (int) (hilo >>> 32); lo = (int) hilo; } r7 = r10 & 65535; r7 = r2 - r7; r11 = lo; @@ -67578,72 +66436,63 @@ public final class AcmeCrossAssembler extends UnixRuntime { r7 = r7 & 65535; r8 = r8 << 16; r7 = r8 | r7; - writePages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff] = r7; + page[(r3+-4)>>>2] = r7; r7 = ((r18 & 0xffffffffL) < (r6 & 0xffffffffL)) ? 1 : 0; if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x5708c; + pc=0x57a8c; continue; } - r2 = readPages[(r12+0)>>>12][((r12+0)>>>2)&0x3ff]; + r2= page[(r12+0)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x57168; + pc=0x57b68; continue; } r2 = r12 + -4; r3 = ((r19 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x57164; + pc=0x57b64; continue; } - r3 = readPages[(r12+-4)>>>12][((r12+-4)>>>2)&0x3ff]; + r3= page[(r12+-4)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x57150; + pc=0x57b50; continue; } - /* Next insn is delay slot */ - pc=0x57164; + pc=0x57b64; continue; - case 0x57140: - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; + case 0x57b40: + r3= page[(r2+0)>>>2]; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x57164; + pc=0x57b64; continue; } - case 0x57150: + case 0x57b50: r2 = r2 + -4; r3 = ((r19 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; r17 = r17 + -1; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x57140; + pc=0x57b40; continue; } - case 0x57164: - writePages[(r20+16)>>>12][((r20+16)>>>2)&0x3ff] = r17; - case 0x57168: + case 0x57b64: + page[(r20+16)>>>2] = r17; + case 0x57b68: r4 = r20 + r0; - /* Next insn is delay slot */ - r31=0x57174; - pc=0x5ce00; - run_5ce00(); return; - case 0x57174: + r31=0x57b74; + pc=0x5c400; + run_5c000(); return; + case 0x57b74: if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x57244; - run_57200(); return; + pc=0x57c44; + continue; } r21 = r22 + 1; r3 = r19 + r0; r8 = r0 + r0; - case 0x57188: + case 0x57b88: r16 = r16 + 4; - r7 = readPages[(r16+-4)>>>12][((r16+-4)>>>2)&0x3ff]; - r6 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + r7= page[(r16+-4)>>>2]; + r6= page[(r3+0)>>>2]; r5 = r7 & 65535; r2 = r6 & 65535; r5 = r8 - r5; @@ -67658,321 +66507,270 @@ public final class AcmeCrossAssembler extends UnixRuntime { r6 = r6 << 16; r5 = r6 | r5; r3 = r3 + 4; - writePages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff] = r5; + page[(r3+-4)>>>2] = r5; r5 = ((r18 & 0xffffffffL) < (r16 & 0xffffffffL)) ? 1 : 0; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x57188; + pc=0x57b88; continue; } r3 = r17 << 2; r3 = r19 + r3; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + r2= page[(r3+0)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x57244; - run_57200(); return; + pc=0x57c44; + continue; } r2 = r3 + -4; r4 = ((r19 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x57240; - run_57200(); return; + pc=0x57c40; + continue; } - case 0x57200: - pc=0x57200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_57200() throws ExecutionException { /* 0x57200 - 0x57400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x57200: - r3 = readPages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff]; + r3= page[(r3+-4)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5722c; + pc=0x57c2c; continue; } - /* Next insn is delay slot */ - pc=0x57240; + pc=0x57c40; continue; - case 0x5721c: - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; + case 0x57c1c: + r3= page[(r2+0)>>>2]; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x57240; + pc=0x57c40; continue; } - case 0x5722c: + case 0x57c2c: r2 = r2 + -4; r3 = ((r19 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; r17 = r17 + -1; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5721c; + pc=0x57c1c; continue; } - case 0x57240: - writePages[(r20+16)>>>12][((r20+16)>>>2)&0x3ff] = r17; - case 0x57244: + case 0x57c40: + page[(r20+16)>>>2] = r17; + case 0x57c44: r2 = r21 + r0; - case 0x57248: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + case 0x57c48: + r31= page[(r29+44)>>>2]; + r22= page[(r29+40)>>>2]; + r21= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x57274: + case 0x57c74: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x57248; + pc=0x57c48; continue; - case 0x57400: - pc=0x57400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_57400() throws ExecutionException { /* 0x57400 - 0x57600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x57400: - r5 = readPages[(r4+64)>>>12][((r4+64)>>>2)&0x3ff]; + case 0x57e00: + r5= page[(r4+64)>>>2]; r29 = r29 + -128; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r17; - writePages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff] = r16; - writePages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff] = r31; - writePages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff] = r30; - writePages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff] = r23; - writePages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff] = r22; - writePages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff] = r21; - writePages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff] = r20; - writePages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff] = r19; - writePages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff] = r18; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = f20; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = f21; + page[(r29+84)>>>2] = r17; + page[(r29+80)>>>2] = r16; + page[(r29+116)>>>2] = r31; + page[(r29+112)>>>2] = r30; + page[(r29+108)>>>2] = r23; + page[(r29+104)>>>2] = r22; + page[(r29+100)>>>2] = r21; + page[(r29+96)>>>2] = r20; + page[(r29+92)>>>2] = r19; + page[(r29+88)>>>2] = r18; + page[(r29+124)>>>2] = f20; + page[(r29+120)>>>2] = f21; r16 = r4 + r0; - r17 = readPages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff]; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r7; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r6; + r17= page[(r29+156)>>>2]; + page[(r29+36)>>>2] = r7; + page[(r29+32)>>>2] = r6; if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x57470; + pc=0x57e70; continue; } - r2 = readPages[(r4+68)>>>12][((r4+68)>>>2)&0x3ff]; + r2= page[(r4+68)>>>2]; r3 = r0 + 1; - writePages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff] = r2; + page[(r5+4)>>>2] = r2; r2 = r3 << (r2&0x1f); - writePages[(r5+8)>>>12][((r5+8)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x5746c; - pc=0x5ba00; - run_5ba00(); return; - case 0x5746c: - writePages[(r16+64)>>>12][((r16+64)>>>2)&0x3ff] = r0; - case 0x57470: - r2 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + page[(r5+8)>>>2] = r2; + r31=0x57e6c; + pc=0x5b200; + run_5b000(); return; + case 0x57e6c: + page[(r16+64)>>>2] = r0; + case 0x57e70: + r2= page[(r29+32)>>>2]; if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x5757c; + pc=0x57f7c; continue; } - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r0; - case 0x57488: + r18= page[(r29+32)>>>2]; + page[(r17+0)>>>2] = r0; + case 0x57e88: r2 = 32752 << 16; r3 = r18 & r2; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x57524; + pc=0x57f24; continue; } - f20 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + f20= page[(r29+36)>>>2]; f0 = r0; - f21 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + f21= page[(r29+32)>>>2]; f1 = r0; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x575a0; + pc=0x57fa0; continue; } - r9 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r3 = readPages[(r29+160)>>>12][((r29+160)>>>2)&0x3ff]; + r9= page[(r29+152)>>>2]; + r3= page[(r29+160)>>>2]; r2 = r0 + 1; - writePages[(r9+0)>>>12][((r9+0)>>>2)&0x3ff] = r2; + page[(r9+0)>>>2] = r2; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x57b6c; - run_57a00(); return; + pc=0x5856c; + run_58000(); return; } - r2 = 7 << 16; - r2 = r2 + 277; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - r2 = 7 << 16; - r2 = r2 + 276; - case 0x574e8: - f20 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r31 = readPages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff]; - r30 = readPages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff]; - r23 = readPages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff]; - r22 = readPages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff]; - r21 = readPages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff]; - r20 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r19 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - r18 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r17 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r16 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - f21 = readPages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff]; + r2 = 6 << 16; + r2 = r2 + 6369; + page[(r3+0)>>>2] = r2; + r2 = 6 << 16; + r2 = r2 + 6368; + case 0x57ee8: + f20= page[(r29+124)>>>2]; + r31= page[(r29+116)>>>2]; + r30= page[(r29+112)>>>2]; + r23= page[(r29+108)>>>2]; + r22= page[(r29+104)>>>2]; + r21= page[(r29+100)>>>2]; + r20= page[(r29+96)>>>2]; + r19= page[(r29+92)>>>2]; + r18= page[(r29+88)>>>2]; + r17= page[(r29+84)>>>2]; + r16= page[(r29+80)>>>2]; + f21= page[(r29+120)>>>2]; r29 = r29 + 128; - /* Next insn is delay slot */ pc=r31; return; - case 0x57524: - r8 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r9 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + case 0x57f24: + r8= page[(r29+152)>>>2]; + r9= page[(r29+36)>>>2]; r2 = r0 + 9999; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r2; + page[(r8+0)>>>2] = r2; if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x57b0c; - run_57a00(); return; + pc=0x5850c; + run_58000(); return; } - case 0x5753c: - r2 = 7 << 16; - r2 = r2 + 2072; - case 0x57544: - r3 = readPages[(r29+160)>>>12][((r29+160)>>>2)&0x3ff]; + case 0x57f3c: + r2 = 6 << 16; + r2 = r2 + 14992; + case 0x57f44: + r3= page[(r29+160)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x574e8; + pc=0x57ee8; continue; } addr=r2+3; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x57b30; - run_57a00(); return; + pc=0x58530; + run_58000(); return; } r3 = r2 + 3; - case 0x57568: - r8 = readPages[(r29+160)>>>12][((r29+160)>>>2)&0x3ff]; - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x574e8; + case 0x57f68: + r8= page[(r29+160)>>>2]; + page[(r8+0)>>>2] = r3; + pc=0x57ee8; continue; - case 0x5757c: - r3 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + case 0x57f7c: + r3= page[(r29+32)>>>2]; r18 = 32767 << 16; r18 = r18 | 65535; r2 = r0 + 1; r18 = r18 & r3; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r2; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - /* Next insn is delay slot */ - pc=0x57488; + page[(r17+0)>>>2] = r2; + page[(r29+32)>>>2] = r18; + pc=0x57e88; continue; - case 0x575a0: + case 0x57fa0: r2 = r29 + 24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; + page[(r29+16)>>>2] = r2; r7 = f20; r2 = r29 + 28; r6 = f21; r4 = r16 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x575c4; - pc=0x5d600; - run_5d600(); return; - case 0x575c4: + page[(r29+20)>>>2] = r2; + r31=0x57fc4; + pc=0x5c800; + run_5c800(); return; + case 0x57fc4: r4 = r18 >>> 20; r17 = r2 + r0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x57b3c; - run_57a00(); return; + pc=0x5853c; + run_58000(); return; } - r5 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r4 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + r5= page[(r29+28)>>>2]; + r4= page[(r29+24)>>>2]; r4 = r5 + r4; r2 = r4 < -1041 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x581f0; - run_58000(); return; + pc=0x58bf0; + run_58800(); return; } r2 = r0 + -1010; r2 = r2 - r4; - r6 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + r6= page[(r29+36)>>>2]; r18 = r18 << (r2&0x1f); - case 0x57600: - pc=0x57600; + case 0x58000: + pc=0x58000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_57600() throws ExecutionException { /* 0x57600 - 0x57800 */ + private final void run_58000() throws ExecutionException { /* 0x58000 - 0x58800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x57600: + case 0x58000: r2 = r4 + 1042; r2 = r6 >>> (r2&0x1f); r18 = r18 | r2; - case 0x5760c: + case 0x5800c: f0 = r18; { long l = Double.doubleToLongBits(((double)f0)); f3 = (int)(l >>> 32); f2 = (int)l; } if(r18 < 0) { - /* Next insn is delay slot */ - pc=0x58798; - run_58600(); return; + pc=0x59198; + run_59000(); return; } - case 0x57620: + case 0x58020: r2 = f3; r6 = 65040 << 16; r3 = f2; r2 = r6 + r2; r4 = r4 + -1; r19 = r0 + 1; - case 0x57638: + case 0x58038: f4 = r3; - f0 = readPages[(r28+-31044)>>>12][((r28+-31044)>>>2)&0x3ff]; + f0= page[(r28+-31484)>>>2]; f5 = r2; - f1 = readPages[(r28+-31048)>>>12][((r28+-31048)>>>2)&0x3ff]; + f1= page[(r28+-31488)>>>2]; f6 = r4; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f0 = readPages[(r28+-31036)>>>12][((r28+-31036)>>>2)&0x3ff]; - f1 = readPages[(r28+-31040)>>>12][((r28+-31040)>>>2)&0x3ff]; + f0= page[(r28+-31476)>>>2]; + f1= page[(r28+-31480)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f0 = readPages[(r28+-31028)>>>12][((r28+-31028)>>>2)&0x3ff]; - f1 = readPages[(r28+-31032)>>>12][((r28+-31032)>>>2)&0x3ff]; + f0= page[(r28+-31468)>>>2]; + f1= page[(r28+-31472)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f0 = readPages[(r28+-31020)>>>12][((r28+-31020)>>>2)&0x3ff]; + f0= page[(r28+-31460)>>>2]; { long l = Double.doubleToLongBits(((double)f6)); f3 = (int)(l >>> 32); f2 = (int)l; } - f1 = readPages[(r28+-31024)>>>12][((r28+-31024)>>>2)&0x3ff]; + f1= page[(r28+-31464)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r2 = fcsr; @@ -67987,281 +66785,242 @@ public final class AcmeCrossAssembler extends UnixRuntime { case 3: f0 = (int)Math.floor((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); break; // Round towards minus infinity } fcsr = r2; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = f0; + page[(r29+44)>>>2] = f0; f0 = r0; f1 = r0; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x58184; - run_58000(); return; + pc=0x58b84; + run_58800(); return; } - case 0x576dc: - r8 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + case 0x580dc: + r8= page[(r29+44)>>>2]; r2 = (r8&0xffffffffL) < (23&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5814c; - run_58000(); return; + pc=0x58b4c; + run_58800(); return; } - r3 = 7 << 16; + r3 = 6 << 16; r2 = r8 << 3; - r3 = r3 + 2176; + r3 = r3 + 15056; r2 = r2 + r3; - f0 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - f2 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - f1 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - f3 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + f0= page[(r2+4)>>>2]; + f2= page[(r29+36)>>>2]; + f1= page[(r2+0)>>>2]; + f3= page[(r29+32)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x58208; - run_58200(); return; + pc=0x58c08; + run_58800(); return; } r8 = r8 + -1; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r8; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r0; - case 0x57730: + page[(r29+44)>>>2] = r8; + page[(r29+60)>>>2] = r0; + case 0x58130: r4 = r5 - r4; r23 = r4 + -1; if(r23 < 0) { - /* Next insn is delay slot */ - pc=0x58174; - run_58000(); return; + pc=0x58b74; + run_58800(); return; } r18 = r0 + r0; - case 0x57744: - r8 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + case 0x58144: + r8= page[(r29+44)>>>2]; if(r8 < 0) { - /* Next insn is delay slot */ - pc=0x5815c; - run_58000(); return; + pc=0x58b5c; + run_58800(); return; } r23 = r23 + r8; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r8; + page[(r29+48)>>>2] = r8; r22 = r0 + r0; - case 0x57760: - r3 = readPages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff]; + case 0x58160: + r3= page[(r29+144)>>>2]; r2 = (r3&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x57b7c; - run_57a00(); return; + pc=0x5857c; + continue; } r2 = r3 < 6 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x58bf8; - run_58a00(); return; + pc=0x595f8; + run_59000(); return; } r3 = r3 + -4; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r3; + page[(r29+144)>>>2] = r3; r8 = r0 + r0; - case 0x5778c: - r9 = readPages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff]; + case 0x5818c: + r9= page[(r29+144)>>>2]; r2 = r0 + 3; if(r9 == r2) { - /* Next insn is delay slot */ - pc=0x587b4; - run_58600(); return; + pc=0x591b4; + run_59000(); return; } r2 = r9 < 4 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5862c; - run_58600(); return; + pc=0x5902c; + run_59000(); return; } - r3 = readPages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff]; + r3= page[(r29+144)>>>2]; r2 = r0 + 4; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x583fc; - run_58200(); return; + pc=0x58dfc; + run_58800(); return; } r2 = r0 + 5; if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x57b80; - run_57a00(); return; + pc=0x58580; + continue; } r3 = r0 + 1; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r3; - case 0x577cc: - r9 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - r3 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + page[(r29+52)>>>2] = r3; + case 0x581cc: + r9= page[(r29+148)>>>2]; + r3= page[(r29+44)>>>2]; r9 = r9 + r3; r30 = r9 + 1; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r9; + page[(r29+64)>>>2] = r9; if(r30 <= 0) { - /* Next insn is delay slot */ - pc=0x58818; - run_58800(); return; + pc=0x59218; + run_59000(); return; } r6 = r30 + r0; - case 0x577f0: + case 0x581f0: r2 = (r6&0xffffffffL) < (24&0xffffffffL) ? 1 : 0; - writePages[(r16+68)>>>12][((r16+68)>>>2)&0x3ff] = r0; + page[(r16+68)>>>2] = r0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x58c04; - run_58c00(); return; + pc=0x59604; + run_59000(); return; } - case 0x57800: - pc=0x57800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_57800() throws ExecutionException { /* 0x57800 - 0x57a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x57800: r3 = r0 + 1; r2 = r0 + 4; - case 0x57808: + case 0x58208: r2 = r2 << 1; r4 = r2 + 20; r4 = ((r6 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; r5 = r3 + r0; r3 = r3 + 1; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x57808; + pc=0x58208; continue; } - writePages[(r16+68)>>>12][((r16+68)>>>2)&0x3ff] = r5; + page[(r16+68)>>>2] = r5; r21 = r6 + r0; - case 0x5782c: + case 0x5822c: r4 = r16 + r0; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = r8; + page[(r29+68)>>>2] = r8; r21 = (r21&0xffffffffL) < (15&0xffffffffL) ? 1 : 0; - /* Next insn is delay slot */ - r31=0x57840; - pc=0x5b800; - run_5b800(); return; - case 0x57840: + r31=0x58240; + pc=0x5b000; + run_5b000(); return; + case 0x58240: r20 = r2 + r0; - writePages[(r16+64)>>>12][((r16+64)>>>2)&0x3ff] = r2; - r8 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; + page[(r16+64)>>>2] = r2; + r8= page[(r29+68)>>>2]; if(r21 == r0) { - /* Next insn is delay slot */ - pc=0x57bb4; - run_57a00(); return; + pc=0x585b4; + continue; } if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x57bb4; - run_57a00(); return; + pc=0x585b4; + continue; } - f8 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r8 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - f9 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + f8= page[(r29+36)>>>2]; + r8= page[(r29+44)>>>2]; + f9= page[(r29+32)>>>2]; if(r8 <= 0) { - /* Next insn is delay slot */ - pc=0x5882c; - run_58800(); return; + pc=0x5922c; + run_59000(); return; } r3 = r8 & 15; - r2 = 7 << 16; + r2 = 6 << 16; r3 = r3 << 3; - r2 = r2 + 2176; + r2 = r2 + 15056; r2 = r3 + r2; - f2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - f3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; + f2= page[(r2+4)>>>2]; + f3= page[(r2+0)>>>2]; r2 = r8 >> 4; r3 = r2 & 16; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x587e0; - run_58600(); return; + pc=0x591e0; + run_59000(); return; } - r3 = 7 << 16; - f0 = readPages[(r3+2172)>>>12][((r3+2172)>>>2)&0x3ff]; + r3 = 6 << 16; + f0= page[(r3+15052)>>>2]; r2 = r2 & 15; - f1 = readPages[(r3+2168)>>>12][((r3+2168)>>>2)&0x3ff]; + f1= page[(r3+15048)>>>2]; r8 = r0 + 3; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - case 0x578b8: + case 0x582b8: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x578f8; + pc=0x582f8; continue; } - r3 = 7 << 16; - r3 = r3 + 2136; - case 0x578c8: + r3 = 6 << 16; + r3 = r3 + 15016; + case 0x582c8: r4 = r2 & 1; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x578e8; + pc=0x582e8; continue; } - f4 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; + f4= page[(r3+4)>>>2]; r8 = r8 + 1; - f5 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + f5= page[(r3+0)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - case 0x578e8: + case 0x582e8: r2 = r2 >> 1; r3 = r3 + 8; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x578c8; + pc=0x582c8; continue; } - case 0x578f8: + case 0x582f8: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))/(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - case 0x578fc: - r3 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; + case 0x582fc: + r3= page[(r29+60)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5792c; + pc=0x5832c; continue; } - f2 = readPages[(r28+-31012)>>>12][((r28+-31012)>>>2)&0x3ff]; - f3 = readPages[(r28+-31016)>>>12][((r28+-31016)>>>2)&0x3ff]; + f2= page[(r28+-31452)>>>2]; + f3= page[(r28+-31456)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x58ab4; - run_58a00(); return; + pc=0x594b4; + run_59000(); return; } - case 0x5792c: + case 0x5832c: f4 = r8; r2 = 64704 << 16; { long l = Double.doubleToLongBits(((double)f4)); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f2 = readPages[(r28+-30996)>>>12][((r28+-30996)>>>2)&0x3ff]; - f3 = readPages[(r28+-31000)>>>12][((r28+-31000)>>>2)&0x3ff]; + f2= page[(r28+-31436)>>>2]; + f3= page[(r28+-31440)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } r8 = f7; r9 = f6; r8 = r2 + r8; if(r30 == r0) { - /* Next insn is delay slot */ - pc=0x58700; - run_58600(); return; + pc=0x59100; + run_59000(); return; } - r2 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + r2= page[(r29+44)>>>2]; r4 = r30 + r0; - case 0x5796c: - r3 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; + case 0x5836c: + r3= page[(r29+52)>>>2]; r5 = r4 + -1; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x58974; - run_58800(); return; + pc=0x59374; + run_59000(); return; } - r3 = 7 << 16; + r3 = 6 << 16; r5 = r5 << 3; - r3 = r3 + 2176; + r3 = r3 + 15056; r3 = r5 + r3; - f2 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - f4 = readPages[(r28+-30980)>>>12][((r28+-30980)>>>2)&0x3ff]; - f3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - f5 = readPages[(r28+-30984)>>>12][((r28+-30984)>>>2)&0x3ff]; + f2= page[(r3+4)>>>2]; + f4= page[(r28+-31420)>>>2]; + f3= page[(r3+0)>>>2]; + f5= page[(r28+-31424)>>>2]; r6 = fcsr; r6 = fcsr; r1 = r6 | 3; @@ -68283,66 +67042,47 @@ public final class AcmeCrossAssembler extends UnixRuntime { r5 = r5 >> 24; r3 = r20 + 1; addr=r20+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits(((double)f6)); f5 = (int)(l >>> 32); f4 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x57ac0; - run_57a00(); return; + pc=0x584c0; + continue; } - case 0x57a00: - pc=0x57a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_57a00() throws ExecutionException { /* 0x57a00 - 0x57c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x57a00: - f10 = readPages[(r28+-31012)>>>12][((r28+-31012)>>>2)&0x3ff]; - f11 = readPages[(r28+-31016)>>>12][((r28+-31016)>>>2)&0x3ff]; + f10= page[(r28+-31452)>>>2]; + f11= page[(r28+-31456)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))<(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x58b80; - run_58a00(); return; + pc=0x59580; + run_59000(); return; } r5 = r4 < 2 ? 1 : 0; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x58768; - run_58600(); return; + pc=0x59168; + run_59000(); return; } - f6 = readPages[(r28+-31004)>>>12][((r28+-31004)>>>2)&0x3ff]; + f6= page[(r28+-31444)>>>2]; r4 = r20 + r4; - f7 = readPages[(r28+-31008)>>>12][((r28+-31008)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x57a64; + f7= page[(r28+-31448)>>>2]; + pc=0x58464; continue; - case 0x57a48: + case 0x58448: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))<(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x58b80; - run_58a00(); return; + pc=0x59580; + run_59000(); return; } if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x58768; - run_58600(); return; + pc=0x59168; + run_59000(); return; } - case 0x57a64: + case 0x58464: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } r3 = r3 + 1; @@ -68366,65 +67106,58 @@ public final class AcmeCrossAssembler extends UnixRuntime { fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); r5 = r5 >> 24; addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x57a48; + pc=0x58448; continue; } - case 0x57ac0: - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r2; - case 0x57ac4: + case 0x584c0: + page[(r29+44)>>>2] = r2; + case 0x584c4: r4 = r16 + r0; r5 = r17 + r0; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x57ad8; - pc=0x5ba00; - run_5ba00(); return; - case 0x57ad8: - r8 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r3 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; + page[(r29+72)>>>2] = r3; + r31=0x584d8; + pc=0x5b200; + run_5b000(); return; + case 0x584d8: + r8= page[(r29+44)>>>2]; + r3= page[(r29+72)>>>2]; r2 = r8 + 1; - r9 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r8 = readPages[(r29+160)>>>12][((r29+160)>>>2)&0x3ff]; + r9= page[(r29+152)>>>2]; + r8= page[(r29+160)>>>2]; addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r9+0)>>>12][((r9+0)>>>2)&0x3ff] = r2; + page[(addr)>>>2] = tmp; + page[(r9+0)>>>2] = r2; if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x58620; - run_58600(); return; + pc=0x59020; + run_59000(); return; } - writePages[(r8+0)>>>12][((r8+0)>>>2)&0x3ff] = r3; + page[(r8+0)>>>2] = r3; r2 = r20 + r0; - /* Next insn is delay slot */ - pc=0x574e8; - run_57400(); return; - case 0x57b0c: + pc=0x57ee8; + run_57800(); return; + case 0x5850c: r2 = 15 << 16; r2 = r2 | 65535; r18 = r18 & r2; if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x5753c; - run_57400(); return; + pc=0x57f3c; + run_57800(); return; } - r2 = 7 << 16; - r2 = r2 + 2060; - /* Next insn is delay slot */ - pc=0x57544; - run_57400(); return; - case 0x57b30: + r2 = 6 << 16; + r2 = r2 + 14980; + pc=0x57f44; + run_57800(); return; + case 0x58530: r3 = r2 + 8; - /* Next insn is delay slot */ - pc=0x57568; - run_57400(); return; - case 0x57b3c: + pc=0x57f68; + run_57800(); return; + case 0x5853c: r2 = f21; r6 = 15 << 16; r6 = r6 | 65535; @@ -68433,78 +67166,59 @@ public final class AcmeCrossAssembler extends UnixRuntime { r2 = r6 | r5; r3 = f20; r4 = r4 + -1023; - r5 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + r5= page[(r29+28)>>>2]; r19 = r0 + r0; - /* Next insn is delay slot */ - pc=0x57638; - run_57600(); return; - case 0x57b6c: - r2 = 7 << 16; - r2 = r2 + 276; - /* Next insn is delay slot */ - pc=0x574e8; - run_57400(); return; - case 0x57b7c: - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r0; - case 0x57b80: - writePages[(r16+68)>>>12][((r16+68)>>>2)&0x3ff] = r0; + pc=0x58038; + continue; + case 0x5856c: + r2 = 6 << 16; + r2 = r2 + 6368; + pc=0x57ee8; + run_57800(); return; + case 0x5857c: + page[(r29+144)>>>2] = r0; + case 0x58580: + page[(r16+68)>>>2] = r0; r4 = r16 + r0; r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x57b94; - pc=0x5b800; - run_5b800(); return; - case 0x57b94: + r31=0x58594; + pc=0x5b000; + run_5b000(); return; + case 0x58594: r8 = r0 + -1; r9 = r0 + 1; r20 = r2 + r0; - writePages[(r16+64)>>>12][((r16+64)>>>2)&0x3ff] = r2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r0; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r8; + page[(r16+64)>>>2] = r2; + page[(r29+148)>>>2] = r0; + page[(r29+64)>>>2] = r8; r30 = r0 + -1; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r9; - case 0x57bb4: - r2 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + page[(r29+52)>>>2] = r9; + case 0x585b4: + r2= page[(r29+24)>>>2]; if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x57d7c; - run_57c00(); return; + pc=0x5877c; + continue; } - r8 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + r8= page[(r29+44)>>>2]; r3 = r8 < 15 ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x57d7c; - run_57c00(); return; + pc=0x5877c; + continue; } - r3 = 7 << 16; + r3 = 6 << 16; r2 = r8 << 3; - r3 = r3 + 2176; + r3 = r3 + 15056; r2 = r2 + r3; - f2 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r9 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - f3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; + f2= page[(r2+4)>>>2]; + r9= page[(r29+148)>>>2]; + f3= page[(r2+0)>>>2]; if(r9 < 0) { - /* Next insn is delay slot */ - pc=0x58428; - run_58400(); return; + pc=0x58e28; + run_58800(); return; } - case 0x57bfc: - f6 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - case 0x57c00: - pc=0x57c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_57c00() throws ExecutionException { /* 0x57c00 - 0x57e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x57c00: - f7 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + case 0x585fc: + f6= page[(r29+36)>>>2]; + f7= page[(r29+32)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))/(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } r2 = fcsr; r2 = fcsr; @@ -68524,42 +67238,38 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = r20 + 1; r2 = r4 + 48; addr=r20+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r0 + 1; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } if(r30 == r2) { - /* Next insn is delay slot */ - pc=0x57d00; + pc=0x58700; continue; } - f6 = readPages[(r28+-31004)>>>12][((r28+-31004)>>>2)&0x3ff]; + f6= page[(r28+-31444)>>>2]; f8 = r0; - f7 = readPages[(r28+-31008)>>>12][((r28+-31008)>>>2)&0x3ff]; + f7= page[(r28+-31448)>>>2]; f9 = r0; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))==(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x57ac4; - run_57a00(); return; + pc=0x584c4; + continue; } r2 = r20 + 2; r30 = r20 + r30; - /* Next insn is delay slot */ - pc=0x57cac; + pc=0x586ac; continue; - case 0x57c94: + case 0x58694: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } r2 = r2 + 1; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))==(Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x57ac4; - run_57a00(); return; + pc=0x584c4; + continue; } - case 0x57cac: + case 0x586ac: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))/(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } r3 = r2 + r0; r4 = fcsr; @@ -68579,1167 +67289,985 @@ public final class AcmeCrossAssembler extends UnixRuntime { r5 = f10; r4 = r5 + 48; addr=r2+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } if(r2 != r30) { - /* Next insn is delay slot */ - pc=0x57c94; + pc=0x58694; continue; } - case 0x57d00: + case 0x58700: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x57d38; + pc=0x58738; continue; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x57ac4; - run_57a00(); return; + pc=0x584c4; + continue; } r4 = f10; r2 = r4 & 1; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x57ac4; - run_57a00(); return; + pc=0x584c4; + continue; } - case 0x57d38: + case 0x58738: addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r5 = tmp; - case 0x57d3c: + case 0x5873c: r4 = r0 + 57; - /* Next insn is delay slot */ - pc=0x57d58; + pc=0x58758; continue; - case 0x57d48: + case 0x58748: if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x588b4; - run_58800(); return; + pc=0x592b4; + run_59000(); return; } addr=r2+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r5 = tmp; r3 = r2 + r0; - case 0x57d58: + case 0x58758: r2 = r3 + -1; if(r5 == r4) { - /* Next insn is delay slot */ - pc=0x57d48; + pc=0x58748; continue; } r4 = r5 + 1; r4 = r4 << 24; r4 = r4 >> 24; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x57ac4; - run_57a00(); return; - case 0x57d7c: - r8 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + pc=0x584c4; + continue; + case 0x5877c: + r8= page[(r29+52)>>>2]; if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x581b8; - run_58000(); return; + pc=0x58bb8; + run_58800(); return; } - r9 = readPages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff]; + r9= page[(r29+144)>>>2]; r9 = r9 < 2 ? 1 : 0; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r9; + page[(r29+56)>>>2] = r9; if(r9 != r0) { - /* Next insn is delay slot */ - pc=0x584fc; - run_58400(); return; + pc=0x58efc; + run_58800(); return; } r3 = r30 + -1; r2 = r22 < r3 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x587c0; - run_58600(); return; + pc=0x591c0; + run_59000(); return; } r3 = r22 - r3; - case 0x57db8: + case 0x587b8: if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x58a78; - run_58a00(); return; + pc=0x59478; + run_59000(); return; } r21 = r18 + r0; r2 = r30 + r0; - case 0x57dc8: + case 0x587c8: r4 = r16 + r0; r5 = r0 + 1; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r3; + page[(r29+72)>>>2] = r3; r18 = r18 + r2; r23 = r23 + r2; - /* Next insn is delay slot */ - r31=0x57de4; - pc=0x5c400; - run_5c400(); return; - case 0x57de4: - r3 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; + r31=0x587e4; + pc=0x5ba00; + run_5b800(); return; + case 0x587e4: + r3= page[(r29+72)>>>2]; r19 = r2 + r0; - case 0x57dec: + case 0x587ec: if(r21 == r0) { - /* Next insn is delay slot */ - pc=0x57e18; - run_57e00(); return; + pc=0x58818; + run_58800(); return; } if(r23 <= 0) { - /* Next insn is delay slot */ - pc=0x57e18; - run_57e00(); return; + pc=0x58818; + run_58800(); return; } r4 = r21 < r23 ? 1 : 0; - case 0x57e00: - pc=0x57e00; + case 0x58800: + pc=0x58800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_57e00() throws ExecutionException { /* 0x57e00 - 0x58000 */ + private final void run_58800() throws ExecutionException { /* 0x58800 - 0x59000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x57e00: + case 0x58800: r2 = r23 + r0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x583f0; - run_58200(); return; + pc=0x58df0; + continue; } - case 0x57e0c: + case 0x5880c: r18 = r18 - r2; r21 = r21 - r2; r23 = r23 - r2; - case 0x57e18: + case 0x58818: if(r22 <= 0) { - /* Next insn is delay slot */ - pc=0x57e94; + pc=0x58894; continue; } - r9 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; + r9= page[(r29+52)>>>2]; if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x58778; - run_58600(); return; + pc=0x59178; + run_59000(); return; } if(r3 <= 0) { - /* Next insn is delay slot */ - pc=0x57e88; + pc=0x58888; continue; } r6 = r3 + r0; r5 = r19 + r0; r4 = r16 + r0; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x57e50; - pc=0x5ca00; - run_5ca00(); return; - case 0x57e50: + page[(r29+72)>>>2] = r3; + r31=0x58850; + pc=0x5c000; + run_5c000(); return; + case 0x58850: r5 = r2 + r0; r6 = r17 + r0; r4 = r16 + r0; r19 = r2 + r0; - /* Next insn is delay slot */ - r31=0x57e68; - pc=0x5c600; - run_5c600(); return; - case 0x57e68: + r31=0x58868; + pc=0x5bc00; + run_5b800(); return; + case 0x58868: r5 = r17 + r0; r4 = r16 + r0; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x57e7c; - pc=0x5ba00; - run_5ba00(); return; - case 0x57e7c: - r2 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r3 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; + page[(r29+68)>>>2] = r2; + r31=0x5887c; + pc=0x5b200; + run_5b000(); return; + case 0x5887c: + r2= page[(r29+68)>>>2]; + r3= page[(r29+72)>>>2]; r17 = r2 + r0; - case 0x57e88: + case 0x58888: r6 = r22 - r3; if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x584a4; - run_58400(); return; + pc=0x58ea4; + continue; } - case 0x57e94: + case 0x58894: r4 = r16 + r0; r5 = r0 + 1; - /* Next insn is delay slot */ - r31=0x57ea4; - pc=0x5c400; - run_5c400(); return; - case 0x57ea4: - r3 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; + r31=0x588a4; + pc=0x5ba00; + run_5b800(); return; + case 0x588a4: + r3= page[(r29+48)>>>2]; r22 = r2 + r0; if(r3 <= 0) { - /* Next insn is delay slot */ - pc=0x57ecc; + pc=0x588cc; continue; } r4 = r16 + r0; r5 = r2 + r0; r6 = r3 + r0; - /* Next insn is delay slot */ - r31=0x57ec8; - pc=0x5ca00; - run_5ca00(); return; - case 0x57ec8: + r31=0x588c8; + pc=0x5c000; + run_5c000(); return; + case 0x588c8: r22 = r2 + r0; - case 0x57ecc: - r7 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; + case 0x588cc: + r7= page[(r29+56)>>>2]; if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x583a0; - run_58200(); return; + pc=0x58da0; + continue; } - case 0x57edc: - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r0; - case 0x57ee0: - r7 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; + case 0x588dc: + page[(r29+56)>>>2] = r0; + case 0x588e0: + r7= page[(r29+48)>>>2]; if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x585f0; - run_58400(); return; + pc=0x58ff0; + continue; } r2 = r0 + 1; - case 0x57ef4: + case 0x588f4: r2 = r2 + r23; r2 = r2 & 31; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x581d8; - run_58000(); return; + pc=0x58bd8; + continue; } r3 = r0 + 32; r3 = r3 - r2; r4 = r3 < 5 ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x58bdc; - run_58a00(); return; + pc=0x595dc; + run_59000(); return; } r3 = r0 + 28; r2 = r3 - r2; r18 = r18 + r2; r21 = r21 + r2; r23 = r23 + r2; - case 0x57f2c: + case 0x5892c: if(r18 <= 0) { - /* Next insn is delay slot */ - pc=0x57f4c; + pc=0x5894c; continue; } r5 = r17 + r0; r4 = r16 + r0; r6 = r18 + r0; - /* Next insn is delay slot */ - r31=0x57f48; - pc=0x5cc00; - run_5cc00(); return; - case 0x57f48: + r31=0x58948; + pc=0x5c200; + run_5c000(); return; + case 0x58948: r17 = r2 + r0; - case 0x57f4c: + case 0x5894c: if(r23 <= 0) { - /* Next insn is delay slot */ - pc=0x57f6c; + pc=0x5896c; continue; } r5 = r22 + r0; r4 = r16 + r0; r6 = r23 + r0; - /* Next insn is delay slot */ - r31=0x57f68; - pc=0x5cc00; - run_5cc00(); return; - case 0x57f68: + r31=0x58968; + pc=0x5c200; + run_5c000(); return; + case 0x58968: r22 = r2 + r0; - case 0x57f6c: - r8 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; + case 0x5896c: + r8= page[(r29+60)>>>2]; if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x58348; - run_58200(); return; + pc=0x58d48; + continue; } - case 0x57f7c: + case 0x5897c: if(r30 <= 0) { - /* Next insn is delay slot */ - pc=0x58644; - run_58600(); return; + pc=0x59044; + run_59000(); return; } - case 0x57f84: - r9 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; + case 0x58984: + r9= page[(r29+52)>>>2]; if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x58214; - run_58200(); return; + pc=0x58c14; + continue; } if(r21 <= 0) { - /* Next insn is delay slot */ - pc=0x57fb4; + pc=0x589b4; continue; } r5 = r19 + r0; r4 = r16 + r0; r6 = r21 + r0; - /* Next insn is delay slot */ - r31=0x57fb0; - pc=0x5cc00; - run_5cc00(); return; - case 0x57fb0: + r31=0x589b0; + pc=0x5c200; + run_5c000(); return; + case 0x589b0: r19 = r2 + r0; - case 0x57fb4: - r3 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; + case 0x589b4: + r3= page[(r29+56)>>>2]; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x588d8; - run_58800(); return; + pc=0x592d8; + run_59000(); return; } r21 = r19 + r0; - case 0x57fc8: - r8 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + case 0x589c8: + r8= page[(r29+36)>>>2]; r30 = r20 + r30; r8 = r8 & 1; r18 = r20 + 1; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r30; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r8; - case 0x57fe0: + page[(r29+48)>>>2] = r30; + page[(r29+52)>>>2] = r8; + case 0x589e0: r9 = r18 + -1; r4 = r17 + r0; r5 = r22 + r0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r9; - /* Next insn is delay slot */ - r31=0x57ff8; - pc=0x57000; - run_57000(); return; - case 0x57ff8: + page[(r29+40)>>>2] = r9; + r31=0x589f8; + pc=0x57a00; + run_57800(); return; + case 0x589f8: r4 = r17 + r0; r5 = r19 + r0; - case 0x58000: - pc=0x58000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_58000() throws ExecutionException { /* 0x58000 - 0x58200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x58000: - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; + page[(r29+32)>>>2] = r2; r23 = r2 + 48; - /* Next insn is delay slot */ - r31=0x58010; - pc=0x5ce00; - run_5ce00(); return; - case 0x58010: + r31=0x58a10; + pc=0x5c400; + run_5c000(); return; + case 0x58a10: r4 = r16 + r0; r5 = r22 + r0; r6 = r21 + r0; r30 = r2 + r0; - /* Next insn is delay slot */ - r31=0x58028; - pc=0x5d000; - run_5d000(); return; - case 0x58028: + r31=0x58a28; + pc=0x5c600; + run_5c000(); return; + case 0x58a28: r3 = r2 + r0; - r2 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; + r2= page[(r2+12)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x585d4; - run_58400(); return; + pc=0x58fd4; + continue; } r5 = r3 + r0; r4 = r17 + r0; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x58050; - pc=0x5ce00; - run_5ce00(); return; - case 0x58050: - r3 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; + page[(r29+72)>>>2] = r3; + r31=0x58a50; + pc=0x5c400; + run_5c000(); return; + case 0x58a50: + r3= page[(r29+72)>>>2]; r4 = r16 + r0; r5 = r3 + r0; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x58068; - pc=0x5ba00; - run_5ba00(); return; - case 0x58068: - r2 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; + page[(r29+68)>>>2] = r2; + r31=0x58a68; + pc=0x5b200; + run_5b000(); return; + case 0x58a68: + r2= page[(r29+68)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x58098; + pc=0x58a98; continue; } - r3 = readPages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff]; + r3= page[(r29+144)>>>2]; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x58098; + pc=0x58a98; continue; } - r8 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; + r8= page[(r29+52)>>>2]; if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x58590; - run_58400(); return; + pc=0x58f90; + continue; } - case 0x58098: + case 0x58a98: if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x58524; - run_58400(); return; + pc=0x58f24; + continue; } if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x580c8; + pc=0x58ac8; continue; } - r8 = readPages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff]; + r8= page[(r29+144)>>>2]; if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x580c8; + pc=0x58ac8; continue; } - r9 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; + r9= page[(r29+52)>>>2]; if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x58524; - run_58400(); return; + pc=0x58f24; + continue; } - case 0x580c8: + case 0x58ac8: if(r2 > 0) { - /* Next insn is delay slot */ - pc=0x58928; - run_58800(); return; + pc=0x59328; + run_59000(); return; } - r8 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; + r8= page[(r29+48)>>>2]; r3 = r18 + r0; addr=r18+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r23&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r18 == r8) { - /* Next insn is delay slot */ - pc=0x58954; - run_58800(); return; + pc=0x59354; + run_59000(); return; } r5 = r17 + r0; r4 = r16 + r0; r6 = r0 + 10; r7 = r0 + r0; - /* Next insn is delay slot */ - r31=0x580fc; - pc=0x5bc00; - run_5bc00(); return; - case 0x580fc: + r31=0x58afc; + pc=0x5b400; + run_5b000(); return; + case 0x58afc: r17 = r2 + r0; r4 = r16 + r0; r5 = r19 + r0; r6 = r0 + 10; r7 = r0 + r0; if(r19 == r21) { - /* Next insn is delay slot */ - pc=0x585b8; - run_58400(); return; + pc=0x58fb8; + continue; } - /* Next insn is delay slot */ - r31=0x58120; - pc=0x5bc00; - run_5bc00(); return; - case 0x58120: + r31=0x58b20; + pc=0x5b400; + run_5b000(); return; + case 0x58b20: r5 = r21 + r0; r4 = r16 + r0; r6 = r0 + 10; r7 = r0 + r0; r19 = r2 + r0; - /* Next insn is delay slot */ - r31=0x5813c; - pc=0x5bc00; - run_5bc00(); return; - case 0x5813c: + r31=0x58b3c; + pc=0x5b400; + run_5b000(); return; + case 0x58b3c: r21 = r2 + r0; r18 = r18 + 1; - /* Next insn is delay slot */ - pc=0x57fe0; - run_57e00(); return; - case 0x5814c: + pc=0x589e0; + continue; + case 0x58b4c: r3 = r0 + 1; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x57730; - run_57600(); return; - case 0x5815c: - r9 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r0; + page[(r29+60)>>>2] = r3; + pc=0x58130; + run_58000(); return; + case 0x58b5c: + r9= page[(r29+44)>>>2]; + page[(r29+48)>>>2] = r0; r18 = r18 - r9; r22 = r0 - r9; - /* Next insn is delay slot */ - pc=0x57760; - run_57600(); return; - case 0x58174: + pc=0x58160; + run_58000(); return; + case 0x58b74: r18 = r0 - r23; r23 = r0 + r0; - /* Next insn is delay slot */ - pc=0x57744; - run_57600(); return; - case 0x58184: - f4 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + pc=0x58144; + run_58000(); return; + case 0x58b84: + f4= page[(r29+44)>>>2]; { long l = Double.doubleToLongBits(((double)f4)); f1 = (int)(l >>> 32); f0 = (int)l; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))==(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x576dc; - run_57600(); return; + pc=0x580dc; + run_58000(); return; } r3 = f4; r3 = r3 + -1; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x576dc; - run_57600(); return; - case 0x581b8: - r8 = readPages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff]; + page[(r29+44)>>>2] = r3; + pc=0x580dc; + run_58000(); return; + case 0x58bb8: + r8= page[(r29+144)>>>2]; r3 = r22 + r0; r8 = r8 < 2 ? 1 : 0; r21 = r18 + r0; r19 = r0 + r0; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r8; - /* Next insn is delay slot */ - pc=0x57dec; - run_57c00(); return; - case 0x581d8: + page[(r29+56)>>>2] = r8; + pc=0x587ec; + run_58000(); return; + case 0x58bd8: r2 = r0 + 28; - case 0x581dc: + case 0x58bdc: r18 = r18 + r2; r21 = r21 + r2; r23 = r23 + r2; - /* Next insn is delay slot */ - pc=0x57f2c; - run_57e00(); return; - case 0x581f0: + pc=0x5892c; + continue; + case 0x58bf0: r18 = r0 + -1042; - r7 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + r7= page[(r29+36)>>>2]; r18 = r18 - r4; r18 = r7 << (r18&0x1f); - case 0x58200: - pc=0x58200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_58200() throws ExecutionException { /* 0x58200 - 0x58400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x58200: - /* Next insn is delay slot */ - pc=0x5760c; - run_57600(); return; - case 0x58208: - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x57730; - run_57600(); return; - case 0x58214: + pc=0x5800c; + run_58000(); return; + case 0x58c08: + page[(r29+60)>>>2] = r0; + pc=0x58130; + run_58000(); return; + case 0x58c14: r18 = r20 + r0; - /* Next insn is delay slot */ - pc=0x5823c; + pc=0x58c3c; continue; - case 0x58220: + case 0x58c20: r5 = r17 + r0; r4 = r16 + r0; r6 = r0 + 10; r7 = r0 + r0; - /* Next insn is delay slot */ - r31=0x58238; - pc=0x5bc00; - run_5bc00(); return; - case 0x58238: + r31=0x58c38; + pc=0x5b400; + run_5b000(); return; + case 0x58c38: r17 = r2 + r0; - case 0x5823c: + case 0x58c3c: r4 = r17 + r0; r5 = r22 + r0; - /* Next insn is delay slot */ - r31=0x5824c; - pc=0x57000; - run_57000(); return; - case 0x5824c: + r31=0x58c4c; + pc=0x57a00; + run_57800(); return; + case 0x58c4c: r18 = r18 + 1; r23 = r2 + 48; r2 = r18 - r20; r2 = r2 < r30 ? 1 : 0; addr=r18+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r23&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x58220; + pc=0x58c20; continue; } if(r30 <= 0) { - /* Next insn is delay slot */ - pc=0x58518; - run_58400(); return; + pc=0x58f18; + continue; } - case 0x58270: + case 0x58c70: r3 = r20 + r30; r18 = r0 + r0; - case 0x58278: + case 0x58c78: r5 = r17 + r0; r4 = r16 + r0; r6 = r0 + 1; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x58290; - pc=0x5cc00; - run_5cc00(); return; - case 0x58290: + page[(r29+72)>>>2] = r3; + r31=0x58c90; + pc=0x5c200; + run_5c000(); return; + case 0x58c90: r4 = r2 + r0; r5 = r22 + r0; r17 = r2 + r0; - /* Next insn is delay slot */ - r31=0x582a4; - pc=0x5ce00; - run_5ce00(); return; - case 0x582a4: - r3 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; + r31=0x58ca4; + pc=0x5c400; + run_5c000(); return; + case 0x58ca4: + r3= page[(r29+72)>>>2]; if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x584c0; - run_58400(); return; + pc=0x58ec0; + continue; } - case 0x582b0: + case 0x58cb0: addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r4 = tmp; - case 0x582b4: + case 0x58cb4: r5 = r0 + 57; - /* Next insn is delay slot */ - pc=0x582d0; + pc=0x58cd0; continue; - case 0x582c0: + case 0x58cc0: if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x586b4; - run_58600(); return; + pc=0x590b4; + run_59000(); return; } addr=r2+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r4 = tmp; r3 = r2 + r0; - case 0x582d0: + case 0x58cd0: r2 = r3 + -1; if(r4 == r5) { - /* Next insn is delay slot */ - pc=0x582c0; + pc=0x58cc0; continue; } r4 = r4 + 1; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x582e4: + page[(addr)>>>2] = tmp; + case 0x58ce4: r4 = r16 + r0; r5 = r22 + r0; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x582f8; - pc=0x5ba00; - run_5ba00(); return; - case 0x582f8: - r3 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; + page[(r29+72)>>>2] = r3; + r31=0x58cf8; + pc=0x5b200; + run_5b000(); return; + case 0x58cf8: + r3= page[(r29+72)>>>2]; if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x57ac4; - run_57a00(); return; + pc=0x584c4; + run_58000(); return; } if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x58328; + pc=0x58d28; continue; } if(r18 == r19) { - /* Next insn is delay slot */ - pc=0x58328; + pc=0x58d28; continue; } r4 = r16 + r0; r5 = r18 + r0; - /* Next insn is delay slot */ - r31=0x58324; - pc=0x5ba00; - run_5ba00(); return; - case 0x58324: - r3 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - case 0x58328: + r31=0x58d24; + pc=0x5b200; + run_5b000(); return; + case 0x58d24: + r3= page[(r29+72)>>>2]; + case 0x58d28: r4 = r16 + r0; r5 = r19 + r0; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x5833c; - pc=0x5ba00; - run_5ba00(); return; - case 0x5833c: - r3 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x57ac4; - run_57a00(); return; - case 0x58348: + page[(r29+72)>>>2] = r3; + r31=0x58d3c; + pc=0x5b200; + run_5b000(); return; + case 0x58d3c: + r3= page[(r29+72)>>>2]; + pc=0x584c4; + run_58000(); return; + case 0x58d48: r4 = r17 + r0; r5 = r22 + r0; - /* Next insn is delay slot */ - r31=0x58358; - pc=0x5ce00; - run_5ce00(); return; - case 0x58358: + r31=0x58d58; + pc=0x5c400; + run_5c000(); return; + case 0x58d58: if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x57f7c; - run_57e00(); return; + pc=0x5897c; + continue; } - r9 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + r9= page[(r29+44)>>>2]; r5 = r17 + r0; r9 = r9 + -1; r4 = r16 + r0; r6 = r0 + 10; r7 = r0 + r0; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r9; - /* Next insn is delay slot */ - r31=0x58384; - pc=0x5bc00; - run_5bc00(); return; - case 0x58384: - r3 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; + page[(r29+44)>>>2] = r9; + r31=0x58d84; + pc=0x5b400; + run_5b000(); return; + case 0x58d84: + r3= page[(r29+52)>>>2]; r17 = r2 + r0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x58ba8; - run_58a00(); return; + pc=0x595a8; + run_59000(); return; } - r30 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x57f7c; - run_57e00(); return; - case 0x583a0: - r8 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + r30= page[(r29+64)>>>2]; + pc=0x5897c; + continue; + case 0x58da0: + r8= page[(r29+36)>>>2]; if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x57edc; - run_57e00(); return; + pc=0x588dc; + continue; } r2 = 15 << 16; - r9 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + r9= page[(r29+32)>>>2]; r2 = r2 | 65535; r2 = r2 & r9; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x57edc; - run_57e00(); return; + pc=0x588dc; + continue; } r2 = 32752 << 16; r2 = r2 & r9; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x57edc; - run_57e00(); return; + pc=0x588dc; + continue; } r3 = r0 + 1; r18 = r18 + 1; r23 = r23 + 1; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x57ee0; - run_57e00(); return; - case 0x583f0: + page[(r29+56)>>>2] = r3; + pc=0x588e0; + continue; + case 0x58df0: r2 = r21 + r0; - /* Next insn is delay slot */ - pc=0x57e0c; - run_57e00(); return; - case 0x583fc: + pc=0x5880c; + continue; + case 0x58dfc: r9 = r0 + 1; - case 0x58400: - pc=0x58400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_58400() throws ExecutionException { /* 0x58400 - 0x58600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x58400: - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r9; - case 0x58404: - r4 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + page[(r29+52)>>>2] = r9; + case 0x58e04: + r4= page[(r29+148)>>>2]; if(r4 <= 0) { - /* Next insn is delay slot */ - pc=0x587f0; - run_58600(); return; + pc=0x591f0; + run_59000(); return; } r6 = r4 + r0; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r4; + page[(r29+64)>>>2] = r4; r30 = r4 + r0; - /* Next insn is delay slot */ - pc=0x577f0; - run_57600(); return; - case 0x58428: + pc=0x581f0; + run_58000(); return; + case 0x58e28: if(r30 > 0) { - /* Next insn is delay slot */ - pc=0x57bfc; - run_57a00(); return; + pc=0x585fc; + run_58000(); return; } if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x58758; - run_58600(); return; + pc=0x59158; + run_59000(); return; } - f0 = readPages[(r28+-30988)>>>12][((r28+-30988)>>>2)&0x3ff]; + f0= page[(r28+-31428)>>>2]; r22 = r0 + r0; - f1 = readPages[(r28+-30992)>>>12][((r28+-30992)>>>2)&0x3ff]; + f1= page[(r28+-31432)>>>2]; r19 = r0 + r0; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - f0 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - f1 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + f0= page[(r29+36)>>>2]; + f1= page[(r29+32)>>>2]; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<=(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x58694; - run_58600(); return; + pc=0x59094; + run_59000(); return; } - case 0x5846c: - r9 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; + case 0x58e6c: + r9= page[(r29+148)>>>2]; r3 = r20 + r0; r9 = ~(r0 | r9); - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r9; - case 0x5847c: + page[(r29+44)>>>2] = r9; + case 0x58e7c: r4 = r16 + r0; r5 = r22 + r0; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x58490; - pc=0x5ba00; - run_5ba00(); return; - case 0x58490: - r3 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; + page[(r29+72)>>>2] = r3; + r31=0x58e90; + pc=0x5b200; + run_5b000(); return; + case 0x58e90: + r3= page[(r29+72)>>>2]; if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x58328; - run_58200(); return; + pc=0x58d28; + continue; } - /* Next insn is delay slot */ - pc=0x57ac4; - run_57a00(); return; - case 0x584a4: + pc=0x584c4; + run_58000(); return; + case 0x58ea4: r5 = r17 + r0; r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x584b4; - pc=0x5ca00; - run_5ca00(); return; - case 0x584b4: + r31=0x58eb4; + pc=0x5c000; + run_5c000(); return; + case 0x58eb4: r17 = r2 + r0; - /* Next insn is delay slot */ - pc=0x57e94; - run_57e00(); return; - case 0x584c0: + pc=0x58894; + continue; + case 0x58ec0: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x584d4; + pc=0x58ed4; continue; } r23 = r23 & 1; if(r23 != r0) { - /* Next insn is delay slot */ - pc=0x582b0; - run_58200(); return; + pc=0x58cb0; + continue; } - case 0x584d4: + case 0x58ed4: r5 = r0 + 48; - /* Next insn is delay slot */ - pc=0x584e4; + pc=0x58ee4; continue; - case 0x584e0: + case 0x58ee0: r3 = r4 + r0; - case 0x584e4: + case 0x58ee4: addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; r4 = r3 + -1; if(r2 == r5) { - /* Next insn is delay slot */ - pc=0x584e0; + pc=0x58ee0; continue; } - /* Next insn is delay slot */ - pc=0x582e4; - run_58200(); return; - case 0x584fc: + pc=0x58ce4; + continue; + case 0x58efc: if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x58a88; - run_58a00(); return; + pc=0x59488; + run_59000(); return; } r2 = r2 + 1075; r3 = r22 + r0; r21 = r18 + r0; - /* Next insn is delay slot */ - pc=0x57dc8; - run_57c00(); return; - case 0x58518: + pc=0x587c8; + run_58000(); return; + case 0x58f18: r30 = r0 + 1; - /* Next insn is delay slot */ - pc=0x58270; - run_58200(); return; - case 0x58524: + pc=0x58c70; + continue; + case 0x58f24: if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x58574; + pc=0x58f74; continue; } r5 = r17 + r0; r4 = r16 + r0; r6 = r0 + 1; - /* Next insn is delay slot */ - r31=0x58540; - pc=0x5cc00; - run_5cc00(); return; - case 0x58540: + r31=0x58f40; + pc=0x5c200; + run_5c000(); return; + case 0x58f40: r4 = r2 + r0; r5 = r22 + r0; r17 = r2 + r0; - /* Next insn is delay slot */ - r31=0x58554; - pc=0x5ce00; - run_5ce00(); return; - case 0x58554: + r31=0x58f54; + pc=0x5c400; + run_5c000(); return; + case 0x58f54: if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x58b8c; - run_58a00(); return; + pc=0x5958c; + run_59000(); return; } - case 0x5855c: + case 0x58f5c: r2 = r0 + 57; if(r23 == r2) { - /* Next insn is delay slot */ - pc=0x58b1c; - run_58a00(); return; + pc=0x5951c; + run_59000(); return; } - r3 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + r3= page[(r29+32)>>>2]; r23 = r3 + 49; - case 0x58574: - r7 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; + case 0x58f74: + r7= page[(r29+40)>>>2]; r18 = r19 + r0; r3 = r7 + 1; addr=r7+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r23&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r19 = r21 + r0; - /* Next insn is delay slot */ - pc=0x582e4; - run_58200(); return; - case 0x58590: + pc=0x58ce4; + continue; + case 0x58f90: r2 = r0 + 57; if(r23 == r2) { - /* Next insn is delay slot */ - pc=0x58b1c; - run_58a00(); return; + pc=0x5951c; + run_59000(); return; } if(r30 <= 0) { - /* Next insn is delay slot */ - pc=0x58574; + pc=0x58f74; continue; } - r9 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + r9= page[(r29+32)>>>2]; r23 = r9 + 49; - /* Next insn is delay slot */ - pc=0x58574; + pc=0x58f74; continue; - case 0x585b8: - /* Next insn is delay slot */ - r31=0x585c0; - pc=0x5bc00; - run_5bc00(); return; - case 0x585c0: + case 0x58fb8: + r31=0x58fc0; + pc=0x5b400; + run_5b000(); return; + case 0x58fc0: r19 = r2 + r0; r21 = r2 + r0; r18 = r18 + 1; - /* Next insn is delay slot */ - pc=0x57fe0; - run_57e00(); return; - case 0x585d4: + pc=0x589e0; + continue; + case 0x58fd4: r4 = r16 + r0; r5 = r3 + r0; - /* Next insn is delay slot */ - r31=0x585e4; - pc=0x5ba00; - run_5ba00(); return; - case 0x585e4: + r31=0x58fe4; + pc=0x5b200; + run_5b000(); return; + case 0x58fe4: r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x58098; - run_58000(); return; - case 0x585f0: - r2 = readPages[(r22+16)>>>12][((r22+16)>>>2)&0x3ff]; + pc=0x58a98; + continue; + case 0x58ff0: + r2= page[(r22+16)>>>2]; r2 = r2 + 3; r2 = r2 << 2; - case 0x58600: - pc=0x58600; + case 0x59000: + pc=0x59000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_58600() throws ExecutionException { /* 0x58600 - 0x58800 */ + private final void run_59000() throws ExecutionException { /* 0x59000 - 0x59800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x58600: + case 0x59000: r2 = r22 + r2; - r4 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x58610; - pc=0x5c000; - run_5c000(); return; - case 0x58610: + r4= page[(r2+4)>>>2]; + r31=0x59010; + pc=0x5b600; + run_5b000(); return; + case 0x59010: r3 = r0 + 32; r2 = r3 - r2; - /* Next insn is delay slot */ - pc=0x57ef4; - run_57e00(); return; - case 0x58620: + pc=0x588f4; + run_58800(); return; + case 0x59020: r2 = r20 + r0; - /* Next insn is delay slot */ - pc=0x574e8; - run_57400(); return; - case 0x5862c: + pc=0x57ee8; + run_57800(); return; + case 0x5902c: r2 = r0 + 2; if(r9 != r2) { - /* Next insn is delay slot */ - pc=0x57b80; - run_57a00(); return; + pc=0x58580; + run_58000(); return; } - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x58404; - run_58400(); return; - case 0x58644: - r8 = readPages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff]; + page[(r29+52)>>>2] = r0; + pc=0x58e04; + run_58800(); return; + case 0x59044: + r8= page[(r29+144)>>>2]; r2 = r8 < 3 ? 1 : 0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x57f84; - run_57e00(); return; + pc=0x58984; + run_58800(); return; } if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x5846c; - run_58400(); return; + pc=0x58e6c; + run_58800(); return; } r5 = r22 + r0; r4 = r16 + r0; r6 = r0 + 5; r7 = r0 + r0; - /* Next insn is delay slot */ - r31=0x58678; - pc=0x5bc00; - run_5bc00(); return; - case 0x58678: + r31=0x59078; + pc=0x5b400; + run_5b000(); return; + case 0x59078: r5 = r2 + r0; r4 = r17 + r0; r22 = r2 + r0; - /* Next insn is delay slot */ - r31=0x5868c; - pc=0x5ce00; - run_5ce00(); return; - case 0x5868c: + r31=0x5908c; + pc=0x5c400; + run_5c000(); return; + case 0x5908c: if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x5846c; - run_58400(); return; + pc=0x58e6c; + run_58800(); return; } - case 0x58694: - r8 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + case 0x59094: + r8= page[(r29+44)>>>2]; r2 = r0 + 49; r8 = r8 + 1; r3 = r20 + 1; addr=r20+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r8; - /* Next insn is delay slot */ - pc=0x5847c; - run_58400(); return; - case 0x586b4: - r9 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + page[(r29+44)>>>2] = r8; + pc=0x58e7c; + run_58800(); return; + case 0x590b4: + r9= page[(r29+44)>>>2]; r2 = r0 + 49; r9 = r9 + 1; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r9; + page[(r29+44)>>>2] = r9; addr=r20+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x582e4; - run_58200(); return; - case 0x586d0: + page[(addr)>>>2] = tmp; + pc=0x58ce4; + run_58800(); return; + case 0x590d0: f4 = r8; r2 = 64704 << 16; { long l = Double.doubleToLongBits(((double)f4)); f3 = (int)(l >>> 32); f2 = (int)l; } { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f2 = readPages[(r28+-30996)>>>12][((r28+-30996)>>>2)&0x3ff]; - f3 = readPages[(r28+-31000)>>>12][((r28+-31000)>>>2)&0x3ff]; + f2= page[(r28+-31436)>>>2]; + f3= page[(r28+-31440)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } r8 = f7; r9 = f6; r8 = r2 + r8; - case 0x58700: - f2 = readPages[(r28+-30988)>>>12][((r28+-30988)>>>2)&0x3ff]; - f3 = readPages[(r28+-30992)>>>12][((r28+-30992)>>>2)&0x3ff]; + case 0x59100: + f2= page[(r28+-31428)>>>2]; + f3= page[(r28+-31432)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } f2 = r9; f3 = r8; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x58964; - run_58800(); return; + pc=0x59364; + continue; } r4 = 32768 << 16; f2 = r9; @@ -69747,230 +68275,192 @@ public final class AcmeCrossAssembler extends UnixRuntime { f3 = r2; fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x58768; + pc=0x59168; continue; } - case 0x58758: + case 0x59158: r22 = r0 + r0; r19 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5846c; - run_58400(); return; - case 0x58768: - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = f8; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = f9; - /* Next insn is delay slot */ - pc=0x57bb4; - run_57a00(); return; - case 0x58778: + pc=0x58e6c; + run_58800(); return; + case 0x59168: + page[(r29+36)>>>2] = f8; + page[(r29+32)>>>2] = f9; + pc=0x585b4; + run_58000(); return; + case 0x59178: r5 = r17 + r0; r4 = r16 + r0; r6 = r22 + r0; - /* Next insn is delay slot */ - r31=0x5878c; - pc=0x5ca00; - run_5ca00(); return; - case 0x5878c: + r31=0x5918c; + pc=0x5c000; + run_5c000(); return; + case 0x5918c: r17 = r2 + r0; - /* Next insn is delay slot */ - pc=0x57e94; - run_57e00(); return; - case 0x58798: - f0 = readPages[(r28+-31052)>>>12][((r28+-31052)>>>2)&0x3ff]; - f1 = readPages[(r28+-31056)>>>12][((r28+-31056)>>>2)&0x3ff]; + pc=0x58894; + run_58800(); return; + case 0x59198: + f0= page[(r28+-31492)>>>2]; + f1= page[(r28+-31496)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - /* Next insn is delay slot */ - pc=0x57620; - run_57600(); return; - case 0x587b4: - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x577cc; - run_57600(); return; - case 0x587c0: - r7 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; + pc=0x58020; + run_58000(); return; + case 0x591b4: + page[(r29+52)>>>2] = r0; + pc=0x581cc; + run_58000(); return; + case 0x591c0: + r7= page[(r29+48)>>>2]; r22 = r3 - r22; r7 = r7 + r22; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r7; + page[(r29+48)>>>2] = r7; r22 = r3 + r0; r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x57db8; - run_57c00(); return; - case 0x587e0: + pc=0x587b8; + run_58000(); return; + case 0x591e0: f0 = f8; f1 = f9; r8 = r0 + 2; - /* Next insn is delay slot */ - pc=0x578b8; - run_57800(); return; - case 0x587f0: + pc=0x582b8; + run_58000(); return; + case 0x591f0: r3 = r0 + 1; r4 = r0 + 1; r21 = r0 + 1; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r3; - case 0x58800: - pc=0x58800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_58800() throws ExecutionException { /* 0x58800 - 0x58a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x58800: + page[(r29+64)>>>2] = r3; r30 = r0 + 1; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r4; - writePages[(r16+68)>>>12][((r16+68)>>>2)&0x3ff] = r0; + page[(r29+148)>>>2] = r4; + page[(r16+68)>>>2] = r0; r5 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5782c; - run_57800(); return; - case 0x58818: + pc=0x5822c; + run_58000(); return; + case 0x59218: r21 = r30 + r0; - writePages[(r16+68)>>>12][((r16+68)>>>2)&0x3ff] = r0; + page[(r16+68)>>>2] = r0; r5 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5782c; - run_57800(); return; - case 0x5882c: - r9 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + pc=0x5822c; + run_58000(); return; + case 0x5922c: + r9= page[(r29+44)>>>2]; r2 = r0 - r9; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x58aa4; - run_58a00(); return; - } - r4 = r2 & 15; - r3 = 7 << 16; - r4 = r4 << 3; - r3 = r3 + 2176; - r3 = r4 + r3; - f0 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r2 = r2 >> 4; - f1 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x58bd0; - run_58a00(); return; - } - r3 = 7 << 16; - r3 = r3 + 2136; - r8 = r0 + 2; - case 0x5887c: - r4 = r2 & 1; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5889c; + pc=0x594a4; continue; } - f2 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; + r4 = r2 & 15; + r3 = 6 << 16; + r4 = r4 << 3; + r3 = r3 + 15056; + r3 = r4 + r3; + f0= page[(r3+4)>>>2]; + r2 = r2 >> 4; + f1= page[(r3+0)>>>2]; + { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f9&0xffffffffL) << 32) | (f8&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } + if(r2 == r0) { + pc=0x595d0; + continue; + } + r3 = 6 << 16; + r3 = r3 + 15016; + r8 = r0 + 2; + case 0x5927c: + r4 = r2 & 1; + if(r4 == r0) { + pc=0x5929c; + continue; + } + f2= page[(r3+4)>>>2]; r8 = r8 + 1; - f3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + f3= page[(r3+0)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - case 0x5889c: + case 0x5929c: r2 = r2 >> 1; r3 = r3 + 8; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5887c; + pc=0x5927c; continue; } - /* Next insn is delay slot */ - pc=0x578fc; - run_57800(); return; - case 0x588b4: - r8 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + pc=0x582fc; + run_58000(); return; + case 0x592b4: + r8= page[(r29+44)>>>2]; r4 = r0 + 48; addr=r20+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r8 = r8 + 1; r4 = r0 + 49; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r8; + page[(r29+44)>>>2] = r8; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x57ac4; - run_57a00(); return; - case 0x588d8: - r5 = readPages[(r19+4)>>>12][((r19+4)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + pc=0x584c4; + run_58000(); return; + case 0x592d8: + r5= page[(r19+4)>>>2]; r4 = r16 + r0; - /* Next insn is delay slot */ - r31=0x588e8; - pc=0x5b800; - run_5b800(); return; - case 0x588e8: - r6 = readPages[(r19+16)>>>12][((r19+16)>>>2)&0x3ff]; + r31=0x592e8; + pc=0x5b000; + run_5b000(); return; + case 0x592e8: + r6= page[(r19+16)>>>2]; r18 = r2 + r0; r6 = r6 + 2; r4 = r2 + 12; r5 = r19 + 12; r6 = r6 << 2; - /* Next insn is delay slot */ - r31=0x58908; - pc=0x48fdc; - run_48e00(); return; - case 0x58908: + r31=0x59308; + pc=0x56fe0; + run_56800(); return; + case 0x59308: r4 = r16 + r0; r5 = r18 + r0; r6 = r0 + 1; - /* Next insn is delay slot */ - r31=0x5891c; - pc=0x5cc00; - run_5cc00(); return; - case 0x5891c: + r31=0x5931c; + pc=0x5c200; + run_5c000(); return; + case 0x5931c: r21 = r2 + r0; - /* Next insn is delay slot */ - pc=0x57fc8; - run_57e00(); return; - case 0x58928: + pc=0x589c8; + run_58800(); return; + case 0x59328: r2 = r0 + 57; if(r23 == r2) { - /* Next insn is delay slot */ - pc=0x58b1c; - run_58a00(); return; + pc=0x5951c; + continue; } - r9 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; + r9= page[(r29+40)>>>2]; r23 = r23 + 1; r18 = r19 + r0; r3 = r9 + 1; addr=r9+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r23&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r19 = r21 + r0; - /* Next insn is delay slot */ - pc=0x582e4; - run_58200(); return; - case 0x58954: + pc=0x58ce4; + run_58800(); return; + case 0x59354: r18 = r19 + r0; r19 = r21 + r0; - /* Next insn is delay slot */ - pc=0x58278; - run_58200(); return; - case 0x58964: + pc=0x58c78; + run_58800(); return; + case 0x59364: r22 = r0 + r0; r19 = r0 + r0; - /* Next insn is delay slot */ - pc=0x58694; - run_58600(); return; - case 0x58974: - r3 = 7 << 16; + pc=0x59094; + continue; + case 0x59374: + r3 = 6 << 16; r6 = r5 << 3; - r3 = r3 + 2176; + r3 = r3 + 15056; r3 = r6 + r3; - f2 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; + f2= page[(r3+4)>>>2]; f4 = r9; - f3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + f3= page[(r3+0)>>>2]; f5 = r8; r3 = r20 + 1; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f11 = (int)(l >>> 32); f10 = (int)l; } @@ -69990,37 +68480,23 @@ public final class AcmeCrossAssembler extends UnixRuntime { { long l = Double.doubleToLongBits(((double)f4)); f3 = (int)(l >>> 32); f2 = (int)l; } r6 = r7 + 48; addr=r20+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r6 = r0 + 1; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } if(r4 == r6) { - /* Next insn is delay slot */ - pc=0x58a44; - run_58a00(); return; + pc=0x59444; + continue; } - f6 = readPages[(r28+-31004)>>>12][((r28+-31004)>>>2)&0x3ff]; + f6= page[(r28+-31444)>>>2]; r4 = r20 + r4; - f7 = readPages[(r28+-31008)>>>12][((r28+-31008)>>>2)&0x3ff]; + f7= page[(r28+-31448)>>>2]; r6 = r3 + r0; - case 0x589f4: + case 0x593f4: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } r6 = r6 + 1; r8 = fcsr; - case 0x58a00: - pc=0x58a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_58a00() throws ExecutionException { /* 0x58a00 - 0x58c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x58a00: r8 = fcsr; r1 = r8 | 3; r1 = r1 ^ 2; @@ -70037,1179 +68513,705 @@ public final class AcmeCrossAssembler extends UnixRuntime { r10 = r9 + 48; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))-(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } addr=r6+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r10&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r6 != r4) { - /* Next insn is delay slot */ - pc=0x589f4; - run_58800(); return; + pc=0x593f4; + continue; } r3 = r3 + r5; - case 0x58a44: - f2 = readPages[(r28+-30980)>>>12][((r28+-30980)>>>2)&0x3ff]; - f3 = readPages[(r28+-30984)>>>12][((r28+-30984)>>>2)&0x3ff]; + case 0x59444: + f2= page[(r28+-31420)>>>2]; + f3= page[(r28+-31424)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))<(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x58b40; + pc=0x59540; continue; } addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r5 = tmp; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x57d3c; - run_57c00(); return; - case 0x58a78: + page[(r29+44)>>>2] = r2; + pc=0x5873c; + run_58000(); return; + case 0x59478: r21 = r18 - r30; r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x57dc8; - run_57c00(); return; - case 0x58a88: - r2 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + pc=0x587c8; + run_58000(); return; + case 0x59488: + r2= page[(r29+28)>>>2]; r3 = r0 + 54; r2 = r3 - r2; r21 = r18 + r0; r3 = r22 + r0; - /* Next insn is delay slot */ - pc=0x57dc8; - run_57c00(); return; - case 0x58aa4: + pc=0x587c8; + run_58000(); return; + case 0x594a4: f0 = f8; f1 = f9; r8 = r0 + 2; - /* Next insn is delay slot */ - pc=0x578fc; - run_57800(); return; - case 0x58ab4: + pc=0x582fc; + run_58000(); return; + case 0x594b4: if(r30 == r0) { - /* Next insn is delay slot */ - pc=0x586d0; - run_58600(); return; + pc=0x590d0; + continue; } - r9 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; + r9= page[(r29+64)>>>2]; if(r9 <= 0) { - /* Next insn is delay slot */ - pc=0x58768; - run_58600(); return; + pc=0x59168; + continue; } - f6 = readPages[(r28+-31004)>>>12][((r28+-31004)>>>2)&0x3ff]; + f6= page[(r28+-31444)>>>2]; r8 = r8 + 1; - f7 = readPages[(r28+-31008)>>>12][((r28+-31008)>>>2)&0x3ff]; + f7= page[(r28+-31448)>>>2]; f4 = r8; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f7&0xffffffffL) << 32) | (f6&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } { long l = Double.doubleToLongBits(((double)f4)); f3 = (int)(l >>> 32); f2 = (int)l; } - r3 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r4 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; + r3= page[(r29+44)>>>2]; + r4= page[(r29+64)>>>2]; r2 = r3 + -1; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f2 = readPages[(r28+-30996)>>>12][((r28+-30996)>>>2)&0x3ff]; + f2= page[(r28+-31436)>>>2]; r3 = 64704 << 16; - f3 = readPages[(r28+-31000)>>>12][((r28+-31000)>>>2)&0x3ff]; + f3= page[(r28+-31440)>>>2]; { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f7 = (int)(l >>> 32); f6 = (int)l; } r8 = f7; r9 = f6; r8 = r3 + r8; - /* Next insn is delay slot */ - pc=0x5796c; - run_57800(); return; - case 0x58b1c: - r8 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; + pc=0x5836c; + run_58000(); return; + case 0x5951c: + r8= page[(r29+40)>>>2]; r2 = r0 + 57; r18 = r19 + r0; r3 = r8 + 1; addr=r8+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r19 = r21 + r0; r4 = r0 + 57; - /* Next insn is delay slot */ - pc=0x582b4; - run_58200(); return; - case 0x58b40: + pc=0x58cb4; + run_58800(); return; + case 0x59540: { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f11&0xffffffffL) << 32) | (f10&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x58768; - run_58600(); return; + pc=0x59168; + continue; } r6 = r0 + 48; - /* Next insn is delay slot */ - pc=0x58b64; + pc=0x59564; continue; - case 0x58b60: + case 0x59560: r3 = r5 + r0; - case 0x58b64: + case 0x59564: addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r4 = tmp; r5 = r3 + -1; if(r4 == r6) { - /* Next insn is delay slot */ - pc=0x58b60; + pc=0x59560; continue; } - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x57ac4; - run_57a00(); return; - case 0x58b80: - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x57d3c; - run_57c00(); return; - case 0x58b8c: + page[(r29+44)>>>2] = r2; + pc=0x584c4; + run_58000(); return; + case 0x59580: + page[(r29+44)>>>2] = r2; + pc=0x5873c; + run_58000(); return; + case 0x5958c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x58574; - run_58400(); return; + pc=0x58f74; + run_58800(); return; } r2 = r23 & 1; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x58574; - run_58400(); return; + pc=0x58f74; + run_58800(); return; } - /* Next insn is delay slot */ - pc=0x5855c; - run_58400(); return; - case 0x58ba8: + pc=0x58f5c; + run_58800(); return; + case 0x595a8: r5 = r19 + r0; r4 = r16 + r0; r6 = r0 + 10; r7 = r0 + r0; - /* Next insn is delay slot */ - r31=0x58bc0; - pc=0x5bc00; - run_5bc00(); return; - case 0x58bc0: + r31=0x595c0; + pc=0x5b400; + run_5b000(); return; + case 0x595c0: r19 = r2 + r0; - r30 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x57f7c; - run_57e00(); return; - case 0x58bd0: + r30= page[(r29+64)>>>2]; + pc=0x5897c; + run_58800(); return; + case 0x595d0: r8 = r0 + 2; - /* Next insn is delay slot */ - pc=0x578fc; - run_57800(); return; - case 0x58bdc: + pc=0x582fc; + run_58000(); return; + case 0x595dc: r4 = r0 + 4; if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x57f2c; - run_57e00(); return; + pc=0x5892c; + run_58800(); return; } r3 = r0 + 60; r2 = r3 - r2; - /* Next insn is delay slot */ - pc=0x581dc; - run_58000(); return; - case 0x58bf8: + pc=0x58bdc; + run_58800(); return; + case 0x595f8: r8 = r0 + 1; - /* Next insn is delay slot */ - pc=0x5778c; - run_57600(); return; - case 0x58c00: - pc=0x58c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_58c00() throws ExecutionException { /* 0x58c00 - 0x58e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x58c00: - case 0x58c04: + pc=0x5818c; + run_58000(); return; + case 0x59604: r21 = r6 + r0; r5 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5782c; - run_57800(); return; - case 0x58e00: - pc=0x58e00; + pc=0x5822c; + run_58000(); return; + case 0x59800: + pc=0x59800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_58e00() throws ExecutionException { /* 0x58e00 - 0x59000 */ + private final void run_59800() throws ExecutionException { /* 0x59800 - 0x5a000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x58e00: - /* Next insn is delay slot */ + case 0x59800: pc=r31; return; - case 0x59000: - pc=0x59000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_59000() throws ExecutionException { /* 0x59000 - 0x59200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x59000: - /* Next insn is delay slot */ + case 0x59a00: pc=r31; return; - case 0x59200: - pc=0x59200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_59200() throws ExecutionException { /* 0x59200 - 0x59400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x59200: - r2 = r6 < 2 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x593a4; - continue; - } - r29 = r29 + -56; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r22; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r21; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r20; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r19; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - r21 = r4 + r0; - r22 = r5 + r0; - r17 = r7 + r0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x59254; - continue; - } - r2 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x59340; - continue; - } - case 0x59254: - r18 = r6 + -1; - r19 = r22 + r0; - /* Next insn is delay slot */ - pc=0x592d0; - continue; - case 0x59264: - r2 = ((r18 & 0xffffffffL) < (r16 & 0xffffffffL)) ? 1 : 0; - r20 = readPages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x59278; - continue; - } - r16 = r18 + r0; - case 0x59278: - r4 = r20 + r0; - r5 = r0 + 10; - r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x5928c; - pc=0x5b400; - run_5b400(); return; - case 0x5928c: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x59358; - continue; - } - r2 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; - r4 = r19 + r0; - r2 = r2 - r16; - writePages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff] = r2; - r2 = readPages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff]; - r5 = r20 + r0; - r2 = r2 + r16; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r2; - r6 = r16 + r0; - r18 = r18 - r16; - /* Next insn is delay slot */ - r31=0x592c4; - pc=0x48fdc; - run_48e00(); return; - case 0x592c4: - r19 = r19 + r16; - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x5930c; - continue; - } - case 0x592d0: - r16 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; - if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x59264; - continue; - } - r4 = r21 + r0; - r5 = r17 + r0; - /* Next insn is delay slot */ - r31=0x592f0; - pc=0x41200; - run_41200(); return; - case 0x592f0: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x59304; - continue; - } - r16 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x59264; - continue; - case 0x59304: - if(r19 == r22) { - /* Next insn is delay slot */ - pc=0x59398; - continue; - } - case 0x5930c: - addr=r19+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r22 + r0; - case 0x59314: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r22 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r21 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r20 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r19 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x59340: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - r31=0x5934c; - pc=0x3a600; - run_3a600(); return; - case 0x5934c: - r6 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x59254; - continue; - case 0x59358: - r2 = r2 + 1; - r3 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; - r16 = r2 - r20; - r3 = r3 - r16; - r6 = r16 + r0; - writePages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff] = r3; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r2; - r4 = r19 + r0; - r5 = r20 + r0; - r16 = r19 + r16; - /* Next insn is delay slot */ - r31=0x59388; - pc=0x48fdc; - run_48e00(); return; - case 0x59388: - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r22 + r0; - /* Next insn is delay slot */ - pc=0x59314; - continue; - case 0x59398: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x59314; - continue; - case 0x593a4: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x59400: - pc=0x59400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_59400() throws ExecutionException { /* 0x59400 - 0x59600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x59400: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x59200; - run_59200(); return; - case 0x59600: - pc=0x59600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_59600() throws ExecutionException { /* 0x59600 - 0x59800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x59600: + case 0x59c00: addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r2 = tmp; r3 = r0 + 114; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x59698; + pc=0x59c98; continue; } r3 = r0 + 119; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x59684; + pc=0x59c84; continue; } r3 = r0 + 97; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x5963c; + pc=0x59c3c; continue; } r2 = r0 + 22; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r2; + page[(r4+0)>>>2] = r2; r2 = r0 + r0; - /* Next insn is delay slot */ pc=r31; return; - case 0x5963c: + case 0x59c3c: r7 = r0 + 520; r4 = r0 + 1; r2 = r0 + 264; - case 0x59648: + case 0x59c48: addr=r5+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x59674; + pc=0x59c74; continue; } r8 = r0 + 43; if(r3 == r8) { - /* Next insn is delay slot */ - pc=0x596ac; + pc=0x59cac; continue; } addr=r5+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r3 = tmp; if(r3 == r8) { - /* Next insn is delay slot */ - pc=0x596ac; + pc=0x59cac; continue; } - case 0x59674: + case 0x59c74: r4 = r4 | r7; - writePages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ + page[(r6+0)>>>2] = r4; pc=r31; return; - case 0x59684: + case 0x59c84: r7 = r0 + 1536; r4 = r0 + 1; r2 = r0 + 8; - /* Next insn is delay slot */ - pc=0x59648; + pc=0x59c48; continue; - case 0x59698: + case 0x59c98: r7 = r0 + r0; r4 = r0 + r0; r2 = r0 + 4; - /* Next insn is delay slot */ - pc=0x59648; + pc=0x59c48; continue; - case 0x596ac: + case 0x59cac: r3 = r0 + -29; r4 = r0 + 2; r2 = r2 & r3; r4 = r4 | r7; r2 = r2 | 16; - writePages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ + page[(r6+0)>>>2] = r4; pc=r31; return; - case 0x59800: - pc=0x59800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_59800() throws ExecutionException { /* 0x59800 - 0x59a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x59800: - r29 = r29 + -56; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r17; - r17 = r4 + r0; - r4 = r5 + r0; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r16; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - r16 = r6 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - r31=0x59828; - pc=0x10268; - run_10200(); return; - case 0x59828: - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r2; - r2 = r29 + 28; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r2 = r0 + 1; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x59858; - continue; - } - r2 = readPages[(r17+56)>>>12][((r17+56)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x598b0; - continue; - } - case 0x59858: - addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ - r2 = tmp; - r3 = r2 & 8192; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x59884; - continue; - } - r2 = r2 | 8192; - r3 = readPages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff]; - addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r0 + -8193; - r2 = r3 & r2; - writePages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff] = r2; - case 0x59884: - r4 = r17 + r0; - r5 = r16 + r0; - r6 = r29 + 16; - /* Next insn is delay slot */ - r31=0x59898; - pc=0x59c00; - run_59c00(); return; - case 0x59898: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r17 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r16 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x598b0: - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x598bc; - pc=0x3a600; - run_3a600(); return; - case 0x598bc: - /* Next insn is delay slot */ - pc=0x59858; - continue; - case 0x59a00: - pc=0x59a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_59a00() throws ExecutionException { /* 0x59a00 - 0x59c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x59a00: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x59800; - run_59800(); return; - case 0x59c00: - pc=0x59c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_59c00() throws ExecutionException { /* 0x59c00 - 0x59e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x59c00: - r2 = readPages[(r6+8)>>>12][((r6+8)>>>2)&0x3ff]; + case 0x59e00: + r2= page[(r6+8)>>>2]; r29 = r29 + -64; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r19; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r30; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r23; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r22; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r21; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; + page[(r29+36)>>>2] = r19; + page[(r29+60)>>>2] = r31; + page[(r29+56)>>>2] = r30; + page[(r29+52)>>>2] = r23; + page[(r29+48)>>>2] = r22; + page[(r29+44)>>>2] = r21; + page[(r29+40)>>>2] = r20; + page[(r29+32)>>>2] = r18; + page[(r29+28)>>>2] = r17; + page[(r29+24)>>>2] = r16; r19 = r6 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x59cd4; + pc=0x59ed4; continue; } addr=r5+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r21 = r4 + r0; r3 = r2 & 8; r16 = r5 + r0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x59d0c; + pc=0x59f0c; continue; } - r3 = readPages[(r5+16)>>>12][((r5+16)>>>2)&0x3ff]; + r3= page[(r5+16)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x59d0c; + pc=0x59f0c; continue; } r3 = r2 & 2; - r17 = readPages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff]; + r17= page[(r19+0)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x59d38; + pc=0x59f38; continue; } - case 0x59c74: + case 0x59e74: r20 = r0 + r0; r18 = r0 + r0; - case 0x59c7c: + case 0x59e7c: if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x59dfc; + pc=0x59ffc; continue; } r2 = (r18&0xffffffffL) < (1025&0xffffffffL) ? 1 : 0; - r5 = readPages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff]; + r5= page[(r16+28)>>>2]; r7 = r18 + r0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x59c9c; + pc=0x59e9c; continue; } r7 = r0 + 1024; - case 0x59c9c: - r2 = readPages[(r16+36)>>>12][((r16+36)>>>2)&0x3ff]; + case 0x59e9c: + r2= page[(r16+36)>>>2]; r4 = r21 + r0; r6 = r20 + r0; - /* Next insn is delay slot */ pc=r2; - r31=0x59cb0; + r31=0x59eb0; return; - case 0x59cb0: + case 0x59eb0: if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x59e3c; - run_59e00(); return; + pc=0x5a03c; + run_5a000(); return; } - r3 = readPages[(r19+8)>>>12][((r19+8)>>>2)&0x3ff]; + r3= page[(r19+8)>>>2]; r20 = r20 + r2; r18 = r18 - r2; r2 = r3 - r2; - writePages[(r19+8)>>>12][((r19+8)>>>2)&0x3ff] = r2; + page[(r19+8)>>>2] = r2; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x59c7c; + pc=0x59e7c; continue; } - case 0x59cd4: + case 0x59ed4: r2 = r0 + r0; - case 0x59cd8: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r30 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r23 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r22 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r21 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r20 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r19 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + case 0x59ed8: + r31= page[(r29+60)>>>2]; + r30= page[(r29+56)>>>2]; + r23= page[(r29+52)>>>2]; + r22= page[(r29+48)>>>2]; + r21= page[(r29+44)>>>2]; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; r29 = r29 + 64; - /* Next insn is delay slot */ pc=r31; return; - case 0x59d0c: + case 0x59f0c: r4 = r21 + r0; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x59d1c; - pc=0x48600; - run_48600(); return; - case 0x59d1c: + r31=0x59f1c; + pc=0x56c00; + run_56800(); return; + case 0x59f1c: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5a1ec; + pc=0x5a3ec; run_5a000(); return; } addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; - r17 = readPages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff]; + r17= page[(r19+0)>>>2]; r3 = r2 & 2; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x59c74; + pc=0x59e74; continue; } - case 0x59d38: + case 0x59f38: r3 = r2 & 1; r22 = r0 + r0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x59e58; - run_59e00(); return; + pc=0x5a058; + run_5a000(); return; } r18 = r0 + r0; - case 0x59d4c: + case 0x59f4c: if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x59de8; + pc=0x59fe8; continue; } - case 0x59d54: + case 0x59f54: r3 = r2 & 512; - r20 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; + r20= page[(r16+8)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x59f38; - run_59e00(); return; + pc=0x5a138; + run_5a000(); return; } r3 = ((r18 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5a000; + pc=0x5a200; run_5a000(); return; } r3 = r2 & 1152; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5a084; + pc=0x5a284; run_5a000(); return; } - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + r4= page[(r16+0)>>>2]; r23 = r20 + r0; r30 = r20 + r0; r20 = r18 + r0; - case 0x59d8c: + case 0x59f8c: r5 = r22 + r0; r6 = r23 + r0; - /* Next insn is delay slot */ - r31=0x59d9c; - pc=0x5b600; - run_5b600(); return; - case 0x59d9c: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; + r31=0x59f9c; + pc=0x5ae00; + run_5a800(); return; + case 0x59f9c: + r2= page[(r16+8)>>>2]; r30 = r2 - r30; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r30; + r2= page[(r16+0)>>>2]; + page[(r16+8)>>>2] = r30; r3 = r2 + r23; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r3; + page[(r16+0)>>>2] = r3; r2 = r18 + r0; - case 0x59dbc: + case 0x59fbc: r22 = r22 + r2; r18 = r18 - r2; - r2 = readPages[(r19+8)>>>12][((r19+8)>>>2)&0x3ff]; + r2= page[(r19+8)>>>2]; r20 = r2 - r20; - writePages[(r19+8)>>>12][((r19+8)>>>2)&0x3ff] = r20; + page[(r19+8)>>>2] = r20; if(r20 == r0) { - /* Next insn is delay slot */ - pc=0x59cd4; + pc=0x59ed4; continue; } addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x59d54; + pc=0x59f54; continue; } - case 0x59de8: - r22 = readPages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff]; - r18 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; + case 0x59fe8: + r22= page[(r17+0)>>>2]; + r18= page[(r17+4)>>>2]; r17 = r17 + 8; - /* Next insn is delay slot */ - pc=0x59d4c; - continue; - case 0x59dfc: - r20 = readPages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff]; - case 0x59e00: - pc=0x59e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_59e00() throws ExecutionException { /* 0x59e00 - 0x5a000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x59e00: - r18 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; - r17 = r17 + 8; - /* Next insn is delay slot */ - pc=0x59c7c; - run_59c00(); return; - case 0x59e10: - /* Next insn is delay slot */ - r31=0x59e18; - pc=0x40800; - run_40800(); return; - case 0x59e18: - r30 = r2 + r0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5a110; - run_5a000(); return; - } - r5 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - r4 = r21 + r0; - /* Next insn is delay slot */ - r31=0x59e34; - pc=0x3ca00; - run_3ca00(); return; - case 0x59e34: - r2 = r0 + 12; - writePages[(r21+0)>>>12][((r21+0)>>>2)&0x3ff] = r2; - case 0x59e3c: - addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r2 = r2 | 64; - addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x59cd8; - run_59c00(); return; - case 0x59e58: - r3 = r0 + r0; - r30 = r0 + r0; - r18 = r0 + r0; - case 0x59e64: - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x59f20; - continue; - } - case 0x59e6c: - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5a054; - run_5a000(); return; - } - case 0x59e74: - r2 = ((r18 & 0xffffffffL) < (r22 & 0xffffffffL)) ? 1 : 0; - r23 = r22 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x59e88; - continue; - } - r23 = r18 + r0; - case 0x59e88: - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - r20 = r23 + r0; - r2 = ((r2 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; - r6 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r7 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x59eb8; - continue; - } - r8 = r6 + r7; - r2 = r8 < r23 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5a13c; - run_5a000(); return; - } - case 0x59eb8: - r2 = r23 < r7 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x59fa0; - continue; - } - r2 = readPages[(r16+36)>>>12][((r16+36)>>>2)&0x3ff]; - r5 = readPages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff]; - r4 = r21 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r6 = r30 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x59ee0; - return; - case 0x59ee0: - r20 = r2 + r0; - r3 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x59e3c; - continue; - } - case 0x59ef0: - r22 = r22 - r20; - if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x59fdc; - continue; - } - case 0x59efc: - r2 = readPages[(r19+8)>>>12][((r19+8)>>>2)&0x3ff]; - r30 = r30 + r20; - r18 = r18 - r20; - r20 = r2 - r20; - writePages[(r19+8)>>>12][((r19+8)>>>2)&0x3ff] = r20; - if(r20 == r0) { - /* Next insn is delay slot */ - pc=0x59cd4; - run_59c00(); return; - } - if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x59e6c; - continue; - } - case 0x59f20: - r30 = readPages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff]; - r18 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; - r3 = r0 + r0; - r17 = r17 + 8; - /* Next insn is delay slot */ - pc=0x59e64; - continue; - case 0x59f38: - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r2 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - r2 = ((r2 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x59f5c; - continue; - } - r2 = ((r20 & 0xffffffffL) < (r18 & 0xffffffffL)) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5a190; - run_5a000(); return; - } - case 0x59f5c: - r7 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; - r2 = ((r18 & 0xffffffffL) < (r7 & 0xffffffffL)) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5a018; - run_5a000(); return; - } - r2 = readPages[(r16+36)>>>12][((r16+36)>>>2)&0x3ff]; - r5 = readPages[(r16+28)>>>12][((r16+28)>>>2)&0x3ff]; - r4 = r21 + r0; - r6 = r22 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x59f88; - return; - case 0x59f88: - r20 = r2 + r0; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x59e3c; - continue; - } - r2 = r20 + r0; - /* Next insn is delay slot */ - pc=0x59dbc; - run_59c00(); return; - case 0x59fa0: - r6 = r23 + r0; - r5 = r30 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x59fb4; - pc=0x5b600; - run_5b600(); return; - case 0x59fb4: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; - r22 = r22 - r20; - r2 = r2 - r23; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r23 = r2 + r23; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r23; - if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x59efc; - continue; - } - case 0x59fdc: - r4 = r21 + r0; - r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x59fec; - pc=0x39800; - run_39800(); return; - case 0x59fec: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x59e3c; - continue; - } - r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x59efc; + pc=0x59f4c; continue; + case 0x59ffc: + r20= page[(r17+0)>>>2]; case 0x5a000: pc=0x5a000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_5a000() throws ExecutionException { /* 0x5a000 - 0x5a200 */ + private final void run_5a000() throws ExecutionException { /* 0x5a000 - 0x5a800 */ int addr, tmp; for(;;) { switch(pc) { case 0x5a000: + r18= page[(r17+4)>>>2]; + r17 = r17 + 8; + pc=0x59e7c; + run_59800(); return; + case 0x5a010: + r31=0x5a018; + pc=0x4fc00; + run_4f800(); return; + case 0x5a018: + r30 = r2 + r0; + if(r2 != r0) { + pc=0x5a310; + continue; + } + r5= page[(r16+16)>>>2]; + r4 = r21 + r0; + r31=0x5a034; + pc=0x4c400; + run_4c000(); return; + case 0x5a034: + r2 = r0 + 12; + page[(r21+0)>>>2] = r2; + case 0x5a03c: + addr=r16+12; + tmp= page[(addr)>>>2]; + tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; + r2 = tmp; + r2 = r2 | 64; + addr=r16+12; + tmp= page[(addr)>>>2]; + tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); + page[(addr)>>>2] = tmp; + r2 = r0 + -1; + pc=0x59ed8; + run_59800(); return; + case 0x5a058: + r3 = r0 + r0; + r30 = r0 + r0; + r18 = r0 + r0; + case 0x5a064: + if(r18 == r0) { + pc=0x5a120; + continue; + } + case 0x5a06c: + if(r3 == r0) { + pc=0x5a254; + continue; + } + case 0x5a074: + r2 = ((r18 & 0xffffffffL) < (r22 & 0xffffffffL)) ? 1 : 0; + r23 = r22 + r0; + if(r2 == r0) { + pc=0x5a088; + continue; + } + r23 = r18 + r0; + case 0x5a088: + r4= page[(r16+0)>>>2]; + r2= page[(r16+16)>>>2]; + r20 = r23 + r0; + r2 = ((r2 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; + r6= page[(r16+8)>>>2]; + r7= page[(r16+20)>>>2]; + if(r2 == r0) { + pc=0x5a0b8; + continue; + } + r8 = r6 + r7; + r2 = r8 < r23 ? 1 : 0; + if(r2 != r0) { + pc=0x5a33c; + continue; + } + case 0x5a0b8: + r2 = r23 < r7 ? 1 : 0; + if(r2 != r0) { + pc=0x5a1a0; + continue; + } + r2= page[(r16+36)>>>2]; + r5= page[(r16+28)>>>2]; + r4 = r21 + r0; + page[(r29+20)>>>2] = r3; + r6 = r30 + r0; + pc=r2; + r31=0x5a0e0; + return; + case 0x5a0e0: + r20 = r2 + r0; + r3= page[(r29+20)>>>2]; + if(r2 <= 0) { + pc=0x5a03c; + continue; + } + case 0x5a0f0: + r22 = r22 - r20; + if(r22 == r0) { + pc=0x5a1dc; + continue; + } + case 0x5a0fc: + r2= page[(r19+8)>>>2]; + r30 = r30 + r20; + r18 = r18 - r20; + r20 = r2 - r20; + page[(r19+8)>>>2] = r20; + if(r20 == r0) { + pc=0x59ed4; + run_59800(); return; + } + if(r18 != r0) { + pc=0x5a06c; + continue; + } + case 0x5a120: + r30= page[(r17+0)>>>2]; + r18= page[(r17+4)>>>2]; + r3 = r0 + r0; + r17 = r17 + 8; + pc=0x5a064; + continue; + case 0x5a138: + r4= page[(r16+0)>>>2]; + r2= page[(r16+16)>>>2]; + r2 = ((r2 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; + if(r2 == r0) { + pc=0x5a15c; + continue; + } + r2 = ((r20 & 0xffffffffL) < (r18 & 0xffffffffL)) ? 1 : 0; + if(r2 != r0) { + pc=0x5a390; + continue; + } + case 0x5a15c: + r7= page[(r16+20)>>>2]; + r2 = ((r18 & 0xffffffffL) < (r7 & 0xffffffffL)) ? 1 : 0; + if(r2 != r0) { + pc=0x5a218; + continue; + } + r2= page[(r16+36)>>>2]; + r5= page[(r16+28)>>>2]; + r4 = r21 + r0; + r6 = r22 + r0; + pc=r2; + r31=0x5a188; + return; + case 0x5a188: + r20 = r2 + r0; + if(r2 <= 0) { + pc=0x5a03c; + continue; + } + r2 = r20 + r0; + pc=0x59fbc; + run_59800(); return; + case 0x5a1a0: + r6 = r23 + r0; + r5 = r30 + r0; + page[(r29+20)>>>2] = r3; + r31=0x5a1b4; + pc=0x5ae00; + run_5a800(); return; + case 0x5a1b4: + r2= page[(r16+8)>>>2]; + r22 = r22 - r20; + r2 = r2 - r23; + page[(r16+8)>>>2] = r2; + r2= page[(r16+0)>>>2]; + r3= page[(r29+20)>>>2]; + r23 = r2 + r23; + page[(r16+0)>>>2] = r23; + if(r22 != r0) { + pc=0x5a0fc; + continue; + } + case 0x5a1dc: + r4 = r21 + r0; + r5 = r16 + r0; + r31=0x5a1ec; + pc=0x4a400; + run_4a000(); return; + case 0x5a1ec: + if(r2 != r0) { + pc=0x5a03c; + continue; + } + r3 = r0 + r0; + pc=0x5a0fc; + continue; + case 0x5a200: r30 = r18 + r0; - r4 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + r4= page[(r16+0)>>>2]; r20 = r18 + r0; r23 = r18 + r0; - /* Next insn is delay slot */ - pc=0x59d8c; - run_59c00(); return; - case 0x5a018: + pc=0x59f8c; + run_59800(); return; + case 0x5a218: r5 = r22 + r0; r6 = r18 + r0; - /* Next insn is delay slot */ - r31=0x5a028; - pc=0x5b600; - run_5b600(); return; - case 0x5a028: - r2 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; + r31=0x5a228; + pc=0x5ae00; + run_5a800(); return; + case 0x5a228: + r2= page[(r16+8)>>>2]; r20 = r18 + r0; r2 = r2 - r18; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + page[(r16+8)>>>2] = r2; + r2= page[(r16+0)>>>2]; r2 = r2 + r18; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; + page[(r16+0)>>>2] = r2; r2 = r18 + r0; - /* Next insn is delay slot */ - pc=0x59dbc; - run_59c00(); return; - case 0x5a054: + pc=0x59fbc; + run_59800(); return; + case 0x5a254: r4 = r30 + r0; r5 = r0 + 10; r6 = r18 + r0; - /* Next insn is delay slot */ - r31=0x5a068; - pc=0x5b400; - run_5b400(); return; - case 0x5a068: + r31=0x5a268; + pc=0x5ac00; + run_5a800(); return; + case 0x5a268: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5a1dc; + pc=0x5a3dc; continue; } r22 = r2 + 1; r22 = r22 - r30; r3 = r0 + 1; - /* Next insn is delay slot */ - pc=0x59e74; - run_59e00(); return; - case 0x5a084: - r4 = readPages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff]; - r5 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; + pc=0x5a074; + continue; + case 0x5a284: + r4= page[(r16+20)>>>2]; + r5= page[(r16+16)>>>2]; r6 = r4 << 1; - r3 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + r3= page[(r16+0)>>>2]; r4 = r6 + r4; r20 = r4 >>> 31; r23 = r3 - r5; @@ -71219,251 +69221,127 @@ public final class AcmeCrossAssembler extends UnixRuntime { r6 = r6 + r18; r4 = ((r20 & 0xffffffffL) < (r6 & 0xffffffffL)) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5a1d0; + pc=0x5a3d0; continue; } r20 = r6 + r0; - case 0x5a0c0: + case 0x5a2c0: r2 = r2 & 1024; r4 = r21 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x59e10; - run_59e00(); return; + pc=0x5a010; + continue; } r5 = r6 + r0; - /* Next insn is delay slot */ - r31=0x5a0dc; - pc=0x3ec00; - run_3ec00(); return; - case 0x5a0dc: + r31=0x5a2dc; + pc=0x4e200; + run_4e000(); return; + case 0x5a2dc: r30 = r2 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x59e34; - run_59e00(); return; + pc=0x5a034; + continue; } - r5 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; + r5= page[(r16+16)>>>2]; r4 = r2 + r0; r6 = r23 + r0; - /* Next insn is delay slot */ - r31=0x5a0fc; - pc=0x48fdc; - run_48e00(); return; - case 0x5a0fc: + r31=0x5a2fc; + pc=0x56fe0; + run_56800(); return; + case 0x5a2fc: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r3 = r0 + -1153; r2 = r2 & r3; r2 = r2 | 128; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x5a110: + page[(addr)>>>2] = tmp; + case 0x5a310: r4 = r30 + r23; r3 = r20 - r23; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r30; - writePages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff] = r20; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r4; + page[(r16+16)>>>2] = r30; + page[(r16+20)>>>2] = r20; + page[(r16+0)>>>2] = r4; r30 = r18 + r0; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r3; + page[(r16+8)>>>2] = r3; r20 = r18 + r0; r23 = r18 + r0; - /* Next insn is delay slot */ - pc=0x59d8c; - run_59c00(); return; - case 0x5a13c: + pc=0x59f8c; + run_59800(); return; + case 0x5a33c: r6 = r8 + r0; r5 = r30 + r0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r8; - /* Next insn is delay slot */ - r31=0x5a154; - pc=0x5b600; - run_5b600(); return; - case 0x5a154: - r8 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + page[(r29+20)>>>2] = r3; + page[(r29+16)>>>2] = r8; + r31=0x5a354; + pc=0x5ae00; + run_5a800(); return; + case 0x5a354: + r8= page[(r29+16)>>>2]; + r2= page[(r16+0)>>>2]; r4 = r21 + r0; r2 = r2 + r8; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; + page[(r16+0)>>>2] = r2; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x5a174; - pc=0x39800; - run_39800(); return; - case 0x5a174: - r3 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r8 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + r31=0x5a374; + pc=0x4a400; + run_4a000(); return; + case 0x5a374: + r3= page[(r29+20)>>>2]; + r8= page[(r29+16)>>>2]; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x59e3c; - run_59e00(); return; + pc=0x5a03c; + continue; } r20 = r8 + r0; - /* Next insn is delay slot */ - pc=0x59ef0; - run_59e00(); return; - case 0x5a190: + pc=0x5a0f0; + continue; + case 0x5a390: r5 = r22 + r0; r6 = r20 + r0; - /* Next insn is delay slot */ - r31=0x5a1a0; - pc=0x5b600; - run_5b600(); return; - case 0x5a1a0: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + r31=0x5a3a0; + pc=0x5ae00; + run_5a800(); return; + case 0x5a3a0: + r2= page[(r16+0)>>>2]; r4 = r21 + r0; r2 = r2 + r20; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; + page[(r16+0)>>>2] = r2; r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x5a1bc; - pc=0x39800; - run_39800(); return; - case 0x5a1bc: + r31=0x5a3bc; + pc=0x4a400; + run_4a000(); return; + case 0x5a3bc: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x59e3c; - run_59e00(); return; + pc=0x5a03c; + continue; } r2 = r20 + r0; - /* Next insn is delay slot */ - pc=0x59dbc; - run_59c00(); return; - case 0x5a1d0: + pc=0x59fbc; + run_59800(); return; + case 0x5a3d0: r6 = r20 + r0; - /* Next insn is delay slot */ - pc=0x5a0c0; + pc=0x5a2c0; continue; - case 0x5a1dc: + case 0x5a3dc: r22 = r18 + 1; r3 = r0 + 1; - /* Next insn is delay slot */ - pc=0x59e74; - run_59e00(); return; - case 0x5a1ec: - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x59cd8; - run_59c00(); return; - case 0x5a200: - pc=0x5a200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5a200() throws ExecutionException { /* 0x5a200 - 0x5a400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5a200: - /* Next insn is delay slot */ - pc=0x65400; - run_65400(); return; - case 0x5a400: - pc=0x5a400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5a400() throws ExecutionException { /* 0x5a400 - 0x5a600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5a400: - r29 = r29 + -32; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - r16 = r6 + r0; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x5a438; - continue; - } - r5 = 7 << 16; - r4 = r6 + r0; - r5 = r5 + 2076; - /* Next insn is delay slot */ - r31=0x5a430; - pc=0x42c00; - run_42c00(); return; - case 0x5a430: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5a45c; - continue; - } - case 0x5a438: - r17 = 7 << 16; - case 0x5a43c: - r17 = r17 + 208; - case 0x5a440: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r17 + r0; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5a45c: - r17 = 7 << 16; - r4 = r16 + r0; - r5 = r17 + 208; - /* Next insn is delay slot */ - r31=0x5a470; - pc=0x42c00; - run_42c00(); return; - case 0x5a470: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5a43c; - continue; - } - r5 = 7 << 16; - r4 = r16 + r0; - r5 = r5 + -12264; - /* Next insn is delay slot */ - r31=0x5a48c; - pc=0x42c00; - run_42c00(); return; - case 0x5a48c: - r17 = r17 + 208; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5a440; - continue; - } - r17 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5a440; + pc=0x5a074; continue; + case 0x5a3ec: + r2 = r0 + -1; + pc=0x59ed8; + run_59800(); return; + case 0x5a400: + pc=0x5d400; + run_5d000(); return; case 0x5a600: - pc=0x5a600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5a600() throws ExecutionException { /* 0x5a600 - 0x5a800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5a600: - r2 = 7 << 16; - r2 = r2 + 12168; - /* Next insn is delay slot */ + r2 = 6 << 16; + r2 = r2 + 26208; pc=r31; return; case 0x5a800: @@ -71471,220 +69349,106 @@ public final class AcmeCrossAssembler extends UnixRuntime { return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_5a800() throws ExecutionException { /* 0x5a800 - 0x5aa00 */ + private final void run_5a800() throws ExecutionException { /* 0x5a800 - 0x5b000 */ int addr, tmp; for(;;) { switch(pc) { case 0x5a800: - r2 = readPages[(r28+-30976)>>>12][((r28+-30976)>>>2)&0x3ff]; - /* Next insn is delay slot */ + r2= page[(r28+-31416)>>>2]; pc=r31; return; case 0x5aa00: - pc=0x5aa00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5aa00() throws ExecutionException { /* 0x5aa00 - 0x5ac00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5aa00: - r2 = 7 << 16; - r2 = r2 + 12136; - /* Next insn is delay slot */ + r2 = 6 << 16; + r2 = r2 + 26240; pc=r31; return; case 0x5ac00: - pc=0x5ac00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5ac00() throws ExecutionException { /* 0x5ac00 - 0x5ae00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5ac00: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5ae00: - pc=0x5ae00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5ae00() throws ExecutionException { /* 0x5ae00 - 0x5b000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5ae00: - r2 = 7 << 16; - r2 = r2 + 12200; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5b000: - pc=0x5b000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5b000() throws ExecutionException { /* 0x5b000 - 0x5b200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5b000: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x5a400; - run_5a400(); return; - case 0x5b200: - pc=0x5b200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5b200() throws ExecutionException { /* 0x5b200 - 0x5b400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5b200: - r2 = 7 << 16; - r2 = r2 + 12200; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5b400: - pc=0x5b400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5b400() throws ExecutionException { /* 0x5b400 - 0x5b600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5b400: r2 = r4 & 3; r7 = r5 & 255; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5b45c; + pc=0x5ac5c; continue; } r2 = r6 + -1; if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x5b440; + pc=0x5ac40; continue; } - /* Next insn is delay slot */ - pc=0x5b4b0; + pc=0x5acb0; continue; - case 0x5b424: + case 0x5ac24: r4 = r4 + 1; r3 = r4 & 3; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5b460; + pc=0x5ac60; continue; } if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5b4b0; + pc=0x5acb0; continue; } r2 = r2 + -1; - case 0x5b440: + case 0x5ac40: addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r3 = tmp; if(r3 != r7) { - /* Next insn is delay slot */ - pc=0x5b424; + pc=0x5ac24; continue; } - case 0x5b450: + case 0x5ac50: r2 = r4 + r0; - /* Next insn is delay slot */ pc=r31; return; - case 0x5b45c: + case 0x5ac5c: r2 = r6 + r0; - case 0x5b460: + case 0x5ac60: r3 = (r2&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5b4bc; + pc=0x5acbc; continue; } - case 0x5b46c: + case 0x5ac6c: r5 = r2 + -1; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5b4b0; + pc=0x5acb0; continue; } addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r2 = tmp; if(r2 == r7) { - /* Next insn is delay slot */ - pc=0x5b450; + pc=0x5ac50; continue; } r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5b4a4; + pc=0x5aca4; continue; - case 0x5b494: + case 0x5ac94: addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r3 = tmp; r2 = r2 + 1; if(r3 == r7) { - /* Next insn is delay slot */ - pc=0x5b450; + pc=0x5ac50; continue; } - case 0x5b4a4: + case 0x5aca4: r4 = r4 + 1; if(r2 != r5) { - /* Next insn is delay slot */ - pc=0x5b494; + pc=0x5ac94; continue; } - case 0x5b4b0: + case 0x5acb0: r2 = r0 + r0; - /* Next insn is delay slot */ pc=r31; return; - case 0x5b4bc: + case 0x5acbc: r5 = r5 & 255; r3 = r5 << 8; r3 = r3 | r5; @@ -71694,116 +69458,93 @@ public final class AcmeCrossAssembler extends UnixRuntime { r9 = r9 | r3; r8 = r8 | 65279; r6 = r6 | 32896; - case 0x5b4e0: - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; + case 0x5ace0: + r3= page[(r4+0)>>>2]; r3 = r9 ^ r3; r5 = r3 + r8; r3 = ~(r0 | r3); r3 = r5 & r3; r3 = r3 & r6; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5b46c; + pc=0x5ac6c; continue; } r2 = r2 + -4; r3 = (r2&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; r4 = r4 + 4; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5b4e0; + pc=0x5ace0; continue; } - /* Next insn is delay slot */ - pc=0x5b46c; + pc=0x5ac6c; continue; - case 0x5b600: - pc=0x5b600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5b600() throws ExecutionException { /* 0x5b600 - 0x5b800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5b600: + case 0x5ae00: r3 = ((r5 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; r2 = r4 + r0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5b650; + pc=0x5ae50; continue; } r7 = r5 + r6; r3 = ((r4 & 0xffffffffL) < (r7 & 0xffffffffL)) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5b650; + pc=0x5ae50; continue; } r3 = r4 + r6; r5 = r3 - r6; if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x5b748; + pc=0x5af48; continue; } - case 0x5b630: + case 0x5ae30: r7 = r7 + -1; addr=r7+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r4 = tmp; r3 = r3 + -1; addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r3 != r5) { - /* Next insn is delay slot */ - pc=0x5b630; + pc=0x5ae30; continue; } - /* Next insn is delay slot */ pc=r31; return; - case 0x5b650: + case 0x5ae50: r3 = (r6&0xffffffffL) < (16&0xffffffffL) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5b750; + pc=0x5af50; continue; } r3 = r2 | r5; r3 = r3 & 3; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5b764; + pc=0x5af64; continue; } r7 = r5 + r0; r3 = r2 + r0; r4 = r6 + r0; - case 0x5b678: - r8 = readPages[(r7+0)>>>12][((r7+0)>>>2)&0x3ff]; + case 0x5ae78: + r8= page[(r7+0)>>>2]; r7 = r7 + 16; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r8; - r8 = readPages[(r7+-12)>>>12][((r7+-12)>>>2)&0x3ff]; + page[(r3+0)>>>2] = r8; + r8= page[(r7+-12)>>>2]; r3 = r3 + 16; - writePages[(r3+-12)>>>12][((r3+-12)>>>2)&0x3ff] = r8; - r8 = readPages[(r7+-8)>>>12][((r7+-8)>>>2)&0x3ff]; + page[(r3+-12)>>>2] = r8; + r8= page[(r7+-8)>>>2]; r4 = r4 + -16; - writePages[(r3+-8)>>>12][((r3+-8)>>>2)&0x3ff] = r8; - r8 = readPages[(r7+-4)>>>12][((r7+-4)>>>2)&0x3ff]; - writePages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff] = r8; + page[(r3+-8)>>>2] = r8; + r8= page[(r7+-4)>>>2]; + page[(r3+-4)>>>2] = r8; r8 = (r4&0xffffffffL) < (16&0xffffffffL) ? 1 : 0; if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x5b678; + pc=0x5ae78; continue; } r4 = r6 + -16; @@ -71815,23 +69556,21 @@ public final class AcmeCrossAssembler extends UnixRuntime { r5 = r5 + r4; r4 = (r10&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x5b778; + pc=0x5af78; continue; } r8 = r5 + r0; r7 = r3 + r0; r4 = r10 + r0; - case 0x5b6e8: + case 0x5aee8: r8 = r8 + 4; - r9 = readPages[(r8+-4)>>>12][((r8+-4)>>>2)&0x3ff]; + r9= page[(r8+-4)>>>2]; r7 = r7 + 4; r4 = r4 + -4; - writePages[(r7+-4)>>>12][((r7+-4)>>>2)&0x3ff] = r9; + page[(r7+-4)>>>2] = r9; r9 = (r4&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x5b6e8; + pc=0x5aee8; continue; } r4 = r10 + -4; @@ -71842,697 +69581,431 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = r3 + r4; r5 = r5 + r4; if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x5b770; + pc=0x5af70; continue; } - case 0x5b72c: + case 0x5af2c: r6 = r3 + r6; - case 0x5b730: + case 0x5af30: r5 = r5 + 1; addr=r5+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r7 = tmp; r3 = r3 + 1; addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r7&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; if(r3 != r6) { - /* Next insn is delay slot */ - pc=0x5b730; + pc=0x5af30; continue; } - case 0x5b748: - /* Next insn is delay slot */ + case 0x5af48: pc=r31; return; - case 0x5b750: + case 0x5af50: r3 = r2 + r0; if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x5b72c; + pc=0x5af2c; continue; } - /* Next insn is delay slot */ - pc=0x5b770; + pc=0x5af70; continue; - case 0x5b764: + case 0x5af64: r3 = r2 + r0; - /* Next insn is delay slot */ - pc=0x5b72c; + pc=0x5af2c; continue; - case 0x5b770: - /* Next insn is delay slot */ + case 0x5af70: pc=r31; return; - case 0x5b778: + case 0x5af78: r6 = r10 + r0; if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x5b72c; + pc=0x5af2c; continue; } - /* Next insn is delay slot */ - pc=0x5b770; + pc=0x5af70; continue; - case 0x5b800: - pc=0x5b800; + case 0x5b000: + pc=0x5b000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_5b800() throws ExecutionException { /* 0x5b800 - 0x5ba00 */ + private final void run_5b000() throws ExecutionException { /* 0x5b000 - 0x5b800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x5b800: - r2 = readPages[(r4+76)>>>12][((r4+76)>>>2)&0x3ff]; + case 0x5b000: + r2= page[(r4+76)>>>2]; r29 = r29 + -32; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; + page[(r29+20)>>>2] = r17; + page[(r29+16)>>>2] = r16; + page[(r29+28)>>>2] = r31; + page[(r29+24)>>>2] = r18; r16 = r4 + r0; r17 = r5 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5b870; + pc=0x5b070; continue; } - case 0x5b828: + case 0x5b028: r3 = r17 << 2; r3 = r2 + r3; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + r2= page[(r3+0)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5b898; + pc=0x5b098; continue; } - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - case 0x5b84c: - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r0; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - case 0x5b854: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + r4= page[(r2+0)>>>2]; + page[(r3+0)>>>2] = r4; + case 0x5b04c: + page[(r2+16)>>>2] = r0; + page[(r2+12)>>>2] = r0; + case 0x5b054: + r31= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; r29 = r29 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x5b870: + case 0x5b070: r5 = r0 + 4; r6 = r0 + 33; - /* Next insn is delay slot */ - r31=0x5b880; - pc=0x65600; - run_65600(); return; - case 0x5b880: - writePages[(r16+76)>>>12][((r16+76)>>>2)&0x3ff] = r2; + r31=0x5b080; + pc=0x5d600; + run_5d000(); return; + case 0x5b080: + page[(r16+76)>>>2] = r2; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5b828; + pc=0x5b028; continue; } - case 0x5b88c: + case 0x5b08c: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5b854; + pc=0x5b054; continue; - case 0x5b898: + case 0x5b098: r18 = r0 + 1; r18 = r18 << (r17&0x1f); r6 = r18 + 5; r4 = r16 + r0; r5 = r0 + 1; r6 = r6 << 2; - /* Next insn is delay slot */ - r31=0x5b8b8; - pc=0x65600; - run_65600(); return; - case 0x5b8b8: + r31=0x5b0b8; + pc=0x5d600; + run_5d000(); return; + case 0x5b0b8: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5b88c; + pc=0x5b08c; continue; } - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r17; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r18; - /* Next insn is delay slot */ - pc=0x5b84c; + page[(r2+4)>>>2] = r17; + page[(r2+8)>>>2] = r18; + pc=0x5b04c; continue; - case 0x5ba00: - pc=0x5ba00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5ba00() throws ExecutionException { /* 0x5ba00 - 0x5bc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5ba00: + case 0x5b200: if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x5ba28; + pc=0x5b228; continue; } - r2 = readPages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff]; - r3 = readPages[(r4+76)>>>12][((r4+76)>>>2)&0x3ff]; + r2= page[(r5+4)>>>2]; + r3= page[(r4+76)>>>2]; r2 = r2 << 2; r2 = r3 + r2; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - writePages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff] = r3; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r5; - case 0x5ba28: - /* Next insn is delay slot */ + r3= page[(r2+0)>>>2]; + page[(r5+0)>>>2] = r3; + page[(r2+0)>>>2] = r5; + case 0x5b228: pc=r31; return; - case 0x5bc00: - pc=0x5bc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5bc00() throws ExecutionException { /* 0x5bc00 - 0x5be00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5bc00: + case 0x5b400: r29 = r29 + -48; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r16; - r16 = readPages[(r5+16)>>>12][((r5+16)>>>2)&0x3ff]; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r18; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r17; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r19; + page[(r29+28)>>>2] = r16; + r16= page[(r5+16)>>>2]; + page[(r29+36)>>>2] = r18; + page[(r29+32)>>>2] = r17; + page[(r29+44)>>>2] = r31; + page[(r29+40)>>>2] = r19; r18 = r4 + r0; r17 = r5 + r0; r3 = r5 + 20; r8 = r0 + r0; - case 0x5bc2c: - r11 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + case 0x5b42c: + r11= page[(r3+0)>>>2]; r8 = r8 + 1; r9 = r11 & 65535; - { long hilo = (r9) * r6; hi = (int) (hilo >>> 32); lo = (int) hilo; } + { long hilo = (long)(r9) * ((long)r6); hi = (int) (hilo >>> 32); lo = (int) hilo; } r11 = r11 >>> 16; r3 = r3 + 4; r9 = lo; r9 = r9 + r7; r7 = r9 >>> 16; - { long hilo = (r11) * r6; hi = (int) (hilo >>> 32); lo = (int) hilo; } + { long hilo = (long)(r11) * ((long)r6); hi = (int) (hilo >>> 32); lo = (int) hilo; } r9 = r9 & 65535; r11 = lo; r10 = r7 + r11; r7 = r10 >>> 16; r10 = r10 << 16; r9 = r10 + r9; - writePages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff] = r9; + page[(r3+-4)>>>2] = r9; r9 = r8 < r16 ? 1 : 0; if(r9 != r0) { - /* Next insn is delay slot */ - pc=0x5bc2c; + pc=0x5b42c; continue; } if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x5bcb0; + pc=0x5b4b0; continue; } - r2 = readPages[(r17+8)>>>12][((r17+8)>>>2)&0x3ff]; + r2= page[(r17+8)>>>2]; r2 = r16 < r2 ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5bcd4; + pc=0x5b4d4; continue; } - case 0x5bc98: + case 0x5b498: r2 = r16 + 4; r2 = r2 << 2; r2 = r17 + r2; r16 = r16 + 1; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r7; - writePages[(r17+16)>>>12][((r17+16)>>>2)&0x3ff] = r16; - case 0x5bcb0: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + page[(r2+4)>>>2] = r7; + page[(r17+16)>>>2] = r16; + case 0x5b4b0: + r31= page[(r29+44)>>>2]; r2 = r17 + r0; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + r19= page[(r29+40)>>>2]; + r18= page[(r29+36)>>>2]; + r17= page[(r29+32)>>>2]; + r16= page[(r29+28)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x5bcd4: - r5 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; + case 0x5b4d4: + r5= page[(r17+4)>>>2]; r4 = r18 + r0; r5 = r5 + 1; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x5bcec; - pc=0x5b800; - run_5b800(); return; - case 0x5bcec: - r6 = readPages[(r17+16)>>>12][((r17+16)>>>2)&0x3ff]; + page[(r29+16)>>>2] = r7; + r31=0x5b4ec; + pc=0x5b000; + continue; + case 0x5b4ec: + r6= page[(r17+16)>>>2]; r5 = r17 + 12; r6 = r6 + 2; r4 = r2 + 12; r6 = r6 << 2; r19 = r2 + r0; - /* Next insn is delay slot */ - r31=0x5bd0c; - pc=0x48fdc; - run_48e00(); return; - case 0x5bd0c: - r2 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; - r3 = readPages[(r18+76)>>>12][((r18+76)>>>2)&0x3ff]; + r31=0x5b50c; + pc=0x56fe0; + run_56800(); return; + case 0x5b50c: + r2= page[(r17+4)>>>2]; + r3= page[(r18+76)>>>2]; r2 = r2 << 2; r2 = r3 + r2; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r7 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r3; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r17; + r3= page[(r2+0)>>>2]; + r7= page[(r29+16)>>>2]; + page[(r17+0)>>>2] = r3; + page[(r2+0)>>>2] = r17; r17 = r19 + r0; - /* Next insn is delay slot */ - pc=0x5bc98; + pc=0x5b498; continue; - case 0x5be00: - pc=0x5be00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5be00() throws ExecutionException { /* 0x5be00 - 0x5c000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5be00: - r29 = r29 + -48; - r2 = r0 + 9; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - r17 = r4 + r0; - r4 = r7 + 8; - if(r2 != r0) { - /* Next insn is delay slot */ - hi = r4%r2; lo = r4/r2; - pc=0x5be20; - continue; - } - hi = r4%r2; lo = r4/r2; - throw new ExecutionException("Break"); - case 0x5be20: - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r21; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - r20 = r5 + r0; - r18 = r6 + r0; - r19 = r7 + r0; - r4 = lo; - r2 = r4 < 2 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5bf4c; - continue; - } - r2 = r0 + 1; - r5 = r0 + r0; - case 0x5be5c: - r2 = r2 << 1; - r8 = r2 < r4 ? 1 : 0; - r5 = r5 + 1; - if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x5be5c; - continue; - } - case 0x5be70: - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x5be7c; - pc=0x5b800; - run_5b800(); return; - case 0x5be7c: - r3 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - writePages[(r2+20)>>>12][((r2+20)>>>2)&0x3ff] = r3; - r3 = r0 + 1; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r3; - r3 = r18 < 10 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5bf3c; - continue; - } - r21 = r20 + 9; - r16 = r21 + r0; - r20 = r20 + r18; - case 0x5bea8: - r16 = r16 + 1; - addr=r16+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r7 = tmp; - r4 = r17 + r0; - r5 = r2 + r0; - r6 = r0 + 10; - r7 = r7 + -48; - /* Next insn is delay slot */ - r31=0x5bec8; - pc=0x5bc00; - run_5bc00(); return; - case 0x5bec8: - if(r16 != r20) { - /* Next insn is delay slot */ - pc=0x5bea8; - continue; - } - r16 = r21 + r18; - r16 = r16 + -8; - case 0x5bed8: - r3 = r18 < r19 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5bf14; - continue; - } - r18 = r19 - r18; - r18 = r16 + r18; - case 0x5beec: - r16 = r16 + 1; - addr=r16+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r7 = tmp; - r4 = r17 + r0; - r5 = r2 + r0; - r6 = r0 + 10; - r7 = r7 + -48; - /* Next insn is delay slot */ - r31=0x5bf0c; - pc=0x5bc00; - run_5bc00(); return; - case 0x5bf0c: - if(r16 != r18) { - /* Next insn is delay slot */ - pc=0x5beec; - continue; - } - case 0x5bf14: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r21 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r20 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5bf3c: - r16 = r20 + 10; - r18 = r0 + 9; - /* Next insn is delay slot */ - pc=0x5bed8; - continue; - case 0x5bf4c: - r5 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5be70; - continue; - case 0x5c000: - pc=0x5c000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5c000() throws ExecutionException { /* 0x5c000 - 0x5c200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5c000: + case 0x5b600: r2 = 65535 << 16; r2 = r4 & r2; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5c084; + pc=0x5b684; continue; } r4 = r4 << 16; r2 = r0 + 16; - case 0x5c018: + case 0x5b618: r3 = 65280 << 16; r3 = r4 & r3; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5c030; + pc=0x5b630; continue; } r2 = r2 + 8; r4 = r4 << 8; - case 0x5c030: + case 0x5b630: r3 = 61440 << 16; r3 = r4 & r3; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5c048; + pc=0x5b648; continue; } r2 = r2 + 4; r4 = r4 << 4; - case 0x5c048: + case 0x5b648: r3 = 49152 << 16; r3 = r4 & r3; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5c060; + pc=0x5b660; continue; } r2 = r2 + 2; r4 = r4 << 2; - case 0x5c060: + case 0x5b660: if(r4 < 0) { - /* Next insn is delay slot */ - pc=0x5c07c; + pc=0x5b67c; continue; } r3 = 16384 << 16; r4 = r4 & r3; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x5c090; + pc=0x5b690; continue; } r2 = r0 + 32; - case 0x5c07c: - /* Next insn is delay slot */ + case 0x5b67c: pc=r31; return; - case 0x5c084: + case 0x5b684: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5c018; + pc=0x5b618; continue; - case 0x5c090: + case 0x5b690: r2 = r2 + 1; - /* Next insn is delay slot */ pc=r31; return; - case 0x5c200: - pc=0x5c200; + case 0x5b800: + pc=0x5b800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_5c200() throws ExecutionException { /* 0x5c200 - 0x5c400 */ + private final void run_5b800() throws ExecutionException { /* 0x5b800 - 0x5c000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x5c200: - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; + case 0x5b800: + r3= page[(r4+0)>>>2]; r2 = r3 & 7; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5c240; + pc=0x5b840; continue; } r2 = r3 & 1; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5c2d0; + pc=0x5b8d0; continue; } r2 = r3 & 2; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5c2dc; + pc=0x5b8dc; continue; } r3 = r3 >>> 2; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r3; + page[(r4+0)>>>2] = r3; r2 = r0 + 2; - /* Next insn is delay slot */ pc=r31; return; - case 0x5c240: + case 0x5b840: r2 = r3 & 65535; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5c2b0; + pc=0x5b8b0; continue; } r2 = r0 + r0; - case 0x5c250: + case 0x5b850: r5 = r3 & 255; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x5c264; + pc=0x5b864; continue; } r2 = r2 + 8; r3 = r3 >>> 8; - case 0x5c264: + case 0x5b864: r5 = r3 & 15; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x5c278; + pc=0x5b878; continue; } r2 = r2 + 4; r3 = r3 >>> 4; - case 0x5c278: + case 0x5b878: r5 = r3 & 3; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x5c28c; + pc=0x5b88c; continue; } r2 = r2 + 2; r3 = r3 >>> 2; - case 0x5c28c: + case 0x5b88c: r5 = r3 & 1; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x5c2c4; + pc=0x5b8c4; continue; } r3 = r3 >>> 1; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5c2c0; + pc=0x5b8c0; continue; } r2 = r0 + 32; - /* Next insn is delay slot */ pc=r31; return; - case 0x5c2b0: + case 0x5b8b0: r3 = r3 >>> 16; r2 = r0 + 16; - /* Next insn is delay slot */ - pc=0x5c250; + pc=0x5b850; continue; - case 0x5c2c0: + case 0x5b8c0: r2 = r2 + 1; - case 0x5c2c4: - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ + case 0x5b8c4: + page[(r4+0)>>>2] = r3; pc=r31; return; - case 0x5c2d0: + case 0x5b8d0: r2 = r0 + r0; - /* Next insn is delay slot */ pc=r31; return; - case 0x5c2dc: + case 0x5b8dc: r3 = r3 >>> 1; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r3; + page[(r4+0)>>>2] = r3; r2 = r0 + 1; - /* Next insn is delay slot */ pc=r31; return; - case 0x5c400: - pc=0x5c400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5c400() throws ExecutionException { /* 0x5c400 - 0x5c600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5c400: + case 0x5ba00: r29 = r29 + -24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; + page[(r29+16)>>>2] = r16; r16 = r5 + r0; r5 = r0 + 1; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x5c41c; - pc=0x5b800; - run_5b800(); return; - case 0x5c41c: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + page[(r29+20)>>>2] = r31; + r31=0x5ba1c; + pc=0x5b000; + run_5b000(); return; + case 0x5ba1c: + r31= page[(r29+20)>>>2]; r4 = r0 + 1; - writePages[(r2+20)>>>12][((r2+20)>>>2)&0x3ff] = r16; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r4; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + page[(r2+20)>>>2] = r16; + page[(r2+16)>>>2] = r4; + r16= page[(r29+16)>>>2]; r29 = r29 + 24; - /* Next insn is delay slot */ pc=r31; return; - case 0x5c600: - pc=0x5c600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5c600() throws ExecutionException { /* 0x5c600 - 0x5c800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5c600: + case 0x5bc00: r29 = r29 + -40; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - r19 = readPages[(r6+16)>>>12][((r6+16)>>>2)&0x3ff]; - r18 = readPages[(r5+16)>>>12][((r5+16)>>>2)&0x3ff]; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; + page[(r29+28)>>>2] = r19; + page[(r29+24)>>>2] = r18; + r19= page[(r6+16)>>>2]; + r18= page[(r5+16)>>>2]; + page[(r29+32)>>>2] = r20; r2 = r18 < r19 ? 1 : 0; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; + page[(r29+20)>>>2] = r17; + page[(r29+36)>>>2] = r31; + page[(r29+16)>>>2] = r16; r17 = r5 + r0; r20 = r6 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5c64c; + pc=0x5bc4c; continue; } r2 = r18 + r0; @@ -72540,43 +70013,39 @@ public final class AcmeCrossAssembler extends UnixRuntime { r18 = r19 + r0; r20 = r5 + r0; r19 = r2 + r0; - case 0x5c64c: - r2 = readPages[(r17+8)>>>12][((r17+8)>>>2)&0x3ff]; + case 0x5bc4c: + r2= page[(r17+8)>>>2]; r16 = r18 + r19; r2 = r2 < r16 ? 1 : 0; - r5 = readPages[(r17+4)>>>12][((r17+4)>>>2)&0x3ff]; + r5= page[(r17+4)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5c668; + pc=0x5bc68; continue; } r5 = r5 + 1; - case 0x5c668: - /* Next insn is delay slot */ - r31=0x5c670; - pc=0x5b800; - run_5b800(); return; - case 0x5c670: + case 0x5bc68: + r31=0x5bc70; + pc=0x5b000; + run_5b000(); return; + case 0x5bc70: r13 = r2 + 20; r14 = r16 << 2; r14 = r13 + r14; r4 = ((r13 & 0xffffffffL) < (r14 & 0xffffffffL)) ? 1 : 0; r3 = r13 + r0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5c6a0; + pc=0x5bca0; continue; } - case 0x5c68c: - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r0; + case 0x5bc8c: + page[(r3+0)>>>2] = r0; r3 = r3 + 4; r4 = ((r3 & 0xffffffffL) < (r14 & 0xffffffffL)) ? 1 : 0; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x5c68c; + pc=0x5bc8c; continue; } - case 0x5c6a0: + case 0x5bca0: r12 = r20 + 20; r15 = r19 << 2; r15 = r12 + r15; @@ -72585,31 +70054,28 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = ((r12 & 0xffffffffL) < (r15 & 0xffffffffL)) ? 1 : 0; r11 = r24 + r11; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5c804; - run_5c800(); return; + pc=0x5be04; + continue; } - case 0x5c6c4: - r9 = readPages[(r12+0)>>>12][((r12+0)>>>2)&0x3ff]; + case 0x5bcc4: + r9= page[(r12+0)>>>2]; r8 = r9 & 65535; if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x5c760; + pc=0x5bd60; continue; } r4 = r13 + r0; r3 = r24 + r0; r9 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5c6f0; + pc=0x5bcf0; continue; - case 0x5c6ec: + case 0x5bcec: r4 = r7 + r0; - case 0x5c6f0: - r6 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r7 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; + case 0x5bcf0: + r6= page[(r3+0)>>>2]; + r7= page[(r4+0)>>>2]; r5 = r6 & 65535; - { long hilo = (r5) * r8; hi = (int) (hilo >>> 32); lo = (int) hilo; } + { long hilo = (long)(r5) * ((long)r8); hi = (int) (hilo >>> 32); lo = (int) hilo; } r6 = r6 >>> 16; r10 = r7 & 65535; r7 = r7 >>> 16; @@ -72617,7 +70083,7 @@ public final class AcmeCrossAssembler extends UnixRuntime { r5 = lo; r5 = r5 + r10; r5 = r5 + r9; - { long hilo = (r6) * r8; hi = (int) (hilo >>> 32); lo = (int) hilo; } + { long hilo = (long)(r6) * ((long)r8); hi = (int) (hilo >>> 32); lo = (int) hilo; } r9 = r5 >>> 16; r5 = r5 & 65535; r6 = lo; @@ -72626,40 +70092,37 @@ public final class AcmeCrossAssembler extends UnixRuntime { r9 = r6 >>> 16; r6 = r6 << 16; r5 = r6 | r5; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r5; + page[(r4+0)>>>2] = r5; r5 = ((r3 & 0xffffffffL) < (r11 & 0xffffffffL)) ? 1 : 0; r7 = r4 + 4; if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x5c6ec; + pc=0x5bcec; continue; } - writePages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff] = r9; - r9 = readPages[(r12+0)>>>12][((r12+0)>>>2)&0x3ff]; - case 0x5c760: + page[(r4+4)>>>2] = r9; + r9= page[(r12+0)>>>2]; + case 0x5bd60: r9 = r9 >>> 16; if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x5c7f0; + pc=0x5bdf0; continue; } - r4 = readPages[(r13+0)>>>12][((r13+0)>>>2)&0x3ff]; + r4= page[(r13+0)>>>2]; r5 = r13 + r0; r7 = r4 + r0; r3 = r24 + r0; r10 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5c78c; + pc=0x5bd8c; continue; - case 0x5c788: + case 0x5bd88: r5 = r8 + r0; - case 0x5c78c: + case 0x5bd8c: addr=r3+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r6 = tmp; r7 = r7 >>> 16; - { long hilo = (r6) * r9; hi = (int) (hilo >>> 32); lo = (int) hilo; } + { long hilo = (long)(r6) * ((long)r9); hi = (int) (hilo >>> 32); lo = (int) hilo; } r4 = r4 & 65535; r3 = r3 + 4; r8 = r5 + 4; @@ -72668,13 +70131,13 @@ public final class AcmeCrossAssembler extends UnixRuntime { r6 = r6 + r10; r7 = r6 << 16; r4 = r7 | r4; - writePages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff] = r4; + page[(r5+0)>>>2] = r4; addr=r3+-4; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r4 = tmp; - r7 = readPages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff]; - { long hilo = (r4) * r9; hi = (int) (hilo >>> 32); lo = (int) hilo; } + r7= page[(r5+4)>>>2]; + { long hilo = (long)(r4) * ((long)r9); hi = (int) (hilo >>> 32); lo = (int) hilo; } r10 = r7 & 65535; r6 = r6 >>> 16; r4 = lo; @@ -72683,416 +70146,338 @@ public final class AcmeCrossAssembler extends UnixRuntime { r6 = ((r3 & 0xffffffffL) < (r11 & 0xffffffffL)) ? 1 : 0; r10 = r4 >>> 16; if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x5c788; + pc=0x5bd88; continue; } - writePages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff] = r4; - case 0x5c7f0: + page[(r5+4)>>>2] = r4; + case 0x5bdf0: r12 = r12 + 4; r3 = ((r12 & 0xffffffffL) < (r15 & 0xffffffffL)) ? 1 : 0; r13 = r13 + 4; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5c6c4; + pc=0x5bcc4; continue; } - case 0x5c800: - pc=0x5c800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5c800() throws ExecutionException { /* 0x5c800 - 0x5ca00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5c800: - case 0x5c804: + case 0x5be04: if(r16 <= 0) { - /* Next insn is delay slot */ - pc=0x5c844; + pc=0x5be44; continue; } - r4 = readPages[(r14+-4)>>>12][((r14+-4)>>>2)&0x3ff]; + r4= page[(r14+-4)>>>2]; r3 = r14 + -4; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5c838; + pc=0x5be38; continue; } - /* Next insn is delay slot */ - pc=0x5c844; + pc=0x5be44; continue; - case 0x5c824: + case 0x5be24: r3 = r3 + -4; - r4 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + r4= page[(r3+0)>>>2]; if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x5c844; + pc=0x5be44; continue; } - case 0x5c838: + case 0x5be38: r16 = r16 + -1; if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x5c824; + pc=0x5be24; continue; } - case 0x5c844: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r16; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + case 0x5be44: + r31= page[(r29+36)>>>2]; + page[(r2+16)>>>2] = r16; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; r29 = r29 + 40; - /* Next insn is delay slot */ pc=r31; return; - case 0x5ca00: - pc=0x5ca00; + case 0x5c000: + pc=0x5c000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_5ca00() throws ExecutionException { /* 0x5ca00 - 0x5cc00 */ + private final void run_5c000() throws ExecutionException { /* 0x5c000 - 0x5c800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x5ca00: + case 0x5c000: r29 = r29 + -40; r2 = r6 & 3; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; + page[(r29+32)>>>2] = r19; + page[(r29+28)>>>2] = r18; + page[(r29+20)>>>2] = r16; + page[(r29+36)>>>2] = r31; + page[(r29+24)>>>2] = r17; r19 = r4 + r0; r18 = r5 + r0; r16 = r6 + r0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5cb24; + pc=0x5c124; continue; } - case 0x5ca30: + case 0x5c030: r16 = r16 >> 2; if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x5cacc; + pc=0x5c0cc; continue; } - r17 = readPages[(r19+72)>>>12][((r19+72)>>>2)&0x3ff]; + r17= page[(r19+72)>>>2]; if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x5cb54; + pc=0x5c154; continue; } - case 0x5ca4c: + case 0x5c04c: r3 = r16 & 1; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5ca84; + pc=0x5c084; continue; } - case 0x5ca58: + case 0x5c058: r16 = r16 >> 1; if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x5cacc; + pc=0x5c0cc; continue; } - case 0x5ca64: - r2 = readPages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff]; + case 0x5c064: + r2= page[(r17+0)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5caf0; + pc=0x5c0f0; continue; } r17 = r2 + r0; - case 0x5ca78: + case 0x5c078: r3 = r16 & 1; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5ca58; + pc=0x5c058; continue; } - case 0x5ca84: + case 0x5c084: r4 = r19 + r0; r5 = r18 + r0; r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x5ca98; - pc=0x5c600; - run_5c600(); return; - case 0x5ca98: + r31=0x5c098; + pc=0x5bc00; + run_5b800(); return; + case 0x5c098: if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x5cb18; + pc=0x5c118; continue; } - r3 = readPages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff]; - r4 = readPages[(r19+76)>>>12][((r19+76)>>>2)&0x3ff]; + r3= page[(r18+4)>>>2]; + r4= page[(r19+76)>>>2]; r3 = r3 << 2; r3 = r4 + r3; - r4 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + r4= page[(r3+0)>>>2]; r16 = r16 >> 1; - writePages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff] = r4; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r18; + page[(r18+0)>>>2] = r4; + page[(r3+0)>>>2] = r18; r18 = r2 + r0; if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x5ca64; + pc=0x5c064; continue; } - case 0x5cacc: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + case 0x5c0cc: + r31= page[(r29+36)>>>2]; r2 = r18 + r0; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r29 = r29 + 40; - /* Next insn is delay slot */ pc=r31; return; - case 0x5caf0: + case 0x5c0f0: r5 = r17 + r0; r6 = r17 + r0; r4 = r19 + r0; - /* Next insn is delay slot */ - r31=0x5cb04; - pc=0x5c600; - run_5c600(); return; - case 0x5cb04: - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r2; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r0; + r31=0x5c104; + pc=0x5bc00; + run_5b800(); return; + case 0x5c104: + page[(r17+0)>>>2] = r2; + page[(r2+0)>>>2] = r0; r17 = r2 + r0; - /* Next insn is delay slot */ - pc=0x5ca78; + pc=0x5c078; continue; - case 0x5cb18: + case 0x5c118: r18 = r2 + r0; - /* Next insn is delay slot */ - pc=0x5ca58; + pc=0x5c058; continue; - case 0x5cb24: + case 0x5c124: r2 = r2 + -1; - r3 = 7 << 16; - r3 = r3 + 2084; + r3 = 6 << 16; + r3 = r3 + 15004; r2 = r2 << 2; r2 = r2 + r3; - r6 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; + r6= page[(r2+0)>>>2]; r7 = r0 + r0; - /* Next insn is delay slot */ - r31=0x5cb48; - pc=0x5bc00; - run_5bc00(); return; - case 0x5cb48: + r31=0x5c148; + pc=0x5b400; + run_5b000(); return; + case 0x5c148: r18 = r2 + r0; - /* Next insn is delay slot */ - pc=0x5ca30; + pc=0x5c030; continue; - case 0x5cb54: + case 0x5c154: r4 = r19 + r0; r5 = r0 + 1; - /* Next insn is delay slot */ - r31=0x5cb64; - pc=0x5b800; - run_5b800(); return; - case 0x5cb64: + r31=0x5c164; + pc=0x5b000; + run_5b000(); return; + case 0x5c164: r17 = r2 + r0; r2 = r0 + 625; - writePages[(r17+20)>>>12][((r17+20)>>>2)&0x3ff] = r2; + page[(r17+20)>>>2] = r2; r2 = r0 + 1; - writePages[(r17+16)>>>12][((r17+16)>>>2)&0x3ff] = r2; - writePages[(r19+72)>>>12][((r19+72)>>>2)&0x3ff] = r17; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x5ca4c; + page[(r17+16)>>>2] = r2; + page[(r19+72)>>>2] = r17; + page[(r17+0)>>>2] = r0; + pc=0x5c04c; continue; - case 0x5cc00: - pc=0x5cc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5cc00() throws ExecutionException { /* 0x5cc00 - 0x5ce00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5cc00: + case 0x5c200: r29 = r29 + -48; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; + page[(r29+28)>>>2] = r18; r18 = r5 + r0; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r20; - r20 = readPages[(r18+16)>>>12][((r18+16)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; + page[(r29+36)>>>2] = r20; + r20= page[(r18+16)>>>2]; + page[(r29+24)>>>2] = r17; r17 = r6 >> 5; r20 = r17 + r20; - r2 = readPages[(r18+8)>>>12][((r18+8)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; + r2= page[(r18+8)>>>2]; + page[(r29+20)>>>2] = r16; r16 = r20 + 1; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; + page[(r29+32)>>>2] = r19; r19 = r4 + r0; r4 = r2 < r16 ? 1 : 0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r21; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; + page[(r29+40)>>>2] = r21; + page[(r29+44)>>>2] = r31; r21 = r6 + r0; - r5 = readPages[(r5+4)>>>12][((r5+4)>>>2)&0x3ff]; + r5= page[(r5+4)>>>2]; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5cc64; + pc=0x5c264; continue; } - case 0x5cc50: + case 0x5c250: r2 = r2 << 1; r7 = r2 < r16 ? 1 : 0; r5 = r5 + 1; if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x5cc50; + pc=0x5c250; continue; } - case 0x5cc64: + case 0x5c264: r4 = r19 + r0; - /* Next insn is delay slot */ - r31=0x5cc70; - pc=0x5b800; - run_5b800(); return; - case 0x5cc70: + r31=0x5c270; + pc=0x5b000; + run_5b000(); return; + case 0x5c270: r7 = r2 + 20; if(r17 <= 0) { - /* Next insn is delay slot */ - pc=0x5cca0; + pc=0x5c2a0; continue; } r8 = r7 + r0; r3 = r0 + r0; - case 0x5cc84: + case 0x5c284: r8 = r8 + 4; r3 = r3 + 1; - writePages[(r8+-4)>>>12][((r8+-4)>>>2)&0x3ff] = r0; + page[(r8+-4)>>>2] = r0; if(r3 != r17) { - /* Next insn is delay slot */ - pc=0x5cc84; + pc=0x5c284; continue; } r3 = r3 << 2; r7 = r7 + r3; - case 0x5cca0: - r10 = readPages[(r18+16)>>>12][((r18+16)>>>2)&0x3ff]; + case 0x5c2a0: + r10= page[(r18+16)>>>2]; r3 = r18 + 20; r10 = r10 << 2; r6 = r21 & 31; r10 = r3 + r10; if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x5cd5c; + pc=0x5c35c; continue; } r4 = r0 + 32; r4 = r4 - r6; r9 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5ccd4; + pc=0x5c2d4; continue; - case 0x5ccd0: + case 0x5c2d0: r7 = r8 + r0; - case 0x5ccd4: - r11 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + case 0x5c2d4: + r11= page[(r3+0)>>>2]; r3 = r3 + 4; r11 = r11 << (r6&0x1f); r9 = r9 | r11; - writePages[(r7+0)>>>12][((r7+0)>>>2)&0x3ff] = r9; - r9 = readPages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff]; + page[(r7+0)>>>2] = r9; + r9= page[(r3+-4)>>>2]; r11 = ((r3 & 0xffffffffL) < (r10 & 0xffffffffL)) ? 1 : 0; r8 = r7 + 4; r9 = r9 >>> (r4&0x1f); if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x5ccd0; + pc=0x5c2d0; continue; } - writePages[(r7+4)>>>12][((r7+4)>>>2)&0x3ff] = r9; + page[(r7+4)>>>2] = r9; if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x5cd10; + pc=0x5c310; continue; } r16 = r20 + 2; - case 0x5cd10: - r3 = readPages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff]; - r4 = readPages[(r19+76)>>>12][((r19+76)>>>2)&0x3ff]; + case 0x5c310: + r3= page[(r18+4)>>>2]; + r4= page[(r19+76)>>>2]; r3 = r3 << 2; r3 = r4 + r3; - r4 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + r4= page[(r3+0)>>>2]; + r31= page[(r29+44)>>>2]; r16 = r16 + -1; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r16; - r21 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - writePages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff] = r4; - r20 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r18; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + page[(r2+16)>>>2] = r16; + r21= page[(r29+40)>>>2]; + page[(r18+0)>>>2] = r4; + r20= page[(r29+36)>>>2]; + page[(r3+0)>>>2] = r18; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x5cd5c: + case 0x5c35c: r3 = r3 + 4; - r6 = readPages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff]; + r6= page[(r3+-4)>>>2]; r7 = r7 + 4; - writePages[(r7+-4)>>>12][((r7+-4)>>>2)&0x3ff] = r6; + page[(r7+-4)>>>2] = r6; r6 = ((r3 & 0xffffffffL) < (r10 & 0xffffffffL)) ? 1 : 0; if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x5cd10; + pc=0x5c310; continue; } r3 = r3 + 4; - r6 = readPages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff]; + r6= page[(r3+-4)>>>2]; r7 = r7 + 4; - writePages[(r7+-4)>>>12][((r7+-4)>>>2)&0x3ff] = r6; + page[(r7+-4)>>>2] = r6; r6 = ((r3 & 0xffffffffL) < (r10 & 0xffffffffL)) ? 1 : 0; if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x5cd5c; + pc=0x5c35c; continue; } - /* Next insn is delay slot */ - pc=0x5cd10; + pc=0x5c310; continue; - case 0x5ce00: - pc=0x5ce00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5ce00() throws ExecutionException { /* 0x5ce00 - 0x5d000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5ce00: - r2 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; - r3 = readPages[(r5+16)>>>12][((r5+16)>>>2)&0x3ff]; + case 0x5c400: + r2= page[(r4+16)>>>2]; + r3= page[(r5+16)>>>2]; r2 = r2 - r3; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5ce78; + pc=0x5c478; continue; } r3 = r3 << 2; @@ -73100,109 +70485,86 @@ public final class AcmeCrossAssembler extends UnixRuntime { r5 = r5 + 20; r2 = r4 + r3; r5 = r5 + r3; - /* Next insn is delay slot */ - pc=0x5ce40; + pc=0x5c440; continue; - case 0x5ce34: + case 0x5c434: r3 = ((r4 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5ce74; + pc=0x5c474; continue; } - case 0x5ce40: + case 0x5c440: r2 = r2 + -4; r5 = r5 + -4; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r6 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; + r3= page[(r2+0)>>>2]; + r6= page[(r5+0)>>>2]; if(r3 == r6) { - /* Next insn is delay slot */ - pc=0x5ce34; + pc=0x5c434; continue; } r3 = ((r3 & 0xffffffffL) < (r6 & 0xffffffffL)) ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5ce80; + pc=0x5c480; continue; } r2 = r0 + 1; - /* Next insn is delay slot */ pc=r31; return; - case 0x5ce74: + case 0x5c474: r2 = r0 + r0; - case 0x5ce78: - /* Next insn is delay slot */ + case 0x5c478: pc=r31; return; - case 0x5ce80: + case 0x5c480: r2 = r0 + -1; - /* Next insn is delay slot */ pc=r31; return; - case 0x5d000: - pc=0x5d000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5d000() throws ExecutionException { /* 0x5d000 - 0x5d200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5d000: + case 0x5c600: r29 = r29 + -40; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; + page[(r29+28)>>>2] = r18; + page[(r29+20)>>>2] = r16; r18 = r4 + r0; r16 = r5 + r0; r4 = r5 + r0; r5 = r6 + r0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; + page[(r29+24)>>>2] = r17; + page[(r29+36)>>>2] = r31; + page[(r29+32)>>>2] = r19; r17 = r6 + r0; - /* Next insn is delay slot */ - r31=0x5d034; - pc=0x5ce00; - run_5ce00(); return; - case 0x5d034: + r31=0x5c634; + pc=0x5c400; + continue; + case 0x5c634: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5d1a4; + pc=0x5c7a4; continue; } if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x5d18c; + pc=0x5c78c; continue; } r19 = r0 + r0; - case 0x5d048: - r5 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; + case 0x5c648: + r5= page[(r16+4)>>>2]; r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x5d058; - pc=0x5b800; - run_5b800(); return; - case 0x5d058: - r10 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - r13 = readPages[(r17+16)>>>12][((r17+16)>>>2)&0x3ff]; + r31=0x5c658; + pc=0x5b000; + run_5b000(); return; + case 0x5c658: + r10= page[(r16+16)>>>2]; + r13= page[(r17+16)>>>2]; r4 = r16 + 20; r12 = r10 << 2; r7 = r17 + 20; r13 = r13 << 2; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r19; + page[(r2+12)>>>2] = r19; r12 = r4 + r12; r13 = r7 + r13; r3 = r2 + 20; r5 = r0 + r0; - case 0x5d084: - r8 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r9 = readPages[(r7+0)>>>12][((r7+0)>>>2)&0x3ff]; + case 0x5c684: + r8= page[(r4+0)>>>2]; + r9= page[(r7+0)>>>2]; r6 = r8 & 65535; r5 = r6 + r5; r11 = r9 & 65535; @@ -73220,22 +70582,20 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = r3 + 4; r8 = ((r7 & 0xffffffffL) < (r13 & 0xffffffffL)) ? 1 : 0; r4 = r4 + 4; - writePages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff] = r6; + page[(r3+-4)>>>2] = r6; if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x5d084; + pc=0x5c684; continue; } r7 = ((r4 & 0xffffffffL) < (r12 & 0xffffffffL)) ? 1 : 0; r9 = r3 + r0; r11 = r4 + r0; if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x5d148; + pc=0x5c748; continue; } - case 0x5d0f0: - r8 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; + case 0x5c6f0: + r8= page[(r4+0)>>>2]; r4 = r4 + 4; r6 = r8 & 65535; r6 = r6 + r5; @@ -73248,10 +70608,9 @@ public final class AcmeCrossAssembler extends UnixRuntime { r6 = r7 | r6; r3 = r3 + 4; r7 = ((r4 & 0xffffffffL) < (r12 & 0xffffffffL)) ? 1 : 0; - writePages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff] = r6; + page[(r3+-4)>>>2] = r6; if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x5d0f0; + pc=0x5c6f0; continue; } r3 = ~(r0 | r11); @@ -73260,295 +70619,80 @@ public final class AcmeCrossAssembler extends UnixRuntime { r3 = r3 + 1; r3 = r3 << 2; r3 = r9 + r3; - case 0x5d148: + case 0x5c748: r3 = r3 + -4; if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x5d168; + pc=0x5c768; continue; } - case 0x5d154: + case 0x5c754: r3 = r3 + -4; - r4 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; + r4= page[(r3+0)>>>2]; r10 = r10 + -1; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5d154; + pc=0x5c754; continue; } - case 0x5d168: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r10; + case 0x5c768: + r31= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + page[(r2+16)>>>2] = r10; r29 = r29 + 40; - /* Next insn is delay slot */ pc=r31; return; - case 0x5d18c: + case 0x5c78c: r2 = r16 + r0; r19 = r0 + 1; r16 = r17 + r0; r17 = r2 + r0; - /* Next insn is delay slot */ - pc=0x5d048; + pc=0x5c648; continue; - case 0x5d1a4: + case 0x5c7a4: r4 = r18 + r0; r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x5d1b4; - pc=0x5b800; - run_5b800(); return; - case 0x5d1b4: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + r31=0x5c7b4; + pc=0x5b000; + run_5b000(); return; + case 0x5c7b4: + r31= page[(r29+36)>>>2]; r3 = r0 + 1; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff] = r3; - writePages[(r2+20)>>>12][((r2+20)>>>2)&0x3ff] = r0; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + page[(r2+16)>>>2] = r3; + page[(r2+20)>>>2] = r0; r29 = r29 + 40; - /* Next insn is delay slot */ pc=r31; return; - case 0x5d200: - pc=0x5d200; + case 0x5c800: + pc=0x5c800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_5d200() throws ExecutionException { /* 0x5d200 - 0x5d400 */ + private final void run_5c800() throws ExecutionException { /* 0x5c800 - 0x5d000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x5d200: - r2 = f13; - r4 = 32752 << 16; - r2 = r2 & r4; - r3 = 64704 << 16; - r4 = r2 + r3; - if(r4 <= 0) { - /* Next insn is delay slot */ - pc=0x5d234; - continue; - } - r3 = r0 + r0; - f0 = r3; - r2 = r4 + r0; - f1 = r2; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5d234: - r4 = r0 - r4; - r4 = r4 >> 20; - r2 = r4 < 20 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5d290; - continue; - } - r5 = r4 < 51 ? 1 : 0; - r2 = r0 + r0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x5d280; - continue; - } - r5 = r0 + 51; - r4 = r5 - r4; - r5 = r0 + 1; - r4 = r5 << (r4&0x1f); - r3 = r4 + r0; - case 0x5d26c: - f0 = r3; - f1 = r2; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5d280: - r4 = r0 + 1; - r3 = r4 + r0; - /* Next insn is delay slot */ - pc=0x5d26c; - continue; - case 0x5d290: - r3 = r0 + r0; - r5 = 8 << 16; - f0 = r3; - r2 = r5 >> (r4&0x1f); - f1 = r2; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5d400: - pc=0x5d400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5d400() throws ExecutionException { /* 0x5d400 - 0x5d600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5d400: - r29 = r29 + -40; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - r16 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - r16 = r16 << 2; - r18 = r4 + 20; - r16 = r18 + r16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - r17 = readPages[(r16+-4)>>>12][((r16+-4)>>>2)&0x3ff]; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - r4 = r17 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - r20 = r5 + r0; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x5d440; - pc=0x5c000; - run_5c000(); return; - case 0x5d440: - r3 = r0 + 32; - r3 = r3 - r2; - writePages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff] = r3; - r3 = r2 < 11 ? 1 : 0; - r19 = r16 + -4; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5d4c0; - continue; - } - r3 = r0 + 11; - r3 = r3 - r2; - r5 = r17 >>> (r3&0x1f); - r4 = 16368 << 16; - r18 = ((r18 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; - r6 = r5 | r4; - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x5d544; - continue; - } - r4 = readPages[(r16+-8)>>>12][((r16+-8)>>>2)&0x3ff]; - r3 = r4 >>> (r3&0x1f); - case 0x5d488: - r2 = r2 + 21; - r17 = r17 << (r2&0x1f); - r7 = r3 | r17; - case 0x5d494: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - f0 = r7; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - f1 = r6; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5d4c0: - r3 = ((r18 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5d51c; - continue; - } - r3 = r2 + -11; - r4 = r0 + r0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5d530; - continue; - } - case 0x5d4dc: - r5 = r0 + 43; - r2 = r5 - r2; - r17 = r17 << (r3&0x1f); - r5 = 16368 << 16; - r17 = r17 | r5; - r18 = ((r18 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; - r5 = r4 >>> (r2&0x1f); - r6 = r17 | r5; - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x5d550; - continue; - } - r5 = readPages[(r19+-4)>>>12][((r19+-4)>>>2)&0x3ff]; - r3 = r4 << (r3&0x1f); - r2 = r5 >>> (r2&0x1f); - r7 = r2 | r3; - /* Next insn is delay slot */ - pc=0x5d494; - continue; - case 0x5d51c: - r3 = r2 + -11; - r19 = r16 + -8; - r4 = readPages[(r16+-8)>>>12][((r16+-8)>>>2)&0x3ff]; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5d4dc; - continue; - } - case 0x5d530: - r2 = 16368 << 16; - r6 = r17 | r2; - r7 = r4 + r0; - /* Next insn is delay slot */ - pc=0x5d494; - continue; - case 0x5d544: - r3 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5d488; - continue; - case 0x5d550: - r2 = r0 + r0; - r3 = r4 << (r3&0x1f); - r7 = r2 | r3; - /* Next insn is delay slot */ - pc=0x5d494; - continue; - case 0x5d600: - pc=0x5d600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5d600() throws ExecutionException { /* 0x5d600 - 0x5d800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5d600: + case 0x5c800: r29 = r29 + -48; r5 = r0 + 1; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r19; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r18; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r17; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r16; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; + page[(r29+40)>>>2] = r19; + page[(r29+36)>>>2] = r18; + page[(r29+32)>>>2] = r17; + page[(r29+28)>>>2] = r16; + page[(r29+44)>>>2] = r31; r16 = r6 + r0; r17 = r7 + r0; - /* Next insn is delay slot */ - r31=0x5d62c; - pc=0x5b800; - run_5b800(); return; - case 0x5d62c: + r31=0x5c82c; + pc=0x5b000; + run_5b000(); return; + case 0x5c82c: r18 = r2 + r0; r19 = r16 << 1; r2 = 15 << 16; @@ -73556,1766 +70700,191 @@ public final class AcmeCrossAssembler extends UnixRuntime { r19 = r19 >>> 21; r2 = r2 & r16; if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x5d654; + pc=0x5c854; continue; } r3 = 16 << 16; r2 = r2 | r3; - case 0x5d654: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; + case 0x5c854: + page[(r29+16)>>>2] = r2; if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x5d6f4; + pc=0x5c8f4; continue; } r4 = r29 + 20; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - /* Next insn is delay slot */ - r31=0x5d670; - pc=0x5c200; - run_5c200(); return; - case 0x5d670: + page[(r29+20)>>>2] = r17; + r31=0x5c870; + pc=0x5b800; + run_5b800(); return; + case 0x5c870: if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5d764; + pc=0x5c964; continue; } - r3 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - writePages[(r18+20)>>>12][((r18+20)>>>2)&0x3ff] = r3; - case 0x5d684: - writePages[(r18+24)>>>12][((r18+24)>>>2)&0x3ff] = r16; + r3= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; + page[(r18+20)>>>2] = r3; + case 0x5c884: + page[(r18+24)>>>2] = r16; r3 = r0 + 2; r16 = (r16&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; r16 = r3 - r16; - writePages[(r18+16)>>>12][((r18+16)>>>2)&0x3ff] = r16; + page[(r18+16)>>>2] = r16; if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x5d720; + pc=0x5c920; continue; } - case 0x5d6a0: - r3 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; + case 0x5c8a0: + r3= page[(r29+64)>>>2]; r2 = r2 + -1074; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; + page[(r3+0)>>>2] = r2; r2 = r16 << 2; r2 = r18 + r2; - r4 = readPages[(r2+16)>>>12][((r2+16)>>>2)&0x3ff]; + r4= page[(r2+16)>>>2]; r16 = r16 << 5; - /* Next insn is delay slot */ - r31=0x5d6c4; - pc=0x5c000; - run_5c000(); return; - case 0x5d6c4: - r3 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + r31=0x5c8c4; + pc=0x5b600; + run_5b000(); return; + case 0x5c8c4: + r3= page[(r29+68)>>>2]; + r31= page[(r29+44)>>>2]; r2 = r16 - r2; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; + page[(r3+0)>>>2] = r2; + r19= page[(r29+40)>>>2]; r2 = r18 + r0; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + r17= page[(r29+32)>>>2]; + r18= page[(r29+36)>>>2]; + r16= page[(r29+28)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x5d6f4: + case 0x5c8f4: r4 = r29 + 16; - /* Next insn is delay slot */ - r31=0x5d700; - pc=0x5c200; - run_5c200(); return; - case 0x5d700: - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + r31=0x5c900; + pc=0x5b800; + run_5b800(); return; + case 0x5c900: + r3= page[(r29+16)>>>2]; r2 = r2 + 32; - writePages[(r18+20)>>>12][((r18+20)>>>2)&0x3ff] = r3; + page[(r18+20)>>>2] = r3; r3 = r0 + 1; - writePages[(r18+16)>>>12][((r18+16)>>>2)&0x3ff] = r3; + page[(r18+16)>>>2] = r3; r16 = r0 + 1; if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x5d6a0; + pc=0x5c8a0; continue; } - case 0x5d720: - r3 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; + case 0x5c920: + r3= page[(r29+64)>>>2]; r19 = r19 + -1075; r19 = r19 + r2; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r19; + page[(r3+0)>>>2] = r19; r3 = r0 + 53; r2 = r3 - r2; - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r3 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; + r31= page[(r29+44)>>>2]; + r3= page[(r29+68)>>>2]; + r19= page[(r29+40)>>>2]; + page[(r3+0)>>>2] = r2; + r17= page[(r29+32)>>>2]; r2 = r18 + r0; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; + r16= page[(r29+28)>>>2]; + r18= page[(r29+36)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x5d764: - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + case 0x5c964: + r16= page[(r29+16)>>>2]; r3 = r0 - r2; - r4 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r4= page[(r29+20)>>>2]; r3 = r16 << (r3&0x1f); r3 = r3 | r4; r16 = r16 >>> (r2&0x1f); - writePages[(r18+20)>>>12][((r18+20)>>>2)&0x3ff] = r3; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - pc=0x5d684; + page[(r18+20)>>>2] = r3; + page[(r29+16)>>>2] = r16; + pc=0x5c884; continue; - case 0x5d800: - pc=0x5d800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5d800() throws ExecutionException { /* 0x5d800 - 0x5da00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5d800: + case 0x5ca00: + r2= page[(r6+8)>>>2]; r29 = r29 + -56; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r18; - r18 = r5 + r0; - r5 = r29 + 20; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r19; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r17; - r19 = r4 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r16; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f20; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f21; - /* Next insn is delay slot */ - r31=0x5d834; - pc=0x5d400; - run_5d400(); return; - case 0x5d834: - r4 = r18 + r0; - r5 = r29 + 16; - f20 = f0; - f21 = f1; - r17 = f0; - r16 = f1; - /* Next insn is delay slot */ - r31=0x5d850; - pc=0x5d400; - run_5d400(); return; - case 0x5d850: - r5 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r4 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r6 = readPages[(r19+16)>>>12][((r19+16)>>>2)&0x3ff]; - r4 = r5 - r4; - r5 = readPages[(r18+16)>>>12][((r18+16)>>>2)&0x3ff]; - r3 = f0; - r5 = r6 - r5; - r5 = r5 << 5; - r4 = r4 + r5; - r2 = f1; - if(r4 <= 0) { - /* Next insn is delay slot */ - pc=0x5d8c0; - continue; - } - r4 = r4 << 20; - f20 = r17; - r16 = r4 + r16; - f21 = r16; - case 0x5d894: - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - f20 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f21 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5d8c0: - r4 = r4 << 20; - f0 = r3; - r2 = r2 - r4; - f1 = r2; - /* Next insn is delay slot */ - pc=0x5d894; - continue; - case 0x5da00: - pc=0x5da00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5da00() throws ExecutionException { /* 0x5da00 - 0x5dc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5da00: - r2 = r4 < 24 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5da34; - continue; - } - f0 = readPages[(r28+-30964)>>>12][((r28+-30964)>>>2)&0x3ff]; - f2 = readPages[(r28+-30956)>>>12][((r28+-30956)>>>2)&0x3ff]; - f1 = readPages[(r28+-30968)>>>12][((r28+-30968)>>>2)&0x3ff]; - f3 = readPages[(r28+-30960)>>>12][((r28+-30960)>>>2)&0x3ff]; - case 0x5da1c: - r4 = r4 + -1; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x5da1c; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5da34: - r2 = 7 << 16; - r2 = r2 + 2176; - r4 = r4 << 3; - r4 = r4 + r2; - f0 = readPages[(r4+4)>>>12][((r4+4)>>>2)&0x3ff]; - f1 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5dc00: - pc=0x5dc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5dc00() throws ExecutionException { /* 0x5dc00 - 0x5de00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5dc00: - r7 = readPages[(r6+16)>>>12][((r6+16)>>>2)&0x3ff]; - r5 = r5 + -1; - r2 = r6 + 20; - r8 = r5 >> 5; - r7 = r7 << 2; - r8 = r8 + 1; - r7 = r2 + r7; - r8 = r8 << 2; - r3 = ((r2 & 0xffffffffL) < (r7 & 0xffffffffL)) ? 1 : 0; - r8 = r4 + r8; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5dc7c; - continue; - } - r3 = r4 + r0; - case 0x5dc34: - r2 = r2 + 4; - r5 = readPages[(r2+-4)>>>12][((r2+-4)>>>2)&0x3ff]; - r3 = r3 + 4; - writePages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff] = r5; - r5 = ((r2 & 0xffffffffL) < (r7 & 0xffffffffL)) ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x5dc34; - continue; - } - r2 = r7 - r6; - r2 = r2 + -21; - r2 = r2 >>> 2; - r2 = r2 + 1; - r2 = r2 << 2; - r4 = r4 + r2; - r2 = ((r4 & 0xffffffffL) < (r8 & 0xffffffffL)) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5dc88; - continue; - } - case 0x5dc74: - r4 = r4 + 4; - writePages[(r4+-4)>>>12][((r4+-4)>>>2)&0x3ff] = r0; - case 0x5dc7c: - r2 = ((r4 & 0xffffffffL) < (r8 & 0xffffffffL)) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5dc74; - continue; - } - case 0x5dc88: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5de00: - pc=0x5de00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5de00() throws ExecutionException { /* 0x5de00 - 0x5e000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5de00: - r3 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; - r2 = r5 >> 5; - r6 = r4 + 20; - r4 = r3 < r2 ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5de74; - continue; - } - r3 = r3 << 2; - r3 = r6 + r3; - case 0x5de20: - r2 = ((r6 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5de68; - continue; - } - r2 = r3 + -4; - r3 = readPages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5de5c; - continue; - } - /* Next insn is delay slot */ - pc=0x5deac; - continue; - case 0x5de48: - r2 = r2 + -4; - r3 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5deac; - continue; - } - case 0x5de5c: - r3 = ((r6 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5de48; - continue; - } - case 0x5de68: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5de74: - r3 = r2 < r3 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x5deb8; - continue; - } - r2 = r2 << 2; - r5 = r5 & 31; - r3 = r6 + r2; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x5de20; - continue; - } - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r2 >>> (r5&0x1f); - r5 = r4 << (r5&0x1f); - if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x5de20; - continue; - } - case 0x5deac: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5deb8: - r2 = r2 << 2; - r3 = r6 + r2; - /* Next insn is delay slot */ - pc=0x5de20; - continue; - case 0x5e000: - pc=0x5e000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5e000() throws ExecutionException { /* 0x5e000 - 0x5e200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5e000: - r2 = readPages[(r4+732)>>>12][((r4+732)>>>2)&0x3ff]; - r29 = r29 + -24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - r16 = r4 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5e034; - continue; - } - case 0x5e01c: - r2 = r0 + r0; - case 0x5e020: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5e034: - r5 = r0 + 128; - /* Next insn is delay slot */ - r31=0x5e040; - pc=0x3ec00; - run_3ec00(); return; - case 0x5e040: - writePages[(r16+732)>>>12][((r16+732)>>>2)&0x3ff] = r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5e080; - continue; - } - r3 = r0 + r0; - r4 = r0 + 128; - /* Next insn is delay slot */ - pc=0x5e064; - continue; - case 0x5e05c: - r2 = readPages[(r16+732)>>>12][((r16+732)>>>2)&0x3ff]; - case 0x5e064: - r2 = r2 + r3; - r3 = r3 + 4; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r0; - if(r3 != r4) { - /* Next insn is delay slot */ - pc=0x5e05c; - continue; - } - /* Next insn is delay slot */ - pc=0x5e01c; - continue; - case 0x5e080: - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x5e020; - continue; - case 0x5e200: - pc=0x5e200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5e200() throws ExecutionException { /* 0x5e200 - 0x5e400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5e200: - r29 = r29 + -32; - r2 = (r5&0xffffffffL) < (32&0xffffffffL) ? 1 : 0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r16 = r4 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5e250; - continue; - } - r2 = readPages[(r4+732)>>>12][((r4+732)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5e270; - continue; - } - case 0x5e22c: - r5 = r5 << 2; - r5 = r2 + r5; - r2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - writePages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff] = r6; - case 0x5e23c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5e250: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r0 + 22; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r2; - r2 = r0 + -1; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5e270: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r5; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - r31=0x5e280; - pc=0x5e000; - run_5e000(); return; - case 0x5e280: - r5 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r6 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5e29c; - continue; - } - r2 = readPages[(r16+732)>>>12][((r16+732)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x5e22c; - continue; - case 0x5e29c: - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x5e23c; - continue; - case 0x5e400: - pc=0x5e400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5e400() throws ExecutionException { /* 0x5e400 - 0x5e600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5e400: - r29 = r29 + -32; - r2 = (r5&0xffffffffL) < (32&0xffffffffL) ? 1 : 0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r17 = r4 + r0; - r16 = r5 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5e4f0; - continue; - } - r2 = readPages[(r4+732)>>>12][((r4+732)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5e4c0; - continue; - } - r3 = r5 << 2; - r3 = r2 + r3; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5e4c0; - continue; - } - r4 = r0 + 1; - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x5e4b4; - continue; - } - r4 = r0 + -1; - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x5e490; - continue; - } - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r0; - r4 = r5 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x5e474; - return; - case 0x5e474: - r2 = r0 + r0; - case 0x5e478: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5e490: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r0 + 22; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r2; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r2 = r0 + 1; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5e4b4: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5e478; - continue; - case 0x5e4c0: - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x5e4cc; - pc=0x48a20; - run_48a00(); return; - case 0x5e4cc: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r4 = r17 + r0; - r6 = r16 + r0; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r5 = r2 + r0; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x489e0; - run_48800(); return; - case 0x5e4f0: - r2 = r0 + 22; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r2; - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x5e478; - continue; - case 0x5e600: - pc=0x5e600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5e600() throws ExecutionException { /* 0x5e600 - 0x5e800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5e600: - r2 = (r5&0xffffffffL) < (32&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5e6e0; - continue; - } - r2 = readPages[(r4+732)>>>12][((r4+732)>>>2)&0x3ff]; - r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r16 = r4 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5e6bc; - continue; - } - case 0x5e628: - r3 = r5 << 2; - r3 = r2 + r3; - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5e6b0; - continue; - } - r4 = r0 + -1; - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x5e698; - continue; - } - r4 = r0 + 1; - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x5e680; - continue; - } - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r0; - r4 = r5 + r0; - /* Next insn is delay slot */ - pc=r2; - r31=0x5e668; - return; - case 0x5e668: - r2 = r0 + r0; - case 0x5e66c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5e680: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r2 = r0 + 3; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5e698: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r2 = r0 + 2; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5e6b0: - r2 = r0 + 1; - /* Next insn is delay slot */ - pc=0x5e66c; - continue; - case 0x5e6bc: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - r31=0x5e6c8; - pc=0x5e000; - run_5e000(); return; - case 0x5e6c8: - r5 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5e6ec; - continue; - } - r2 = readPages[(r16+732)>>>12][((r16+732)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x5e628; - continue; - case 0x5e6e0: - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5e6ec: - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x5e66c; - continue; - case 0x5e800: - pc=0x5e800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5e800() throws ExecutionException { /* 0x5e800 - 0x5ea00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5e800: - r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x5e400; - run_5e400(); return; - case 0x5ea00: - pc=0x5ea00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5ea00() throws ExecutionException { /* 0x5ea00 - 0x5ec00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5ea00: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x5e200; - run_5e200(); return; - case 0x5ec00: - pc=0x5ec00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5ec00() throws ExecutionException { /* 0x5ec00 - 0x5ee00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5ec00: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x5e000; - run_5e000(); return; - case 0x5ee00: - pc=0x5ee00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5ee00() throws ExecutionException { /* 0x5ee00 - 0x5f000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5ee00: - r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x5e600; - run_5e600(); return; - case 0x5f000: - pc=0x5f000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5f000() throws ExecutionException { /* 0x5f000 - 0x5f200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5f000: - r29 = r29 + -136; - r3 = r0 + 516; - writePages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff] = r31; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r16; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r6; - r16 = r5 + r0; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r7; - addr=r29+28; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r4; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - r31=0x5f030; - pc=0x10268; - run_10200(); return; - case 0x5f030: - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - r2 = 4 << 16; - r2 = r2 + 9216; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r2; - r7 = r29 + 144; - r2 = r0 + -1; - r5 = r29 + 16; - r6 = r16 + r0; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r0; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r0; - addr=r29+30; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x5f070; - pc=0x61400; - run_61400(); return; - case 0x5f070: - r31 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; - r16 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r29 = r29 + 136; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5f200: - pc=0x5f200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5f200() throws ExecutionException { /* 0x5f200 - 0x5f400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5f200: - r29 = r29 + -144; - r2 = r0 + 516; - writePages[(r29+136)>>>12][((r29+136)>>>2)&0x3ff] = r16; - r16 = r4 + r0; - r4 = r5 + r0; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r31; - writePages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff] = r7; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r5; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r5; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r6; - addr=r29+28; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x5f234; - pc=0x10268; - run_10200(); return; - case 0x5f234: - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - r2 = 4 << 16; - r2 = r2 + 9216; - r6 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r2; - r7 = r29 + 156; - r2 = r0 + -1; - r4 = r16 + r0; - r5 = r29 + 16; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r0; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r0; - addr=r29+30; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x5f274; - pc=0x61400; - run_61400(); return; - case 0x5f274: - r31 = readPages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff]; - r16 = readPages[(r29+136)>>>12][((r29+136)>>>2)&0x3ff]; - r29 = r29 + 144; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5f400: - pc=0x5f400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5f400() throws ExecutionException { /* 0x5f400 - 0x5f600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5f400: - r2 = r4 + r0; - r3 = r4 + r0; - /* Next insn is delay slot */ - pc=0x5f434; - continue; - case 0x5f410: - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x5f5cc; - continue; - } - r5 = r5 + 1; - addr=r5+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r7 = tmp; - r3 = r3 + 1; - addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r7&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r6 = r6 + -1; - if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x5f5d4; - continue; - } - case 0x5f434: - r7 = r5 & 3; - if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x5f410; - continue; - } - r4 = (r6&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; - r12 = r6 + r0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x5f5f8; - continue; - } - r6 = r6 & 3; - r12 = r12 - r6; - /* Next insn is delay slot */ - pc=0x5f494; - continue; - case 0x5f460: - addr=r3+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r9&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x5f4c0; - continue; - } - addr=r3+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r10&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r10 == r0) { - /* Next insn is delay slot */ - pc=0x5f4c8; - continue; - } - addr=r3+3; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r11&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r11 == r0) { - /* Next insn is delay slot */ - pc=0x5f4d0; - continue; - } - r3 = r3 + 4; - if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x5f5f8; - continue; - } - r12 = r7 + r0; - case 0x5f494: - addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r8 = tmp; - addr=r5+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r9 = tmp; - addr=r5+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r10 = tmp; - addr=r5+3; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r11 = tmp; - r7 = r12 + -4; - r5 = r5 + 4; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r8&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x5f460; - continue; - } - r7 = r12 + -3; - r3 = r3 + -1; - case 0x5f4c0: - r7 = r7 + 1; - r3 = r3 + -1; - case 0x5f4c8: - r7 = r7 + 1; - r3 = r3 + -1; - case 0x5f4d0: - r6 = r7 + r6; - r3 = r3 + 4; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x5f5c4; - continue; - } - r4 = r3 & 3; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x5f500; - continue; - } - /* Next insn is delay slot */ - pc=0x5f51c; - continue; - case 0x5f4f4: - r5 = r3 & 3; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x5f51c; - continue; - } - case 0x5f500: - r3 = r3 + 1; - r6 = r6 + -1; - addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x5f4f4; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5f51c: - r4 = (r6&0xffffffffL) < (16&0xffffffffL) ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x5f668; - run_5f600(); return; - } - r5 = r3 + r0; - r7 = r6 + r0; - case 0x5f530: - r7 = r7 + -16; - r5 = r5 + 16; - r8 = (r7&0xffffffffL) < (16&0xffffffffL) ? 1 : 0; - writePages[(r5+-16)>>>12][((r5+-16)>>>2)&0x3ff] = r0; - writePages[(r5+-12)>>>12][((r5+-12)>>>2)&0x3ff] = r0; - writePages[(r5+-8)>>>12][((r5+-8)>>>2)&0x3ff] = r0; - writePages[(r5+-4)>>>12][((r5+-4)>>>2)&0x3ff] = r0; - if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x5f530; - continue; - } - r5 = r6 + -16; - r5 = r5 >>> 4; - r5 = r5 + 1; - r5 = r5 << 4; - r4 = r6 & 15; - r3 = r3 + r5; - case 0x5f56c: - r5 = (r4&0xffffffffL) < (8&0xffffffffL) ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x5f588; - continue; - } - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r0; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r0; - r4 = r4 + -8; - r3 = r3 + 8; - case 0x5f588: - r5 = (r4&0xffffffffL) < (4&0xffffffffL) ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x5f5a0; - continue; - } - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r0; - r4 = r4 + -4; - r3 = r3 + 4; - case 0x5f5a0: - r5 = (r4&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x5f5b8; - continue; - } - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r0&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r4 = r4 + -2; - r3 = r3 + 2; - case 0x5f5b8: - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5f5c4; - continue; - } - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x5f5c4: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5f5cc: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5f5d4: - r6 = r3 + r6; - if(r3 == r6) { - /* Next insn is delay slot */ - pc=0x5f5c4; - continue; - } - case 0x5f5e0: - r3 = r3 + 1; - addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r3 != r6) { - /* Next insn is delay slot */ - pc=0x5f5e0; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5f5f8: - r6 = r3 + r6; - if(r3 == r6) { - /* Next insn is delay slot */ - pc=0x5f5c4; - continue; - } - case 0x5f600: - pc=0x5f600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5f600() throws ExecutionException { /* 0x5f600 - 0x5f800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5f600: - addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r8 = r5 + 1; - r7 = r3 + 1; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = r8 + r0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5f640; - continue; - } - case 0x5f620: - if(r7 == r6) { - /* Next insn is delay slot */ - pc=0x5f660; - continue; - } - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r7 = r7 + 1; - addr=r7+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = r3 + 1; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x5f620; - continue; - } - case 0x5f640: - if(r6 == r7) { - /* Next insn is delay slot */ - pc=0x5f5c4; - run_5f400(); return; - } - case 0x5f648: - r7 = r7 + 1; - addr=r7+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r7 != r6) { - /* Next insn is delay slot */ - pc=0x5f648; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5f660: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5f668: - r4 = r6 + r0; - /* Next insn is delay slot */ - pc=0x5f56c; - run_5f400(); return; - case 0x5f800: - pc=0x5f800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5f800() throws ExecutionException { /* 0x5f800 - 0x5fa00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5f800: - r12 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - r2 = r5 + r0; - /* Next insn is delay slot */ - pc=0x5f814; - continue; - case 0x5f810: - r2 = r3 + r0; - case 0x5f814: - r3 = r2 + 1; - addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r8 = tmp; - r9 = r12 + r8; - addr=r9+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r9 = tmp; - r9 = r9 & 8; - if(r9 != r0) { - /* Next insn is delay slot */ - pc=0x5f810; - continue; - } - r9 = r0 + 45; - if(r8 == r9) { - /* Next insn is delay slot */ - pc=0x5f9cc; - continue; - } - r9 = r0 + 43; - if(r8 == r9) { - /* Next insn is delay slot */ - pc=0x5f9e0; - continue; - } - r25 = r0 + r0; - case 0x5f854: - r2 = r0 + -17; - r2 = r7 & r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5f97c; - continue; - } - r24 = r0 + -1; - if(r7 != r0) { - /* Next insn is delay slot */ - if(r7!=0) { - hi = (int)((r24 & 0xffffffffL) % (r7 & 0xffffffffL)); lo = (int)((r24 & 0xffffffffL) / (r7 & 0xffffffffL)); - } - pc=0x5f874; - continue; - } - if(r7!=0) { - hi = (int)((r24 & 0xffffffffL) % (r7 & 0xffffffffL)); lo = (int)((r24 & 0xffffffffL) / (r7 & 0xffffffffL)); - } - throw new ExecutionException("Break"); - case 0x5f874: - r15 = r7 + r0; - r24 = hi; - r13 = lo; - case 0x5f880: - r10 = r0 + r0; - r2 = r0 + r0; - r14 = r0 + 1; - /* Next insn is delay slot */ - pc=0x5f8dc; - continue; - case 0x5f894: - r8 = r8 + -48; - r9 = r8 < r7 ? 1 : 0; - if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x5f91c; - continue; - } - case 0x5f8a4: - if(r10 < 0) { - /* Next insn is delay slot */ - pc=0x5f958; - continue; - } - r9 = ((r13 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r9 != r0) { - /* Next insn is delay slot */ - pc=0x5f958; - continue; - } - if(r2 == r13) { - /* Next insn is delay slot */ - pc=0x5f94c; - continue; - } - case 0x5f8c0: - { long hilo = (r2) * r15; hi = (int) (hilo >>> 32); lo = (int) hilo; } - r10 = r0 + 1; - r2 = lo; - r2 = r8 + r2; - case 0x5f8d0: - r3 = r3 + 1; - addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r8 = tmp; - case 0x5f8dc: - r9 = r12 + r8; - addr=r9+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r9 = tmp; - r11 = r9 & 4; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x5f894; - continue; - } - r9 = r9 & 3; - if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x5f91c; - continue; - } - if(r9 == r14) { - /* Next insn is delay slot */ - pc=0x5f964; - continue; - } - r9 = r0 + 87; - r8 = r8 - r9; - case 0x5f910: - r9 = r8 < r7 ? 1 : 0; - if(r9 != r0) { - /* Next insn is delay slot */ - pc=0x5f8a4; - continue; - } - case 0x5f91c: - if(r10 < 0) { - /* Next insn is delay slot */ - pc=0x5f9b8; - continue; - } - if(r25 != r0) { - /* Next insn is delay slot */ - pc=0x5f9ac; - continue; - } - case 0x5f92c: - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x5f974; - continue; - } - if(r10 == r0) { - /* Next insn is delay slot */ - pc=0x5f940; - continue; - } - r5 = r3 + -1; - case 0x5f940: - writePages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5f94c: - r9 = r24 < r8 ? 1 : 0; - if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x5f8c0; - continue; - } - case 0x5f958: - r10 = r0 + -1; - /* Next insn is delay slot */ - pc=0x5f8d0; - continue; - case 0x5f964: - r9 = r0 + 55; - r8 = r8 - r9; - /* Next insn is delay slot */ - pc=0x5f910; - continue; - case 0x5f974: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x5f97c: - r2 = r0 + 48; - if(r8 == r2) { - /* Next insn is delay slot */ - pc=0x5f9f4; - continue; - } - if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x5fa50; - run_5fa00(); return; - } - r13 = 6553 << 16; - r24 = r0 + 5; - r13 = r13 | 39321; - r15 = r0 + 10; - r7 = r0 + 10; - /* Next insn is delay slot */ - pc=0x5f880; - continue; - case 0x5f9ac: - r2 = r0 - r2; - /* Next insn is delay slot */ - pc=0x5f92c; - continue; - case 0x5f9b8: - r2 = r0 + 34; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r2; - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x5f92c; - continue; - case 0x5f9cc: - r3 = r2 + 2; - addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r8 = tmp; - r25 = r0 + 1; - /* Next insn is delay slot */ - pc=0x5f854; - continue; - case 0x5f9e0: - r3 = r2 + 2; - addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r8 = tmp; - r25 = r0 + r0; - /* Next insn is delay slot */ - pc=0x5f854; - continue; - case 0x5f9f4: - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r9 = tmp; - r2 = r0 + 88; - r9 = r9 & 223; - case 0x5fa00: - pc=0x5fa00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5fa00() throws ExecutionException { /* 0x5fa00 - 0x5fc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5fa00: - if(r9 == r2) { - /* Next insn is delay slot */ - pc=0x5fa2c; - continue; - } - if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x5fa50; - continue; - } - r13 = 8191 << 16; - r24 = r0 + 7; - r13 = r13 | 65535; - r15 = r0 + 8; - r7 = r0 + 8; - /* Next insn is delay slot */ - pc=0x5f880; - run_5f800(); return; - case 0x5fa2c: - r13 = 4095 << 16; - addr=r3+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r8 = tmp; - r24 = r0 + 15; - r3 = r3 + 2; - r13 = r13 | 65535; - r15 = r0 + 16; - r7 = r0 + 16; - /* Next insn is delay slot */ - pc=0x5f880; - run_5f800(); return; - case 0x5fa50: - r13 = r0 + -1; - if(r7 != r0) { - /* Next insn is delay slot */ - if(r7!=0) { - hi = (int)((r13 & 0xffffffffL) % (r7 & 0xffffffffL)); lo = (int)((r13 & 0xffffffffL) / (r7 & 0xffffffffL)); - } - pc=0x5fa60; - continue; - } - if(r7!=0) { - hi = (int)((r13 & 0xffffffffL) % (r7 & 0xffffffffL)); lo = (int)((r13 & 0xffffffffL) / (r7 & 0xffffffffL)); - } - throw new ExecutionException("Break"); - case 0x5fa60: - r15 = r7 + r0; - r24 = hi; - r13 = lo; - /* Next insn is delay slot */ - pc=0x5f880; - run_5f800(); return; - case 0x5fc00: - pc=0x5fc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5fc00() throws ExecutionException { /* 0x5fc00 - 0x5fe00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5fc00: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x5f800; - run_5f800(); return; - case 0x5fe00: - pc=0x5fe00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_5fe00() throws ExecutionException { /* 0x5fe00 - 0x60000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x5fe00: - r2 = readPages[(r6+8)>>>12][((r6+8)>>>2)&0x3ff]; - r29 = r29 + -56; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r23; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r30; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r22; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r21; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; + page[(r29+44)>>>2] = r23; + page[(r29+24)>>>2] = r18; + page[(r29+52)>>>2] = r31; + page[(r29+48)>>>2] = r30; + page[(r29+40)>>>2] = r22; + page[(r29+36)>>>2] = r21; + page[(r29+32)>>>2] = r20; + page[(r29+28)>>>2] = r19; + page[(r29+20)>>>2] = r17; + page[(r29+16)>>>2] = r16; r23 = r6 + r0; - r18 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; + r18= page[(r6+0)>>>2]; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5fffc; + pc=0x5cbfc; continue; } r20 = r4 + r0; - r3 = readPages[(r5+8)>>>12][((r5+8)>>>2)&0x3ff]; - r4 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; + r3= page[(r5+8)>>>2]; + r4= page[(r5+0)>>>2]; r17 = r5 + r0; r30 = r0 + r0; r16 = r0 + r0; - case 0x5fe58: + case 0x5ca58: if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x5fec4; + pc=0x5cac4; continue; } r2 = ((r16 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; r19 = r3 + r0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5fed8; + pc=0x5cad8; continue; } addr=r17+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r3 = r2 & 1152; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x5fee8; + pc=0x5cae8; continue; } r22 = r19 + r0; - case 0x5fe88: + case 0x5ca88: r5 = r30 + r0; r6 = r22 + r0; - /* Next insn is delay slot */ - r31=0x5fe98; - pc=0x5b600; - run_5b600(); return; - case 0x5fe98: - r3 = readPages[(r17+8)>>>12][((r17+8)>>>2)&0x3ff]; - r4 = readPages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff]; - r2 = readPages[(r23+8)>>>12][((r23+8)>>>2)&0x3ff]; + r31=0x5ca98; + pc=0x5ae00; + run_5a800(); return; + case 0x5ca98: + r3= page[(r17+8)>>>2]; + r4= page[(r17+0)>>>2]; + r2= page[(r23+8)>>>2]; r3 = r3 - r19; r4 = r4 + r22; r2 = r2 - r16; - writePages[(r17+8)>>>12][((r17+8)>>>2)&0x3ff] = r3; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r4; - writePages[(r23+8)>>>12][((r23+8)>>>2)&0x3ff] = r2; + page[(r17+8)>>>2] = r3; + page[(r17+0)>>>2] = r4; + page[(r23+8)>>>2] = r2; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5fffc; + pc=0x5cbfc; continue; } - case 0x5fec4: - r30 = readPages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff]; - r16 = readPages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff]; + case 0x5cac4: + r30= page[(r18+0)>>>2]; + r16= page[(r18+4)>>>2]; r18 = r18 + 8; - /* Next insn is delay slot */ - pc=0x5fe58; + pc=0x5ca58; continue; - case 0x5fed8: + case 0x5cad8: r19 = r16 + r0; r22 = r16 + r0; - /* Next insn is delay slot */ - pc=0x5fe88; + pc=0x5ca88; continue; - case 0x5fee8: - r5 = readPages[(r17+16)>>>12][((r17+16)>>>2)&0x3ff]; + case 0x5cae8: + r5= page[(r17+16)>>>2]; r6 = r16 + 1; r21 = r4 - r5; - r4 = readPages[(r17+20)>>>12][((r17+20)>>>2)&0x3ff]; + r4= page[(r17+20)>>>2]; r6 = r6 + r21; r22 = r4 << 1; r4 = r22 + r4; @@ -75324,16401 +70893,917 @@ public final class AcmeCrossAssembler extends UnixRuntime { r22 = r22 >> 1; r4 = ((r22 & 0xffffffffL) < (r6 & 0xffffffffL)) ? 1 : 0; if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x5ff98; + pc=0x5cb98; continue; } r2 = r2 & 1024; r22 = r6 + r0; r4 = r20 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5ffac; + pc=0x5cbac; continue; } - case 0x5ff30: + case 0x5cb30: r5 = r6 + r0; - /* Next insn is delay slot */ - r31=0x5ff3c; - pc=0x3ec00; - run_3ec00(); return; - case 0x5ff3c: + r31=0x5cb3c; + pc=0x4e200; + run_4e000(); return; + case 0x5cb3c: r19 = r2 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x5ffd0; + pc=0x5cbd0; continue; } - r5 = readPages[(r17+16)>>>12][((r17+16)>>>2)&0x3ff]; + r5= page[(r17+16)>>>2]; r4 = r2 + r0; r6 = r21 + r0; - /* Next insn is delay slot */ - r31=0x5ff5c; - pc=0x48fdc; - run_48e00(); return; - case 0x5ff5c: + r31=0x5cb5c; + pc=0x56fe0; + run_56800(); return; + case 0x5cb5c: addr=r17+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r3 = r0 + -1153; r2 = r2 & r3; r2 = r2 | 128; addr=r17+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x5ff70: + page[(addr)>>>2] = tmp; + case 0x5cb70: r4 = r19 + r21; - writePages[(r17+20)>>>12][((r17+20)>>>2)&0x3ff] = r22; + page[(r17+20)>>>2] = r22; r22 = r22 - r21; - writePages[(r17+16)>>>12][((r17+16)>>>2)&0x3ff] = r19; - writePages[(r17+8)>>>12][((r17+8)>>>2)&0x3ff] = r22; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r4; + page[(r17+16)>>>2] = r19; + page[(r17+8)>>>2] = r22; + page[(r17+0)>>>2] = r4; r19 = r16 + r0; r22 = r16 + r0; - /* Next insn is delay slot */ - pc=0x5fe88; + pc=0x5ca88; continue; - case 0x5ff98: + case 0x5cb98: r2 = r2 & 1024; r6 = r22 + r0; r4 = r20 + r0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5ff30; + pc=0x5cb30; continue; } - case 0x5ffac: - /* Next insn is delay slot */ - r31=0x5ffb4; - pc=0x40800; - run_40800(); return; - case 0x5ffb4: + case 0x5cbac: + r31=0x5cbb4; + pc=0x4fc00; + run_4f800(); return; + case 0x5cbb4: r19 = r2 + r0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x5ff70; + pc=0x5cb70; continue; } - r5 = readPages[(r17+16)>>>12][((r17+16)>>>2)&0x3ff]; + r5= page[(r17+16)>>>2]; r4 = r20 + r0; - /* Next insn is delay slot */ - r31=0x5ffd0; - pc=0x3ca00; - run_3ca00(); return; - case 0x5ffd0: + r31=0x5cbd0; + pc=0x4c400; + run_4c000(); return; + case 0x5cbd0: r2 = r0 + 12; - writePages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff] = r2; + page[(r20+0)>>>2] = r2; addr=r17+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r2 = r2 | 64; addr=r17+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r23+8)>>>12][((r23+8)>>>2)&0x3ff] = r0; - writePages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff] = r0; + page[(addr)>>>2] = tmp; + page[(r23+8)>>>2] = r0; + page[(r23+4)>>>2] = r0; r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x60000; - run_60000(); return; - case 0x5fffc: - writePages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff] = r0; - case 0x60000: - pc=0x60000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_60000() throws ExecutionException { /* 0x60000 - 0x60200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x60000: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r30 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r23 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + pc=0x5cc00; + continue; + case 0x5cbfc: + page[(r23+4)>>>2] = r0; + case 0x5cc00: + r31= page[(r29+52)>>>2]; + r30= page[(r29+48)>>>2]; + r23= page[(r29+44)>>>2]; + r22= page[(r29+40)>>>2]; + r21= page[(r29+36)>>>2]; + r20= page[(r29+32)>>>2]; + r19= page[(r29+28)>>>2]; + r18= page[(r29+24)>>>2]; + r17= page[(r29+20)>>>2]; + r16= page[(r29+16)>>>2]; r29 = r29 + 56; - /* Next insn is delay slot */ pc=r31; return; - case 0x60200: - pc=0x60200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_60200() throws ExecutionException { /* 0x60200 - 0x60400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x60200: - addr=r5+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r29 = r29 + -224; - r2 = r2 & 128; - writePages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff] = r17; - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = r16; - writePages[(r29+220)>>>12][((r29+220)>>>2)&0x3ff] = r31; - writePages[(r29+216)>>>12][((r29+216)>>>2)&0x3ff] = r30; - writePages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff] = r23; - writePages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff] = r22; - writePages[(r29+204)>>>12][((r29+204)>>>2)&0x3ff] = r21; - writePages[(r29+200)>>>12][((r29+200)>>>2)&0x3ff] = r20; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = r19; - writePages[(r29+192)>>>12][((r29+192)>>>2)&0x3ff] = r18; - writePages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff] = r4; - r16 = r5 + r0; - r17 = r6 + r0; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r7; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6025c; - continue; - } - r2 = readPages[(r5+16)>>>12][((r5+16)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x611e4; - run_61000(); return; - } - case 0x6025c: - r5 = r29 + 119; - r21 = r29 + 120; - r4 = r29 + 16; - r2 = 7 << 16; - r6 = r21 - r5; - r18 = readPages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff]; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r4; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r0; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r0; - writePages[(r29+168)>>>12][((r29+168)>>>2)&0x3ff] = r0; - writePages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff] = r0; - r3 = r4 + r0; - r22 = r2 + 2748; - writePages[(r29+136)>>>12][((r29+136)>>>2)&0x3ff] = r5; - writePages[(r29+172)>>>12][((r29+172)>>>2)&0x3ff] = r6; - case 0x60298: - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x60c98; - run_60c00(); return; - } - case 0x602a8: - r4 = r0 + 37; - r19 = r17 + r0; - if(r2 != r4) { - /* Next insn is delay slot */ - pc=0x602c8; - continue; - } - /* Next insn is delay slot */ - pc=0x60328; - continue; - case 0x602c0: - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x602dc; - continue; - } - case 0x602c8: - r19 = r19 + 1; - addr=r19+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x602c0; - continue; - } - case 0x602dc: - r20 = r19 - r17; - if(r20 == r0) { - /* Next insn is delay slot */ - pc=0x60328; - continue; - } - r2 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r17; - r2 = r2 + r20; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r2; - r2 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r20; - r2 = r2 + 1; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r2; - r2 = r2 < 8 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x60edc; - run_60e00(); return; - } - r3 = r3 + 8; - case 0x60318: - r2 = readPages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff]; - r2 = r2 + r20; - writePages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff] = r2; - case 0x60328: - addr=r19+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61160; - run_61000(); return; - } - r2 = r19 + 1; - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r6 = r0 + r0; - r23 = r0 + -1; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r0; - r19 = r0 + r0; - r7 = r0 + 42; - r8 = r0 + r0; - case 0x60358: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r17 = r2 + 1; - case 0x60360: - r2 = r4 + -32; - r5 = (r2&0xffffffffL) < (89&0xffffffffL) ? 1 : 0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x608dc; - run_60800(); return; - } - case 0x60370: - r5 = 7 << 16; - r2 = r2 << 2; - r5 = r5 + 2376; - r2 = r5 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x60390: - r19 = r19 | 16; - case 0x60394: - r2 = r17 + r0; - /* Next insn is delay slot */ - pc=0x60358; - continue; - case 0x603a0: - r4 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r8 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r2 = r4 + 4; - if(r8 >= 0) { - /* Next insn is delay slot */ - pc=0x6103c; - run_61000(); return; - } - r8 = r0 - r8; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r2; - case 0x603c0: - r19 = r19 | 4; - r2 = r17 + r0; - /* Next insn is delay slot */ - pc=0x60358; - continue; - case 0x603d0: - r6 = r0 + 43; - r2 = r17 + r0; - /* Next insn is delay slot */ - pc=0x60358; - continue; - case 0x603e0: - r2 = r19 & 16; - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x610ac; - run_61000(); return; - } - r19 = r19 & 64; - if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x6118c; - run_61000(); return; - } - r6 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - case 0x60400: - pc=0x60400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_60400() throws ExecutionException { /* 0x60400 - 0x60600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x60400: - r4 = readPages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff]; - r2 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - r6 = r6 + 4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r4&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - pc=0x60298; - run_60200(); return; - case 0x6041c: - r2 = 7 << 16; - r2 = r2 + 248; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r8; - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+168)>>>12][((r29+168)>>>2)&0x3ff] = r2; - case 0x60430: - r2 = r19 & 16; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60448; - continue; - } - r2 = r19 & 64; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x61090; - run_61000(); return; - } - case 0x60448: - r5 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r5 = r5 + 4; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r5; - case 0x6045c: - r5 = r19 & 1; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x609c8; - run_60800(); return; - } - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x609c8; - run_60800(); return; - } - r5 = r0 + 48; - addr=r29+132; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - addr=r29+133; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r19 = r19 | 2; - r4 = r0 + 2; - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r23; - r5 = r0 + r0; - case 0x60490: - if(r23 < 0) { - /* Next insn is delay slot */ - pc=0x604a0; - continue; - } - r6 = r0 + -129; - r19 = r19 & r6; - case 0x604a0: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60d0c; - run_60c00(); return; - } - if(r23 != r0) { - /* Next insn is delay slot */ - pc=0x60d0c; - run_60c00(); return; - } - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x604c4; - continue; - } - r2 = r19 & 1; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x61074; - run_61000(); return; - } - case 0x604c4: - r30 = r21 + r0; - case 0x604c8: - r6 = readPages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff]; - r2 = r6 < r23 ? 1 : 0; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r6; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x604e4; - continue; - } - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r23; - case 0x604e4: - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x6058c; - continue; - } - r2 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x6058c; - continue; - case 0x60504: - r19 = r19 | 64; - r2 = r17 + r0; - /* Next insn is delay slot */ - pc=0x60358; - run_60200(); return; - case 0x60514: - r2 = r19 & 16; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r8; - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x60854; - run_60800(); return; - } - case 0x60528: - r4 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r4 = r4 + 4; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r4; - case 0x6053c: - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x6087c; - run_60800(); return; - } - case 0x60544: - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r23; - r4 = r0 + 1; - /* Next insn is delay slot */ - pc=0x60490; - continue; - case 0x60558: - r5 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r6 = r0 + 1; - r2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r5 = r5 + 4; - addr=r29+80; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r0 + 1; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r8; - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r5; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r6; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r2; - r30 = r29 + 80; - case 0x60588: - r23 = r0 + r0; - case 0x6058c: - r4 = r19 & 2; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r4; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x605ac; - continue; - } - r5 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - r5 = r5 + 2; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r5; - case 0x605ac: - r6 = r19 & 132; - writePages[(r29+160)>>>12][((r29+160)>>>2)&0x3ff] = r6; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x609d4; - run_60800(); return; - } - r2 = readPages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff]; - r4 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - r20 = r2 - r4; - if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x609d4; - run_60800(); return; - } - r2 = r20 < 17 ? 1 : 0; - r5 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x61248; - run_61200(); return; - } - r2 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - writePages[(r29+164)>>>12][((r29+164)>>>2)&0x3ff] = r22; - r9 = r0 + 16; - /* Next insn is delay slot */ - pc=0x6060c; - run_60600(); return; - case 0x605f8: - r20 = r20 + -16; - r4 = r20 < 17 ? 1 : 0; - case 0x60600: - pc=0x60600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_60600() throws ExecutionException { /* 0x60600 - 0x60800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x60600: - r3 = r3 + 8; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x60670; - continue; - } - case 0x6060c: - r2 = r2 + 1; - r5 = r5 + 16; - r4 = r2 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r22; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r9; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r5; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r2; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x605f8; - run_60400(); return; - } - r4 = r18 + r0; - r5 = r16 + r0; - r6 = r21 + r0; - writePages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff] = r9; - /* Next insn is delay slot */ - r31=0x60648; - pc=0x5fe00; - run_5fe00(); return; - case 0x60648: - r9 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60cc0; - run_60c00(); return; - } - r20 = r20 + -16; - r4 = r20 < 17 ? 1 : 0; - r5 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r2 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r3 = r29 + 16; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x6060c; - continue; - } - case 0x60670: - r2 = r2 + 1; - r6 = readPages[(r29+164)>>>12][((r29+164)>>>2)&0x3ff]; - r5 = r20 + r5; - r4 = r2 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r6; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r20; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r5; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r2; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x60fe0; - run_60e00(); return; - } - r3 = r3 + 8; - /* Next insn is delay slot */ - pc=0x609dc; - run_60800(); return; - case 0x606a4: - r19 = r19 | 16; - r2 = r19 & 16; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r8; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x607a0; - continue; - } - case 0x606b8: - r4 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r4 = r4 + 4; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r4; - r4 = r0 + 1; - case 0x606d0: - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r23; - r5 = r0 + r0; - /* Next insn is delay slot */ - pc=0x60490; - run_60400(); return; - case 0x606e4: - r2 = 7 << 16; - r2 = r2 + 228; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r8; - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+168)>>>12][((r29+168)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x60430; - run_60400(); return; - case 0x60700: - r19 = r19 | 16; - r2 = r19 & 16; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r8; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x609a0; - run_60800(); return; - } - case 0x60714: - r4 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r4 = r4 + 4; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r4; - r4 = r0 + r0; - /* Next insn is delay slot */ - pc=0x606d0; - continue; - case 0x60734: - r4 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r5 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r4 = r0 + 48; - addr=r29+132; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r4 = r0 + 120; - addr=r29+133; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r4 = 7 << 16; - r4 = r4 + 248; - r5 = r5 + 4; - writePages[(r29+168)>>>12][((r29+168)>>>2)&0x3ff] = r4; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r8; - r19 = r19 | 2; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r5; - r4 = r0 + 2; - /* Next insn is delay slot */ - pc=0x606d0; - continue; - case 0x60778: - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x60394; - run_60200(); return; - } - r6 = r0 + 32; - r2 = r17 + r0; - /* Next insn is delay slot */ - pc=0x60358; - run_60200(); return; - case 0x60790: - r2 = r19 & 16; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r8; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x606b8; - continue; - } - case 0x607a0: - r2 = r19 & 64; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x610e8; - run_61000(); return; - } - r5 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r4 = r0 + 1; - addr=r5+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r5 = r5 + 4; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=0x606d0; - continue; - case 0x607c8: - r6 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r8; - r30 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r20 = r6 + 4; - if(r30 == r0) { - /* Next insn is delay slot */ - pc=0x61210; - run_61200(); return; - } - r4 = r30 + r0; - if(r23 < 0) { - /* Next insn is delay slot */ - pc=0x611ac; - run_61000(); return; - } - r5 = r0 + r0; - r6 = r23 + r0; - writePages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x60804; - pc=0x5b400; - run_5b400(); return; - case 0x60800: - pc=0x60800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_60800() throws ExecutionException { /* 0x60800 - 0x60a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x60800: - case 0x60804: - r3 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61278; - run_61200(); return; - } - r2 = r2 - r30; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r2; - r2 = r23 < r2 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x60828; - continue; - } - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r23; - case 0x60828: - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r20; - r23 = r0 + r0; - /* Next insn is delay slot */ - pc=0x604c8; - run_60400(); return; - case 0x6083c: - r19 = r19 | 16; - r2 = r19 & 16; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r8; - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60528; - run_60400(); return; - } - case 0x60854: - r2 = r19 & 64; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x610cc; - run_61000(); return; - } - r5 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - addr=r5+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ - r2 = tmp; - r5 = r5 + 4; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r5; - if(r2 >= 0) { - /* Next insn is delay slot */ - pc=0x60544; - run_60400(); return; - } - case 0x6087c: - r4 = r0 + 45; - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r0 - r2; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r23; - r5 = r0 + 45; - r4 = r0 + 1; - /* Next insn is delay slot */ - pc=0x60490; - run_60400(); return; - case 0x6089c: - r8 = r0 + r0; - r2 = r4 + -48; - case 0x608a4: - r4 = r8 << 1; - r17 = r17 + 1; - r8 = r8 << 3; - r8 = r4 + r8; - addr=r17+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r8 = r8 + r2; - r2 = r4 + -48; - r5 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x608a4; - continue; - } - r2 = r4 + -32; - r5 = (r2&0xffffffffL) < (89&0xffffffffL) ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x60370; - run_60200(); return; - } - case 0x608dc: - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r8; - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x61160; - run_61000(); return; - } - addr=r29+80; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r0 + 1; - r4 = r0 + 1; - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r2; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r4; - r30 = r29 + 80; - /* Next insn is delay slot */ - pc=0x60588; - run_60400(); return; - case 0x60910: - r19 = r19 | 128; - r2 = r17 + r0; - /* Next insn is delay slot */ - pc=0x60358; - run_60200(); return; - case 0x60920: - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r5 = r17 + 1; - if(r4 == r7) { - /* Next insn is delay slot */ - pc=0x6129c; - run_61200(); return; - } - r2 = r4 + -48; - r9 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - r23 = r0 + r0; - if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x60974; - continue; - } - case 0x60944: - r4 = r23 << 1; - r5 = r5 + 1; - r23 = r23 << 3; - r23 = r4 + r23; - addr=r5+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r23 = r2 + r23; - r2 = r4 + -48; - r9 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - if(r9 != r0) { - /* Next insn is delay slot */ - pc=0x60944; - continue; - } - if(r23 < 0) { - /* Next insn is delay slot */ - pc=0x611d4; - run_61000(); return; - } - case 0x60974: - r17 = r5 + r0; - /* Next insn is delay slot */ - pc=0x60360; - run_60200(); return; - case 0x60980: - r19 = r19 | 1; - r2 = r17 + r0; - /* Next insn is delay slot */ - pc=0x60358; - run_60200(); return; - case 0x60990: - r2 = r19 & 16; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r8; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60714; - run_60600(); return; - } - case 0x609a0: - r2 = r19 & 64; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61104; - run_61000(); return; - } - r5 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r4 = r0 + r0; - addr=r5+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r5 = r5 + 4; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=0x606d0; - run_60600(); return; - case 0x609c8: - r4 = r0 + 2; - /* Next insn is delay slot */ - pc=0x606d0; - run_60600(); return; - case 0x609d4: - r5 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r2 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - case 0x609dc: - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x60a1c; - run_60a00(); return; - } - r4 = r29 + 134; - r2 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - r4 = r0 + 1; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r4; - case 0x60a00: - pc=0x60a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_60a00() throws ExecutionException { /* 0x60a00 - 0x60c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x60a00: - r5 = r5 + 1; - r4 = r2 < 8 ? 1 : 0; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r5; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r2; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x60f80; - run_60e00(); return; - } - r3 = r3 + 8; - case 0x60a1c: - r4 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x60a5c; - continue; - } - r4 = r29 + 132; - r2 = r2 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - r4 = r0 + 2; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r4; - r5 = r5 + 2; - r4 = r2 < 8 ? 1 : 0; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r5; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r2; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x60fb0; - run_60e00(); return; - } - r3 = r3 + 8; - case 0x60a5c: - r6 = readPages[(r29+160)>>>12][((r29+160)>>>2)&0x3ff]; - r4 = r0 + 128; - if(r6 == r4) { - /* Next insn is delay slot */ - pc=0x60dac; - run_60c00(); return; - } - case 0x60a6c: - r4 = readPages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff]; - r23 = r23 - r4; - if(r23 <= 0) { - /* Next insn is delay slot */ - pc=0x60b40; - continue; - } - r4 = r23 < 17 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x61150; - run_61000(); return; - } - r4 = 7 << 16; - r20 = r4 + 2732; - r9 = r0 + 16; - /* Next insn is delay slot */ - pc=0x60ab4; - continue; - case 0x60aa0: - r23 = r23 + -16; - r4 = r23 < 17 ? 1 : 0; - r3 = r3 + 8; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x60b18; - continue; - } - case 0x60ab4: - r2 = r2 + 1; - r5 = r5 + 16; - r4 = r2 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r20; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r9; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r5; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r2; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x60aa0; - continue; - } - r4 = r18 + r0; - r5 = r16 + r0; - r6 = r21 + r0; - writePages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff] = r9; - /* Next insn is delay slot */ - r31=0x60af0; - pc=0x5fe00; - run_5fe00(); return; - case 0x60af0: - r9 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60cc0; - run_60c00(); return; - } - r23 = r23 + -16; - r4 = r23 < 17 ? 1 : 0; - r5 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r2 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r3 = r29 + 16; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x60ab4; - continue; - } - case 0x60b18: - r2 = r2 + 1; - r5 = r5 + r23; - r4 = r2 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r20; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r23; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r5; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r2; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x60f04; - run_60e00(); return; - } - r3 = r3 + 8; - case 0x60b40: - r6 = readPages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff]; - r2 = r2 + 1; - r5 = r6 + r5; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r2; - r2 = r2 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r30; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r6; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r5; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x60ea4; - run_60e00(); return; - } - r3 = r3 + 8; - case 0x60b6c: - r19 = r19 & 4; - if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x60c50; - run_60c00(); return; - } - r2 = readPages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff]; - r4 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - r19 = r2 - r4; - if(r19 <= 0) { - /* Next insn is delay slot */ - pc=0x60c50; - run_60c00(); return; - } - r2 = r19 < 17 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x61258; - run_61200(); return; - } - r2 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - writePages[(r29+164)>>>12][((r29+164)>>>2)&0x3ff] = r22; - r23 = r0 + 16; - r6 = r5 + r0; - /* Next insn is delay slot */ - pc=0x60bc8; - continue; - case 0x60bb4: - r19 = r19 + -16; - r4 = r19 < 17 ? 1 : 0; - r3 = r3 + 8; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x60c24; - run_60c00(); return; - } - case 0x60bc8: - r2 = r2 + 1; - r6 = r6 + 16; - r4 = r2 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r22; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r23; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r6; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r2; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x60bb4; - continue; - } - r4 = r18 + r0; - r5 = r16 + r0; - r6 = r21 + r0; - /* Next insn is delay slot */ - r31=0x60c00; - pc=0x5fe00; - run_5fe00(); return; - case 0x60c00: - pc=0x60c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_60c00() throws ExecutionException { /* 0x60c00 - 0x60e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x60c00: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60cc0; - continue; - } - r19 = r19 + -16; - r4 = r19 < 17 ? 1 : 0; - r6 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r2 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r3 = r29 + 16; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x60bc8; - run_60a00(); return; - } - case 0x60c24: - r5 = r6 + r0; - case 0x60c28: - r2 = r2 + 1; - r6 = readPages[(r29+164)>>>12][((r29+164)>>>2)&0x3ff]; - r5 = r5 + r19; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r2; - r2 = r2 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r6; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r19; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r5; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6104c; - run_61000(); return; - } - case 0x60c50: - r2 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - r4 = readPages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff]; - r3 = r2 < r4 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x60c6c; - continue; - } + case 0x5ce00: r2 = r4 + r0; - case 0x60c6c: - r3 = readPages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff]; - r3 = r3 + r2; - writePages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff] = r3; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x60ca4; - continue; - } - case 0x60c84: - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r0; - r3 = r29 + 16; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x602a8; - run_60200(); return; - } - case 0x60c98: - r19 = r17 + r0; - /* Next insn is delay slot */ - pc=0x60328; - run_60200(); return; - case 0x60ca4: - r4 = r18 + r0; - r5 = r16 + r0; - r6 = r21 + r0; - /* Next insn is delay slot */ - r31=0x60cb8; - pc=0x5fe00; - run_5fe00(); return; - case 0x60cb8: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x60c84; - continue; - } - case 0x60cc0: - addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r2 = r2 & 64; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x60ed0; - run_60e00(); return; - } - r2 = r0 + -1; - case 0x60cd8: - r31 = readPages[(r29+220)>>>12][((r29+220)>>>2)&0x3ff]; - r30 = readPages[(r29+216)>>>12][((r29+216)>>>2)&0x3ff]; - r23 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; - r22 = readPages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff]; - r21 = readPages[(r29+204)>>>12][((r29+204)>>>2)&0x3ff]; - r20 = readPages[(r29+200)>>>12][((r29+200)>>>2)&0x3ff]; - r19 = readPages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff]; - r18 = readPages[(r29+192)>>>12][((r29+192)>>>2)&0x3ff]; - r17 = readPages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff]; - r16 = readPages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff]; - r29 = r29 + 224; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x60d0c: - r6 = r0 + 1; - if(r4 == r6) { - /* Next insn is delay slot */ - pc=0x60f34; - run_60e00(); return; - } - r6 = r0 + 2; - r30 = r21 + r0; - if(r4 != r6) { - /* Next insn is delay slot */ - pc=0x60d5c; - continue; - } - r6 = readPages[(r29+168)>>>12][((r29+168)>>>2)&0x3ff]; - case 0x60d2c: - r4 = r2 & 15; - r4 = r6 + r4; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r30 = r30 + -1; - r2 = r2 >>> 4; - addr=r30+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60d2c; - continue; - } - r4 = r21 - r30; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=0x604c8; - run_60400(); return; - case 0x60d5c: - r4 = r2 & 7; - r30 = r30 + -1; - r4 = r4 + 48; - r2 = r2 >>> 3; - addr=r30+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60d5c; - continue; - } - r2 = r19 & 1; - r6 = r30 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6102c; - run_61000(); return; - } - r2 = r0 + 48; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x60f70; - run_60e00(); return; - } - r30 = r30 + -1; - r4 = r21 - r30; - addr=r6+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=0x604c8; - run_60400(); return; - case 0x60dac: - r4 = readPages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff]; - r6 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - r9 = r4 - r6; - if(r9 <= 0) { - /* Next insn is delay slot */ - pc=0x60a6c; - run_60a00(); return; - } - r4 = r9 < 17 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x61268; - run_61200(); return; - } - r6 = 7 << 16; - r20 = r6 + 2732; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r17; - r10 = r0 + 16; - r17 = r20 + r0; - r20 = r9 + r0; - /* Next insn is delay slot */ - pc=0x60e04; - run_60e00(); return; - case 0x60df0: - r20 = r20 + -16; - r4 = r20 < 17 ? 1 : 0; - r3 = r3 + 8; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x60e68; - run_60e00(); return; - } - case 0x60e00: - pc=0x60e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_60e00() throws ExecutionException { /* 0x60e00 - 0x61000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x60e00: - case 0x60e04: - r2 = r2 + 1; - r5 = r5 + 16; - r4 = r2 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r17; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r10; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r5; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r2; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x60df0; - run_60c00(); return; - } - r4 = r18 + r0; - r5 = r16 + r0; - r6 = r21 + r0; - writePages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff] = r10; - /* Next insn is delay slot */ - r31=0x60e40; - pc=0x5fe00; - run_5fe00(); return; - case 0x60e40: - r10 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60cc0; - run_60c00(); return; - } - r20 = r20 + -16; - r4 = r20 < 17 ? 1 : 0; - r5 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r2 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r3 = r29 + 16; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x60e04; - continue; - } - case 0x60e68: - r9 = r20 + r0; - r20 = r17 + r0; - r17 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - case 0x60e74: - r2 = r2 + 1; - r5 = r5 + r9; - r4 = r2 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r20; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r9; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r5; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r2; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x61120; - run_61000(); return; - } - r3 = r3 + 8; - /* Next insn is delay slot */ - pc=0x60a6c; - run_60a00(); return; - case 0x60ea4: - r4 = r18 + r0; - r5 = r16 + r0; - r6 = r21 + r0; - /* Next insn is delay slot */ - r31=0x60eb8; - pc=0x5fe00; - run_5fe00(); return; - case 0x60eb8: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60cc0; - run_60c00(); return; - } - r5 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r3 = r29 + 16; - /* Next insn is delay slot */ - pc=0x60b6c; - run_60a00(); return; - case 0x60ed0: - r2 = readPages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x60cd8; - run_60c00(); return; - case 0x60edc: - r4 = r18 + r0; - r5 = r16 + r0; - r6 = r21 + r0; - /* Next insn is delay slot */ - r31=0x60ef0; - pc=0x5fe00; - run_5fe00(); return; - case 0x60ef0: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60cc0; - run_60c00(); return; - } - r3 = r29 + 16; - /* Next insn is delay slot */ - pc=0x60318; - run_60200(); return; - case 0x60f04: - r4 = r18 + r0; - r5 = r16 + r0; - r6 = r21 + r0; - /* Next insn is delay slot */ - r31=0x60f18; - pc=0x5fe00; - run_5fe00(); return; - case 0x60f18: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60cc0; - run_60c00(); return; - } - r5 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r2 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r3 = r29 + 16; - /* Next insn is delay slot */ - pc=0x60b40; - run_60a00(); return; - case 0x60f34: - r4 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x61010; - run_61000(); return; - } - r30 = r21 + r0; - r4 = r0 + 10; - case 0x60f48: - if(r4 != r0) { - /* Next insn is delay slot */ - if(r4!=0) { - hi = (int)((r2 & 0xffffffffL) % (r4 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r4 & 0xffffffffL)); - } - pc=0x60f54; - continue; - } - if(r4!=0) { - hi = (int)((r2 & 0xffffffffL) % (r4 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r4 & 0xffffffffL)); - } - throw new ExecutionException("Break"); - case 0x60f54: - r30 = r30 + -1; - r6 = hi; - r6 = r6 + 48; - addr=r30+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = lo; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60f48; - continue; - } - case 0x60f70: - r2 = r21 - r30; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x604c8; - run_60400(); return; - case 0x60f80: - r4 = r18 + r0; - r5 = r16 + r0; - r6 = r21 + r0; - /* Next insn is delay slot */ - r31=0x60f94; - pc=0x5fe00; - run_5fe00(); return; - case 0x60f94: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60cc0; - run_60c00(); return; - } - r5 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r2 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r3 = r29 + 16; - /* Next insn is delay slot */ - pc=0x60a1c; - run_60a00(); return; - case 0x60fb0: - r4 = r18 + r0; - r5 = r16 + r0; - r6 = r21 + r0; - /* Next insn is delay slot */ - r31=0x60fc4; - pc=0x5fe00; - run_5fe00(); return; - case 0x60fc4: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60cc0; - run_60c00(); return; - } - r5 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r2 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r3 = r29 + 16; - /* Next insn is delay slot */ - pc=0x60a5c; - run_60a00(); return; - case 0x60fe0: - r4 = r18 + r0; - r5 = r16 + r0; - r6 = r21 + r0; - /* Next insn is delay slot */ - r31=0x60ff4; - pc=0x5fe00; - run_5fe00(); return; - case 0x60ff4: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60cc0; - run_60c00(); return; - } - r5 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - case 0x61000: - pc=0x61000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_61000() throws ExecutionException { /* 0x61000 - 0x61200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x61000: - r2 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r3 = r29 + 16; - /* Next insn is delay slot */ - pc=0x609dc; - run_60800(); return; - case 0x61010: - r6 = readPages[(r29+172)>>>12][((r29+172)>>>2)&0x3ff]; - r2 = r2 + 48; - addr=r29+119; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r6; - r30 = r29 + 119; - /* Next insn is delay slot */ - pc=0x604c8; - run_60400(); return; - case 0x6102c: - r6 = r21 - r30; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - pc=0x604c8; - run_60400(); return; - case 0x6103c: - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r2; - r2 = r17 + r0; - /* Next insn is delay slot */ - pc=0x60358; - run_60200(); return; - case 0x6104c: - r4 = r18 + r0; - r5 = r16 + r0; - r6 = r21 + r0; - /* Next insn is delay slot */ - r31=0x61060; - pc=0x5fe00; - run_5fe00(); return; - case 0x61060: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60cc0; - run_60c00(); return; - } - r5 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x60c50; - run_60c00(); return; - case 0x61074: - r6 = readPages[(r29+172)>>>12][((r29+172)>>>2)&0x3ff]; - r2 = r0 + 48; - addr=r29+119; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r6; - r30 = r29 + 119; - /* Next insn is delay slot */ - pc=0x604c8; - run_60400(); return; - case 0x61090: - r6 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - addr=r6+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r6 = r6 + 4; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - pc=0x6045c; - run_60400(); return; - case 0x610ac: - r4 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r5 = readPages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff]; - r2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r4 = r4 + 4; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r5; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=0x60298; - run_60200(); return; - case 0x610cc: - r6 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r2 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - r6 = r6 + 4; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - pc=0x6053c; - run_60400(); return; - case 0x610e8: - r6 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r4 = r0 + 1; - r2 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - r6 = r6 + 4; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - pc=0x606d0; - run_60600(); return; - case 0x61104: - r6 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r4 = r0 + r0; - r2 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - r6 = r6 + 4; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - pc=0x606d0; - run_60600(); return; - case 0x61120: - r4 = r18 + r0; - r5 = r16 + r0; - r6 = r21 + r0; - /* Next insn is delay slot */ - r31=0x61134; - pc=0x5fe00; - run_5fe00(); return; - case 0x61134: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x60cc0; - run_60c00(); return; - } - r5 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r2 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r3 = r29 + 16; - /* Next insn is delay slot */ - pc=0x60a6c; - run_60a00(); return; - case 0x61150: - r6 = 7 << 16; - r20 = r6 + 2732; - /* Next insn is delay slot */ - pc=0x60b18; - run_60a00(); return; - case 0x61160: - r2 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x60cc0; - run_60c00(); return; - } - r4 = readPages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff]; - r5 = r16 + r0; - r6 = r29 + 120; - /* Next insn is delay slot */ - r31=0x61184; - pc=0x5fe00; - run_5fe00(); return; - case 0x61184: - /* Next insn is delay slot */ - pc=0x60cc0; - run_60c00(); return; - case 0x6118c: - r5 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r6 = readPages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff]; - r2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r5 = r5 + 4; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r6; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=0x60298; - run_60200(); return; - case 0x611ac: - writePages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x611b8; - pc=0x10268; - run_10200(); return; - case 0x611b8: - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r2; - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r20; - r23 = r0 + r0; - r3 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x604c8; - run_60400(); return; - case 0x611d4: - r23 = r0 + -1; - r17 = r5 + r0; - /* Next insn is delay slot */ - pc=0x60360; - run_60200(); return; - case 0x611e4: - r5 = r0 + 64; - /* Next insn is delay slot */ - r31=0x611f0; - pc=0x3ec00; - run_3ec00(); return; - case 0x611f0: - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x612c8; - run_61200(); return; - } - case 0x61200: - pc=0x61200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_61200() throws ExecutionException { /* 0x61200 - 0x61400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x61200: - r2 = r0 + 64; - writePages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x6025c; - run_60200(); return; - case 0x61210: - r2 = (r23&0xffffffffL) < (7&0xffffffffL) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x61220; - continue; - } - r23 = r0 + 6; - case 0x61220: - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r23; - r2 = r23 + r0; - if(r23 < 0) { - /* Next insn is delay slot */ - pc=0x61290; - continue; - } - case 0x61230: - r8 = 7 << 16; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r2; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r20; - r30 = r8 + 268; - /* Next insn is delay slot */ - pc=0x60588; - run_60400(); return; - case 0x61248: - r2 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - writePages[(r29+164)>>>12][((r29+164)>>>2)&0x3ff] = r22; - /* Next insn is delay slot */ - pc=0x60670; - run_60600(); return; - case 0x61258: - r2 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - writePages[(r29+164)>>>12][((r29+164)>>>2)&0x3ff] = r22; - /* Next insn is delay slot */ - pc=0x60c28; - run_60c00(); return; - case 0x61268: - r4 = 7 << 16; - r20 = r4 + 2732; - /* Next insn is delay slot */ - pc=0x60e74; - run_60e00(); return; - case 0x61278: - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r23; - addr=r29+134; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r20; - r23 = r0 + r0; - /* Next insn is delay slot */ - pc=0x604c8; - run_60400(); return; - case 0x61290: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x61230; - continue; - case 0x6129c: - r4 = readPages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff]; - r17 = r5 + r0; - r23 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r2 = r4 + 4; - if(r23 >= 0) { - /* Next insn is delay slot */ - pc=0x6103c; - run_61000(); return; - } - writePages[(r29+236)>>>12][((r29+236)>>>2)&0x3ff] = r2; - r23 = r0 + -1; - r2 = r17 + r0; - /* Next insn is delay slot */ - pc=0x60358; - run_60200(); return; - case 0x612c8: - r3 = readPages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff]; - r2 = r0 + 12; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x60cd8; - run_60c00(); return; - case 0x61400: - pc=0x61400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_61400() throws ExecutionException { /* 0x61400 - 0x61600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x61400: - addr=r5+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ - r2 = tmp; - r29 = r29 + -752; - writePages[(r29+708)>>>12][((r29+708)>>>2)&0x3ff] = r17; - r17 = r4 + r0; - r4 = r2 & 8192; - writePages[(r29+736)>>>12][((r29+736)>>>2)&0x3ff] = r30; - writePages[(r29+720)>>>12][((r29+720)>>>2)&0x3ff] = r20; - writePages[(r29+704)>>>12][((r29+704)>>>2)&0x3ff] = r16; - writePages[(r29+740)>>>12][((r29+740)>>>2)&0x3ff] = r31; - writePages[(r29+732)>>>12][((r29+732)>>>2)&0x3ff] = r23; - writePages[(r29+728)>>>12][((r29+728)>>>2)&0x3ff] = r22; - writePages[(r29+724)>>>12][((r29+724)>>>2)&0x3ff] = r21; - writePages[(r29+716)>>>12][((r29+716)>>>2)&0x3ff] = r19; - writePages[(r29+712)>>>12][((r29+712)>>>2)&0x3ff] = r18; - writePages[(r29+748)>>>12][((r29+748)>>>2)&0x3ff] = f20; - writePages[(r29+744)>>>12][((r29+744)>>>2)&0x3ff] = f21; - r30 = r5 + r0; - r16 = r6 + r0; - r20 = r7 + r0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x6146c; - continue; - } - r2 = r2 | 8192; - r4 = readPages[(r5+100)>>>12][((r5+100)>>>2)&0x3ff]; - addr=r5+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r0 + -8193; - r2 = r4 & r2; - writePages[(r5+100)>>>12][((r5+100)>>>2)&0x3ff] = r2; - case 0x6146c: - writePages[(r29+660)>>>12][((r29+660)>>>2)&0x3ff] = r0; - writePages[(r29+652)>>>12][((r29+652)>>>2)&0x3ff] = r0; - r21 = r0 + r0; - writePages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff] = r0; - case 0x6147c: - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r16 = r16 + 1; - writePages[(r29+640)>>>12][((r29+640)>>>2)&0x3ff] = r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61740; - run_61600(); return; - } - case 0x61490: - r4 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - r3 = r4 + r2; - addr=r3+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r3 & 8; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x6152c; - continue; - } - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x61508; - continue; - } - case 0x614c0: - r3 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r4 + r2; - addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r2 & 8; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6147c; - continue; - } - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r3 = r3 + 1; - r2 = r2 + -1; - r21 = r21 + 1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r2; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r3; - if(r2 > 0) { - /* Next insn is delay slot */ - pc=0x614c0; - continue; - } - case 0x61508: - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x61518; - pc=0x68e00; - run_68e00(); return; - case 0x61518: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6147c; - continue; - } - r4 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x614c0; - continue; - case 0x6152c: - r3 = r0 + 37; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x616ec; - run_61600(); return; - } - r18 = r0 + r0; - r23 = r0 + r0; - case 0x61540: - r16 = r16 + 1; - addr=r16+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r3 & 255; - r5 = (r2&0xffffffffL) < (121&0xffffffffL) ? 1 : 0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x6157c; - continue; - } - r5 = 7 << 16; - r2 = r2 << 2; - r5 = r5 + 2772; - r2 = r5 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x6157c: - r3 = r4 + r3; - addr=r3+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r2 = r0 + 1; - r3 = r3 & 3; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x61598; - continue; - } - case 0x61594: - r18 = r18 | 1; - case 0x61598: - r2 = 4 << 16; - r2 = r2 + 12800; - r3 = r0 + 10; - writePages[(r29+660)>>>12][((r29+660)>>>2)&0x3ff] = r2; - writePages[(r29+652)>>>12][((r29+652)>>>2)&0x3ff] = r3; - r19 = r0 + 3; - case 0x615b0: - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x61774; - run_61600(); return; - } - case 0x615c0: - r2 = r18 & 64; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61694; - run_61600(); return; - } - case 0x615cc: - r2 = r0 + 2; - if(r19 == r2) { - /* Next insn is delay slot */ - pc=0x618b8; - run_61800(); return; - } - r2 = r19 < 3 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x617f0; - run_61600(); return; - } - r2 = r0 + 3; - if(r19 == r2) { - /* Next insn is delay slot */ - pc=0x619ec; - run_61800(); return; - } - r2 = r0 + 4; - if(r19 != r2) { - /* Next insn is delay slot */ - pc=0x61958; - run_61800(); return; - } - r2 = r23 + -1; - case 0x61600: - pc=0x61600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_61600() throws ExecutionException { /* 0x61600 - 0x61800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x61600: - r2 = (r2&0xffffffffL) < (349&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x62108; - run_62000(); return; - } - writePages[(r29+672)>>>12][((r29+672)>>>2)&0x3ff] = r0; - case 0x61610: - r10 = r29 + 24; - r19 = r18 | 1920; - r3 = r0 + r0; - r18 = r0 + r0; - writePages[(r29+676)>>>12][((r29+676)>>>2)&0x3ff] = r0; - writePages[(r29+668)>>>12][((r29+668)>>>2)&0x3ff] = r0; - writePages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff] = r0; - writePages[(r29+664)>>>12][((r29+664)>>>2)&0x3ff] = r0; - r22 = r10 + r0; - r11 = r0 + -1921; - case 0x61638: - r6 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - addr=r6+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r5 = tmp; - r2 = r5 + -43; - r2 = r2 & 255; - r7 = (r2&0xffffffffL) < (79&0xffffffffL) ? 1 : 0; - if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x61ab4; - run_61a00(); return; - } - r4 = 7 << 16; - r2 = r2 << 2; - r4 = r4 + 3256; - r2 = r4 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x6167c: - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x6168c; - pc=0x68e00; - run_68e00(); return; - case 0x6168c: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6178c; - continue; - } - case 0x61694: - r4 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x616ac; - continue; - case 0x616a4: - r2 = r2 + 1; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r2; - case 0x616ac: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r4 + r3; - addr=r3+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r3 & 8; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x615cc; - run_61400(); return; - } - r3 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r21 = r21 + 1; - r3 = r3 + -1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r3; - if(r3 > 0) { - /* Next insn is delay slot */ - pc=0x616a4; - continue; - } - /* Next insn is delay slot */ - pc=0x6167c; - continue; - case 0x616ec: - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x6275c; - run_62600(); return; - } - case 0x616fc: - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - addr=r16+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - if(r4 != r3) { - /* Next insn is delay slot */ - pc=0x61740; - continue; - } - r3 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r2 = r2 + 1; - r3 = r3 + -1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r3; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r2; - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r21 = r21 + 1; - writePages[(r29+640)>>>12][((r29+640)>>>2)&0x3ff] = r2; - r16 = r16 + 1; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x61490; - run_61400(); return; - } - case 0x61740: - r2 = readPages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x617b4; - continue; - case 0x6174c: - r18 = r18 | 1; - case 0x61750: - r2 = 6 << 16; - r2 = r2 + -2048; - writePages[(r29+660)>>>12][((r29+660)>>>2)&0x3ff] = r2; - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r3 = r0 + 8; - writePages[(r29+652)>>>12][((r29+652)>>>2)&0x3ff] = r3; - r19 = r0 + 3; - if(r2 > 0) { - /* Next insn is delay slot */ - pc=0x615c0; - run_61400(); return; - } - case 0x61774: - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x61784; - pc=0x68e00; - run_68e00(); return; - case 0x61784: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x615c0; - run_61400(); return; - } - case 0x6178c: - r3 = readPages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x617b0; - continue; - } - addr=r30+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r2 = r2 & 64; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61740; - continue; - } - case 0x617b0: - r2 = r0 + -1; - case 0x617b4: - f20 = readPages[(r29+748)>>>12][((r29+748)>>>2)&0x3ff]; - r31 = readPages[(r29+740)>>>12][((r29+740)>>>2)&0x3ff]; - r30 = readPages[(r29+736)>>>12][((r29+736)>>>2)&0x3ff]; - r23 = readPages[(r29+732)>>>12][((r29+732)>>>2)&0x3ff]; - r22 = readPages[(r29+728)>>>12][((r29+728)>>>2)&0x3ff]; - r21 = readPages[(r29+724)>>>12][((r29+724)>>>2)&0x3ff]; - r20 = readPages[(r29+720)>>>12][((r29+720)>>>2)&0x3ff]; - r19 = readPages[(r29+716)>>>12][((r29+716)>>>2)&0x3ff]; - r18 = readPages[(r29+712)>>>12][((r29+712)>>>2)&0x3ff]; - r17 = readPages[(r29+708)>>>12][((r29+708)>>>2)&0x3ff]; - r16 = readPages[(r29+704)>>>12][((r29+704)>>>2)&0x3ff]; - f21 = readPages[(r29+744)>>>12][((r29+744)>>>2)&0x3ff]; - r29 = r29 + 752; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x617f0: - r2 = r0 + 1; - if(r19 != r2) { - /* Next insn is delay slot */ - pc=0x61958; - run_61800(); return; - } - if(r23 != r0) { - /* Next insn is delay slot */ - pc=0x61808; - run_61800(); return; - } - case 0x61800: - pc=0x61800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_61800() throws ExecutionException { /* 0x61800 - 0x61a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x61800: - r23 = r0 + -1; - case 0x61808: - r18 = r18 & 16; - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x62048; - run_62000(); return; - } - r10 = r29 + 24; - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r18 = r0 + r0; - r19 = r10 + r0; - case 0x61824: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r19 + r3; - addr=r3+352; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x618a4; - continue; - } - case 0x61840: - r3 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r2 = r2 + 1; - r3 = r3 + -1; - r18 = r18 + 1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r3; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r2; - if(r23 == r18) { - /* Next insn is delay slot */ - pc=0x618ac; - continue; - } - if(r3 > 0) { - /* Next insn is delay slot */ - pc=0x61824; - continue; - } - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x61878; - pc=0x68e00; - run_68e00(); return; - case 0x61878: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x618ac; - continue; - } - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r19 + r3; - addr=r3+352; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x61840; - continue; - } - case 0x618a4: - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x61740; - run_61600(); return; - } - case 0x618ac: - r21 = r21 + r18; - /* Next insn is delay slot */ - pc=0x6147c; - run_61400(); return; - case 0x618b8: - if(r23 != r0) { - /* Next insn is delay slot */ - pc=0x618c4; - continue; - } - r23 = r0 + -1; - case 0x618c4: - r2 = r18 & 1; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6235c; - run_62200(); return; - } - r18 = r18 & 16; - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x623fc; - run_62200(); return; - } - r4 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r18 = r0 + r0; - case 0x618e8: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r4 + r3; - addr=r3+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r3 & 8; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x618ac; - continue; - } - r3 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r2 = r2 + 1; - r3 = r3 + -1; - r18 = r18 + 1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r3; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r2; - if(r23 == r18) { - /* Next insn is delay slot */ - pc=0x618ac; - continue; - } - if(r3 > 0) { - /* Next insn is delay slot */ - pc=0x618e8; - continue; - } - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x61940; - pc=0x68e00; - run_68e00(); return; - case 0x61940: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x618ac; - continue; - } - r4 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x618e8; - continue; - case 0x61958: - if(r23 != r0) { - /* Next insn is delay slot */ - pc=0x61964; - continue; - } - r23 = r0 + 1; - case 0x61964: - r2 = r18 & 1; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6224c; - run_62200(); return; - } - r18 = r18 & 16; - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x62718; - run_62600(); return; - } - r18 = r0 + r0; - /* Next insn is delay slot */ - pc=0x619b4; - continue; - case 0x61988: - r3 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r18 = r18 + r2; - r23 = r23 - r2; - r2 = r3 + r2; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r2; - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x619ac; - pc=0x68e00; - run_68e00(); return; - case 0x619ac: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x62704; - run_62600(); return; - } - case 0x619b4: - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r3 = r2 < r23 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x61988; - continue; - } - r2 = r2 - r23; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r2; - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r18 = r18 + r23; - r8 = r2 + r23; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r8; - r21 = r21 + r18; - /* Next insn is delay slot */ - pc=0x6147c; - run_61400(); return; - case 0x619ec: - r2 = r23 + -1; - r2 = (r2&0xffffffffL) < (349&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x62038; - run_62000(); return; - } - r6 = r0 + r0; - case 0x61a00: - pc=0x61a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_61a00() throws ExecutionException { /* 0x61a00 - 0x61c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x61a00: - r10 = r29 + 24; - r4 = 7 << 16; - r11 = r20 + r0; - r20 = r16 + r0; - r16 = readPages[(r29+652)>>>12][((r29+652)>>>2)&0x3ff]; - r18 = r18 | 3456; - r8 = r0 + r0; - r19 = r10 + r0; - r7 = r0 + 512; - r22 = r4 + 3884; - case 0x61a28: - r5 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r2 = r3 + -43; - r2 = r2 & 255; - r9 = (r2&0xffffffffL) < (78&0xffffffffL) ? 1 : 0; - if(r9 == r0) { - /* Next insn is delay slot */ - pc=0x61ecc; - run_61e00(); return; - } - r4 = 7 << 16; - r2 = r2 << 2; - r4 = r4 + 3572; - r2 = r4 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x61a6c: - r2 = r3 + r18; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x61ab4; - continue; - } - r2 = r0 + -385; - r19 = r19 & r2; - case 0x61a80: - addr=r22+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r22 = r22 + 1; - case 0x61a88: - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r23 = r23 + -1; - r2 = r2 + -1; - r21 = r21 + 1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r2; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x61cb4; - run_61c00(); return; - } - case 0x61aa4: - r6 = r6 + 1; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r6; - if(r23 != r0) { - /* Next insn is delay slot */ - pc=0x61638; - run_61600(); return; - } - case 0x61ab4: - r4 = readPages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff]; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x61cf4; - run_61c00(); return; - } - case 0x61ac4: - r2 = r3 + -1; - r2 = (r2&0xffffffffL) < (2&0xffffffffL) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x62960; - run_62800(); return; - } - r2 = r18 + -1; - r2 = (r2&0xffffffffL) < (7&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61b5c; - continue; - } - r2 = r18 < 3 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x628e0; - run_62800(); return; - } - r2 = r0 + 3; - r7 = r18 & 255; - if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x61b5c; - continue; - } - writePages[(r29+672)>>>12][((r29+672)>>>2)&0x3ff] = r16; - r23 = r22 + r0; - r16 = r7 + r0; - r18 = r10 + r0; - case 0x61b10: - r23 = r23 + -1; - addr=r23+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - r4 = r17 + r0; - r6 = r30 + r0; - /* Next insn is delay slot */ - r31=0x61b28; - pc=0x68c00; - run_68c00(); return; - case 0x61b28: - r3 = r16 + -1; - r2 = r23 + r21; - r16 = r3 & 255; - r4 = r2 - r22; - r2 = r16 << 24; - r2 = r2 >> 24; - r2 = r2 < 4 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61b10; - continue; - } - r16 = readPages[(r29+672)>>>12][((r29+672)>>>2)&0x3ff]; - r10 = r18 + r0; - r21 = r4 + r0; - r22 = r23 + r0; - case 0x61b5c: - r2 = r19 & 256; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61be4; - continue; - } - r2 = r19 & 1024; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x62920; - run_62800(); return; - } - addr=r22+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - r2 = r0 + 101; - r23 = r22 + -1; - r7 = r21 + -1; - if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x61bbc; - continue; - } - r2 = r0 + 69; - if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x61bbc; - continue; - } - r4 = r17 + r0; - r6 = r30 + r0; - writePages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff] = r10; - /* Next insn is delay slot */ - r31=0x61bac; - pc=0x68c00; - run_68c00(); return; - case 0x61bac: - addr=r22+-2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - r10 = readPages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff]; - r23 = r22 + -2; - r7 = r21 + -2; - case 0x61bbc: - r4 = r17 + r0; - r6 = r30 + r0; - writePages[(r29+684)>>>12][((r29+684)>>>2)&0x3ff] = r7; - writePages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff] = r10; - /* Next insn is delay slot */ - r31=0x61bd4; - pc=0x68c00; - run_68c00(); return; - case 0x61bd4: - r7 = readPages[(r29+684)>>>12][((r29+684)>>>2)&0x3ff]; - r10 = readPages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff]; - r21 = r7 + r0; - r22 = r23 + r0; - case 0x61be4: - r2 = r19 & 16; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6147c; - run_61400(); return; - } - r4 = r19 & 1536; - r2 = r0 + 1024; - addr=r22+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x6277c; - run_62600(); return; - } - case 0x61c00: - pc=0x61c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_61c00() throws ExecutionException { /* 0x61c00 - 0x61e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x61c00: - r3 = readPages[(r29+668)>>>12][((r29+668)>>>2)&0x3ff]; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x62654; - run_62600(); return; - } - case 0x61c14: - r4 = r17 + r0; - r5 = r10 + r0; - r6 = r0 + r0; - /* Next insn is delay slot */ - r31=0x61c28; - pc=0x66c00; - run_66c00(); return; - case 0x61c28: - r2 = r19 & 1; - f20 = f0; - f21 = f1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x62544; - run_62400(); return; - } - case 0x61c38: - r2 = readPages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff]; - r20 = r20 + 4; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = f20; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = f21; - case 0x61c48: - r3 = readPages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff]; - r3 = r3 + 1; - writePages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x6147c; - run_61400(); return; - case 0x61c60: - r2 = r19 & 256; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61a6c; - run_61a00(); return; - } - r2 = r0 + -129; - r5 = readPages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff]; - r19 = r19 & r2; - r2 = readPages[(r29+672)>>>12][((r29+672)>>>2)&0x3ff]; - r5 = r5 + 1; - writePages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff] = r5; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61a88; - run_61a00(); return; - } - r2 = r2 + -1; - writePages[(r29+672)>>>12][((r29+672)>>>2)&0x3ff] = r2; - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r23 = r23 + 1; - r2 = r2 + -1; - r23 = r23 + -1; - r21 = r21 + 1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r2; - if(r2 > 0) { - /* Next insn is delay slot */ - pc=0x61aa4; - run_61a00(); return; - } - case 0x61cb4: - r4 = r17 + r0; - r5 = r30 + r0; - writePages[(r29+680)>>>12][((r29+680)>>>2)&0x3ff] = r3; - writePages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff] = r10; - writePages[(r29+692)>>>12][((r29+692)>>>2)&0x3ff] = r11; - /* Next insn is delay slot */ - r31=0x61cd0; - pc=0x68e00; - run_68e00(); return; - case 0x61cd0: - r3 = readPages[(r29+680)>>>12][((r29+680)>>>2)&0x3ff]; - r10 = readPages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff]; - r11 = readPages[(r29+692)>>>12][((r29+692)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x61ab4; - run_61a00(); return; - } - if(r23 != r0) { - /* Next insn is delay slot */ - pc=0x61638; - run_61600(); return; - } - /* Next insn is delay slot */ - pc=0x61ab4; - run_61a00(); return; - case 0x61cf4: - r2 = r0 + -257; - r19 = r19 & r2; - /* Next insn is delay slot */ - pc=0x61ac4; - run_61a00(); return; - case 0x61d04: - r2 = r19 & 512; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61ab4; - run_61a00(); return; - } - r2 = readPages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff]; - r4 = r0 + -641; - r19 = r19 & r4; - writePages[(r29+664)>>>12][((r29+664)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x61a80; - run_61a00(); return; - case 0x61d28: - r2 = r19 & 128; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61ab4; - run_61a00(); return; - } - r2 = r0 + -129; - r19 = r19 & r2; - /* Next insn is delay slot */ - pc=0x61a80; - run_61a00(); return; - case 0x61d44: - r2 = r0 + 7; - if(r18 != r2) { - /* Next insn is delay slot */ - pc=0x61ab4; - run_61a00(); return; - } - r18 = r0 + 8; - /* Next insn is delay slot */ - pc=0x61a80; - run_61a00(); return; - case 0x61d5c: - r2 = r0 + 6; - if(r18 != r2) { - /* Next insn is delay slot */ - pc=0x61ab4; - run_61a00(); return; - } - r18 = r0 + 7; - /* Next insn is delay slot */ - pc=0x61a80; - run_61a00(); return; - case 0x61d74: - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x624ac; - run_62400(); return; - } - r4 = readPages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x62590; - run_62400(); return; - } - case 0x61d8c: - r2 = r0 + 1; - if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x61da4; - continue; - } - r2 = r0 + 4; - if(r18 != r2) { - /* Next insn is delay slot */ - pc=0x61ab4; - run_61a00(); return; - } - case 0x61da4: - r18 = r18 + 1; - r18 = r18 << 24; - r18 = r18 >> 24; - /* Next insn is delay slot */ - pc=0x61a80; - run_61a00(); return; - case 0x61db8: - if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x624c4; - run_62400(); return; - } - r2 = readPages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x61cf4; - continue; - } - r4 = r19 & 1792; - r2 = r0 + 1792; - if(r4 != r2) { - /* Next insn is delay slot */ - pc=0x61ac4; - run_61a00(); return; - } - r19 = r19 & r11; - r18 = r0 + 1; - /* Next insn is delay slot */ - pc=0x61a80; - run_61a00(); return; - case 0x61df0: - r2 = r0 + 2; - if(r18 != r2) { - /* Next insn is delay slot */ - pc=0x61ab4; - run_61a00(); return; - } - r18 = r0 + 3; - case 0x61e00: - pc=0x61e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_61e00() throws ExecutionException { /* 0x61e00 - 0x62000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x61e00: - /* Next insn is delay slot */ - pc=0x61a80; - run_61a00(); return; - case 0x61e08: - r2 = r19 & 1280; - r4 = r0 + 1024; - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x61e34; - continue; - } - r2 = r19 & 1024; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61ab4; - run_61a00(); return; - } - r2 = readPages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61ac4; - run_61a00(); return; - } - case 0x61e34: - r2 = r19 & 512; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x61e54; - continue; - } - r4 = readPages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff]; - r2 = readPages[(r29+664)>>>12][((r29+664)>>>2)&0x3ff]; - writePages[(r29+676)>>>12][((r29+676)>>>2)&0x3ff] = r22; - r4 = r4 - r2; - writePages[(r29+668)>>>12][((r29+668)>>>2)&0x3ff] = r4; - case 0x61e54: - r19 = r19 & r11; - r19 = r19 | 384; - writePages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x61a80; - run_61a00(); return; - case 0x61e68: - r2 = r0 + 1; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x61ab4; - run_61a00(); return; - } - r3 = r0 + 2; - /* Next insn is delay slot */ - pc=0x61a80; - run_61a00(); return; - case 0x61e80: - r2 = r18 & 1536; - if(r2 != r7) { - /* Next insn is delay slot */ - pc=0x61ecc; - continue; - } - r2 = r0 + -513; - r18 = r18 & r2; - r18 = r18 | 1280; - r16 = r0 + 16; - case 0x61e9c: - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - addr=r19+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r2 + -1; - r19 = r19 + 1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r2; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x61fc4; - continue; - } - case 0x61eb8: - r5 = r5 + 1; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r5; - case 0x61ec0: - r23 = r23 + -1; - if(r23 != r0) { - /* Next insn is delay slot */ - pc=0x61a28; - run_61a00(); return; - } - case 0x61ecc: - r2 = r18 & 256; - writePages[(r29+652)>>>12][((r29+652)>>>2)&0x3ff] = r16; - r16 = r20 + r0; - r20 = r11 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61ef8; - continue; - } - r2 = ((r10 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x62620; - run_62600(); return; - } - case 0x61ef0: - if(r10 == r19) { - /* Next insn is delay slot */ - pc=0x61740; - run_61600(); return; - } - case 0x61ef8: - r2 = r18 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x624e4; - run_62400(); return; - } - case 0x61f04: - r10 = r19 - r10; - r23 = r10 + r8; - r21 = r21 + r23; - /* Next insn is delay slot */ - pc=0x6147c; - run_61400(); return; - case 0x61f18: - r2 = r16 < 11 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x61ecc; - continue; - } - r2 = r0 + -2945; - r18 = r18 & r2; - /* Next insn is delay slot */ - pc=0x61e9c; - continue; - case 0x61f34: - r2 = r18 & 128; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61ecc; - continue; - } - r2 = r0 + -129; - r18 = r18 & r2; - /* Next insn is delay slot */ - pc=0x61e9c; - continue; - case 0x61f50: - r2 = r16 << 1; - r2 = r2 + r22; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ - r16 = tmp; - r2 = r0 + -2945; - r18 = r18 & r2; - /* Next insn is delay slot */ - pc=0x61e9c; - continue; - case 0x61f6c: - r2 = r18 & 2048; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61e9c; - continue; - } - if(r16 != r0) { - /* Next insn is delay slot */ - pc=0x61f88; - continue; - } - r18 = r18 | 512; - r16 = r0 + 8; - case 0x61f88: - r2 = r18 & 1024; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x62580; - run_62400(); return; - } - r2 = r0 + -897; - r18 = r18 & r2; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x61fac; - continue; - } - r6 = r6 + -1; - r23 = r23 + 1; - case 0x61fac: - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r8 = r8 + 1; - r2 = r2 + -1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r2; - if(r2 > 0) { - /* Next insn is delay slot */ - pc=0x61eb8; - continue; - } - case 0x61fc4: - r4 = r17 + r0; - r5 = r30 + r0; - writePages[(r29+680)>>>12][((r29+680)>>>2)&0x3ff] = r6; - writePages[(r29+684)>>>12][((r29+684)>>>2)&0x3ff] = r7; - writePages[(r29+688)>>>12][((r29+688)>>>2)&0x3ff] = r8; - writePages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff] = r10; - writePages[(r29+692)>>>12][((r29+692)>>>2)&0x3ff] = r11; - /* Next insn is delay slot */ - r31=0x61fe8; - pc=0x68e00; - run_68e00(); return; - case 0x61fe8: - r6 = readPages[(r29+680)>>>12][((r29+680)>>>2)&0x3ff]; - r7 = readPages[(r29+684)>>>12][((r29+684)>>>2)&0x3ff]; - r8 = readPages[(r29+688)>>>12][((r29+688)>>>2)&0x3ff]; - r10 = readPages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff]; - r11 = readPages[(r29+692)>>>12][((r29+692)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61ec0; - continue; - } - case 0x62000: - pc=0x62000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_62000() throws ExecutionException { /* 0x62000 - 0x62200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x62000: - /* Next insn is delay slot */ - pc=0x61ecc; - run_61e00(); return; - case 0x6200c: - r2 = r16 << 1; - r2 = r2 + r22; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ - r16 = tmp; - r2 = r16 < 9 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x61ecc; - run_61e00(); return; - } - r2 = r0 + -2945; - r18 = r18 & r2; - /* Next insn is delay slot */ - pc=0x61e9c; - run_61e00(); return; - case 0x62038: - r6 = r23 + -349; - r23 = r0 + 349; - /* Next insn is delay slot */ - pc=0x61a00; - run_61a00(); return; - case 0x62048: - r18 = readPages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff]; - r10 = r29 + 24; - r19 = r20 + 4; - r22 = r10 + r0; - r20 = r18 + r0; - case 0x6205c: - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r22 + r3; - addr=r3+352; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x620dc; - continue; - } - r3 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r20 = r20 + 1; - r3 = r3 + -1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r3; - r3 = r2 + 1; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r3; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r23 = r23 + -1; - addr=r20+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r23 == r0) { - /* Next insn is delay slot */ - pc=0x620dc; - continue; - } - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - if(r2 > 0) { - /* Next insn is delay slot */ - pc=0x6205c; - continue; - } - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x620cc; - pc=0x68e00; - run_68e00(); return; - case 0x620cc: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6205c; - continue; - } - if(r18 == r20) { - /* Next insn is delay slot */ - pc=0x6178c; - run_61600(); return; - } - case 0x620dc: - r18 = r20 - r18; - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x61740; - run_61600(); return; - } - r3 = readPages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff]; - addr=r20+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = r3 + 1; - writePages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff] = r3; - r20 = r19 + r0; - r21 = r21 + r18; - /* Next insn is delay slot */ - pc=0x6147c; - run_61400(); return; - case 0x62108: - r23 = r23 + -349; - writePages[(r29+672)>>>12][((r29+672)>>>2)&0x3ff] = r23; - r23 = r0 + 349; - /* Next insn is delay slot */ - pc=0x61610; - run_61600(); return; - case 0x6211c: - r2 = 4 << 16; - r2 = r2 + 12800; - writePages[(r29+660)>>>12][((r29+660)>>>2)&0x3ff] = r2; - writePages[(r29+652)>>>12][((r29+652)>>>2)&0x3ff] = r0; - r19 = r0 + 3; - /* Next insn is delay slot */ - pc=0x615b0; - run_61400(); return; - case 0x62138: - r18 = r18 | 1; - /* Next insn is delay slot */ - pc=0x61540; - run_61400(); return; - case 0x62144: - r18 = r18 | 4; - /* Next insn is delay slot */ - pc=0x61540; - run_61400(); return; - case 0x62150: - r18 = r18 | 64; - r19 = r0 + r0; - /* Next insn is delay slot */ - pc=0x615b0; - run_61400(); return; - case 0x62160: - r5 = r16 + r0; - r4 = r29 + 376; - /* Next insn is delay slot */ - r31=0x62170; - pc=0x66800; - run_66800(); return; - case 0x62170: - r16 = r2 + r0; - r18 = r18 | 64; - r19 = r0 + 1; - /* Next insn is delay slot */ - pc=0x615b0; - run_61400(); return; - case 0x62184: - r18 = r18 | 512; - case 0x62188: - r2 = 6 << 16; - r2 = r2 + -2048; - r3 = r0 + 16; - writePages[(r29+660)>>>12][((r29+660)>>>2)&0x3ff] = r2; - writePages[(r29+652)>>>12][((r29+652)>>>2)&0x3ff] = r3; - r19 = r0 + 3; - /* Next insn is delay slot */ - pc=0x615b0; - run_61400(); return; - case 0x621a8: - r18 = r18 | 2; - /* Next insn is delay slot */ - pc=0x61540; - run_61400(); return; - case 0x621b4: - r19 = r0 + 4; - /* Next insn is delay slot */ - pc=0x615b0; - run_61400(); return; - case 0x621c0: - r2 = r23 << 1; - r23 = r23 << 3; - r2 = r2 + r23; - r3 = r3 + -48; - r23 = r3 + r2; - /* Next insn is delay slot */ - pc=0x61540; - run_61400(); return; - case 0x621dc: - r18 = r18 | 16; - /* Next insn is delay slot */ - pc=0x61540; - run_61400(); return; - case 0x621e8: - r2 = 6 << 16; - r2 = r2 + -2048; - r3 = r0 + 10; - writePages[(r29+660)>>>12][((r29+660)>>>2)&0x3ff] = r2; - writePages[(r29+652)>>>12][((r29+652)>>>2)&0x3ff] = r3; - r19 = r0 + 3; - case 0x62200: - pc=0x62200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_62200() throws ExecutionException { /* 0x62200 - 0x62400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x62200: - /* Next insn is delay slot */ - pc=0x615b0; - run_61400(); return; - case 0x62208: - r19 = r0 + 2; - /* Next insn is delay slot */ - pc=0x615b0; - run_61400(); return; - case 0x62214: - r18 = r18 | 544; - /* Next insn is delay slot */ - pc=0x62188; - run_62000(); return; - case 0x62220: - r2 = r18 & 16; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6147c; - run_61400(); return; - } - r2 = r18 & 4; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x627a0; - run_62600(); return; - } - r2 = readPages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff]; - r20 = r20 + 4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r21&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x6147c; - run_61400(); return; - case 0x6224c: - r3 = r29 + 632; - r4 = r3 + r0; - r5 = r0 + r0; - r6 = r0 + 8; - r18 = r18 & 16; - writePages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x6226c; - pc=0x48fec; - run_48e00(); return; - case 0x6226c: - writePages[(r29+664)>>>12][((r29+664)>>>2)&0x3ff] = r18; - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x625e4; - run_62400(); return; - } - r18 = r0 + r0; - case 0x6227c: - r22 = r0 + r0; - writePages[(r29+668)>>>12][((r29+668)>>>2)&0x3ff] = r16; - r19 = readPages[(r29+664)>>>12][((r29+664)>>>2)&0x3ff]; - r16 = readPages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff]; - writePages[(r29+672)>>>12][((r29+672)>>>2)&0x3ff] = r20; - r20 = r22 + r0; - case 0x62294: - /* Next insn is delay slot */ - r31=0x6229c; - pc=0x5a800; - run_5a800(); return; - case 0x6229c: - if(r2 == r20) { - /* Next insn is delay slot */ - pc=0x6178c; - run_61600(); return; - } - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r4 = r29 + 24; - r3 = r4 + r20; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r22 = r20 + 1; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r2 = r2 + 1; - r3 = r3 + -1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r3; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r2; - r5 = r18 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - r4 = r17 + r0; - r6 = r29 + 24; - r7 = r22 + r0; - /* Next insn is delay slot */ - r31=0x622ec; - pc=0x66000; - run_66000(); return; - case 0x622ec: - r5 = r0 + -1; - if(r2 == r5) { - /* Next insn is delay slot */ - pc=0x6178c; - run_61600(); return; - } - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x626e0; - run_62600(); return; - } - if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x6230c; - continue; - } - writePages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff] = r0; - case 0x6230c: - r21 = r21 + r22; - r23 = r23 + -1; - if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x626f8; - run_62600(); return; - } - r18 = r18 + 4; - r20 = r0 + r0; - case 0x62324: - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x625b0; - run_62400(); return; - } - case 0x62334: - if(r23 != r0) { - /* Next insn is delay slot */ - pc=0x62294; - continue; - } - r16 = readPages[(r29+668)>>>12][((r29+668)>>>2)&0x3ff]; - r20 = readPages[(r29+672)>>>12][((r29+672)>>>2)&0x3ff]; - case 0x62344: - r3 = readPages[(r29+664)>>>12][((r29+664)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x61c48; - run_61c00(); return; - } - /* Next insn is delay slot */ - pc=0x6147c; - run_61400(); return; - case 0x6235c: - r3 = r29 + 632; - r4 = r3 + r0; - r5 = r0 + r0; - r6 = r0 + 8; - r18 = r18 & 16; - writePages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x6237c; - pc=0x48fec; - run_48e00(); return; - case 0x6237c: - writePages[(r29+668)>>>12][((r29+668)>>>2)&0x3ff] = r18; - if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x625f4; - run_62400(); return; - } - r19 = readPages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff]; - r20 = r20 + 4; - case 0x62390: - r6 = r0 + r0; - writePages[(r29+664)>>>12][((r29+664)>>>2)&0x3ff] = r16; - r22 = r0 + -2; - r16 = r6 + r0; - case 0x623a0: - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r3 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r3 + r2; - addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r2 & 8; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x623d0; - continue; - } - if(r23 != r0) { - /* Next insn is delay slot */ - pc=0x627b4; - run_62600(); return; - } - case 0x623d0: - r16 = readPages[(r29+664)>>>12][((r29+664)>>>2)&0x3ff]; - case 0x623d4: - r3 = readPages[(r29+668)>>>12][((r29+668)>>>2)&0x3ff]; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x6147c; - run_61400(); return; - } - r3 = readPages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff]; - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = r0; - r3 = r3 + 1; - writePages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x6147c; - run_61400(); return; - case 0x623fc: - r19 = r20 + 4; - case 0x62400: - pc=0x62400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_62400() throws ExecutionException { /* 0x62400 - 0x62600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x62400: - r20 = readPages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff]; - r18 = r20 + r0; - case 0x6240c: - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r5 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r5 + r3; - addr=r3+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r3 = r3 & 8; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x62488; - continue; - } - r3 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r18 = r18 + 1; - r3 = r3 + -1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r3; - r3 = r2 + 1; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r3; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r23 = r23 + -1; - addr=r18+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r23 == r0) { - /* Next insn is delay slot */ - pc=0x62488; - continue; - } - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - if(r2 > 0) { - /* Next insn is delay slot */ - pc=0x6240c; - continue; - } - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x62480; - pc=0x68e00; - run_68e00(); return; - case 0x62480: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6240c; - continue; - } - case 0x62488: - r3 = readPages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff]; - addr=r18+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = r3 + 1; - r18 = r18 - r20; - r21 = r21 + r18; - writePages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff] = r3; - r20 = r19 + r0; - /* Next insn is delay slot */ - pc=0x6147c; - run_61400(); return; - case 0x624ac: - r2 = r0 + 2; - if(r3 != r2) { - /* Next insn is delay slot */ - pc=0x61d8c; - run_61c00(); return; - } - r3 = r0 + 3; - /* Next insn is delay slot */ - pc=0x61a80; - run_61a00(); return; - case 0x624c4: - r2 = r0 + 3; - if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x61da4; - run_61c00(); return; - } - r2 = r0 + 5; - if(r18 == r2) { - /* Next insn is delay slot */ - pc=0x61da4; - run_61c00(); return; - } - /* Next insn is delay slot */ - pc=0x61ab4; - run_61a00(); return; - case 0x624e4: - r3 = readPages[(r29+660)>>>12][((r29+660)>>>2)&0x3ff]; - r7 = readPages[(r29+652)>>>12][((r29+652)>>>2)&0x3ff]; - addr=r19+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r5 = r10 + r0; - writePages[(r29+688)>>>12][((r29+688)>>>2)&0x3ff] = r8; - writePages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff] = r10; - r4 = r17 + r0; - r6 = r0 + r0; - /* Next insn is delay slot */ - pc=r3; - r31=0x6250c; - return; - case 0x6250c: - r3 = r18 & 32; - r8 = readPages[(r29+688)>>>12][((r29+688)>>>2)&0x3ff]; - r10 = readPages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x62600; - run_62600(); return; - } - case 0x62520: - r3 = readPages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff]; - r20 = r20 + 4; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - case 0x6252c: - r3 = readPages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff]; - r3 = r3 + 1; - writePages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x61f04; - run_61e00(); return; - case 0x62544: - r9 = r19 & 2; - if(r9 != r0) { - /* Next insn is delay slot */ - pc=0x61c38; - run_61c00(); return; - } - f12 = f0; - f13 = f1; - r18 = r20 + 4; - r19 = readPages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x62564; - pc=0x37a00; - run_37a00(); return; - case 0x62564: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x62878; - run_62800(); return; - } - f20=Float.floatToRawIntBits((float)(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = f20; - r20 = r18 + r0; - /* Next insn is delay slot */ - pc=0x61c48; - run_61c00(); return; - case 0x62580: - r2 = r0 + -1409; - r18 = r18 & r2; - /* Next insn is delay slot */ - pc=0x61e9c; - run_61e00(); return; - case 0x62590: - r4 = r19 & 1792; - r2 = r0 + 1792; - if(r4 != r2) { - /* Next insn is delay slot */ - pc=0x61d8c; - run_61c00(); return; - } - r19 = r19 & r11; - r3 = r0 + 1; - /* Next insn is delay slot */ - pc=0x61a80; - run_61a00(); return; - case 0x625b0: - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x625c0; - pc=0x68e00; - run_68e00(); return; - case 0x625c0: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x62334; - run_62200(); return; - } - r22 = r20 + r0; - r16 = readPages[(r29+668)>>>12][((r29+668)>>>2)&0x3ff]; - r20 = readPages[(r29+672)>>>12][((r29+672)>>>2)&0x3ff]; - if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x62344; - run_62200(); return; - } - /* Next insn is delay slot */ - pc=0x6178c; - run_61600(); return; - case 0x625e4: - r18 = readPages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff]; - r20 = r20 + 4; - /* Next insn is delay slot */ - pc=0x6227c; - run_62200(); return; - case 0x625f4: - r19 = r29 + 640; - /* Next insn is delay slot */ - pc=0x62390; - run_62200(); return; - case 0x62600: - pc=0x62600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_62600() throws ExecutionException { /* 0x62600 - 0x62800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x62600: - r3 = r18 & 4; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x62520; - run_62400(); return; - } - r3 = readPages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff]; - r20 = r20 + 4; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x6252c; - run_62400(); return; - case 0x62620: - addr=r19+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - r22 = r19 + -1; - r4 = r17 + r0; - r6 = r30 + r0; - writePages[(r29+688)>>>12][((r29+688)>>>2)&0x3ff] = r8; - writePages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff] = r10; - r19 = r22 + r0; - /* Next insn is delay slot */ - r31=0x62644; - pc=0x68c00; - run_68c00(); return; - case 0x62644: - r10 = readPages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff]; - r8 = readPages[(r29+688)>>>12][((r29+688)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x61ef0; - run_61e00(); return; - case 0x62654: - r3 = readPages[(r29+676)>>>12][((r29+676)>>>2)&0x3ff]; - r6 = r0 + r0; - r5 = r3 + 1; - r4 = r17 + r0; - r7 = r0 + 10; - writePages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff] = r10; - /* Next insn is delay slot */ - r31=0x62674; - pc=0x43200; - run_43200(); return; - case 0x62674: - r3 = readPages[(r29+668)>>>12][((r29+668)>>>2)&0x3ff]; - r22 = readPages[(r29+676)>>>12][((r29+676)>>>2)&0x3ff]; - r10 = readPages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff]; - r6 = r2 - r3; - case 0x62684: - r2 = r29 + 363; - r2 = ((r22 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x62698; - continue; - } - r22 = r29 + 362; - case 0x62698: - r2 = 7 << 16; - r4 = r22 + r0; - r5 = r2 + 2764; - writePages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff] = r10; - /* Next insn is delay slot */ - r31=0x626b0; - pc=0x42000; - run_42000(); return; - case 0x626b0: - r10 = readPages[(r29+696)>>>12][((r29+696)>>>2)&0x3ff]; - r4 = r17 + r0; - r5 = r10 + r0; - r6 = r0 + r0; - /* Next insn is delay slot */ - r31=0x626c8; - pc=0x66c00; - run_66c00(); return; - case 0x626c8: - r2 = r19 & 1; - f20 = f0; - f21 = f1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x62544; - run_62400(); return; - } - /* Next insn is delay slot */ - pc=0x61c38; - run_61c00(); return; - case 0x626e0: - r3 = r0 + -2; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x6230c; - run_62200(); return; - } - r20 = r22 + r0; - /* Next insn is delay slot */ - pc=0x62324; - run_62200(); return; - case 0x626f8: - r20 = r0 + r0; - /* Next insn is delay slot */ - pc=0x62324; - run_62200(); return; - case 0x62704: - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x6178c; - run_61600(); return; - } - r21 = r21 + r18; - /* Next insn is delay slot */ - pc=0x6147c; - run_61400(); return; - case 0x62718: - r5 = readPages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff]; - r4 = r17 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r30; - r6 = r0 + 1; - r7 = r23 + r0; - r18 = r20 + 4; - /* Next insn is delay slot */ - r31=0x62738; - pc=0x69000; - run_69000(); return; - case 0x62738: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6178c; - run_61600(); return; - } - r3 = readPages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff]; - r21 = r2 + r21; - r3 = r3 + 1; - writePages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff] = r3; - r20 = r18 + r0; - /* Next insn is delay slot */ - pc=0x6147c; - run_61400(); return; - case 0x6275c: - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x6276c; - pc=0x68e00; - run_68e00(); return; - case 0x6276c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x616fc; - run_61600(); return; - } - /* Next insn is delay slot */ - pc=0x6178c; - run_61600(); return; - case 0x6277c: - r3 = readPages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff]; - r4 = readPages[(r29+664)>>>12][((r29+664)>>>2)&0x3ff]; - r18 = r3 - r4; - r6 = r0 - r18; - if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x62684; - continue; - } - /* Next insn is delay slot */ - pc=0x61c14; - run_61c00(); return; - case 0x627a0: - r2 = readPages[(r20+0)>>>12][((r20+0)>>>2)&0x3ff]; - r20 = r20 + 4; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r21; - /* Next insn is delay slot */ - pc=0x6147c; - run_61400(); return; - case 0x627b4: - /* Next insn is delay slot */ - r31=0x627bc; - pc=0x5a800; - run_5a800(); return; - case 0x627bc: - if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x6178c; - run_61600(); return; - } - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r4 = r29 + 24; - r18 = r16 + 1; - r16 = r4 + r16; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r3 = readPages[(r29+656)>>>12][((r29+656)>>>2)&0x3ff]; - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r4 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r2 = r2 + 1; - r4 = r4 + -1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r4; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r2; - r4 = r17 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - r5 = r19 + r0; - case 0x62800: - pc=0x62800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_62800() throws ExecutionException { /* 0x62800 - 0x62a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x62800: - r6 = r29 + 24; - r7 = r18 + r0; - /* Next insn is delay slot */ - r31=0x62810; - pc=0x66000; - run_66000(); return; - case 0x62810: - r4 = r0 + -1; - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x6178c; - run_61600(); return; - } - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x62894; - continue; - } - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = r0; - r4 = r0 + r0; - case 0x6282c: - /* Next insn is delay slot */ - r31=0x62834; - pc=0x65e00; - run_65e00(); return; - case 0x62834: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x629a0; - continue; - } - r16 = readPages[(r29+664)>>>12][((r29+664)>>>2)&0x3ff]; - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x623d4; - run_62200(); return; - } - case 0x62848: - r18 = r18 + -1; - r5 = r29 + 24; - r2 = r5 + r18; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r5 = tmp; - r4 = r17 + r0; - r6 = r30 + r0; - /* Next insn is delay slot */ - r31=0x62868; - pc=0x68c00; - run_68c00(); return; - case 0x62868: - if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x62848; - continue; - } - /* Next insn is delay slot */ - pc=0x623d4; - run_62200(); return; - case 0x62878: - r4 = r0 + r0; - /* Next insn is delay slot */ - r31=0x62884; - pc=0x66a00; - run_66a00(); return; - case 0x62884: - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = f0; - r20 = r18 + r0; - /* Next insn is delay slot */ - pc=0x61c48; - run_61c00(); return; - case 0x62894: - if(r2 != r22) { - /* Next insn is delay slot */ - pc=0x629c4; - continue; - } - r16 = r18 + r0; - case 0x628a0: - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - if(r2 > 0) { - /* Next insn is delay slot */ - pc=0x623a0; - run_62200(); return; - } - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x628c0; - pc=0x68e00; - run_68e00(); return; - case 0x628c0: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x623a0; - run_62200(); return; - } - r6 = r16 + r0; - r16 = readPages[(r29+664)>>>12][((r29+664)>>>2)&0x3ff]; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x6178c; - run_61600(); return; - } - /* Next insn is delay slot */ - pc=0x623d4; - run_62200(); return; - case 0x628e0: - r2 = ((r10 & 0xffffffffL) < (r22 & 0xffffffffL)) ? 1 : 0; - r23 = r22 + r0; - r16 = r10 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61740; - run_61600(); return; - } - case 0x628f4: - r23 = r23 + -1; - addr=r23+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - r4 = r17 + r0; - r6 = r30 + r0; - /* Next insn is delay slot */ - r31=0x6290c; - pc=0x68c00; - run_68c00(); return; - case 0x6290c: - if(r23 != r16) { - /* Next insn is delay slot */ - pc=0x628f4; - continue; - } - r2 = readPages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x617b4; - run_61600(); return; - case 0x62920: - r2 = ((r10 & 0xffffffffL) < (r22 & 0xffffffffL)) ? 1 : 0; - r23 = r22 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61740; - run_61600(); return; - } - r16 = r10 + r0; - case 0x62934: - r23 = r23 + -1; - addr=r23+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - r4 = r17 + r0; - r6 = r30 + r0; - /* Next insn is delay slot */ - r31=0x6294c; - pc=0x68c00; - run_68c00(); return; - case 0x6294c: - if(r23 != r16) { - /* Next insn is delay slot */ - pc=0x62934; - continue; - } - r2 = readPages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x617b4; - run_61600(); return; - case 0x62960: - r2 = ((r10 & 0xffffffffL) < (r22 & 0xffffffffL)) ? 1 : 0; - r23 = r22 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x61740; - run_61600(); return; - } - r16 = r10 + r0; - case 0x62974: - r23 = r23 + -1; - addr=r23+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - r4 = r17 + r0; - r6 = r30 + r0; - /* Next insn is delay slot */ - r31=0x6298c; - pc=0x68c00; - run_68c00(); return; - case 0x6298c: - if(r23 != r16) { - /* Next insn is delay slot */ - pc=0x62974; - continue; - } - r2 = readPages[(r29+648)>>>12][((r29+648)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x617b4; - run_61600(); return; - case 0x629a0: - r3 = readPages[(r29+668)>>>12][((r29+668)>>>2)&0x3ff]; - r21 = r21 + r18; - r23 = r23 + -1; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x629d0; - continue; - } - r19 = r19 + 4; - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x628a0; - continue; - case 0x629c4: - r4 = readPages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x6282c; - continue; - case 0x629d0: - r16 = r0 + r0; - /* Next insn is delay slot */ - pc=0x628a0; - continue; - case 0x62a00: - pc=0x62a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_62a00() throws ExecutionException { /* 0x62a00 - 0x62c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x62a00: - r5 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x48860; - run_48800(); return; - case 0x62c00: - pc=0x62c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_62c00() throws ExecutionException { /* 0x62c00 - 0x62e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x62c00: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x48cd0; - run_48c00(); return; - case 0x62e00: - pc=0x62e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_62e00() throws ExecutionException { /* 0x62e00 - 0x63000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x62e00: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; + r4= page[(r28+-31512)>>>2]; r6 = r5 + r0; r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x48960; - run_48800(); return; - case 0x63000: - pc=0x63000; + pc=0x56f50; + run_56800(); return; + case 0x5d000: + pc=0x5d000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_63000() throws ExecutionException { /* 0x63000 - 0x63200 */ + private final void run_5d000() throws ExecutionException { /* 0x5d000 - 0x5d800 */ int addr, tmp; for(;;) { switch(pc) { - case 0x63000: - r29 = r29 + -32; - r2 = r4 + r0; - r4 = r29 + 40; - r3 = r5 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r4; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r6; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r7; - r5 = r2 + r0; - r7 = r6 + r0; - r6 = r3 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x63038; - pc=0x48820; - run_48800(); return; - case 0x63038: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x63200: - pc=0x63200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_63200() throws ExecutionException { /* 0x63200 - 0x63400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x63200: - r2 = readPages[(r5+100)>>>12][((r5+100)>>>2)&0x3ff]; + case 0x5d000: + r2= page[(r5+100)>>>2]; r29 = r29 + -56; r2 = r2 & 8192; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r22; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r23; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r21; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; + page[(r29+44)>>>2] = r22; + page[(r29+32)>>>2] = r19; + page[(r29+52)>>>2] = r31; + page[(r29+48)>>>2] = r23; + page[(r29+40)>>>2] = r21; + page[(r29+36)>>>2] = r20; + page[(r29+28)>>>2] = r18; + page[(r29+24)>>>2] = r17; + page[(r29+20)>>>2] = r16; r19 = r5 + r0; r22 = r6 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x63308; + pc=0x5d108; continue; } - r2 = readPages[(r6+8)>>>12][((r6+8)>>>2)&0x3ff]; + r2= page[(r6+8)>>>2]; r20 = r4 + r0; - r23 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; + r23= page[(r6+0)>>>2]; r21 = r0 + -1; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x632fc; + pc=0x5d0fc; continue; } - case 0x63258: - r18 = readPages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff]; - r16 = readPages[(r23+0)>>>12][((r23+0)>>>2)&0x3ff]; + case 0x5d058: + r18= page[(r23+4)>>>2]; + r16= page[(r23+0)>>>2]; r18 = r18 >>> 2; r17 = r0 + r0; if(r18 > 0) { - /* Next insn is delay slot */ - pc=0x63288; + pc=0x5d088; continue; } - /* Next insn is delay slot */ - pc=0x632e4; + pc=0x5d0e4; continue; - case 0x63278: + case 0x5d078: r17 = r17 + 1; r16 = r16 + 4; if(r18 == r17) { - /* Next insn is delay slot */ - pc=0x632e0; + pc=0x5d0e0; continue; } - case 0x63288: - r5 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + case 0x5d088: + r5= page[(r16+0)>>>2]; r4 = r20 + r0; r6 = r19 + r0; - /* Next insn is delay slot */ - r31=0x6329c; - pc=0x65800; - run_65800(); return; - case 0x6329c: + r31=0x5d09c; + pc=0x5d800; + run_5d800(); return; + case 0x5d09c: if(r2 != r21) { - /* Next insn is delay slot */ - pc=0x63278; + pc=0x5d078; continue; } r2 = r0 + -1; - case 0x632a8: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r23 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r21 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r20 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - writePages[(r22+8)>>>12][((r22+8)>>>2)&0x3ff] = r0; - writePages[(r22+4)>>>12][((r22+4)>>>2)&0x3ff] = r0; - r22 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + case 0x5d0a8: + r31= page[(r29+52)>>>2]; + r23= page[(r29+48)>>>2]; + r21= page[(r29+40)>>>2]; + r20= page[(r29+36)>>>2]; + r19= page[(r29+32)>>>2]; + r18= page[(r29+28)>>>2]; + r17= page[(r29+24)>>>2]; + r16= page[(r29+20)>>>2]; + page[(r22+8)>>>2] = r0; + page[(r22+4)>>>2] = r0; + r22= page[(r29+44)>>>2]; r29 = r29 + 56; - /* Next insn is delay slot */ pc=r31; return; - case 0x632e0: - r2 = readPages[(r22+8)>>>12][((r22+8)>>>2)&0x3ff]; - case 0x632e4: + case 0x5d0e0: + r2= page[(r22+8)>>>2]; + case 0x5d0e4: r18 = r18 << 2; r2 = r2 - r18; - writePages[(r22+8)>>>12][((r22+8)>>>2)&0x3ff] = r2; + page[(r22+8)>>>2] = r2; r23 = r23 + 8; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63258; + pc=0x5d058; continue; } - case 0x632fc: + case 0x5d0fc: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x632a8; + pc=0x5d0a8; continue; - case 0x63308: - /* Next insn is delay slot */ - r31=0x63310; - pc=0x59c00; - run_59c00(); return; - case 0x63310: - /* Next insn is delay slot */ - pc=0x632a8; + case 0x5d108: + r31=0x5d110; + pc=0x59e00; + run_59800(); return; + case 0x5d110: + pc=0x5d0a8; continue; - case 0x63400: - pc=0x63400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_63400() throws ExecutionException { /* 0x63400 - 0x63600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x63400: - r3 = readPages[(r6+8)>>>12][((r6+8)>>>2)&0x3ff]; + case 0x5d200: + r3= page[(r6+8)>>>2]; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x63418; + pc=0x5d218; continue; } - /* Next insn is delay slot */ - pc=0x63200; - run_63200(); return; - case 0x63418: - writePages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff] = r0; + pc=0x5d000; + continue; + case 0x5d218: + page[(r6+4)>>>2] = r0; r2 = r0 + r0; - /* Next insn is delay slot */ pc=r31; return; - case 0x63600: - pc=0x63600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_63600() throws ExecutionException { /* 0x63600 - 0x63800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x63600: - r29 = r29 + -1248; - writePages[(r29+1236)>>>12][((r29+1236)>>>2)&0x3ff] = r23; - writePages[(r29+1224)>>>12][((r29+1224)>>>2)&0x3ff] = r20; - writePages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff] = r18; - writePages[(r29+1244)>>>12][((r29+1244)>>>2)&0x3ff] = r31; - writePages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff] = r30; - writePages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff] = r22; - writePages[(r29+1228)>>>12][((r29+1228)>>>2)&0x3ff] = r21; - writePages[(r29+1220)>>>12][((r29+1220)>>>2)&0x3ff] = r19; - writePages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff] = r17; - writePages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff] = r16; - r18 = r4 + r0; - r23 = r5 + r0; - r20 = r6 + r0; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r7; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x63654; - continue; - } - r2 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6414c; - run_64000(); return; - } - case 0x63654: - addr=r23+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ - r3 = tmp; - r2 = r3 & 65535; - r4 = r2 & 8192; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x63688; - continue; - } - r4 = readPages[(r23+100)>>>12][((r23+100)>>>2)&0x3ff]; - r2 = r0 + -8193; - r3 = r3 | 8192; - r2 = r4 & r2; - writePages[(r23+100)>>>12][((r23+100)>>>2)&0x3ff] = r2; - addr=r23+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r3 & 65535; - case 0x63688: - r4 = r2 & 8; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x63fd4; - run_63e00(); return; - } - r4 = readPages[(r23+16)>>>12][((r23+16)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x63fd4; - run_63e00(); return; - } - r2 = r2 & 26; - r4 = r0 + 10; - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x64004; - run_64000(); return; - } - case 0x636b4: - r3 = r29 + 1080; - writePages[(r29+1160)>>>12][((r29+1160)>>>2)&0x3ff] = r3; - r4 = readPages[(r29+1160)>>>12][((r29+1160)>>>2)&0x3ff]; - r3 = r29 + 1079; - r21 = r29 + 16; - r10 = 7 << 16; - writePages[(r29+1164)>>>12][((r29+1164)>>>2)&0x3ff] = r3; - r3 = r4 - r3; - writePages[(r29+1192)>>>12][((r29+1192)>>>2)&0x3ff] = r3; - writePages[(r29+1144)>>>12][((r29+1144)>>>2)&0x3ff] = r21; - writePages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff] = r0; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r0; - writePages[(r29+1188)>>>12][((r29+1188)>>>2)&0x3ff] = r0; - writePages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff] = r0; - r22 = r10 + 4292; - r3 = r21 + r0; - writePages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff] = r18; - writePages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff] = r23; - r16 = r20 + r0; - case 0x63700: - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x64728; - run_64600(); return; - } - r4 = r0 + 37; - r17 = r16 + r0; - if(r2 != r4) { - /* Next insn is delay slot */ - pc=0x63730; - continue; - } - /* Next insn is delay slot */ - pc=0x63798; - continue; - case 0x63728: - if(r2 == r4) { - /* Next insn is delay slot */ - pc=0x63744; - continue; - } - case 0x63730: - r17 = r17 + 1; - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63728; - continue; - } - case 0x63744: - r19 = r17 - r16; - if(r19 == r0) { - /* Next insn is delay slot */ - pc=0x63798; - continue; - } - r2 = readPages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff]; - r4 = readPages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff]; - r2 = r2 + 1; - r4 = r19 + r4; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r2; - r2 = r2 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r16; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r19; - writePages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff] = r4; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x637fc; - continue; - } - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x64640; - run_64600(); return; - } - r5 = readPages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff]; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r0; - r5 = r5 + r19; - r3 = r21 + r0; - writePages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff] = r5; - case 0x63798: - addr=r17+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x647a0; - run_64600(); return; - } - r2 = r17 + 1; - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r6 = r0 + r0; - r30 = r0 + -1; - r17 = r0 + r0; - r23 = r0 + r0; - r7 = r0 + 42; - case 0x637c4: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r16 = r2 + 1; - case 0x637cc: - r2 = r4 + -32; - r5 = (r2&0xffffffffL) < (89&0xffffffffL) ? 1 : 0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x6457c; - run_64400(); return; - } - r5 = 7 << 16; - r2 = r2 << 2; - r5 = r5 + 3920; - r2 = r5 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x637fc: - r3 = r3 + 8; - case 0x63800: - pc=0x63800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_63800() throws ExecutionException { /* 0x63800 - 0x63a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x63800: - r5 = readPages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff]; - r5 = r5 + r19; - writePages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=0x63798; - run_63600(); return; - case 0x63818: - r23 = r23 | 16; - case 0x6381c: - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x637c4; - run_63600(); return; - case 0x63828: - r23 = r23 | 16; - case 0x6382c: - r2 = r23 & 16; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63c68; - run_63c00(); return; - } - r2 = r23 & 64; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x63c68; - run_63c00(); return; - } - r5 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - r4 = r0 + 1; - addr=r5+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r5 = r5 + 4; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=0x63884; - continue; - case 0x63860: - r23 = r23 | 16; - case 0x63864: - r2 = r23 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x642e8; - run_64200(); return; - } - case 0x63870: - r5 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - r4 = r0 + r0; - r2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r5 = r5 + 4; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r5; - case 0x63884: - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r19 = r30 + r0; - r5 = r0 + r0; - case 0x63890: - if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x638a0; - continue; - } - r6 = r0 + -129; - r23 = r23 & r6; - case 0x638a0: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63d50; - run_63c00(); return; - } - if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x63d50; - run_63c00(); return; - } - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x64178; - run_64000(); return; - } - case 0x638b8: - r18 = r29 + 1080; - case 0x638bc: - r2 = r19 < r30 ? 1 : 0; - writePages[(r29+1168)>>>12][((r29+1168)>>>2)&0x3ff] = r19; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x638d0; - continue; - } - writePages[(r29+1168)>>>12][((r29+1168)>>>2)&0x3ff] = r30; - case 0x638d0: - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x638e8; - continue; - } - r2 = readPages[(r29+1168)>>>12][((r29+1168)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r29+1168)>>>12][((r29+1168)>>>2)&0x3ff] = r2; - case 0x638e8: - r15 = r23 & 2; - if(r15 == r0) { - /* Next insn is delay slot */ - pc=0x63904; - continue; - } - r4 = readPages[(r29+1168)>>>12][((r29+1168)>>>2)&0x3ff]; - r4 = r4 + 2; - writePages[(r29+1168)>>>12][((r29+1168)>>>2)&0x3ff] = r4; - case 0x63904: - r20 = r23 & 132; - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x63cc4; - run_63c00(); return; - } - r5 = readPages[(r29+1168)>>>12][((r29+1168)>>>2)&0x3ff]; - r9 = r17 - r5; - if(r9 <= 0) { - /* Next insn is delay slot */ - pc=0x63cc4; - run_63c00(); return; - } - r2 = r9 < 17 ? 1 : 0; - r8 = readPages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x64854; - run_64800(); return; - } - writePages[(r29+1200)>>>12][((r29+1200)>>>2)&0x3ff] = r16; - r4 = readPages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff]; - writePages[(r29+1184)>>>12][((r29+1184)>>>2)&0x3ff] = r22; - r25 = r0 + 16; - writePages[(r29+1196)>>>12][((r29+1196)>>>2)&0x3ff] = r15; - r16 = r9 + r0; - /* Next insn is delay slot */ - pc=0x63970; - continue; - case 0x63954: - r7 = r4 + 2; - r3 = r3 + 8; - r4 = r2 + r0; - case 0x63960: - r16 = r16 + -16; - r2 = r16 < 17 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x639b8; - continue; - } - case 0x63970: - r2 = r4 + 1; - r8 = r8 + 16; - r5 = r2 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r22; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r25; - writePages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff] = r8; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r2; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x63954; - continue; - } - if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x63c88; - run_63c00(); return; - } - r16 = r16 + -16; - r2 = r16 < 17 ? 1 : 0; - r4 = r0 + r0; - r7 = r0 + 1; - r3 = r21 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x63970; - continue; - } - case 0x639b8: - r9 = r16 + r0; - r15 = readPages[(r29+1196)>>>12][((r29+1196)>>>2)&0x3ff]; - r16 = readPages[(r29+1200)>>>12][((r29+1200)>>>2)&0x3ff]; - case 0x639c4: - r2 = readPages[(r29+1184)>>>12][((r29+1184)>>>2)&0x3ff]; - r5 = r9 + r8; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - r2 = r7 < 8 ? 1 : 0; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r9; - writePages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff] = r5; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r7; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6415c; - run_64000(); return; - } - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = r3 + 8; - r4 = r7 + 1; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63ce0; - run_63c00(); return; - } - case 0x639fc: - if(r15 == r0) { - /* Next insn is delay slot */ - pc=0x63a38; - run_63a00(); return; - } - case 0x63a00: - pc=0x63a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_63a00() throws ExecutionException { /* 0x63a00 - 0x63c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x63a00: - r2 = r29 + 1156; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - r2 = r0 + 2; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r2; - r5 = r5 + 2; - r2 = r4 < 8 ? 1 : 0; - writePages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff] = r5; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r4; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x640e0; - run_64000(); return; - } - r7 = r4 + r0; - r3 = r3 + 8; - r4 = r4 + 1; - case 0x63a38: - r2 = r0 + 128; - if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x63ebc; - run_63e00(); return; - } - case 0x63a44: - r20 = r30 - r19; - if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x63b0c; - continue; - } - r2 = r20 < 17 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x64790; - run_64600(); return; - } - r4 = 7 << 16; - r8 = r4 + 4276; - writePages[(r29+1184)>>>12][((r29+1184)>>>2)&0x3ff] = r16; - r30 = r0 + 16; - r16 = r8 + r0; - /* Next insn is delay slot */ - pc=0x63a94; - continue; - case 0x63a78: - r4 = r7 + 2; - r3 = r3 + 8; - r7 = r2 + r0; - case 0x63a84: - r20 = r20 + -16; - r2 = r20 < 17 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63adc; - continue; - } - case 0x63a94: - r2 = r7 + 1; - r5 = r5 + 16; - r4 = r2 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r16; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r30; - writePages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff] = r5; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r2; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x63a78; - continue; - } - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x63d1c; - run_63c00(); return; - } - r20 = r20 + -16; - r2 = r20 < 17 ? 1 : 0; - r7 = r0 + r0; - r4 = r0 + 1; - r3 = r21 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x63a94; - continue; - } - case 0x63adc: - r8 = r16 + r0; - r16 = readPages[(r29+1184)>>>12][((r29+1184)>>>2)&0x3ff]; - case 0x63ae4: - r5 = r5 + r20; - r2 = r4 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r8; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r20; - writePages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff] = r5; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r4; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x63e80; - run_63e00(); return; - } - r3 = r3 + 8; - r4 = r4 + 1; - case 0x63b0c: - r14 = r19 + r5; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r4; - r4 = r4 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r18; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r19; - writePages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff] = r14; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x63ea4; - run_63e00(); return; - } - if(r14 != r0) { - /* Next insn is delay slot */ - pc=0x64614; - run_64600(); return; - } - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r0; - r3 = r21 + r0; - case 0x63b3c: - r12 = r23 & 4; - if(r12 == r0) { - /* Next insn is delay slot */ - pc=0x63c0c; - run_63c00(); return; - } - r5 = readPages[(r29+1168)>>>12][((r29+1168)>>>2)&0x3ff]; - r18 = r17 - r5; - if(r18 <= 0) { - /* Next insn is delay slot */ - pc=0x63c0c; - run_63c00(); return; - } - r2 = r18 < 17 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x648a8; - run_64800(); return; - } - r4 = readPages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff]; - writePages[(r29+1184)>>>12][((r29+1184)>>>2)&0x3ff] = r22; - r19 = r0 + 16; - r20 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r23 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x63ba0; - continue; - case 0x63b84: - r5 = r4 + 2; - r3 = r3 + 8; - r4 = r2 + r0; - case 0x63b90: - r18 = r18 + -16; - r2 = r18 < 17 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63be8; - continue; - } - case 0x63ba0: - r2 = r4 + 1; - r14 = r14 + 16; - r5 = r2 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r22; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r19; - writePages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff] = r14; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r2; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x63b84; - continue; - } - if(r14 != r0) { - /* Next insn is delay slot */ - pc=0x63e4c; - run_63e00(); return; - } - r18 = r18 + -16; - r2 = r18 < 17 ? 1 : 0; - r4 = r0 + r0; - r5 = r0 + 1; - r3 = r21 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x63ba0; - continue; - } - case 0x63be8: - r2 = readPages[(r29+1184)>>>12][((r29+1184)>>>2)&0x3ff]; - r14 = r14 + r18; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r5; - r5 = r5 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r18; - case 0x63c00: - pc=0x63c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_63c00() throws ExecutionException { /* 0x63c00 - 0x63e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x63c00: - writePages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff] = r14; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x6451c; - run_64400(); return; - } - case 0x63c0c: - r19 = readPages[(r29+1168)>>>12][((r29+1168)>>>2)&0x3ff]; - r2 = r19 < r17 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x63c24; - continue; - } - r19 = r17 + r0; - case 0x63c24: - r3 = readPages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff]; - r3 = r3 + r19; - writePages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff] = r3; - if(r14 == r0) { - /* Next insn is delay slot */ - pc=0x63c58; - continue; - } - r4 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r5 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r6 = r29 + 1144; - /* Next insn is delay slot */ - r31=0x63c50; - pc=0x63200; - run_63200(); return; - case 0x63c50: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63df8; - continue; - } - case 0x63c58: - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r0; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63700; - run_63600(); return; - case 0x63c68: - r4 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - r2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r4 = r4 + 4; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r4; - r4 = r0 + 1; - /* Next insn is delay slot */ - pc=0x63884; - run_63800(); return; - case 0x63c88: - r4 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r5 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r6 = r29 + 1144; - writePages[(r29+1204)>>>12][((r29+1204)>>>2)&0x3ff] = r25; - /* Next insn is delay slot */ - r31=0x63ca0; - pc=0x63200; - run_63200(); return; - case 0x63ca0: - r25 = readPages[(r29+1204)>>>12][((r29+1204)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63df8; - continue; - } - r4 = readPages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff]; - r8 = readPages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff]; - r7 = r4 + 1; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63960; - run_63800(); return; - case 0x63cc4: - r7 = readPages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff]; - r5 = readPages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff]; - r4 = r7 + 1; - case 0x63cd0: - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x639fc; - run_63800(); return; - } - case 0x63ce0: - r2 = r29 + 1158; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - r2 = r0 + 1; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r2; - r5 = r5 + 1; - r2 = r4 < 8 ? 1 : 0; - writePages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff] = r5; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r4; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x640c4; - run_64000(); return; - } - r7 = r4 + r0; - r3 = r3 + 8; - r4 = r4 + 1; - /* Next insn is delay slot */ - pc=0x639fc; - run_63800(); return; - case 0x63d1c: - r4 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r5 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r6 = r29 + 1144; - /* Next insn is delay slot */ - r31=0x63d30; - pc=0x63200; - run_63200(); return; - case 0x63d30: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63df8; - continue; - } - r7 = readPages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff]; - r5 = readPages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff]; - r4 = r7 + 1; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63a84; - run_63a00(); return; - case 0x63d50: - r6 = r0 + 1; - if(r4 == r6) { - /* Next insn is delay slot */ - pc=0x640fc; - run_64000(); return; - } - r6 = r0 + 2; - r18 = r29 + 1080; - if(r4 != r6) { - /* Next insn is delay slot */ - pc=0x63da4; - continue; - } - r6 = readPages[(r29+1188)>>>12][((r29+1188)>>>2)&0x3ff]; - case 0x63d70: - r4 = r2 & 15; - r4 = r6 + r4; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r18 = r18 + -1; - r2 = r2 >>> 4; - addr=r18+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63d70; - continue; - } - case 0x63d90: - r4 = readPages[(r29+1160)>>>12][((r29+1160)>>>2)&0x3ff]; - r19 = r4 - r18; - /* Next insn is delay slot */ - pc=0x638bc; - run_63800(); return; - case 0x63da4: - r4 = r2 & 7; - r18 = r18 + -1; - r4 = r4 + 48; - r2 = r2 >>> 3; - addr=r18+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63da4; - continue; - } - r2 = r23 & 1; - r6 = r18 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x63de4; - continue; - } - r2 = r0 + 48; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x63d90; - continue; - } - r18 = r18 + -1; - addr=r6+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x63de4: - r2 = readPages[(r29+1160)>>>12][((r29+1160)>>>2)&0x3ff]; - r19 = r2 - r18; - /* Next insn is delay slot */ - pc=0x638bc; - run_63800(); return; - case 0x63df8: - r23 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - case 0x63e00: - pc=0x63e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_63e00() throws ExecutionException { /* 0x63e00 - 0x64000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x63e00: - addr=r23+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r2 = r2 & 64; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63eb0; - continue; - } - r2 = readPages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff]; - case 0x63e18: - r31 = readPages[(r29+1244)>>>12][((r29+1244)>>>2)&0x3ff]; - r30 = readPages[(r29+1240)>>>12][((r29+1240)>>>2)&0x3ff]; - r23 = readPages[(r29+1236)>>>12][((r29+1236)>>>2)&0x3ff]; - r22 = readPages[(r29+1232)>>>12][((r29+1232)>>>2)&0x3ff]; - r21 = readPages[(r29+1228)>>>12][((r29+1228)>>>2)&0x3ff]; - r20 = readPages[(r29+1224)>>>12][((r29+1224)>>>2)&0x3ff]; - r19 = readPages[(r29+1220)>>>12][((r29+1220)>>>2)&0x3ff]; - r18 = readPages[(r29+1216)>>>12][((r29+1216)>>>2)&0x3ff]; - r17 = readPages[(r29+1212)>>>12][((r29+1212)>>>2)&0x3ff]; - r16 = readPages[(r29+1208)>>>12][((r29+1208)>>>2)&0x3ff]; - r29 = r29 + 1248; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x63e4c: - r4 = r20 + r0; - r5 = r23 + r0; - r6 = r29 + 1144; - /* Next insn is delay slot */ - r31=0x63e60; - pc=0x63200; - run_63200(); return; - case 0x63e60: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63e00; - continue; - } - r4 = readPages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff]; - r14 = readPages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff]; - r5 = r4 + 1; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63b90; - run_63a00(); return; - case 0x63e80: - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x646f4; - run_64600(); return; - } - r2 = r0 + 1; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r19; - writePages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff] = r19; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r2; - r14 = r19 + r0; - r3 = r21 + r0; - case 0x63ea4: - r3 = r3 + 8; - /* Next insn is delay slot */ - pc=0x63b3c; - run_63a00(); return; - case 0x63eb0: - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x63e18; - continue; - case 0x63ebc: - r2 = readPages[(r29+1168)>>>12][((r29+1168)>>>2)&0x3ff]; - r20 = r17 - r2; - if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x63a44; - run_63a00(); return; - } - r2 = r20 < 17 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x648d4; - run_64800(); return; - } - r4 = 7 << 16; - r8 = r4 + 4276; - writePages[(r29+1184)>>>12][((r29+1184)>>>2)&0x3ff] = r16; - r9 = r0 + 16; - r16 = r8 + r0; - /* Next insn is delay slot */ - pc=0x63f14; - continue; - case 0x63ef8: - r6 = r7 + 2; - r3 = r3 + 8; - r7 = r2 + r0; - case 0x63f04: - r20 = r20 + -16; - r2 = r20 < 17 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63f5c; - continue; - } - case 0x63f14: - r2 = r7 + 1; - r5 = r5 + 16; - r4 = r2 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r16; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r9; - writePages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff] = r5; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r2; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x63ef8; - continue; - } - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x63f98; - continue; - } - r20 = r20 + -16; - r2 = r20 < 17 ? 1 : 0; - r7 = r0 + r0; - r6 = r0 + 1; - r3 = r21 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x63f14; - continue; - } - case 0x63f5c: - r8 = r16 + r0; - r16 = readPages[(r29+1184)>>>12][((r29+1184)>>>2)&0x3ff]; - case 0x63f64: - r5 = r5 + r20; - r2 = r6 < 8 ? 1 : 0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r8; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r20; - writePages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff] = r5; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r6; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x646d8; - run_64600(); return; - } - r3 = r3 + 8; - r4 = r6 + 1; - r7 = r6 + r0; - /* Next insn is delay slot */ - pc=0x63a44; - run_63a00(); return; - case 0x63f98: - r4 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r5 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r6 = r29 + 1144; - writePages[(r29+1204)>>>12][((r29+1204)>>>2)&0x3ff] = r9; - /* Next insn is delay slot */ - r31=0x63fb0; - pc=0x63200; - run_63200(); return; - case 0x63fb0: - r9 = readPages[(r29+1204)>>>12][((r29+1204)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63df8; - run_63c00(); return; - } - r7 = readPages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff]; - r5 = readPages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff]; - r6 = r7 + 1; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63f04; - continue; - case 0x63fd4: - r4 = r18 + r0; - r5 = r23 + r0; - /* Next insn is delay slot */ - r31=0x63fe4; - pc=0x48600; - run_48600(); return; - case 0x63fe4: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63eb0; - continue; - } - addr=r23+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ - r3 = tmp; - r4 = r0 + 10; - r2 = r3 & 65535; - r2 = r2 & 26; - if(r2 != r4) { - /* Next insn is delay slot */ - pc=0x636b4; - run_63600(); return; - } - case 0x64000: - pc=0x64000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_64000() throws ExecutionException { /* 0x64000 - 0x64200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x64000: - case 0x64004: - addr=r23+14; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ - r2 = tmp; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x636b4; - run_63600(); return; - } - addr=r29+1054; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r23+28)>>>12][((r23+28)>>>2)&0x3ff]; - r4 = r0 + -3; - writePages[(r29+1068)>>>12][((r29+1068)>>>2)&0x3ff] = r2; - r2 = readPages[(r23+36)>>>12][((r23+36)>>>2)&0x3ff]; - r3 = r3 & r4; - addr=r29+1052; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r3&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+1076)>>>12][((r29+1076)>>>2)&0x3ff] = r2; - r3 = readPages[(r23+100)>>>12][((r23+100)>>>2)&0x3ff]; - r2 = r29 + 16; - r7 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - writePages[(r29+1040)>>>12][((r29+1040)>>>2)&0x3ff] = r2; - writePages[(r29+1056)>>>12][((r29+1056)>>>2)&0x3ff] = r2; - r4 = r18 + r0; - r2 = r0 + 1024; - r5 = r29 + 1040; - r6 = r20 + r0; - writePages[(r29+1140)>>>12][((r29+1140)>>>2)&0x3ff] = r3; - writePages[(r29+1048)>>>12][((r29+1048)>>>2)&0x3ff] = r2; - writePages[(r29+1060)>>>12][((r29+1060)>>>2)&0x3ff] = r2; - writePages[(r29+1064)>>>12][((r29+1064)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - r31=0x64070; - pc=0x63600; - run_63600(); return; - case 0x64070: - r21 = r2 + r0; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x64094; - continue; - } - r4 = r18 + r0; - r5 = r29 + 1040; - /* Next insn is delay slot */ - r31=0x6408c; - pc=0x39800; - run_39800(); return; - case 0x6408c: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x64920; - run_64800(); return; - } - case 0x64094: - addr=r29+1052; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r2 = r2 & 64; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x640b8; - continue; - } - addr=r23+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r2 = r2 | 64; - addr=r23+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x640b8: - r2 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63e18; - run_63e00(); return; - case 0x640c4: - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x64668; - run_64600(); return; - } - r7 = r0 + r0; - r4 = r0 + 1; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x639fc; - run_63800(); return; - case 0x640e0: - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x646a4; - run_64600(); return; - } - r7 = r0 + r0; - r4 = r0 + 1; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63a38; - run_63a00(); return; - case 0x640fc: - r4 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x64554; - run_64400(); return; - } - r18 = r29 + 1080; - r4 = r0 + 10; - case 0x64110: - if(r4 != r0) { - /* Next insn is delay slot */ - if(r4!=0) { - hi = (int)((r2 & 0xffffffffL) % (r4 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r4 & 0xffffffffL)); - } - pc=0x6411c; - continue; - } - if(r4!=0) { - hi = (int)((r2 & 0xffffffffL) % (r4 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r4 & 0xffffffffL)); - } - throw new ExecutionException("Break"); - case 0x6411c: - r18 = r18 + -1; - r6 = hi; - r6 = r6 + 48; - addr=r18+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = lo; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x64110; - continue; - } - r2 = readPages[(r29+1160)>>>12][((r29+1160)>>>2)&0x3ff]; - r19 = r2 - r18; - /* Next insn is delay slot */ - pc=0x638bc; - run_63800(); return; - case 0x6414c: - /* Next insn is delay slot */ - r31=0x64154; - pc=0x3a600; - run_3a600(); return; - case 0x64154: - /* Next insn is delay slot */ - pc=0x63654; - run_63600(); return; - case 0x6415c: - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x645ac; - run_64400(); return; - } - r7 = r0 + r0; - r4 = r0 + 1; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63cd0; - run_63c00(); return; - case 0x64178: - r2 = r23 & 1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x638b8; - run_63800(); return; - } - r2 = r0 + 48; - addr=r29+1079; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r19 = readPages[(r29+1192)>>>12][((r29+1192)>>>2)&0x3ff]; - r18 = r29 + 1079; - /* Next insn is delay slot */ - pc=0x638bc; - run_63800(); return; - case 0x6419c: - r4 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - r17 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r2 = r4 + 4; - if(r17 >= 0) { - /* Next insn is delay slot */ - pc=0x6456c; - run_64400(); return; - } - r17 = r0 - r17; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r2; - case 0x641bc: - r23 = r23 | 4; - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x637c4; - run_63600(); return; - case 0x641cc: - r6 = r0 + 43; - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x637c4; - run_63600(); return; - case 0x641dc: - r2 = r23 & 16; - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x645e8; - run_64400(); return; - } - r12 = r23 & 64; - if(r12 == r0) { - /* Next insn is delay slot */ - pc=0x645e8; - run_64400(); return; - } - r5 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - r4 = readPages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff]; - case 0x64200: - pc=0x64200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_64200() throws ExecutionException { /* 0x64200 - 0x64400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x64200: - r2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r5 = r5 + 4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r4&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=0x63700; - run_63600(); return; - case 0x64218: - r2 = 7 << 16; - r2 = r2 + 248; - writePages[(r29+1188)>>>12][((r29+1188)>>>2)&0x3ff] = r2; - r2 = r23 & 16; - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x643c8; - continue; - } - case 0x64234: - r5 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - r2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r5 = r5 + 4; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r5; - case 0x64248: - r5 = r23 & 1; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x64608; - run_64600(); return; - } - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x64608; - run_64600(); return; - } - r5 = r0 + 48; - addr=r29+1157; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - addr=r29+1156; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r23 = r23 | 2; - r4 = r0 + 2; - /* Next insn is delay slot */ - pc=0x63884; - run_63800(); return; - case 0x64278: - r23 = r23 | 64; - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x637c4; - run_63600(); return; - case 0x64288: - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r5 = r16 + 1; - if(r4 == r7) { - /* Next insn is delay slot */ - pc=0x648f4; - run_64800(); return; - } - r2 = r4 + -48; - r8 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - r30 = r0 + r0; - if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x642dc; - continue; - } - case 0x642ac: - r4 = r30 << 1; - r5 = r5 + 1; - r30 = r30 << 3; - r30 = r4 + r30; - addr=r5+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r30 = r2 + r30; - r2 = r4 + -48; - r8 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - if(r8 != r0) { - /* Next insn is delay slot */ - pc=0x642ac; - continue; - } - if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x64780; - run_64600(); return; - } - case 0x642dc: - r16 = r5 + r0; - /* Next insn is delay slot */ - pc=0x637cc; - run_63600(); return; - case 0x642e8: - r2 = r23 & 64; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x63870; - run_63800(); return; - } - r4 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - addr=r4+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r4 = r4 + 4; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r4; - r4 = r0 + r0; - /* Next insn is delay slot */ - pc=0x63884; - run_63800(); return; - case 0x64314: - r23 = r23 | 128; - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x637c4; - run_63600(); return; - case 0x64324: - r17 = r0 + r0; - r2 = r4 + -48; - case 0x6432c: - r4 = r17 << 1; - r16 = r16 + 1; - r17 = r17 << 3; - r17 = r4 + r17; - addr=r16+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r17 = r17 + r2; - r2 = r4 + -48; - r5 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x6432c; - continue; - } - /* Next insn is delay slot */ - pc=0x637cc; - run_63600(); return; - case 0x6435c: - r23 = r23 | 16; - r2 = r23 & 16; - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x64430; - run_64400(); return; - } - case 0x64370: - r2 = r23 & 64; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x64430; - run_64400(); return; - } - r5 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - addr=r5+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ - r2 = tmp; - r5 = r5 + 4; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r5; - case 0x64390: - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x64734; - run_64600(); return; - } - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - r19 = r30 + r0; - r4 = r0 + 1; - /* Next insn is delay slot */ - pc=0x63890; - run_63800(); return; - case 0x643ac: - r2 = 7 << 16; - r2 = r2 + 228; - writePages[(r29+1188)>>>12][((r29+1188)>>>2)&0x3ff] = r2; - r2 = r23 & 16; - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x64234; - continue; - } - case 0x643c8: - r2 = r23 & 64; - r5 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x64754; - run_64600(); return; - } - addr=r5+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r5 = r5 + 4; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=0x64248; - continue; - case 0x643ec: - r5 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r5 = r5 + 4; - addr=r29+1040; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x64400: - pc=0x64400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_64400() throws ExecutionException { /* 0x64400 - 0x64600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x64400: - r2 = r0 + 1; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r5; - writePages[(r29+1168)>>>12][((r29+1168)>>>2)&0x3ff] = r2; - r19 = r0 + 1; - r18 = r29 + 1040; - r30 = r0 + r0; - /* Next insn is delay slot */ - pc=0x638e8; - run_63800(); return; - case 0x64420: - r2 = r23 & 16; - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x64370; - run_64200(); return; - } - case 0x64430: - r4 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - r2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r4 = r4 + 4; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=0x64390; - run_64200(); return; - case 0x6444c: - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x6381c; - run_63800(); return; - } - r6 = r0 + 32; - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x637c4; - run_63600(); return; - case 0x64464: - r23 = r23 | 1; - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x637c4; - run_63600(); return; - case 0x64474: - r2 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r18 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r20 = r2 + 4; - if(r18 == r0) { - /* Next insn is delay slot */ - pc=0x64868; - run_64800(); return; - } - r4 = r18 + r0; - if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x647f8; - run_64600(); return; - } - r5 = r0 + r0; - r6 = r30 + r0; - writePages[(r29+1204)>>>12][((r29+1204)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x644ac; - pc=0x5b400; - run_5b400(); return; - case 0x644ac: - r3 = readPages[(r29+1204)>>>12][((r29+1204)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x648bc; - run_64800(); return; - } - r19 = r2 - r18; - r2 = r30 < r19 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x64774; - run_64600(); return; - } - case 0x644c8: - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r20; - r30 = r0 + r0; - /* Next insn is delay slot */ - pc=0x638bc; - run_63800(); return; - case 0x644dc: - r4 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - r5 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - r2 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r4 = r0 + 48; - addr=r29+1156; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r4 = r0 + 120; - addr=r29+1157; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r4 = 7 << 16; - r4 = r4 + 248; - r5 = r5 + 4; - writePages[(r29+1188)>>>12][((r29+1188)>>>2)&0x3ff] = r4; - r23 = r23 | 2; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r5; - r4 = r0 + 2; - /* Next insn is delay slot */ - pc=0x63884; - run_63800(); return; - case 0x6451c: - if(r14 != r0) { - /* Next insn is delay slot */ - pc=0x647d0; - run_64600(); return; - } - r19 = readPages[(r29+1168)>>>12][((r29+1168)>>>2)&0x3ff]; - r2 = r19 < r17 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x64768; - run_64600(); return; - } - case 0x64538: - r3 = readPages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff]; - writePages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff] = r0; - r3 = r3 + r19; - writePages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff] = r3; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63700; - run_63600(); return; - case 0x64554: - r2 = r2 + 48; - addr=r29+1079; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r19 = readPages[(r29+1192)>>>12][((r29+1192)>>>2)&0x3ff]; - r18 = r29 + 1079; - /* Next insn is delay slot */ - pc=0x638bc; - run_63800(); return; - case 0x6456c: - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r2; - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x637c4; - run_63600(); return; - case 0x6457c: - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x647a0; - run_64600(); return; - } - r5 = r0 + 1; - addr=r29+1040; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+1168)>>>12][((r29+1168)>>>2)&0x3ff] = r5; - r19 = r0 + 1; - r18 = r29 + 1040; - r30 = r0 + r0; - /* Next insn is delay slot */ - pc=0x638e8; - run_63800(); return; - case 0x645ac: - r4 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r5 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r6 = r29 + 1144; - writePages[(r29+1204)>>>12][((r29+1204)>>>2)&0x3ff] = r15; - /* Next insn is delay slot */ - r31=0x645c4; - pc=0x63200; - run_63200(); return; - case 0x645c4: - r15 = readPages[(r29+1204)>>>12][((r29+1204)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63df8; - run_63c00(); return; - } - r7 = readPages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff]; - r5 = readPages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff]; - r4 = r7 + 1; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63cd0; - run_63c00(); return; - case 0x645e8: - r5 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - r4 = readPages[(r29+1180)>>>12][((r29+1180)>>>2)&0x3ff]; - r2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r5 = r5 + 4; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r4; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r5; - case 0x64600: - pc=0x64600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_64600() throws ExecutionException { /* 0x64600 - 0x64800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x64600: - /* Next insn is delay slot */ - pc=0x63700; - run_63600(); return; - case 0x64608: - r4 = r0 + 2; - /* Next insn is delay slot */ - pc=0x63884; - run_63800(); return; - case 0x64614: - r4 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r5 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r6 = r29 + 1144; - /* Next insn is delay slot */ - r31=0x64628; - pc=0x63200; - run_63200(); return; - case 0x64628: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63df8; - run_63c00(); return; - } - r14 = readPages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff]; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63b3c; - run_63a00(); return; - case 0x64640: - r4 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r5 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r6 = r29 + 1144; - /* Next insn is delay slot */ - r31=0x64654; - pc=0x63200; - run_63200(); return; - case 0x64654: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63df8; - run_63c00(); return; - } - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63800; - run_63800(); return; - case 0x64668: - r4 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r5 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r6 = r29 + 1144; - writePages[(r29+1204)>>>12][((r29+1204)>>>2)&0x3ff] = r15; - /* Next insn is delay slot */ - r31=0x64680; - pc=0x63200; - run_63200(); return; - case 0x64680: - r15 = readPages[(r29+1204)>>>12][((r29+1204)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63df8; - run_63c00(); return; - } - r7 = readPages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff]; - r5 = readPages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff]; - r4 = r7 + 1; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x639fc; - run_63800(); return; - case 0x646a4: - r4 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r5 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r6 = r29 + 1144; - /* Next insn is delay slot */ - r31=0x646b8; - pc=0x63200; - run_63200(); return; - case 0x646b8: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63df8; - run_63c00(); return; - } - r7 = readPages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff]; - r5 = readPages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff]; - r4 = r7 + 1; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63a38; - run_63a00(); return; - case 0x646d8: - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x64820; - run_64800(); return; - } - r7 = r0 + r0; - r4 = r0 + 1; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63a44; - run_63a00(); return; - case 0x646f4: - r4 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r5 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r6 = r29 + 1144; - /* Next insn is delay slot */ - r31=0x64708; - pc=0x63200; - run_63200(); return; - case 0x64708: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63df8; - run_63c00(); return; - } - r4 = readPages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff]; - r5 = readPages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff]; - r4 = r4 + 1; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63b0c; - run_63a00(); return; - case 0x64728: - r17 = r16 + r0; - /* Next insn is delay slot */ - pc=0x63798; - run_63600(); return; - case 0x64734: - r4 = r0 + 45; - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r0 - r2; - r19 = r30 + r0; - r5 = r0 + 45; - r4 = r0 + 1; - /* Next insn is delay slot */ - pc=0x63890; - run_63800(); return; - case 0x64754: - r2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r5 = r5 + 4; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=0x64248; - run_64200(); return; - case 0x64768: - r19 = r17 + r0; - /* Next insn is delay slot */ - pc=0x64538; - run_64400(); return; - case 0x64774: - r19 = r30 + r0; - /* Next insn is delay slot */ - pc=0x644c8; - run_64400(); return; - case 0x64780: - r30 = r0 + -1; - r16 = r5 + r0; - /* Next insn is delay slot */ - pc=0x637cc; - run_63600(); return; - case 0x64790: - r2 = 7 << 16; - r8 = r2 + 4276; - /* Next insn is delay slot */ - pc=0x63ae4; - run_63a00(); return; - case 0x647a0: - r2 = readPages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff]; - r18 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r23 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x63e00; - run_63e00(); return; - } - r4 = r18 + r0; - r5 = r23 + r0; - r6 = r29 + 1144; - /* Next insn is delay slot */ - r31=0x647c8; - pc=0x63200; - run_63200(); return; - case 0x647c8: - /* Next insn is delay slot */ - pc=0x63e00; - run_63e00(); return; - case 0x647d0: - r4 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r5 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r6 = r29 + 1144; - /* Next insn is delay slot */ - r31=0x647e4; - pc=0x63200; - run_63200(); return; - case 0x647e4: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63df8; - run_63c00(); return; - } - r14 = readPages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x63c0c; - run_63c00(); return; - case 0x647f8: - writePages[(r29+1204)>>>12][((r29+1204)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - r31=0x64804; - pc=0x10268; - run_10200(); return; - case 0x64800: - pc=0x64800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_64800() throws ExecutionException { /* 0x64800 - 0x64a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x64800: - case 0x64804: - r19 = r2 + r0; - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r20; - r30 = r0 + r0; - r3 = readPages[(r29+1204)>>>12][((r29+1204)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x638bc; - run_63800(); return; - case 0x64820: - r4 = readPages[(r29+1176)>>>12][((r29+1176)>>>2)&0x3ff]; - r5 = readPages[(r29+1172)>>>12][((r29+1172)>>>2)&0x3ff]; - r6 = r29 + 1144; - /* Next insn is delay slot */ - r31=0x64834; - pc=0x63200; - run_63200(); return; - case 0x64834: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x63df8; - run_63c00(); return; - } - r7 = readPages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff]; - r5 = readPages[(r29+1152)>>>12][((r29+1152)>>>2)&0x3ff]; - r4 = r7 + 1; - r3 = r21 + r0; - /* Next insn is delay slot */ - pc=0x63a44; - run_63a00(); return; - case 0x64854: - r7 = readPages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff]; - writePages[(r29+1184)>>>12][((r29+1184)>>>2)&0x3ff] = r22; - r7 = r7 + 1; - /* Next insn is delay slot */ - pc=0x639c4; - run_63800(); return; - case 0x64868: - r2 = (r30&0xffffffffL) < (7&0xffffffffL) ? 1 : 0; - r13 = r30 + r0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6487c; - continue; - } - r13 = r0 + 6; - case 0x6487c: - r19 = r13 + r0; - r2 = r13 + r0; - if(r13 < 0) { - /* Next insn is delay slot */ - pc=0x648e8; - continue; - } - case 0x6488c: - r10 = 7 << 16; - writePages[(r29+1168)>>>12][((r29+1168)>>>2)&0x3ff] = r2; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r20; - r18 = r10 + 268; - r30 = r0 + r0; - /* Next insn is delay slot */ - pc=0x638e8; - run_63800(); return; - case 0x648a8: - r5 = readPages[(r29+1148)>>>12][((r29+1148)>>>2)&0x3ff]; - writePages[(r29+1184)>>>12][((r29+1184)>>>2)&0x3ff] = r22; - r5 = r5 + 1; - /* Next insn is delay slot */ - pc=0x63be8; - run_63a00(); return; - case 0x648bc: - r19 = r30 + r0; - addr=r29+1158; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r20; - r30 = r0 + r0; - /* Next insn is delay slot */ - pc=0x638bc; - run_63800(); return; - case 0x648d4: - r2 = 7 << 16; - r6 = r4 + r0; - r8 = r2 + 4276; - /* Next insn is delay slot */ - pc=0x63f64; - run_63e00(); return; - case 0x648e8: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x6488c; - continue; - case 0x648f4: - r4 = readPages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff]; - r16 = r5 + r0; - r30 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r2 = r4 + 4; - if(r30 >= 0) { - /* Next insn is delay slot */ - pc=0x6456c; - run_64400(); return; - } - writePages[(r29+1260)>>>12][((r29+1260)>>>2)&0x3ff] = r2; - r30 = r0 + -1; - r2 = r16 + r0; - /* Next insn is delay slot */ - pc=0x637c4; - run_63600(); return; - case 0x64920: - r21 = r0 + -1; - /* Next insn is delay slot */ - pc=0x64094; - run_64000(); return; - case 0x64a00: - pc=0x64a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_64a00() throws ExecutionException { /* 0x64a00 - 0x64c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x64a00: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x63600; - run_63600(); return; - case 0x64c00: - pc=0x64c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_64c00() throws ExecutionException { /* 0x64c00 - 0x64e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x64c00: - r29 = r29 + -136; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r17; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r16; - writePages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff] = r31; - r17 = r4 + r0; - r16 = r6 + r0; - if(r6 < 0) { - /* Next insn is delay slot */ - pc=0x64ce4; - continue; - } - r2 = r0 + 520; - addr=r29+28; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r5; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r5; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x64c9c; - continue; - } - r2 = r0 + r0; - r6 = r7 + r0; - r7 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - r4 = r17 + r0; - r2 = r0 + -1; - r5 = r29 + 16; - addr=r29+30; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x64c64; - pc=0x43800; - run_43800(); return; - case 0x64c64: - r3 = r2 < -1 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x64cd4; - continue; - } - case 0x64c70: - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x64c84; - continue; - } - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x64c84: - r31 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; - r17 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - r16 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r29 = r29 + 136; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x64c9c: - r2 = r6 + -1; - r6 = r7 + r0; - r7 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - r4 = r17 + r0; - r2 = r0 + -1; - r5 = r29 + 16; - addr=r29+30; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x64cc8; - pc=0x43800; - run_43800(); return; - case 0x64cc8: - r3 = r2 < -1 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x64c70; - continue; - } - case 0x64cd4: - r3 = r0 + 139; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x64c70; - continue; - case 0x64ce4: - r2 = r0 + 139; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r2; - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x64c84; - continue; - case 0x64e00: - pc=0x64e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_64e00() throws ExecutionException { /* 0x64e00 - 0x65000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x64e00: - r29 = r29 + -32; - r8 = r4 + r0; - r3 = r5 + r0; - r2 = r6 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r5 = r8 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r7; - r6 = r3 + r0; - r7 = r2 + r0; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x64e30; - pc=0x64c00; - run_64c00(); return; - case 0x64e30: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x65000: - pc=0x65000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_65000() throws ExecutionException { /* 0x65000 - 0x65200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x65000: - r29 = r29 + -128; - r2 = r0 + 520; - addr=r29+28; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = 32767 << 16; - r2 = r2 | 65535; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r5; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r5; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r2; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - r5 = r29 + 16; - r2 = r0 + -1; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r31; - addr=r29+30; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - r31=0x6503c; - pc=0x43800; - run_43800(); return; - case 0x6503c: - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r31 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - r29 = r29 + 128; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x65200: - pc=0x65200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_65200() throws ExecutionException { /* 0x65200 - 0x65400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x65200: - r3 = r4 + r0; - r2 = r5 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r7 = r6 + r0; - r5 = r3 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x65000; - run_65000(); return; - case 0x65400: - pc=0x65400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_65400() throws ExecutionException { /* 0x65400 - 0x65600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x65400: + case 0x5d400: r29 = r29 + -88; r5 = r29 + 16; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r31; - /* Next insn is delay slot */ - r31=0x65414; - pc=0x62e00; - run_62e00(); return; - case 0x65414: + page[(r29+84)>>>2] = r31; + r31=0x5d414; + pc=0x5ce00; + run_5c800(); return; + case 0x5d414: if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x65468; + pc=0x5d468; continue; } - r3 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; + r3= page[(r29+20)>>>2]; r2 = r0 + 8192; r3 = r3 & 61440; if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x65454; + pc=0x5d454; continue; } - /* Next insn is delay slot */ - r31=0x65438; - pc=0x38c00; - run_38c00(); return; - case 0x65438: + r31=0x5d438; + pc=0x49800; + run_49800(); return; + case 0x5d438: r3 = r0 + 25; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; + page[(r2+0)>>>2] = r3; r2 = r0 + r0; - case 0x65444: - r31 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; + case 0x5d444: + r31= page[(r29+84)>>>2]; r29 = r29 + 88; - /* Next insn is delay slot */ pc=r31; return; - case 0x65454: - r31 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; + case 0x5d454: + r31= page[(r29+84)>>>2]; r2 = r0 + 1; r29 = r29 + 88; - /* Next insn is delay slot */ pc=r31; return; - case 0x65468: - /* Next insn is delay slot */ - r31=0x65470; - pc=0x38c00; - run_38c00(); return; - case 0x65470: + case 0x5d468: + r31=0x5d470; + pc=0x49800; + run_49800(); return; + case 0x5d470: r3 = r0 + 9; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; + page[(r2+0)>>>2] = r3; r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x65444; + pc=0x5d444; continue; - case 0x65600: - pc=0x65600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_65600() throws ExecutionException { /* 0x65600 - 0x65800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x65600: - { long hilo = (r5) * r6; hi = (int) (hilo >>> 32); lo = (int) hilo; } + case 0x5d600: + { long hilo = (long)(r5) * ((long)r6); hi = (int) (hilo >>> 32); lo = (int) hilo; } r29 = r29 + -48; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r18; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r17; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; + page[(r29+44)>>>2] = r31; + page[(r29+40)>>>2] = r20; + page[(r29+32)>>>2] = r18; + page[(r29+28)>>>2] = r17; + page[(r29+24)>>>2] = r16; r17 = r4 + r0; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r19; + page[(r29+36)>>>2] = r19; r5 = lo; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - r31=0x65634; - pc=0x3f600; - run_3f600(); return; - case 0x65634: - r2 = 7 << 16; - r18 = readPages[(r2+11112)>>>12][((r2+11112)>>>2)&0x3ff]; - r5 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; + page[(r29+16)>>>2] = r5; + r31=0x5d634; + pc=0x4ee00; + run_4e800(); return; + case 0x5d634: + r2 = 6 << 16; + r18= page[(r2+25184)>>>2]; + r5= page[(r29+16)>>>2]; r4 = r17 + r0; - r20 = readPages[(r18+4)>>>12][((r18+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x65650; - pc=0x3ec00; - run_3ec00(); return; - case 0x65650: + r20= page[(r18+4)>>>2]; + r31=0x5d650; + pc=0x4e200; + run_4e000(); return; + case 0x5d650: r16 = r2 + r0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6577c; + pc=0x5d77c; continue; } - r19 = readPages[(r2+-4)>>>12][((r2+-4)>>>2)&0x3ff]; + r19= page[(r2+-4)>>>2]; r3 = r16 + -8; r2 = r0 + -4; r19 = r19 & r2; if(r18 == r3) { - /* Next insn is delay slot */ - pc=0x6574c; + pc=0x5d74c; continue; } - case 0x65674: + case 0x5d674: r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x65680; - pc=0x3f800; - run_3f800(); return; - case 0x65680: + r31=0x5d680; + pc=0x4f000; + run_4f000(); return; + case 0x5d680: r6 = r19 + -4; r2 = (r6&0xffffffffL) < (37&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x65708; + pc=0x5d708; continue; } r2 = (r6&0xffffffffL) < (20&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x656d4; + pc=0x5d6d4; continue; } r2 = r16 + r0; - case 0x656a0: - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r0; - writePages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff] = r0; - writePages[(r2+8)>>>12][((r2+8)>>>2)&0x3ff] = r0; + case 0x5d6a0: + page[(r2+0)>>>2] = r0; + page[(r2+4)>>>2] = r0; + page[(r2+8)>>>2] = r0; r2 = r16 + r0; - case 0x656b0: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r20 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r19 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + case 0x5d6b0: + r31= page[(r29+44)>>>2]; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x656d4: + case 0x5d6d4: r2 = (r6&0xffffffffL) < (28&0xffffffffL) ? 1 : 0; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r0; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r0; + page[(r16+0)>>>2] = r0; + page[(r16+4)>>>2] = r0; if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x65740; + pc=0x5d740; continue; } r2 = r0 + 36; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r0; - writePages[(r16+12)>>>12][((r16+12)>>>2)&0x3ff] = r0; + page[(r16+8)>>>2] = r0; + page[(r16+12)>>>2] = r0; if(r6 == r2) { - /* Next insn is delay slot */ - pc=0x65768; + pc=0x5d768; continue; } r2 = r16 + 16; - /* Next insn is delay slot */ - pc=0x656a0; + pc=0x5d6a0; continue; - case 0x65708: + case 0x5d708: r4 = r16 + r0; r5 = r0 + r0; - /* Next insn is delay slot */ - r31=0x65718; - pc=0x48fec; - run_48e00(); return; - case 0x65718: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; + r31=0x5d718; + pc=0x56ff0; + run_56800(); return; + case 0x5d718: + r31= page[(r29+44)>>>2]; r2 = r16 + r0; - r20 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r19 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r18 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r17 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; + r20= page[(r29+40)>>>2]; + r19= page[(r29+36)>>>2]; + r18= page[(r29+32)>>>2]; + r17= page[(r29+28)>>>2]; + r16= page[(r29+24)>>>2]; r29 = r29 + 48; - /* Next insn is delay slot */ pc=r31; return; - case 0x65740: + case 0x5d740: r2 = r16 + 8; - /* Next insn is delay slot */ - pc=0x656a0; + pc=0x5d6a0; continue; - case 0x6574c: + case 0x5d74c: r2 = r20 & r2; r3 = ((r2 & 0xffffffffL) < (r19 & 0xffffffffL)) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x65674; + pc=0x5d674; continue; } r19 = r2 + r0; - /* Next insn is delay slot */ - pc=0x65674; + pc=0x5d674; continue; - case 0x65768: - writePages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff] = r0; + case 0x5d768: + page[(r16+16)>>>2] = r0; r2 = r16 + 24; - writePages[(r16+20)>>>12][((r16+20)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x656a0; + page[(r16+20)>>>2] = r0; + pc=0x5d6a0; continue; - case 0x6577c: + case 0x5d77c: r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x65788; - pc=0x3f800; - run_3f800(); return; - case 0x65788: + r31=0x5d788; + pc=0x4f000; + run_4f000(); return; + case 0x5d788: r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x656b0; + pc=0x5d6b0; continue; - case 0x65800: - pc=0x65800; + case 0x5d800: + pc=0x5d800; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ } } - private final void run_65800() throws ExecutionException { /* 0x65800 - 0x65a00 */ + private final void run_5d800() throws ExecutionException { /* 0x5d800 - 0x5e000 */ int addr, tmp; for(;;) { switch(pc) { - case 0x65800: + case 0x5d800: addr=r6+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ + if((tmp&0x8000)!=0) tmp |= 0xffff0000; r2 = tmp; r29 = r29 + -56; r3 = r2 & 8192; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r19; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r18; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r16; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r21; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r17; + page[(r29+40)>>>2] = r19; + page[(r29+36)>>>2] = r18; + page[(r29+28)>>>2] = r16; + page[(r29+52)>>>2] = r31; + page[(r29+48)>>>2] = r21; + page[(r29+44)>>>2] = r20; + page[(r29+32)>>>2] = r17; r19 = r4 + r0; r18 = r5 + r0; r16 = r6 + r0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x65854; + pc=0x5d854; continue; } r2 = r2 | 8192; addr=r6+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r6+100)>>>12][((r6+100)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r2= page[(r6+100)>>>2]; r2 = r2 | 8192; - writePages[(r6+100)>>>12][((r6+100)>>>2)&0x3ff] = r2; - case 0x65854: - /* Next insn is delay slot */ - r31=0x6585c; + page[(r6+100)>>>2] = r2; + case 0x5d854: + r31=0x5d85c; pc=0x5a800; run_5a800(); return; - case 0x6585c: + case 0x5d85c: r3 = r0 + 1; if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x659c4; + pc=0x5d9c4; continue; } - case 0x65868: + case 0x5d868: r4 = r19 + r0; r5 = r29 + 16; r6 = r18 + r0; r7 = r16 + 92; - /* Next insn is delay slot */ - r31=0x65880; - pc=0x6aa00; - run_6aa00(); return; - case 0x65880: + r31=0x5d880; + pc=0x5dc00; + continue; + case 0x5d880: r20 = r2 + r0; r2 = r0 + -1; if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x65958; + pc=0x5d958; continue; } if(r20 == r0) { - /* Next insn is delay slot */ - pc=0x6594c; + pc=0x5d94c; continue; } addr=r29+16; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r5 = tmp; - case 0x6589c: + case 0x5d89c: r17 = r0 + r0; r21 = r0 + 10; - /* Next insn is delay slot */ - pc=0x658e4; + pc=0x5d8e4; continue; - case 0x658ac: - r3 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + case 0x5d8ac: + r3= page[(r16+0)>>>2]; addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r3= page[(r16+0)>>>2]; r3 = r3 + 1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r3; - case 0x658c8: + page[(r16+0)>>>2] = r3; + case 0x5d8c8: r17 = r17 + 1; r3 = ((r17 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x6594c; + pc=0x5d94c; continue; } - case 0x658d8: + case 0x5d8d8: r2 = r29 + 16; r3 = r2 + r17; addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ + if((tmp&0x80)!=0) tmp |= 0xffffff00; r5 = tmp; - case 0x658e4: - r3 = readPages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff]; + case 0x5d8e4: + r3= page[(r16+8)>>>2]; r3 = r3 + -1; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r3; + page[(r16+8)>>>2] = r3; if(r3 >= 0) { - /* Next insn is delay slot */ - pc=0x658ac; + pc=0x5d8ac; continue; } - r2 = readPages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff]; + r2= page[(r16+24)>>>2]; r3 = r3 < r2 ? 1 : 0; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x65994; + pc=0x5d994; continue; } - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + r2= page[(r16+0)>>>2]; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; + page[(addr)>>>2] = tmp; + r2= page[(r16+0)>>>2]; addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; r3 = tmp; if(r3 == r21) { - /* Next insn is delay slot */ - pc=0x659ec; + pc=0x5d9ec; continue; } r17 = r17 + 1; r2 = r2 + 1; r3 = ((r17 & 0xffffffffL) < (r20 & 0xffffffffL)) ? 1 : 0; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; + page[(r16+0)>>>2] = r2; if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x658d8; + pc=0x5d8d8; continue; } - case 0x6594c: + case 0x5d94c: r2 = r18 + r0; - /* Next insn is delay slot */ - pc=0x6596c; + pc=0x5d96c; continue; - case 0x65958: + case 0x5d958: addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; r2 = tmp; r2 = r2 | 64; addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r0 + -1; - case 0x6596c: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r21 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r20 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; + case 0x5d96c: + r31= page[(r29+52)>>>2]; + r21= page[(r29+48)>>>2]; + r20= page[(r29+44)>>>2]; + r19= page[(r29+40)>>>2]; + r18= page[(r29+36)>>>2]; + r17= page[(r29+32)>>>2]; + r16= page[(r29+28)>>>2]; r29 = r29 + 56; - /* Next insn is delay slot */ pc=r31; return; - case 0x65994: + case 0x5d994: r4 = r19 + r0; r5 = r5 & 255; r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x659a8; - pc=0x48200; - run_48200(); return; - case 0x659a8: + r31=0x5d9a8; + pc=0x56a00; + run_56800(); return; + case 0x5d9a8: r2 = r2 + 1; r2 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - case 0x659b0: + case 0x5d9b0: if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x658c8; + pc=0x5d8c8; continue; } r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x6596c; + pc=0x5d96c; continue; - case 0x659c4: + case 0x5d9c4: r2 = r18 + -1; r2 = (r2&0xffffffffL) < (255&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x65868; + pc=0x5d868; continue; } r5 = r18 << 24; r5 = r5 >> 24; addr=r29+16; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r20 = r0 + 1; - /* Next insn is delay slot */ - pc=0x6589c; + pc=0x5d89c; continue; - case 0x659ec: + case 0x5d9ec: r4 = r19 + r0; r5 = r0 + 10; r6 = r16 + r0; - /* Next insn is delay slot */ - r31=0x65a00; - pc=0x48200; - run_48200(); return; - case 0x65a00: - pc=0x65a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_65a00() throws ExecutionException { /* 0x65a00 - 0x65c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x65a00: + r31=0x5da00; + pc=0x56a00; + run_56800(); return; + case 0x5da00: r2 = r2 + 1; r2 = (r2&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - /* Next insn is delay slot */ - pc=0x659b0; - run_65800(); return; - case 0x65c00: - pc=0x65c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_65c00() throws ExecutionException { /* 0x65c00 - 0x65e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x65c00: - r29 = r29 + -32; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; + pc=0x5d9b0; + continue; + case 0x5dc00: + r29 = r29 + -64; + page[(r29+56)>>>2] = r18; + page[(r29+52)>>>2] = r17; + page[(r29+48)>>>2] = r16; + page[(r29+60)>>>2] = r31; r16 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - r6 = r5 + r0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x65c5c; + r17 = r7 + r0; + r18= page[(r28+-31412)>>>2]; + if(r5 == r0) { + pc=0x5dc8c; continue; } - r3 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x65c44; - continue; - } - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - r31=0x65c3c; - pc=0x3a600; - run_3a600(); return; - case 0x65c3c: - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - case 0x65c44: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r5 = r16 + r0; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x65800; - run_65800(); return; - case 0x65c5c: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r5 = r16 + r0; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r4 = r0 + r0; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x65800; - run_65800(); return; - case 0x65e00: - pc=0x65e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_65e00() throws ExecutionException { /* 0x65e00 - 0x66000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x65e00: - r2 = (r4&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x65e30; - continue; - } - r2 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - r4 = r2 + r4; - addr=r4+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r2 & 8; - r2 = r2 & 255; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x65e30: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x66000: - pc=0x66000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_66000() throws ExecutionException { /* 0x66000 - 0x66200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x66000: - r29 = r29 + -56; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r18; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r17; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r16; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - r16 = r4 + r0; - r17 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r18 = readPages[(r28+-30952)>>>12][((r28+-30952)>>>2)&0x3ff]; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x66094; - continue; - } - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r5; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r6; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x6603c; + page[(r29+40)>>>2] = r5; + page[(r29+44)>>>2] = r6; + r31=0x5dc38; pc=0x5a600; - run_5a600(); return; - case 0x6603c: - r5 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r6 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r7 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; + run_5a000(); return; + case 0x5dc38: + r5= page[(r29+40)>>>2]; + r6= page[(r29+44)>>>2]; + page[(r29+16)>>>2] = r17; r4 = r16 + r0; - /* Next insn is delay slot */ + r7 = r2 + r0; pc=r18; - r31=0x6605c; + r31=0x5dc54; return; - case 0x6605c: + case 0x5dc54: r3 = r0 + -1; if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x66078; + pc=0x5dc70; continue; } r2 = r0 + 138; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r0; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; + page[(r17+0)>>>2] = r0; + page[(r16+0)>>>2] = r2; r2 = r0 + -1; - case 0x66078: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r18 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r17 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r16 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x66094: - /* Next insn is delay slot */ - r31=0x6609c; - pc=0x5a600; - run_5a600(); return; - case 0x6609c: - r6 = 7 << 16; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - r4 = r16 + r0; - r5 = r0 + r0; - r6 = r6 + -12264; - r7 = r0 + 1; - /* Next insn is delay slot */ - pc=r18; - r31=0x660c0; - return; - case 0x660c0: - /* Next insn is delay slot */ - pc=0x6605c; - continue; - case 0x66200: - pc=0x66200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_66200() throws ExecutionException { /* 0x66200 - 0x66400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x66200: - r29 = r29 + -56; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r17; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r16; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r21; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r20; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r19; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r18; - r16 = r5 + r0; - r17 = r7 + r0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x662b0; - continue; - } - r21 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r19 = r4 + r0; - r18 = r6 + r0; - r20 = readPages[(r28+-30952)>>>12][((r28+-30952)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x66248; - pc=0x5a600; - run_5a600(); return; - case 0x66248: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - r4 = r21 + r0; - r5 = r19 + r0; - r6 = r16 + r0; - r7 = r18 + r0; - /* Next insn is delay slot */ - pc=r20; - r31=0x66268; - return; - case 0x66268: - r3 = r0 + -1; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x66288; - continue; - } - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r3 = r0 + 138; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r0; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r2 = r0 + -1; - case 0x66288: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r21 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r20 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r19 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r18 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r17 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r16 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x662b0: - r18 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r16 = readPages[(r28+-30952)>>>12][((r28+-30952)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x662c0; - pc=0x5a600; - run_5a600(); return; - case 0x662c0: - r6 = 7 << 16; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - r4 = r18 + r0; - r5 = r0 + r0; - r6 = r6 + -12264; - r7 = r0 + 1; - /* Next insn is delay slot */ - pc=r16; - r31=0x662e4; - return; - case 0x662e4: - /* Next insn is delay slot */ - pc=0x66268; - continue; - case 0x66400: - pc=0x66400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_66400() throws ExecutionException { /* 0x66400 - 0x66600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x66400: - r29 = r29 + -8; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x66440; - continue; - } - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x6644c; - continue; - } - case 0x66414: - if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x6645c; - continue; - } - addr=r6+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - writePages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff] = r2; - addr=r6+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = ((r0 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - case 0x66434: - r29 = r29 + 8; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x66440: - r5 = r29 + r0; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x66414; - continue; - } - case 0x6644c: - r2 = r0 + r0; - r29 = r29 + 8; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6645c: - r2 = r0 + -2; - /* Next insn is delay slot */ - pc=0x66434; - continue; - case 0x66600: - pc=0x66600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_66600() throws ExecutionException { /* 0x66600 - 0x66800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x66600: - r29 = r29 + -48; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r16; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r4; - r16 = readPages[(r28+-30952)>>>12][((r28+-30952)>>>2)&0x3ff]; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r5; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r6; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x66628; - pc=0x5a600; - run_5a600(); return; - case 0x66628: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r2 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r4 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r5 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r6 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r7 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=r16; - r31=0x6664c; - return; - case 0x6664c: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r16 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x66800: - pc=0x66800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_66800() throws ExecutionException { /* 0x66800 - 0x66a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x66800: - addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r8 = tmp; - r2 = r0 + 94; - if(r8 == r2) { - /* Next insn is delay slot */ - pc=0x668e8; - continue; - } - r2 = r5 + 1; - r7 = r0 + r0; - r9 = r0 + r0; - case 0x6681c: - r3 = r0 + r0; - r6 = r0 + 256; - case 0x66824: - r5 = r4 + r3; - r3 = r3 + 1; - addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r7&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r3 != r6) { - /* Next insn is delay slot */ - pc=0x66824; - continue; - } - if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x66890; - continue; - } - r5 = r0 + 1; - r5 = r5 - r9; - r10 = r0 + 45; - r9 = r0 + 93; - case 0x66850: - r3 = r4 + r8; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x66858: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r7 = r2 + 1; - if(r3 == r10) { - /* Next insn is delay slot */ - pc=0x668a8; - continue; - } - if(r3 == r9) { - /* Next insn is delay slot */ - pc=0x6689c; - continue; - } - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x66888; - continue; - } - r8 = r3 + r0; - r2 = r7 + r0; - /* Next insn is delay slot */ - pc=0x66850; - continue; - case 0x66888: - /* Next insn is delay slot */ - pc=r31; - return; - case 0x66890: - r2 = r2 + -1; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6689c: - r2 = r7 + r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x668a8: - addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r6 = tmp; - if(r6 == r9) { - /* Next insn is delay slot */ - pc=0x66900; - continue; - } - r3 = r6 < r8 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x66900; - continue; - } - r2 = r2 + 2; - case 0x668c8: - r8 = r8 + 1; - r3 = r4 + r8; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r5&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = r8 < r6 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x668c8; - continue; - } - /* Next insn is delay slot */ - pc=0x66858; - continue; - case 0x668e8: - r2 = r5 + 2; - addr=r5+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r8 = tmp; - r7 = r0 + 1; - r9 = r0 + 1; - /* Next insn is delay slot */ - pc=0x6681c; - continue; - case 0x66900: - r8 = r0 + 45; - r2 = r7 + r0; - /* Next insn is delay slot */ - pc=0x66850; - continue; - case 0x66a00: - pc=0x66a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_66a00() throws ExecutionException { /* 0x66a00 - 0x66c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x66a00: - f0 = readPages[(r28+-30948)>>>12][((r28+-30948)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x66c00: - pc=0x66c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_66c00() throws ExecutionException { /* 0x66c00 - 0x66e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x66c00: - r29 = r29 + -216; - writePages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff] = r22; - writePages[(r29+136)>>>12][((r29+136)>>>2)&0x3ff] = r18; - writePages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff] = r16; - writePages[(r29+164)>>>12][((r29+164)>>>2)&0x3ff] = r31; - writePages[(r29+160)>>>12][((r29+160)>>>2)&0x3ff] = r30; - writePages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff] = r23; - writePages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff] = r21; - writePages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff] = r20; - writePages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff] = r19; - writePages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff] = r17; - writePages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff] = f30; - writePages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff] = f31; - writePages[(r29+204)>>>12][((r29+204)>>>2)&0x3ff] = f28; - writePages[(r29+200)>>>12][((r29+200)>>>2)&0x3ff] = f29; - writePages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff] = f26; - writePages[(r29+192)>>>12][((r29+192)>>>2)&0x3ff] = f27; - writePages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff] = f24; - writePages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff] = f25; - writePages[(r29+180)>>>12][((r29+180)>>>2)&0x3ff] = f22; - writePages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff] = f23; - writePages[(r29+172)>>>12][((r29+172)>>>2)&0x3ff] = f20; - writePages[(r29+168)>>>12][((r29+168)>>>2)&0x3ff] = f21; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r5; - r16 = r5 + r0; - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r21 = tmp; - r18 = r4 + r0; - r2 = r21 & 255; - r4 = 7 << 16; - r3 = (r2&0xffffffffL) < (46&0xffffffffL) ? 1 : 0; - r22 = r5 + r0; - writePages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff] = r6; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r0; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r0; - r4 = r4 + 4324; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x67000; - run_67000(); return; - } - case 0x66c94: - r2 = r2 << 2; - r2 = r4 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x66cac: - r7 = r0 + r0; - r3 = r0 + r0; - r9 = r0 + 1; - case 0x66cb8: - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x67160; - run_67000(); return; - } - if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x67160; - run_67000(); return; - } - case 0x66cc8: - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r22; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r0; - case 0x66cd8: - r3 = readPages[(r29+224)>>>12][((r29+224)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x66cf4; - continue; - } - r2 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - case 0x66cf4: - r3 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x67074; - run_67000(); return; - } - r3 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r2 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - case 0x66d0c: - f30 = readPages[(r29+212)>>>12][((r29+212)>>>2)&0x3ff]; - f28 = readPages[(r29+204)>>>12][((r29+204)>>>2)&0x3ff]; - f26 = readPages[(r29+196)>>>12][((r29+196)>>>2)&0x3ff]; - f24 = readPages[(r29+188)>>>12][((r29+188)>>>2)&0x3ff]; - f22 = readPages[(r29+180)>>>12][((r29+180)>>>2)&0x3ff]; - f20 = readPages[(r29+172)>>>12][((r29+172)>>>2)&0x3ff]; - r31 = readPages[(r29+164)>>>12][((r29+164)>>>2)&0x3ff]; - f0 = r3; - r30 = readPages[(r29+160)>>>12][((r29+160)>>>2)&0x3ff]; - r23 = readPages[(r29+156)>>>12][((r29+156)>>>2)&0x3ff]; - r22 = readPages[(r29+152)>>>12][((r29+152)>>>2)&0x3ff]; - r21 = readPages[(r29+148)>>>12][((r29+148)>>>2)&0x3ff]; - r20 = readPages[(r29+144)>>>12][((r29+144)>>>2)&0x3ff]; - r19 = readPages[(r29+140)>>>12][((r29+140)>>>2)&0x3ff]; - r18 = readPages[(r29+136)>>>12][((r29+136)>>>2)&0x3ff]; - r17 = readPages[(r29+132)>>>12][((r29+132)>>>2)&0x3ff]; - r16 = readPages[(r29+128)>>>12][((r29+128)>>>2)&0x3ff]; - f31 = readPages[(r29+208)>>>12][((r29+208)>>>2)&0x3ff]; - f29 = readPages[(r29+200)>>>12][((r29+200)>>>2)&0x3ff]; - f27 = readPages[(r29+192)>>>12][((r29+192)>>>2)&0x3ff]; - f25 = readPages[(r29+184)>>>12][((r29+184)>>>2)&0x3ff]; - f23 = readPages[(r29+176)>>>12][((r29+176)>>>2)&0x3ff]; - f21 = readPages[(r29+168)>>>12][((r29+168)>>>2)&0x3ff]; - f1 = r2; - r29 = r29 + 216; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x66d78: - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r0; - case 0x66d7c: - r2 = r16 + 1; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - addr=r16+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r21 = tmp; - if(r21 == r0) { - /* Next insn is delay slot */ - pc=0x66cc8; - continue; - } - r16 = r2 + r0; - r2 = r0 + 48; - if(r21 == r2) { - /* Next insn is delay slot */ - pc=0x67010; - run_67000(); return; - } - case 0x66da4: - r19 = r0 + r0; - case 0x66da8: - r2 = r21 + -48; - r2 = r2 & 255; - r2 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x68294; - run_68200(); return; - } - r2 = r16 + 1; - r30 = r0 + r0; - r23 = r0 + r0; - r20 = r0 + r0; - /* Next insn is delay slot */ - pc=0x66e10; - run_66e00(); return; - case 0x66dd4: - r3 = r23 << 1; - r23 = r23 << 3; - r23 = r3 + r23; - r21 = r23 + r21; - r23 = r21 + -48; - case 0x66de8: - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r21 = tmp; - r17 = r2 + r0; - r3 = r21 + -48; - r3 = r3 & 255; - r3 = (r3&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - case 0x66e00: - pc=0x66e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_66e00() throws ExecutionException { /* 0x66e00 - 0x67000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x66e00: - r20 = r20 + 1; - r2 = r2 + 1; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x66e64; - continue; - } - case 0x66e10: - r3 = r20 < 16 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x66de8; - run_66c00(); return; - } - r3 = r20 < 9 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x66dd4; - run_66c00(); return; - } - r3 = r30 << 1; - r30 = r30 << 3; - r30 = r3 + r30; - r21 = r30 + r21; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - r30 = r21 + -48; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r21 = tmp; - r17 = r2 + r0; - r3 = r21 + -48; - r3 = r3 & 255; - r3 = (r3&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - r20 = r20 + 1; - r2 = r2 + 1; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x66e10; - continue; - } - case 0x66e64: - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x66e70; - pc=0x5ae00; - run_5ae00(); return; - case 0x66e70: - r5 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r18 + r0; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - r31=0x66e84; - pc=0x5ae00; - run_5ae00(); return; - case 0x66e84: - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x66e90; - pc=0x10268; - run_10200(); return; - case 0x66e90: - r5 = readPages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff]; - r4 = r17 + r0; - r6 = r2 + r0; - /* Next insn is delay slot */ - r31=0x66ea4; - pc=0x43000; - run_43000(); return; - case 0x66ea4: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x672e4; - run_67200(); return; - } - r7 = r20 + r0; - r5 = r0 + r0; - r3 = r0 + r0; - r9 = r0 + r0; - case 0x66ebc: - r4 = r0 + -33; - r4 = r21 & r4; - r2 = r0 + 69; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x67158; - run_67000(); return; - } - case 0x66ed0: - r4 = r0 + r0; - case 0x66ed4: - if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x670bc; - run_67000(); return; - } - case 0x66edc: - r3 = r4 - r3; - writePages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff] = r3; - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x66ef0; - continue; - } - r20 = r7 + r0; - case 0x66ef0: - r3 = r7 < 17 ? 1 : 0; - r2 = r7 + r0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x66f04; - continue; - } - r2 = r0 + 16; - case 0x66f04: - f2 = r23; - { long l = Double.doubleToLongBits(((double)f2)); f1 = (int)(l >>> 32); f0 = (int)l; } - if(r23 < 0) { - /* Next insn is delay slot */ - pc=0x67ed8; - run_67e00(); return; - } - case 0x66f18: - r3 = r2 < 10 ? 1 : 0; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = f0; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = f1; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x66f6c; - continue; - } - r4 = r2 + -9; - r3 = 7 << 16; - r4 = r4 << 3; - r3 = r3 + 2176; - r3 = r4 + r3; - f2 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - f4 = r30; - f3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - { long l = Double.doubleToLongBits(((double)f4)); f3 = (int)(l >>> 32); f2 = (int)l; } - if(r30 < 0) { - /* Next insn is delay slot */ - pc=0x682ac; - run_68200(); return; - } - case 0x66f60: - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = f4; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = f5; - case 0x66f6c: - r3 = r7 < 16 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x67354; - run_67200(); return; - } - r3 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x672c4; - run_67200(); return; - } - r3 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - if(r3 <= 0) { - /* Next insn is delay slot */ - pc=0x6845c; - run_68400(); return; - } - r3 = r3 < 23 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x682c8; - run_68200(); return; - } - r4 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - r2 = 7 << 16; - r3 = r4 << 3; - r2 = r2 + 2176; - r2 = r3 + r2; - f0 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - f2 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - f1 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - f3 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f2; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f3; - /* Next insn is delay slot */ - pc=0x66cd8; - run_66c00(); return; - case 0x66fe0: - r16 = r16 + 1; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r16; - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r21 = tmp; - r2 = r21 & 255; - r3 = (r2&0xffffffffL) < (46&0xffffffffL) ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x66c94; - run_66c00(); return; - } - case 0x67000: - pc=0x67000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_67000() throws ExecutionException { /* 0x67000 - 0x67200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x67000: - r2 = r0 + 48; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r0; - if(r21 != r2) { - /* Next insn is delay slot */ - pc=0x66da4; - run_66c00(); return; - } - case 0x67010: - addr=r16+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r3 = r0 + 88; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x67e68; - run_67e00(); return; - } - r3 = r0 + 120; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x67e68; - run_67e00(); return; - } - r2 = r16 + 1; - r3 = r0 + 48; - case 0x67034: - r16 = r2 + r0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - r2 = r2 + 1; - addr=r2+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r21 = tmp; - if(r21 == r3) { - /* Next insn is delay slot */ - pc=0x67034; - continue; - } - if(r21 == r0) { - /* Next insn is delay slot */ - pc=0x6728c; - run_67200(); return; - } - r19 = r0 + 1; - /* Next insn is delay slot */ - pc=0x66da8; - run_66c00(); return; - case 0x67064: - r3 = r0 + 1; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x66d7c; - run_66c00(); return; - case 0x67074: - r5 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r4 = 32768 << 16; - r2 = r5 ^ r4; - r3 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x66d0c; - run_66c00(); return; - case 0x6708c: - r3 = r0 + r0; - case 0x67090: - r2 = r21 + -49; - r2 = (r2&0xffffffffL) < (9&0xffffffffL) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x67e08; - run_67e00(); return; - } - r4 = r0 + -33; - r4 = r21 & r4; - r2 = r0 + 69; - r5 = r3 + r0; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x66cac; - run_66c00(); return; - } - r9 = r0 + 1; - case 0x670bc: - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x6728c; - run_67200(); return; - } - if(r19 != r0) { - /* Next insn is delay slot */ - pc=0x6728c; - run_67200(); return; - } - if(r9 != r0) { - /* Next insn is delay slot */ - pc=0x66cc8; - run_66c00(); return; - } - r2 = r0 + 78; - if(r21 == r2) { - /* Next insn is delay slot */ - pc=0x67104; - continue; - } - r2 = r21 < 79 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x68518; - run_68400(); return; - } - r2 = r0 + 105; - if(r21 == r2) { - /* Next insn is delay slot */ - pc=0x68524; - run_68400(); return; - } - r2 = r0 + 110; - if(r21 != r2) { - /* Next insn is delay slot */ - pc=0x66cc8; - run_66c00(); return; - } - case 0x67104: - r3 = 7 << 16; - r4 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r3 = r3 + 4320; - case 0x67110: - r3 = r3 + 1; - addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x6868c; - run_68600(); return; - } - r4 = r4 + 1; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r6 = r2 + -65; - r6 = r6 & 255; - r6 = (r6&0xffffffffL) < (26&0xffffffffL) ? 1 : 0; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x67148; - continue; - } - r2 = r2 + 32; - case 0x67148: - if(r2 == r5) { - /* Next insn is delay slot */ - pc=0x67110; - continue; - } - /* Next insn is delay slot */ - pc=0x66cc8; - run_66c00(); return; - case 0x67158: - if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x66cb8; - run_66c00(); return; - } - case 0x67160: - r22 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r2 = r22 + 1; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - addr=r22+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r21 = tmp; - r2 = r0 + 43; - if(r21 == r2) { - /* Next insn is delay slot */ - pc=0x67ca8; - run_67c00(); return; - } - r2 = r0 + 45; - if(r21 != r2) { - /* Next insn is delay slot */ - pc=0x67c9c; - run_67c00(); return; - } - r10 = r0 + 1; - case 0x67190: - r2 = r22 + 2; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - addr=r22+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r21 = tmp; - case 0x671a0: - r2 = r21 + -48; - r2 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x67bc8; - run_67a00(); return; - } - r2 = r0 + 48; - if(r21 != r2) { - /* Next insn is delay slot */ - pc=0x671dc; - continue; - } - r2 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r4 = r0 + 48; - r2 = r2 + 1; - case 0x671c8: - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r21 = tmp; - r2 = r2 + 1; - if(r21 == r4) { - /* Next insn is delay slot */ - pc=0x671c8; - continue; - } - case 0x671dc: - r2 = r21 + -49; - r2 = (r2&0xffffffffL) < (9&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x66ed0; - run_66e00(); return; - } - r11 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r4 = r21 + -48; - r8 = r11 + 1; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r8; - addr=r11+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r21 = tmp; - case 0x67200: - pc=0x67200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_67200() throws ExecutionException { /* 0x67200 - 0x67400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x67200: - r2 = r21 + -48; - r2 = r2 & 255; - r2 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x67254; - continue; - } - r2 = r11 + 2; - case 0x6721c: - r6 = r4 << 1; - r4 = r4 << 3; - r4 = r6 + r4; - r21 = r4 + r21; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - r4 = r21 + -48; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r21 = tmp; - r8 = r2 + r0; - r6 = r21 + -48; - r6 = r6 & 255; - r6 = (r6&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - r2 = r2 + 1; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x6721c; - continue; - } - case 0x67254: - r2 = r8 - r11; - r2 = r2 < 9 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x67e5c; - run_67e00(); return; - } - r2 = r4 < 20000 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x67e5c; - run_67e00(); return; - } - case 0x67270: - if(r10 == r0) { - /* Next insn is delay slot */ - pc=0x66ed4; - run_66e00(); return; - } - r4 = r0 - r4; - if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x66edc; - run_66e00(); return; - } - /* Next insn is delay slot */ - pc=0x670bc; - run_67000(); return; - case 0x6728c: - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x66cd8; - run_66c00(); return; - case 0x6729c: - r4 = 32752 << 16; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r4; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r0; - case 0x672a8: - r2 = r2 & 8; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x672c4; - continue; - } - r3 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r2 = 32768 << 16; - r2 = r2 | r3; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r2; - case 0x672c4: - f0 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - f1 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x66cd8; - run_66c00(); return; - case 0x672e4: - r4 = r18 + r0; - r17 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x672f4; - pc=0x5ae00; - run_5ae00(); return; - case 0x672f4: - r4 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x67300; - pc=0x10268; - run_10200(); return; - case 0x67300: - r2 = r17 + r2; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r21 = tmp; - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x67be0; - run_67a00(); return; - } - r3 = r0 + 48; - if(r21 != r3) { - /* Next insn is delay slot */ - pc=0x6708c; - run_67000(); return; - } - r3 = r0 + r0; - r5 = r0 + 48; - /* Next insn is delay slot */ - pc=0x67334; - continue; - case 0x67330: - r2 = r4 + r0; - case 0x67334: - r4 = r2 + 1; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r4; - addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r21 = tmp; - r3 = r3 + 1; - if(r21 == r5) { - /* Next insn is delay slot */ - pc=0x67330; - continue; - } - /* Next insn is delay slot */ - pc=0x67090; - run_67000(); return; - case 0x67354: - r3 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - r2 = r7 - r2; - r2 = r3 + r2; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x68110; - run_68000(); return; - } - r3 = r2 & 15; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x673a4; - continue; - } - r4 = 7 << 16; - r3 = r3 << 3; - r4 = r4 + 2176; - r3 = r3 + r4; - f2 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - f0 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - f3 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - f1 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = f2; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = f3; - case 0x673a4: - r3 = r0 + -16; - r2 = r2 & r3; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x67cfc; - run_67c00(); return; - } - case 0x673b4: - f4 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r22 = r0 + r0; - f5 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f4; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f5; - case 0x673cc: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r23; - r5 = r16 + r0; - r4 = r18 + r0; - r6 = r20 + r0; - /* Next insn is delay slot */ - r31=0x673e4; - pc=0x5be00; - run_5be00(); return; - case 0x673e4: - r3 = r2 + 12; - writePages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - r23 = r2 + r0; - f24 = readPages[(r28+-30924)>>>12][((r28+-30924)>>>2)&0x3ff]; - r2 = r0 - r3; - r3 = r3 >> 31; - case 0x67400: - pc=0x67400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_67400() throws ExecutionException { /* 0x67400 - 0x67600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x67400: - r16 = r3 & r2; - f20 = readPages[(r28+-30908)>>>12][((r28+-30908)>>>2)&0x3ff]; - r3 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - f22 = readPages[(r28+-30932)>>>12][((r28+-30932)>>>2)&0x3ff]; - f25 = readPages[(r28+-30928)>>>12][((r28+-30928)>>>2)&0x3ff]; - r3 = r0 < r3 ? 1 : 0; - f21 = readPages[(r28+-30912)>>>12][((r28+-30912)>>>2)&0x3ff]; - f23 = readPages[(r28+-30936)>>>12][((r28+-30936)>>>2)&0x3ff]; - writePages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff] = r3; - f26 = f24; - f27 = f25; - case 0x67428: - r5 = readPages[(r23+4)>>>12][((r23+4)>>>2)&0x3ff]; - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x67438; - pc=0x5b800; - run_5b800(); return; - case 0x67438: - r6 = readPages[(r23+16)>>>12][((r23+16)>>>2)&0x3ff]; - r5 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - r6 = r6 + 2; - r4 = r2 + 12; - r6 = r6 << 2; - r21 = r2 + r0; - /* Next insn is delay slot */ - r31=0x67458; - pc=0x48fdc; - run_48e00(); return; - case 0x67458: - r5 = r29 + 24; - r7 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r4 = r29 + 32; - r6 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r4; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r5; - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x6747c; - pc=0x5d600; - run_5d600(); return; - case 0x6747c: - r4 = r18 + r0; - r5 = r0 + 1; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x67490; - pc=0x5c400; - run_5c400(); return; - case 0x67490: - r3 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r19 = r2 + r0; - r7 = r0 + r0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x674a8; - continue; - } - r7 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - case 0x674a8: - r2 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x67920; - run_67800(); return; - } - r20 = r16 + r2; - r3 = r7 + r0; - case 0x674c0: - r4 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r2 = r2 - r22; - r5 = r2 + r4; - r5 = r5 < -1021 ? 1 : 0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x6781c; - run_67800(); return; - } - r2 = r2 + 1075; - case 0x674dc: - r30 = r20 + r2; - r4 = r20 < r30 ? 1 : 0; - r2 = r3 + r2; - r17 = r2 + r22; - r2 = r30 + r0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x674fc; - continue; - } - r2 = r20 + r0; - case 0x674fc: - r4 = r17 < r2 ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x6750c; - continue; - } - r2 = r17 + r0; - case 0x6750c: - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x67520; - continue; - } - r30 = r30 - r2; - r17 = r17 - r2; - r20 = r20 - r2; - case 0x67520: - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x67578; - continue; - } - r5 = r19 + r0; - r4 = r18 + r0; - r6 = r16 + r0; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x67540; - pc=0x5ca00; - run_5ca00(); return; - case 0x67540: - r6 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r4 = r18 + r0; - r5 = r2 + r0; - r19 = r2 + r0; - /* Next insn is delay slot */ - r31=0x67558; - pc=0x5c600; - run_5c600(); return; - case 0x67558: - r5 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r4 = r18 + r0; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x6756c; - pc=0x5ba00; - run_5ba00(); return; - case 0x6756c: - r2 = readPages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff]; - r7 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - case 0x67578: - if(r30 <= 0) { - /* Next insn is delay slot */ - pc=0x675a0; - continue; - } - r5 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r4 = r18 + r0; - r6 = r30 + r0; - writePages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x67598; - pc=0x5cc00; - run_5cc00(); return; - case 0x67598: - r7 = readPages[(r29+124)>>>12][((r29+124)>>>2)&0x3ff]; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r2; - case 0x675a0: - if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x675c0; - continue; - } - r5 = r21 + r0; - r4 = r18 + r0; - r6 = r7 + r0; - /* Next insn is delay slot */ - r31=0x675bc; - pc=0x5ca00; - run_5ca00(); return; - case 0x675bc: - r21 = r2 + r0; - case 0x675c0: - if(r17 <= 0) { - /* Next insn is delay slot */ - pc=0x675e0; - continue; - } - r5 = r21 + r0; - r4 = r18 + r0; - r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x675dc; - pc=0x5cc00; - run_5cc00(); return; - case 0x675dc: - r21 = r2 + r0; - case 0x675e0: - if(r20 <= 0) { - /* Next insn is delay slot */ - pc=0x67600; - run_67600(); return; - } - r5 = r19 + r0; - r4 = r18 + r0; - r6 = r20 + r0; - /* Next insn is delay slot */ - r31=0x675fc; - pc=0x5cc00; - run_5cc00(); return; - case 0x675fc: - r19 = r2 + r0; - case 0x67600: - pc=0x67600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_67600() throws ExecutionException { /* 0x67600 - 0x67800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x67600: - r5 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r4 = r18 + r0; - r6 = r21 + r0; - /* Next insn is delay slot */ - r31=0x67614; - pc=0x5d000; - run_5d000(); return; - case 0x67614: - r30 = readPages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff]; - r4 = r2 + r0; - writePages[(r2+12)>>>12][((r2+12)>>>2)&0x3ff] = r0; - r5 = r19 + r0; - r20 = r2 + r0; - /* Next insn is delay slot */ - r31=0x67630; - pc=0x5ce00; - run_5ce00(); return; - case 0x67630: - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x67ef4; - run_67e00(); return; - } - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x67fe8; - run_67e00(); return; - } - r4 = r20 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x67650; - pc=0x5d800; - run_5d800(); return; - case 0x67650: - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<=(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x6782c; - run_67800(); return; - } - if(r30 == r0) { - /* Next insn is delay slot */ - pc=0x67930; - run_67800(); return; - } - r3 = readPages[(r28+-30924)>>>12][((r28+-30924)>>>2)&0x3ff]; - r2 = readPages[(r28+-30928)>>>12][((r28+-30928)>>>2)&0x3ff]; - r6 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = f26; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = f27; - case 0x6767c: - r5 = 32752 << 16; - r17 = r6 & r5; - r7 = 32736 << 16; - if(r17 == r7) { - /* Next insn is delay slot */ - pc=0x67878; - run_67800(); return; - } - case 0x67690: - if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x67778; - continue; - } - r5 = 1696 << 16; - r5 = r5 + 1; - r5 = ((r17 & 0xffffffffL) < (r5 & 0xffffffffL)) ? 1 : 0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x67778; - continue; - } - f0 = readPages[(r28+-30892)>>>12][((r28+-30892)>>>2)&0x3ff]; - f2 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - f1 = readPages[(r28+-30896)>>>12][((r28+-30896)>>>2)&0x3ff]; - f3 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<=(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x6776c; - continue; - } - f0 = readPages[(r28+-30884)>>>12][((r28+-30884)>>>2)&0x3ff]; - f1 = readPages[(r28+-30888)>>>12][((r28+-30888)>>>2)&0x3ff]; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<=(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x67b58; - run_67a00(); return; - } - r4 = fcsr; - r4 = fcsr; - r1 = r4 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f0 = (int)Math.floor((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f0 = (int)(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL))); break; // Round towards zero - case 2: f0 = (int)Math.ceil((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); break; // Round towards plus infinity - case 3: f0 = (int)Math.floor((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); break; // Round towards minus infinity - } - fcsr = r4; - r2 = f0; - case 0x67720: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x67b38; - run_67a00(); return; - } - f4 = r2; - { long l = Double.doubleToLongBits(((double)f4)); f3 = (int)(l >>> 32); f2 = (int)l; } - if(r2 < 0) { - /* Next insn is delay slot */ - pc=0x67e38; - run_67e00(); return; - } - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = f2; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = f3; - case 0x67744: - if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x67ba8; - run_67a00(); return; - } - r3 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r2 = 32768 << 16; - r4 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r2 = r3 ^ r2; - writePages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff] = r2; - writePages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff] = r4; - case 0x67764: - r3 = readPages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff]; - r2 = readPages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff]; - case 0x6776c: - r5 = 1712 << 16; - r5 = r2 + r5; - r2 = r5 - r17; - case 0x67778: - f12 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - f28 = r3; - f13 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - f29 = r2; - /* Next insn is delay slot */ - r31=0x67790; - pc=0x5d200; - run_5d200(); return; - case 0x67790: - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f29&0xffffffffL) << 32) | (f28&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - f2 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - f3 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = f3; - r2 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f2; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f3; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = f2; - case 0x677bc: - if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x677d4; - continue; - } - r3 = 32752 << 16; - r3 = r2 & r3; - if(r17 == r3) { - /* Next insn is delay slot */ - pc=0x679f4; - run_67800(); return; - } - case 0x677d4: - r5 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x677e4; - pc=0x5ba00; - run_5ba00(); return; - case 0x677e4: - r4 = r18 + r0; - r5 = r21 + r0; - /* Next insn is delay slot */ - r31=0x677f4; - pc=0x5ba00; - run_5ba00(); return; - case 0x677f4: - r4 = r18 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x67804; - pc=0x5ba00; - run_5ba00(); return; - case 0x67800: - pc=0x67800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_67800() throws ExecutionException { /* 0x67800 - 0x67a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x67800: - case 0x67804: - r4 = r18 + r0; - r5 = r20 + r0; - /* Next insn is delay slot */ - r31=0x67814; - pc=0x5ba00; - run_5ba00(); return; - case 0x67814: - /* Next insn is delay slot */ - pc=0x67428; - run_67400(); return; - case 0x6781c: - r2 = r0 + 54; - r2 = r2 - r4; - /* Next insn is delay slot */ - pc=0x674dc; - run_67400(); return; - case 0x6782c: - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f23&0xffffffffL) << 32) | (f22&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = f2; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = f3; - if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x679b8; - continue; - } - r3 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r2 = 32768 << 16; - r4 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r2 = r3 ^ r2; - writePages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff] = r2; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r4; - case 0x67858: - r6 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r5 = 32752 << 16; - r17 = r6 & r5; - r7 = 32736 << 16; - r3 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r2 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - if(r17 != r7) { - /* Next insn is delay slot */ - pc=0x67690; - run_67600(); return; - } - case 0x67878: - r7 = 64688 << 16; - r7 = r6 + r7; - f28 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - f2 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r7; - f30 = r3; - f29 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - f3 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - f31 = r2; - f12 = f28; - f13 = f29; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r5; - writePages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff] = f2; - writePages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff] = f3; - /* Next insn is delay slot */ - r31=0x678b4; - pc=0x5d200; - run_5d200(); return; - case 0x678b4: - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f31&0xffffffffL) << 32) | (f30&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - r5 = readPages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f29&0xffffffffL) << 32) | (f28&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = f5; - r2 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = f4; - r3 = r5 & r2; - r2 = 31904 << 16; - r2 = ((r3 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x67b0c; - run_67a00(); return; - } - r3 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r5 = r5 + -1; - if(r3 == r5) { - /* Next insn is delay slot */ - pc=0x680b4; - run_68000(); return; - } - case 0x678f0: - r5 = r0 + -1; - r2 = 32751 << 16; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r5; - r2 = r2 | 65535; - f0 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r2; - f1 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x677d4; - run_67600(); return; - case 0x67920: - r3 = r7 - r2; - r20 = r16 + r0; - /* Next insn is delay slot */ - pc=0x674c0; - run_67400(); return; - case 0x67930: - r2 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x67ae4; - run_67a00(); return; - } - r6 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r2 = 15 << 16; - r2 = r2 | 65535; - r2 = r2 & r6; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x679d8; - continue; - } - f2 = readPages[(r28+-30924)>>>12][((r28+-30924)>>>2)&0x3ff]; - f3 = readPages[(r28+-30928)>>>12][((r28+-30928)>>>2)&0x3ff]; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x6826c; - run_68200(); return; - } - f4 = readPages[(r28+-30932)>>>12][((r28+-30932)>>>2)&0x3ff]; - r2 = 32768 << 16; - f5 = readPages[(r28+-30936)>>>12][((r28+-30936)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = f5; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = f4; - r3 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r4 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r2 = r3 ^ r2; - writePages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff] = r2; - writePages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff] = r4; - case 0x679a8: - r3 = readPages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff]; - r2 = readPages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x6767c; - run_67600(); return; - case 0x679b8: - f0 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - f1 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = f0; - writePages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x67858; - continue; - case 0x679d8: - r6 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - case 0x679dc: - r3 = readPages[(r28+-30900)>>>12][((r28+-30900)>>>2)&0x3ff]; - r2 = readPages[(r28+-30904)>>>12][((r28+-30904)>>>2)&0x3ff]; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = f24; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = f25; - /* Next insn is delay slot */ - pc=0x6767c; - run_67600(); return; - case 0x679f4: - f2 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - f3 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - case 0x67a00: - pc=0x67a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_67a00() throws ExecutionException { /* 0x67a00 - 0x67c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x67a00: - r4 = fcsr; - r4 = fcsr; - r1 = r4 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f0 = (int)Math.floor((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f0 = (int)(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL))); break; // Round towards zero - case 2: f0 = (int)Math.ceil((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); break; // Round towards plus infinity - case 3: f0 = (int)Math.floor((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); break; // Round towards minus infinity - } - fcsr = r4; - { long l = Double.doubleToLongBits(((double)f0)); f1 = (int)(l >>> 32); f0 = (int)l; } - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x67a4c; - continue; - } - r3 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x67cb4; - run_67c00(); return; - } - case 0x67a4c: - f0 = readPages[(r28+-30876)>>>12][((r28+-30876)>>>2)&0x3ff]; - f1 = readPages[(r28+-30880)>>>12][((r28+-30880)>>>2)&0x3ff]; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x67a8c; - continue; - } - f0 = readPages[(r28+-30868)>>>12][((r28+-30868)>>>2)&0x3ff]; - f1 = readPages[(r28+-30872)>>>12][((r28+-30872)>>>2)&0x3ff]; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))<(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x677d4; - run_67600(); return; - } - case 0x67a8c: - r5 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x67a9c; - pc=0x5ba00; - run_5ba00(); return; - case 0x67a9c: - r4 = r18 + r0; - r5 = r21 + r0; - /* Next insn is delay slot */ - r31=0x67aac; - pc=0x5ba00; - run_5ba00(); return; - case 0x67aac: - r4 = r18 + r0; - r5 = r19 + r0; - /* Next insn is delay slot */ - r31=0x67abc; - pc=0x5ba00; - run_5ba00(); return; - case 0x67abc: - r4 = r18 + r0; - r5 = r23 + r0; - /* Next insn is delay slot */ - r31=0x67acc; - pc=0x5ba00; - run_5ba00(); return; - case 0x67acc: - r4 = r18 + r0; - r5 = r20 + r0; - /* Next insn is delay slot */ - r31=0x67adc; - pc=0x5ba00; - run_5ba00(); return; - case 0x67adc: - /* Next insn is delay slot */ - pc=0x66cd8; - run_66c00(); return; - case 0x67ae4: - r3 = r0 + 1; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x679d8; - run_67800(); return; - } - r2 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x67fd0; - run_67e00(); return; - } - r6 = r2 + r0; - /* Next insn is delay slot */ - pc=0x679dc; - run_67800(); return; - case 0x67b0c: - r3 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r2 = 848 << 16; - r2 = r2 + r3; - f0 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r2; - f1 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x677bc; - run_67600(); return; - case 0x67b38: - f0 = readPages[(r28+-30924)>>>12][((r28+-30924)>>>2)&0x3ff]; - f1 = readPages[(r28+-30928)>>>12][((r28+-30928)>>>2)&0x3ff]; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = f0; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x67744; - run_67600(); return; - case 0x67b58: - f2 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r3 = 32768 << 16; - f3 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - r4 = fcsr; - r4 = fcsr; - r1 = r4 | 3; - r1 = r1 ^ 2; - fcsr = r1; - switch(fcsr & 3) { - case 0: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+0.5); break; // Round to nearest - case 1: f2 = (int)(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL))); break; // Round towards zero - case 2: f2 = (int)Math.ceil((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards plus infinity - case 3: f2 = (int)Math.floor((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); break; // Round towards minus infinity - } - fcsr = r4; - r2 = f2; - r2 = r2 | r3; - /* Next insn is delay slot */ - pc=0x67720; - run_67600(); return; - case 0x67ba8: - f0 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - f1 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - writePages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff] = f0; - writePages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x67764; - run_67600(); return; - case 0x67bc8: - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r22; - r4 = r0 + r0; - if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x66edc; - run_66e00(); return; - } - /* Next insn is delay slot */ - pc=0x670bc; - run_67000(); return; - case 0x67be0: - r7 = r20 + r0; - r5 = r0 + r0; - r3 = r0 + r0; - case 0x67bec: - r2 = r21 + -48; - r4 = (r2&0xffffffffL) < (10&0xffffffffL) ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x67cf0; - run_67c00(); return; - } - r5 = r5 + 1; - case 0x67c00: - pc=0x67c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_67c00() throws ExecutionException { /* 0x67c00 - 0x67e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x67c00: - r9 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x67e24; - run_67e00(); return; - } - r2 = r0 + 1; - r4 = r5 + r0; - r6 = r7 < 17 ? 1 : 0; - if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x67c60; - continue; - } - r2 = r7 + 1; - r8 = r5 + r7; - r6 = r7 < 17 ? 1 : 0; - case 0x67c30: - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x67c50; - continue; - } - r4 = r2 < 10 ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x67ec4; - run_67e00(); return; - } - r4 = r23 << 1; - r23 = r23 << 3; - r23 = r4 + r23; - case 0x67c50: - r2 = r2 + 1; - r4 = r5 + r0; - if(r2 != r8) { - /* Next insn is delay slot */ - pc=0x67c30; - continue; - } - case 0x67c60: - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x6850c; - run_68400(); return; - } - case 0x67c68: - r2 = r7 + r5; - r2 = r2 < 10 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x68674; - run_68600(); return; - } - r2 = r23 << 1; - r23 = r23 << 3; - r23 = r2 + r23; - r23 = r23 + r21; - case 0x67c88: - r3 = r3 + r4; - r7 = r7 + r4; - r5 = r0 + r0; - /* Next insn is delay slot */ - pc=0x67e24; - run_67e00(); return; - case 0x67c9c: - r10 = r0 + r0; - /* Next insn is delay slot */ - pc=0x671a0; - run_67000(); return; - case 0x67ca8: - r10 = r0 + r0; - /* Next insn is delay slot */ - pc=0x67190; - run_67000(); return; - case 0x67cb4: - r3 = 15 << 16; - r3 = r3 | 65535; - r2 = r2 & r3; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x67a4c; - run_67a00(); return; - } - f0 = readPages[(r28+-30860)>>>12][((r28+-30860)>>>2)&0x3ff]; - f1 = readPages[(r28+-30864)>>>12][((r28+-30864)>>>2)&0x3ff]; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))<(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x677d4; - run_67600(); return; - } - /* Next insn is delay slot */ - pc=0x67a8c; - run_67a00(); return; - case 0x67cf0: - r9 = r0 + 1; - /* Next insn is delay slot */ - pc=0x66ebc; - run_66e00(); return; - case 0x67cfc: - r3 = r2 < 309 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x680f4; - run_68000(); return; - } - r2 = r2 >> 4; - r3 = r2 < 2 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x68708; - run_68600(); return; - } - f0 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r6 = 7 << 16; - r6 = r6 + 2136; - f1 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r3 = r6 + r0; - r4 = r0 + r0; - case 0x67d30: - r5 = r2 & 1; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x67d50; - continue; - } - f2 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - f3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - case 0x67d50: - r2 = r2 >> 1; - r5 = r2 < 2 ? 1 : 0; - r4 = r4 + 1; - r3 = r3 + 8; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x67d30; - continue; - } - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = f0; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = f1; - case 0x67d70: - r3 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r4 = r4 << 3; - r6 = r6 + r4; - r2 = 64688 << 16; - r2 = r2 + r3; - f2 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - f0 = readPages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff]; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r2; - f3 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - f1 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - r2 = 32752 << 16; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - r4 = 31904 << 16; - r4 = r4 + 1; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = f3; - r5 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = f2; - r3 = r2 & r5; - r4 = ((r3 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x680f4; - run_68000(); return; - } - r4 = 31888 << 16; - r4 = r4 + 1; - r3 = ((r3 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x68578; - run_68400(); return; - } - r2 = r2 + -1; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r2; - r2 = r0 + -1; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r2; - f0 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r22 = r0 + r0; - f1 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f1; - case 0x67e00: - pc=0x67e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_67e00() throws ExecutionException { /* 0x67e00 - 0x68000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x67e00: - /* Next insn is delay slot */ - pc=0x673cc; - run_67200(); return; - case 0x67e08: - r16 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r21 = r21 + -48; - r9 = r16 + r0; - r7 = r0 + r0; - if(r21 != r0) { - /* Next insn is delay slot */ - pc=0x68370; - run_68200(); return; - } - r5 = r0 + 1; - case 0x67e24: - r2 = r9 + 1; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - addr=r9+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r21 = tmp; - /* Next insn is delay slot */ - pc=0x67bec; - run_67a00(); return; - case 0x67e38: - f0 = readPages[(r28+-30916)>>>12][((r28+-30916)>>>2)&0x3ff]; - f1 = readPages[(r28+-30920)>>>12][((r28+-30920)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = f2; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = f3; - /* Next insn is delay slot */ - pc=0x67744; - run_67600(); return; - case 0x67e5c: - r4 = r0 + 19999; - /* Next insn is delay slot */ - pc=0x67270; - run_67200(); return; - case 0x67e68: - r3 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r2 = r29 + 36; - r19 = 7 << 16; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r3; - r4 = r18 + r0; - r5 = r29 + 40; - r6 = r19 + 12276; - r7 = r29 + 32; - /* Next insn is delay slot */ - r31=0x67e94; - pc=0x6b600; - run_6b600(); return; - case 0x67e94: - r17 = r2 & 7; - if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x6728c; - run_67200(); return; - } - r3 = r0 + 6; - if(r17 != r3) { - /* Next insn is delay slot */ - pc=0x68380; - run_68200(); return; - } - r16 = r16 + 1; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r16; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x66cd8; - run_66c00(); return; - case 0x67ec4: - r4 = r30 << 1; - r30 = r30 << 3; - r30 = r4 + r30; - /* Next insn is delay slot */ - pc=0x67c50; - run_67c00(); return; - case 0x67ed8: - f2 = readPages[(r28+-30916)>>>12][((r28+-30916)>>>2)&0x3ff]; - f3 = readPages[(r28+-30920)>>>12][((r28+-30920)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))+(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - /* Next insn is delay slot */ - pc=0x66f18; - run_66e00(); return; - case 0x67ef4: - if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x6804c; - run_68000(); return; - } - r4 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x6804c; - run_68000(); return; - } - r16 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r2 = 15 << 16; - r2 = r2 | 65535; - r2 = r2 & r16; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6804c; - run_68000(); return; - } - r3 = 32752 << 16; - r2 = 1712 << 16; - r3 = r3 & r16; - r2 = r2 + 1; - r2 = ((r3 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6804c; - run_68000(); return; - } - r2 = readPages[(r20+20)>>>12][((r20+20)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x67f64; - continue; - } - r2 = readPages[(r20+16)>>>12][((r20+16)>>>2)&0x3ff]; - r2 = r2 < 2 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6804c; - run_68000(); return; - } - case 0x67f64: - r5 = r20 + r0; - r4 = r18 + r0; - r6 = r0 + 1; - /* Next insn is delay slot */ - r31=0x67f78; - pc=0x5cc00; - run_5cc00(); return; - case 0x67f78: - r4 = r2 + r0; - r5 = r19 + r0; - r20 = r2 + r0; - /* Next insn is delay slot */ - r31=0x67f8c; - pc=0x5ce00; - run_5ce00(); return; - case 0x67f8c: - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x6804c; - run_68000(); return; - } - r2 = r16 + r0; - case 0x67f98: - if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x686b8; - run_68600(); return; - } - r3 = 32752 << 16; - r4 = 1712 << 16; - r3 = r2 & r3; - r4 = r4 + 1; - r4 = ((r3 & 0xffffffffL) < (r4 & 0xffffffffL)) ? 1 : 0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x686b8; - run_68600(); return; - } - r2 = 880 << 16; - r2 = r2 + 1; - r3 = ((r3 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x68054; - run_68000(); return; - } - case 0x67fd0: - r2 = r0 + 34; - writePages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff] = r2; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x67a8c; - run_67a00(); return; - case 0x67fe8: - if(r30 == r0) { - /* Next insn is delay slot */ - pc=0x6833c; - run_68200(); return; - } - r4 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r2 = 15 << 16; - r2 = r2 | 65535; - r3 = r2 & r4; - case 0x68000: - pc=0x68000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_68000() throws ExecutionException { /* 0x68000 - 0x68200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x68000: - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x685a0; - run_68400(); return; - } - r2 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - case 0x68010: - r2 = r2 & 1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6804c; - continue; - } - f12 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - f13 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x68030; - pc=0x5d200; - run_5d200(); return; - case 0x68030: - f2 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - f3 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f2; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f3; - case 0x6804c: - if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x67a8c; - run_67a00(); return; - } - case 0x68054: - writePages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff] = r0; - f0 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r4 = 14672 << 16; - f2 = readPages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff]; - writePages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff] = r4; - f1 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - f3 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = f1; - r2 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f1; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = f0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x67a8c; - run_67a00(); return; - } - r3 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x67a8c; - run_67a00(); return; - } - r2 = r0 + 34; - writePages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x67a8c; - run_67a00(); return; - case 0x680b4: - r4 = readPages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff]; - r2 = r0 + -1; - if(r4 != r2) { - /* Next insn is delay slot */ - pc=0x678f0; - run_67800(); return; - } - r2 = r0 + 34; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r0; - writePages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff] = r2; - f0 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r2 = 32752 << 16; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r2; - f1 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x67a8c; - run_67a00(); return; - case 0x680f4: - r2 = r0 + 34; - writePages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff] = r2; - case 0x680fc: - r2 = 32752 << 16; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r2; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x672c4; - run_67200(); return; - case 0x68110: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x673b4; - run_67200(); return; - } - r2 = r0 - r2; - r3 = r2 & 15; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x68158; - continue; - } - r4 = 7 << 16; - r3 = r3 << 3; - r4 = r4 + 2176; - r3 = r3 + r4; - f2 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - f0 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - f3 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - f1 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = f2; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = f3; - case 0x68158: - r2 = r2 >> 4; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x673b4; - run_67200(); return; - } - r3 = r2 < 32 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x68254; - run_68200(); return; - } - r3 = r2 & 16; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x6871c; - run_68600(); return; - } - r22 = r0 + r0; - case 0x68180: - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x681d0; - continue; - } - f0 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r3 = 7 << 16; - f1 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r3 = r3 + 4536; - case 0x68198: - r4 = r2 & 1; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x681b8; - continue; - } - f2 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - f3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))*(Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))); f1 = (int)(l >>> 32); f0 = (int)l; } - case 0x681b8: - r2 = r2 >> 1; - r3 = r3 + 8; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x68198; - continue; - } - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = f0; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = f1; - case 0x681d0: - if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x68218; - run_68200(); return; - } - r3 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r4 = r0 + 107; - r2 = r3 << 1; - r2 = r2 >>> 21; - r2 = r4 - r2; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x68218; - run_68200(); return; - } - r4 = r2 < 32 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x6876c; - run_68600(); return; - } - case 0x68200: - pc=0x68200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_68200() throws ExecutionException { /* 0x68200 - 0x68400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x68200: - r4 = r2 < 53 ? 1 : 0; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x6878c; - run_68600(); return; - } - r2 = 880 << 16; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r2; - case 0x68218: - f0 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - f1 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f1; - f2 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - f0 = r0; - f3 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - f1 = r0; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (0!=0)) { - /* Next insn is delay slot */ - pc=0x673cc; - run_67200(); return; - } - case 0x68254: - r2 = r0 + 34; - writePages[(r18+0)>>>12][((r18+0)>>>2)&0x3ff] = r2; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x66cd8; - run_66c00(); return; - case 0x6826c: - f2 = readPages[(r28+-30940)>>>12][((r28+-30940)>>>2)&0x3ff]; - f4 = readPages[(r28+-30932)>>>12][((r28+-30932)>>>2)&0x3ff]; - f3 = readPages[(r28+-30944)>>>12][((r28+-30944)>>>2)&0x3ff]; - f5 = readPages[(r28+-30936)>>>12][((r28+-30936)>>>2)&0x3ff]; - writePages[(r29+116)>>>12][((r29+116)>>>2)&0x3ff] = f2; - writePages[(r29+112)>>>12][((r29+112)>>>2)&0x3ff] = f3; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = f4; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = f5; - /* Next insn is delay slot */ - pc=0x679a8; - run_67800(); return; - case 0x68294: - r17 = r16 + r0; - r30 = r0 + r0; - r23 = r0 + r0; - r20 = r0 + r0; - /* Next insn is delay slot */ - pc=0x66e64; - run_66e00(); return; - case 0x682ac: - f4 = readPages[(r28+-30916)>>>12][((r28+-30916)>>>2)&0x3ff]; - f5 = readPages[(r28+-30920)>>>12][((r28+-30920)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))+(Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - /* Next insn is delay slot */ - pc=0x66f60; - run_66e00(); return; - case 0x682c8: - r3 = r0 + 37; - r4 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - r3 = r3 - r7; - r3 = r3 < r4 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x67354; - run_67200(); return; - } - r2 = r0 + 15; - r7 = r2 - r7; - r2 = 7 << 16; - r2 = r2 + 2176; - r3 = r7 << 3; - r3 = r3 + r2; - f2 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - f0 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - f3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - f1 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r3 = r4 - r7; - r3 = r3 << 3; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - r2 = r3 + r2; - f0 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - f1 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))*(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f4; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f5; - /* Next insn is delay slot */ - pc=0x66cd8; - run_66c00(); return; - case 0x6833c: - r2 = 15 << 16; - r3 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r2 = r2 | 65535; - r2 = r2 & r3; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x684a8; - run_68400(); return; - } - r4 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x684a8; - run_68400(); return; - } - r2 = r3 + r0; - /* Next insn is delay slot */ - pc=0x67f98; - run_67e00(); return; - case 0x68370: - r4 = r0 + 1; - r5 = r0 + 1; - /* Next insn is delay slot */ - pc=0x67c68; - run_67c00(); return; - case 0x68380: - r6 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x683b8; - continue; - } - r5 = readPages[(r19+12276)>>>12][((r19+12276)>>>2)&0x3ff]; - r4 = r29 + 24; - writePages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - r31=0x683a4; - pc=0x5dc00; - run_5dc00(); return; - case 0x683a4: - r5 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r4 = r18 + r0; - /* Next insn is delay slot */ - r31=0x683b4; - pc=0x5ba00; - run_5ba00(); return; - case 0x683b4: - r2 = readPages[(r29+120)>>>12][((r29+120)>>>2)&0x3ff]; - case 0x683b8: - r3 = (r17&0xffffffffL) < (7&0xffffffffL) ? 1 : 0; - r4 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x672a8; - run_67200(); return; - } - r3 = 7 << 16; - r17 = r17 << 2; - r3 = r3 + 4508; - r3 = r3 + r17; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r3; - return; - case 0x683e8: - r4 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r5 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r4; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=0x672a8; - run_67200(); return; - case 0x68400: - pc=0x68400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_68400() throws ExecutionException { /* 0x68400 - 0x68600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x68400: - r3 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r5 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r3; - r3 = 65519 << 16; - r4 = r4 + 1075; - r3 = r3 | 65535; - r4 = r4 << 20; - r3 = r5 & r3; - r3 = r4 | r3; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x672a8; - run_67200(); return; - case 0x68430: - r3 = 32767 << 16; - r3 = r3 | 65535; - r5 = r0 + -1; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r3; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r5; - /* Next insn is delay slot */ - pc=0x672a8; - run_67200(); return; - case 0x6844c: - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r0; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x672a8; - run_67200(); return; - case 0x6845c: - r4 = readPages[(r29+92)>>>12][((r29+92)>>>2)&0x3ff]; - r3 = r4 < -22 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x67354; - run_67200(); return; - } - r3 = 7 << 16; - r2 = r4 << 3; - r3 = r3 + 2176; - r2 = r3 - r2; - f0 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - f2 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - f1 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - f3 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f3&0xffffffffL) << 32) | (f2&0xffffffffL)))/(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f3 = (int)(l >>> 32); f2 = (int)l; } - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f2; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f3; - /* Next insn is delay slot */ - pc=0x66cd8; - run_66c00(); return; - case 0x684a8: - r2 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r2 = r2 & 1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6804c; - run_68000(); return; - } - f12 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - f13 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x684d0; - pc=0x5d200; - run_5d200(); return; - case 0x684d0: - f4 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - f5 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - { long l = Double.doubleToLongBits((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))-(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))); f5 = (int)(l >>> 32); f4 = (int)l; } - f0 = r0; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f4; - f1 = r0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f5; - fcsr = (fcsr&~0x800000) | (((Double.longBitsToDouble(((f5&0xffffffffL) << 32) | (f4&0xffffffffL)))==(Double.longBitsToDouble(((f1&0xffffffffL) << 32) | (f0&0xffffffffL)))) ? 0x800000 : 0x000000); - if(((fcsr&0x800000)!=0) == (1!=0)) { - /* Next insn is delay slot */ - pc=0x67fd0; - run_67e00(); return; - } - /* Next insn is delay slot */ - pc=0x6804c; - run_68000(); return; - case 0x6850c: - r5 = r0 + r0; - /* Next insn is delay slot */ - pc=0x67e24; - run_67e00(); return; - case 0x68518: - r2 = r0 + 73; - if(r21 != r2) { - /* Next insn is delay slot */ - pc=0x66cc8; - run_66c00(); return; - } - case 0x68524: - r4 = 7 << 16; - r2 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r4 = r4 + 4308; - case 0x68530: - r4 = r4 + 1; - addr=r4+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x68618; - run_68600(); return; - } - r2 = r2 + 1; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r6 = r3 + -65; - r6 = r6 & 255; - r6 = (r6&0xffffffffL) < (26&0xffffffffL) ? 1 : 0; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x68568; - continue; - } - r3 = r3 + 32; - case 0x68568: - if(r3 == r5) { - /* Next insn is delay slot */ - pc=0x68530; - continue; - } - /* Next insn is delay slot */ - pc=0x66cc8; - run_66c00(); return; - case 0x68578: - r2 = 848 << 16; - r2 = r5 + r2; - f2 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r2; - f3 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r22 = r0 + r0; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f2; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f3; - /* Next insn is delay slot */ - pc=0x673cc; - run_67200(); return; - case 0x685a0: - r2 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x686fc; - run_68600(); return; - } - r3 = 32752 << 16; - r5 = 1696 << 16; - r3 = r4 & r3; - r5 = r5 + 1; - r5 = ((r3 & 0xffffffffL) < (r5 & 0xffffffffL)) ? 1 : 0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x686fc; - run_68600(); return; - } - r5 = r0 + 107; - r3 = r3 >>> 20; - r3 = r5 - r3; - r5 = r0 + -1; - r3 = r5 << (r3&0x1f); - case 0x685dc: - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x68010; - run_68000(); return; - } - r2 = 32752 << 16; - r4 = r4 & r2; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r0; - r2 = 16 << 16; - r2 = r4 + r2; - f0 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r2; - case 0x68600: - pc=0x68600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_68600() throws ExecutionException { /* 0x68600 - 0x68800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x68600: - f1 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x6804c; - run_68000(); return; - case 0x68618: - r4 = 7 << 16; - r7 = r2 + r0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - r4 = r4 + 4312; - case 0x68628: - r4 = r4 + 1; - addr=r4+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - r2 = r2 + 1; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x68668; - continue; - } - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r6 = r3 + -65; - r6 = r6 & 255; - r6 = (r6&0xffffffffL) < (26&0xffffffffL) ? 1 : 0; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x6865c; - continue; - } - r3 = r3 + 32; - case 0x6865c: - if(r3 == r5) { - /* Next insn is delay slot */ - pc=0x68628; - continue; - } - r2 = r7 + 1; - case 0x68668: - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x680fc; - run_68000(); return; - case 0x68674: - r2 = r30 << 1; - r30 = r30 << 3; - r30 = r2 + r30; - r30 = r30 + r21; - /* Next insn is delay slot */ - pc=0x67c88; - run_67c00(); return; - case 0x6868c: - r2 = r4 + 1; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r2; - addr=r4+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r3 = tmp; - r2 = r0 + 40; - if(r3 == r2) { - /* Next insn is delay slot */ - pc=0x68728; - continue; - } - case 0x686a4: - r4 = 32760 << 16; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r4; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x672c4; - run_67200(); return; - case 0x686b8: - r3 = 32752 << 16; - r2 = r2 & r3; - r3 = 65520 << 16; - r3 = r2 + r3; - r5 = r0 + -1; - r2 = 15 << 16; - r2 = r2 | 65535; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r5; - r2 = r3 | r2; - f0 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r2; - f1 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = f0; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = f1; - /* Next insn is delay slot */ - pc=0x6804c; - run_68000(); return; - case 0x686fc: - r3 = r0 + -1; - /* Next insn is delay slot */ - pc=0x685dc; - run_68400(); return; - case 0x68708: - r6 = 7 << 16; - r4 = r0 + r0; - r6 = r6 + 2136; - /* Next insn is delay slot */ - pc=0x67d70; - run_67c00(); return; - case 0x6871c: - r22 = r0 + 106; - /* Next insn is delay slot */ - pc=0x68180; - run_68000(); return; - case 0x68728: - r5 = 7 << 16; - r4 = r29 + 40; - r5 = r5 + 12256; - r6 = r29 + 24; - /* Next insn is delay slot */ - r31=0x68740; - pc=0x6c200; - run_6c200(); return; - case 0x68740: - r3 = r0 + 5; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x686a4; - continue; - } - r2 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r3 = 32752 << 16; - r2 = r3 | r2; - r3 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r2; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x672c4; - run_67200(); return; - case 0x6876c: - r3 = r0 + -1; - r2 = r3 << (r2&0x1f); - r3 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r2 = r2 & r3; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x68218; - run_68200(); return; - case 0x6878c: - r4 = r0 + -1; - r2 = r4 << (r2&0x1f); - r2 = r2 & r3; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x68218; - run_68200(); return; - case 0x68800: - pc=0x68800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_68800() throws ExecutionException { /* 0x68800 - 0x68a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x68800: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x66c00; - run_66c00(); return; - case 0x68a00: - pc=0x68a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_68a00() throws ExecutionException { /* 0x68a00 - 0x68c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x68a00: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r29 = r29 + -32; - r6 = r5 + r0; - r5 = r2 + r0; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = f21; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = f20; - /* Next insn is delay slot */ - r31=0x68a28; - pc=0x66c00; - run_66c00(); return; - case 0x68a28: - f12 = f0; - f13 = f1; - f20 = f0; - f21 = f1; - /* Next insn is delay slot */ - r31=0x68a38; - pc=0x37a00; - run_37a00(); return; - case 0x68a38: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x68a60; - continue; - } - f0=Float.floatToRawIntBits((float)(Double.longBitsToDouble(((f21&0xffffffffL) << 32) | (f20&0xffffffffL)))); - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - f20 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - f21 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x68a60: - f20 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - f21 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r4 = r0 + r0; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=0x66a00; - run_66a00(); return; - case 0x68c00: - pc=0x68c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_68c00() throws ExecutionException { /* 0x68c00 - 0x68e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x68c00: - r2 = r0 + -1; - if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x68d24; - continue; - } - addr=r6+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r29 = r29 + -32; - r2 = r2 & 65503; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r16; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - addr=r6+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r6+48)>>>12][((r6+48)>>>2)&0x3ff]; - r16 = r5 & 255; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x68cb0; - continue; - } - r3 = readPages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff]; - r2 = readPages[(r6+52)>>>12][((r6+52)>>>2)&0x3ff]; - r2 = r3 < r2 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x68c88; - continue; - } - case 0x68c4c: - r2 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - r3 = r2 + -1; - writePages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff] = r3; - addr=r2+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r16&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff] = r2; - r2 = r16 + r0; - case 0x68c74: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x68c88: - r5 = r6 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - r31=0x68c98; - pc=0x6a200; - run_6a200(); return; - case 0x68c98: - r6 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x68c4c; - continue; - } - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x68c74; - continue; - case 0x68cb0: - r2 = readPages[(r6+16)>>>12][((r6+16)>>>2)&0x3ff]; - r3 = readPages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x68cdc; - continue; - } - r2 = ((r2 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x68cdc; - continue; - } - addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r2 == r16) { - /* Next insn is delay slot */ - pc=0x68d30; - continue; - } - case 0x68cdc: - r2 = readPages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff]; - addr=r6+66; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r16&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r6+60)>>>12][((r6+60)>>>2)&0x3ff] = r2; - r2 = r6 + 64; - writePages[(r6+48)>>>12][((r6+48)>>>2)&0x3ff] = r2; - r2 = r0 + 3; - writePages[(r6+52)>>>12][((r6+52)>>>2)&0x3ff] = r2; - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r6 + 66; - writePages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff] = r2; - r2 = r0 + 1; - writePages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff] = r2; - writePages[(r6+56)>>>12][((r6+56)>>>2)&0x3ff] = r3; - r2 = r16 + r0; - r16 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x68d24: - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x68d30: - r3 = r3 + -1; - writePages[(r6+0)>>>12][((r6+0)>>>2)&0x3ff] = r3; - r3 = readPages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff]; - r3 = r3 + 1; - writePages[(r6+4)>>>12][((r6+4)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x68c74; - continue; - case 0x68e00: - pc=0x68e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_68e00() throws ExecutionException { /* 0x68e00 - 0x69000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x68e00: - r29 = r29 + -24; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - r16 = r5 + r0; - r5 = readPages[(r5+48)>>>12][((r5+48)>>>2)&0x3ff]; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r31; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x68e68; - continue; - } - r2 = r16 + 64; - if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x68e30; - continue; - } - /* Next insn is delay slot */ - r31=0x68e30; - pc=0x3ca00; - run_3ca00(); return; - case 0x68e30: - r2 = readPages[(r16+60)>>>12][((r16+60)>>>2)&0x3ff]; - writePages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff] = r0; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x68e68; - continue; - } - r2 = readPages[(r16+56)>>>12][((r16+56)>>>2)&0x3ff]; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - r2 = r0 + r0; - case 0x68e54: - r31 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 24; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x68e68: - r2 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r0; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r2 = r2 | 32; - addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x68e54; - continue; - case 0x69000: - pc=0x69000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_69000() throws ExecutionException { /* 0x69000 - 0x69200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x69000: - { long hilo = (r7) * r6; hi = (int) (hilo >>> 32); lo = (int) hilo; } - r29 = r29 + -56; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r21; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r23; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r22; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r16; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r20; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r19; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r18; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r17; - r22 = r6 + r0; - r21 = lo; - r23 = r7 + r0; - r16 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - if(r21 == r0) { - /* Next insn is delay slot */ - pc=0x6910c; - continue; - } - r20 = r4 + r0; - r19 = r5 + r0; - r18 = lo; - /* Next insn is delay slot */ - pc=0x69094; - continue; - case 0x69058: - r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x69064; - pc=0x48fdc; - run_48e00(); return; - case 0x69064: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r0; - r2 = r2 + r17; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - r4 = r20 + r0; - r5 = r16 + r0; - r19 = r19 + r17; - r18 = r18 - r17; - /* Next insn is delay slot */ - r31=0x6908c; - pc=0x68e00; - run_68e00(); return; - case 0x6908c: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x69118; - continue; - } - case 0x69094: - r17 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r4 = r19 + r0; - r3 = ((r17 & 0xffffffffL) < (r18 & 0xffffffffL)) ? 1 : 0; - r5 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x69058; - continue; - } - r6 = r18 + r0; - /* Next insn is delay slot */ - r31=0x690b8; - pc=0x48fdc; - run_48e00(); return; - case 0x690b8: - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = r2 - r18; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r18 = r2 + r18; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r18; - r2 = r23 + r0; - case 0x690dc: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r23 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r22 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r21 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r20 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r19 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r18 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r17 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6910c: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x690dc; - continue; - case 0x69118: - r2 = r21 - r18; - if(r22 != r0) { - /* Next insn is delay slot */ - if(r22!=0) { - hi = (int)((r2 & 0xffffffffL) % (r22 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r22 & 0xffffffffL)); - } - pc=0x69128; - continue; - } - if(r22!=0) { - hi = (int)((r2 & 0xffffffffL) % (r22 & 0xffffffffL)); lo = (int)((r2 & 0xffffffffL) / (r22 & 0xffffffffL)); - } - throw new ExecutionException("Break"); - case 0x69128: - r2 = lo; - /* Next insn is delay slot */ - pc=0x690dc; - continue; - case 0x69200: - pc=0x69200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_69200() throws ExecutionException { /* 0x69200 - 0x69400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x69200: - addr=r5+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ - r2 = tmp; - r29 = r29 + -416; - writePages[(r29+380)>>>12][((r29+380)>>>2)&0x3ff] = r17; - r17 = r4 + r0; - r4 = r2 & 8192; - writePages[(r29+408)>>>12][((r29+408)>>>2)&0x3ff] = r30; - writePages[(r29+376)>>>12][((r29+376)>>>2)&0x3ff] = r16; - writePages[(r29+412)>>>12][((r29+412)>>>2)&0x3ff] = r31; - writePages[(r29+404)>>>12][((r29+404)>>>2)&0x3ff] = r23; - writePages[(r29+400)>>>12][((r29+400)>>>2)&0x3ff] = r22; - writePages[(r29+396)>>>12][((r29+396)>>>2)&0x3ff] = r21; - writePages[(r29+392)>>>12][((r29+392)>>>2)&0x3ff] = r20; - writePages[(r29+388)>>>12][((r29+388)>>>2)&0x3ff] = r19; - writePages[(r29+384)>>>12][((r29+384)>>>2)&0x3ff] = r18; - r30 = r5 + r0; - r16 = r6 + r0; - writePages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff] = r7; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x69264; - continue; - } - r2 = r2 | 8192; - r4 = readPages[(r5+100)>>>12][((r5+100)>>>2)&0x3ff]; - addr=r5+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r0 + -8193; - r2 = r4 & r2; - writePages[(r5+100)>>>12][((r5+100)>>>2)&0x3ff] = r2; - case 0x69264: - r19 = 7 << 16; - writePages[(r29+344)>>>12][((r29+344)>>>2)&0x3ff] = r0; - r18 = r0 + r0; - r23 = r0 + r0; - writePages[(r29+340)>>>12][((r29+340)>>>2)&0x3ff] = r0; - r19 = r19 + 4576; - case 0x6927c: - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r16 = r16 + 1; - writePages[(r29+328)>>>12][((r29+328)>>>2)&0x3ff] = r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x69484; - run_69400(); return; - } - case 0x69290: - r5 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - r4 = r5 + r2; - addr=r4+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r4 & 8; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x6932c; - continue; - } - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x69308; - continue; - } - case 0x692c0: - r4 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r5 + r2; - addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r2 & 8; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6927c; - continue; - } - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r4 = r4 + 1; - r2 = r2 + -1; - r23 = r23 + 1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r2; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r4; - if(r2 > 0) { - /* Next insn is delay slot */ - pc=0x692c0; - continue; - } - case 0x69308: - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x69318; - pc=0x68e00; - run_68e00(); return; - case 0x69318: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6927c; - continue; - } - r5 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x692c0; - continue; - case 0x6932c: - r4 = r0 + 37; - if(r2 != r4) { - /* Next insn is delay slot */ - pc=0x69500; - run_69400(); return; - } - r21 = r0 + r0; - r22 = r0 + r0; - case 0x69340: - r16 = r16 + 1; - addr=r16+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - r2 = r4 & 255; - r6 = (r2&0xffffffffL) < (121&0xffffffffL) ? 1 : 0; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x69374; - continue; - } - r2 = r2 << 2; - r2 = r19 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x69374: - r4 = r5 + r4; - addr=r4+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r2 = r0 + 1; - r4 = r4 & 3; - if(r4 != r2) { - /* Next insn is delay slot */ - pc=0x69390; - continue; - } - case 0x6938c: - r21 = r21 | 1; - case 0x69390: - r3 = 4 << 16; - r3 = r3 + 12800; - writePages[(r29+344)>>>12][((r29+344)>>>2)&0x3ff] = r3; - r18 = r0 + 10; - r20 = r0 + 3; - case 0x693a4: - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x6956c; - run_69400(); return; - } - case 0x693b4: - r2 = r21 & 64; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x694a8; - run_69400(); return; - } - case 0x693c0: - r2 = r0 + 2; - if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x69714; - run_69600(); return; - } - r2 = r0 + 3; - if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x696a0; - run_69600(); return; - } - r2 = r0 + 1; - if(r20 == r2) { - /* Next insn is delay slot */ - pc=0x695e0; - run_69400(); return; - } - if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x693f0; - continue; - } - r22 = r0 + 1; - case 0x693f0: - r2 = r21 & 1; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x69cd8; - run_69c00(); return; - } - r21 = r21 & 16; - case 0x69400: - pc=0x69400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_69400() throws ExecutionException { /* 0x69400 - 0x69600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x69400: - if(r21 == r0) { - /* Next insn is delay slot */ - pc=0x69e78; - run_69e00(); return; - } - r21 = r0 + r0; - /* Next insn is delay slot */ - pc=0x69440; - continue; - case 0x69414: - r4 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r21 = r21 + r2; - r22 = r22 - r2; - r2 = r4 + r2; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r2; - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x69438; - pc=0x68e00; - run_68e00(); return; - case 0x69438: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x69fa4; - run_69e00(); return; - } - case 0x69440: - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r4 = r2 < r22 ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x69414; - continue; - } - r2 = r2 - r22; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r2; - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r21 = r21 + r22; - r9 = r2 + r22; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r9; - case 0x6946c: - r23 = r23 + r21; - case 0x69470: - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r2 = tmp; - r16 = r16 + 1; - writePages[(r29+328)>>>12][((r29+328)>>>2)&0x3ff] = r2; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x69290; - run_69200(); return; - } - case 0x69484: - r2 = readPages[(r29+340)>>>12][((r29+340)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x695ac; - continue; - case 0x69490: - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x694a0; - pc=0x68e00; - run_68e00(); return; - case 0x694a0: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x69584; - continue; - } - case 0x694a8: - r5 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x694c0; - continue; - case 0x694b8: - r2 = r2 + 1; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r2; - case 0x694c0: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r5 + r4; - addr=r4+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r4 & 8; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x693c0; - run_69200(); return; - } - r4 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r23 = r23 + 1; - r4 = r4 + -1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r4; - if(r4 > 0) { - /* Next insn is delay slot */ - pc=0x694b8; - continue; - } - /* Next insn is delay slot */ - pc=0x69490; - continue; - case 0x69500: - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x69fb8; - run_69e00(); return; - } - case 0x69510: - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - addr=r16+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r5 = tmp; - if(r5 != r4) { - /* Next insn is delay slot */ - pc=0x69484; - continue; - } - r4 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r2 = r2 + 1; - r4 = r4 + -1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r4; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r2; - r23 = r23 + 1; - /* Next insn is delay slot */ - pc=0x6927c; - run_69200(); return; - case 0x69548: - r21 = r21 | 1; - case 0x6954c: - r3 = 6 << 16; - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r3 = r3 + -2048; - writePages[(r29+344)>>>12][((r29+344)>>>2)&0x3ff] = r3; - r18 = r0 + 8; - r20 = r0 + 3; - if(r2 > 0) { - /* Next insn is delay slot */ - pc=0x693b4; - run_69200(); return; - } - case 0x6956c: - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x6957c; - pc=0x68e00; - run_68e00(); return; - case 0x6957c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x693b4; - run_69200(); return; - } - case 0x69584: - r3 = readPages[(r29+340)>>>12][((r29+340)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x695a8; - continue; - } - addr=r30+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - r2 = r2 & 64; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x69484; - continue; - } - case 0x695a8: - r2 = r0 + -1; - case 0x695ac: - r31 = readPages[(r29+412)>>>12][((r29+412)>>>2)&0x3ff]; - r30 = readPages[(r29+408)>>>12][((r29+408)>>>2)&0x3ff]; - r23 = readPages[(r29+404)>>>12][((r29+404)>>>2)&0x3ff]; - r22 = readPages[(r29+400)>>>12][((r29+400)>>>2)&0x3ff]; - r21 = readPages[(r29+396)>>>12][((r29+396)>>>2)&0x3ff]; - r20 = readPages[(r29+392)>>>12][((r29+392)>>>2)&0x3ff]; - r19 = readPages[(r29+388)>>>12][((r29+388)>>>2)&0x3ff]; - r18 = readPages[(r29+384)>>>12][((r29+384)>>>2)&0x3ff]; - r17 = readPages[(r29+380)>>>12][((r29+380)>>>2)&0x3ff]; - r16 = readPages[(r29+376)>>>12][((r29+376)>>>2)&0x3ff]; - r29 = r29 + 416; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x695e0: - if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x695ec; - continue; - } - r22 = r0 + -1; - case 0x695ec: - r21 = r21 & 16; - if(r21 == r0) { - /* Next insn is delay slot */ - pc=0x69a10; - run_69a00(); return; - } - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r21 = r0 + r0; - case 0x69600: - pc=0x69600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_69600() throws ExecutionException { /* 0x69600 - 0x69800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x69600: - r10 = r29 + 24; - case 0x69604: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r10 + r4; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x6968c; - continue; - } - case 0x69620: - r4 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r2 = r2 + 1; - r4 = r4 + -1; - r21 = r21 + 1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r4; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r2; - if(r22 == r21) { - /* Next insn is delay slot */ - pc=0x6946c; - run_69400(); return; - } - if(r4 > 0) { - /* Next insn is delay slot */ - pc=0x69604; - continue; - } - r4 = r17 + r0; - r5 = r30 + r0; - writePages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff] = r10; - /* Next insn is delay slot */ - r31=0x6965c; - pc=0x68e00; - run_68e00(); return; - case 0x6965c: - r10 = readPages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6946c; - run_69400(); return; - } - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r10 + r4; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x69620; - continue; - } - case 0x6968c: - if(r21 == r0) { - /* Next insn is delay slot */ - pc=0x69484; - run_69400(); return; - } - r23 = r23 + r21; - /* Next insn is delay slot */ - pc=0x69470; - run_69400(); return; - case 0x696a0: - r2 = r22 + -1; - r2 = (r2&0xffffffffL) < (39&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x69a00; - run_69a00(); return; - } - r13 = r0 + r0; - case 0x696b4: - r11 = r29 + 280; - r2 = 7 << 16; - r10 = r21 | 3456; - r12 = r0 + r0; - r21 = r11 + r0; - r14 = r0 + 512; - r7 = r2 + 5372; - case 0x696d0: - r6 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - addr=r6+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r2 = r4 + -43; - r2 = r2 & 255; - r5 = (r2&0xffffffffL) < (78&0xffffffffL) ? 1 : 0; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x69898; - run_69800(); return; - } - r3 = 7 << 16; - r2 = r2 << 2; - r3 = r3 + 5060; - r2 = r3 + r2; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=r2; - return; - case 0x69714: - if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x697b0; - continue; - } - r2 = r21 & 1; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x697c0; - continue; - } - case 0x69728: - r21 = r21 & 16; - if(r21 == r0) { - /* Next insn is delay slot */ - pc=0x69c10; - run_69c00(); return; - } - r5 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r21 = r0 + r0; - case 0x69740: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r5 + r4; - addr=r4+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r4 & 8; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x6946c; - run_69400(); return; - } - r4 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r2 = r2 + 1; - r4 = r4 + -1; - r21 = r21 + 1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r4; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r2; - if(r22 == r21) { - /* Next insn is delay slot */ - pc=0x6946c; - run_69400(); return; - } - if(r4 > 0) { - /* Next insn is delay slot */ - pc=0x69740; - continue; - } - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x69798; - pc=0x68e00; - run_68e00(); return; - case 0x69798: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6946c; - run_69400(); return; - } - r5 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x69740; - continue; - case 0x697b0: - r2 = r21 & 1; - r22 = r0 + -1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x69728; - continue; - } - case 0x697c0: - r4 = r29 + 320; - r5 = r0 + r0; - r6 = r0 + 8; - r20 = r21 & 16; - /* Next insn is delay slot */ - r31=0x697d8; - pc=0x48fec; - run_48e00(); return; - case 0x697d8: - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x69ed0; - run_69e00(); return; - } - r3 = readPages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff]; - r21 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = r3 + 4; - writePages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff] = r3; - case 0x697f4: - r6 = r0 + r0; - case 0x697f8: - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r4 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - case 0x69800: - pc=0x69800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_69800() throws ExecutionException { /* 0x69800 - 0x69a00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x69800: - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r4 + r2; - addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r2 & 8; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x69828; - continue; - } - if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x69ff0; - run_69e00(); return; - } - case 0x69828: - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x6927c; - run_69200(); return; - } - writePages[(r21+0)>>>12][((r21+0)>>>2)&0x3ff] = r0; - case 0x69834: - r3 = readPages[(r29+340)>>>12][((r29+340)>>>2)&0x3ff]; - r3 = r3 + 1; - writePages[(r29+340)>>>12][((r29+340)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x6927c; - run_69200(); return; - case 0x6984c: - r2 = r10 & 1536; - if(r2 != r14) { - /* Next insn is delay slot */ - pc=0x69898; - continue; - } - r2 = r0 + -513; - r10 = r10 & r2; - r10 = r10 | 1280; - r18 = r0 + 16; - case 0x69868: - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - addr=r21+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = r2 + -1; - r21 = r21 + 1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r2; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x69994; - continue; - } - case 0x69884: - r6 = r6 + 1; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r6; - case 0x6988c: - r22 = r22 + -1; - if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x696d0; - run_69600(); return; - } - case 0x69898: - r2 = r10 & 256; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x698b8; - continue; - } - r2 = ((r11 & 0xffffffffL) < (r21 & 0xffffffffL)) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x69f3c; - run_69e00(); return; - } - case 0x698b0: - if(r21 == r11) { - /* Next insn is delay slot */ - pc=0x69484; - run_69400(); return; - } - case 0x698b8: - r2 = r10 & 16; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x69e04; - run_69e00(); return; - } - case 0x698c4: - r11 = r21 - r11; - r12 = r11 + r12; - r23 = r23 + r12; - /* Next insn is delay slot */ - pc=0x6927c; - run_69200(); return; - case 0x698d8: - r2 = r18 < 11 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x69898; - continue; - } - r2 = r0 + -2945; - r10 = r10 & r2; - /* Next insn is delay slot */ - pc=0x69868; - continue; - case 0x698f4: - r2 = r18 << 1; - r2 = r2 + r7; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ - r18 = tmp; - r2 = r18 < 9 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x69898; - continue; - } - r2 = r0 + -2945; - r10 = r10 & r2; - /* Next insn is delay slot */ - pc=0x69868; - continue; - case 0x69920: - r2 = r18 << 1; - r2 = r2 + r7; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ - r18 = tmp; - r2 = r0 + -2945; - r10 = r10 & r2; - /* Next insn is delay slot */ - pc=0x69868; - continue; - case 0x6993c: - r2 = r10 & 2048; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x69868; - continue; - } - if(r18 != r0) { - /* Next insn is delay slot */ - pc=0x69958; - continue; - } - r10 = r10 | 512; - r18 = r0 + 8; - case 0x69958: - r2 = r10 & 1024; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x69ec0; - run_69e00(); return; - } - r2 = r0 + -897; - r10 = r10 & r2; - if(r13 == r0) { - /* Next insn is delay slot */ - pc=0x6997c; - continue; - } - r13 = r13 + -1; - r22 = r22 + 1; - case 0x6997c: - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r12 = r12 + 1; - r2 = r2 + -1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r2; - if(r2 > 0) { - /* Next insn is delay slot */ - pc=0x69884; - continue; - } - case 0x69994: - r4 = r17 + r0; - r5 = r30 + r0; - writePages[(r29+360)>>>12][((r29+360)>>>2)&0x3ff] = r7; - writePages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff] = r10; - writePages[(r29+368)>>>12][((r29+368)>>>2)&0x3ff] = r11; - writePages[(r29+364)>>>12][((r29+364)>>>2)&0x3ff] = r12; - writePages[(r29+352)>>>12][((r29+352)>>>2)&0x3ff] = r13; - writePages[(r29+356)>>>12][((r29+356)>>>2)&0x3ff] = r14; - /* Next insn is delay slot */ - r31=0x699bc; - pc=0x68e00; - run_68e00(); return; - case 0x699bc: - r7 = readPages[(r29+360)>>>12][((r29+360)>>>2)&0x3ff]; - r10 = readPages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff]; - r11 = readPages[(r29+368)>>>12][((r29+368)>>>2)&0x3ff]; - r12 = readPages[(r29+364)>>>12][((r29+364)>>>2)&0x3ff]; - r13 = readPages[(r29+352)>>>12][((r29+352)>>>2)&0x3ff]; - r14 = readPages[(r29+356)>>>12][((r29+356)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6988c; - continue; - } - /* Next insn is delay slot */ - pc=0x69898; - continue; - case 0x699e4: - r2 = r10 & 128; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x69898; - continue; - } - r2 = r0 + -129; - r10 = r10 & r2; - /* Next insn is delay slot */ - pc=0x69868; - continue; - case 0x69a00: - pc=0x69a00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_69a00() throws ExecutionException { /* 0x69a00 - 0x69c00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x69a00: - r13 = r22 + -39; - r22 = r0 + 39; - /* Next insn is delay slot */ - pc=0x696b4; - run_69600(); return; - case 0x69a10: - r3 = readPages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff]; - r10 = r29 + 24; - r3 = r3 + 4; - writePages[(r29+336)>>>12][((r29+336)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff]; - r21 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r20 = r21 + r0; - case 0x69a34: - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r10 + r4; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r4 = tmp; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x69abc; - continue; - } - r4 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r20 = r20 + 1; - r4 = r4 + -1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r4; - r4 = r2 + 1; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r22 = r22 + -1; - addr=r20+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x69abc; - continue; - } - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - if(r2 > 0) { - /* Next insn is delay slot */ - pc=0x69a34; - continue; - } - r4 = r17 + r0; - r5 = r30 + r0; - writePages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff] = r10; - /* Next insn is delay slot */ - r31=0x69aa8; - pc=0x68e00; - run_68e00(); return; - case 0x69aa8: - r10 = readPages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x69a34; - continue; - } - if(r21 == r20) { - /* Next insn is delay slot */ - pc=0x69584; - run_69400(); return; - } - case 0x69abc: - r21 = r20 - r21; - if(r21 == r0) { - /* Next insn is delay slot */ - pc=0x69484; - run_69400(); return; - } - r3 = readPages[(r29+340)>>>12][((r29+340)>>>2)&0x3ff]; - addr=r20+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r3 = r3 + 1; - writePages[(r29+340)>>>12][((r29+340)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+336)>>>12][((r29+336)>>>2)&0x3ff]; - r23 = r23 + r21; - writePages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x69470; - run_69400(); return; - case 0x69aec: - r3 = 6 << 16; - r3 = r3 + -2048; - writePages[(r29+344)>>>12][((r29+344)>>>2)&0x3ff] = r3; - r18 = r0 + 10; - r20 = r0 + 3; - /* Next insn is delay slot */ - pc=0x693a4; - run_69200(); return; - case 0x69b08: - r20 = r0 + 2; - /* Next insn is delay slot */ - pc=0x693a4; - run_69200(); return; - case 0x69b14: - r21 = r21 | 544; - case 0x69b18: - r3 = 6 << 16; - r3 = r3 + -2048; - writePages[(r29+344)>>>12][((r29+344)>>>2)&0x3ff] = r3; - r18 = r0 + 16; - r20 = r0 + 3; - /* Next insn is delay slot */ - pc=0x693a4; - run_69200(); return; - case 0x69b34: - r2 = r21 & 16; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6927c; - run_69200(); return; - } - r2 = r21 & 4; - r3 = readPages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x69fd8; - run_69e00(); return; - } - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = r3 + 4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r23&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x6927c; - run_69200(); return; - case 0x69b68: - r21 = r21 | 1; - /* Next insn is delay slot */ - pc=0x69340; - run_69200(); return; - case 0x69b74: - r3 = 4 << 16; - r3 = r3 + 12800; - writePages[(r29+344)>>>12][((r29+344)>>>2)&0x3ff] = r3; - r18 = r0 + r0; - r20 = r0 + 3; - /* Next insn is delay slot */ - pc=0x693a4; - run_69200(); return; - case 0x69b90: - r21 = r21 | 4; - /* Next insn is delay slot */ - pc=0x69340; - run_69200(); return; - case 0x69b9c: - r21 = r21 | 64; - r20 = r0 + r0; - /* Next insn is delay slot */ - pc=0x693a4; - run_69200(); return; - case 0x69bac: - r5 = r16 + r0; - r4 = r29 + 24; - /* Next insn is delay slot */ - r31=0x69bbc; - pc=0x66800; - run_66800(); return; - case 0x69bbc: - r16 = r2 + r0; - r21 = r21 | 64; - r20 = r0 + 1; - /* Next insn is delay slot */ - pc=0x693a4; - run_69200(); return; - case 0x69bd0: - r21 = r21 | 512; - /* Next insn is delay slot */ - pc=0x69b18; - continue; - case 0x69bdc: - r21 = r21 | 2; - /* Next insn is delay slot */ - pc=0x69340; - run_69200(); return; - case 0x69be8: - r21 = r21 | 16; - /* Next insn is delay slot */ - pc=0x69340; - run_69200(); return; - case 0x69bf4: - r2 = r22 << 1; - r9 = r22 << 3; - r2 = r2 + r9; - case 0x69c00: - pc=0x69c00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_69c00() throws ExecutionException { /* 0x69c00 - 0x69e00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x69c00: - r4 = r4 + -48; - r22 = r4 + r2; - /* Next insn is delay slot */ - pc=0x69340; - run_69200(); return; - case 0x69c10: - r3 = readPages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff]; - r3 = r3 + 4; - writePages[(r29+336)>>>12][((r29+336)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff]; - r20 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r21 = r20 + r0; - case 0x69c34: - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r5 = readPages[(r28+-31060)>>>12][((r28+-31060)>>>2)&0x3ff]; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r5 + r4; - addr=r4+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r4 & 8; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x69cb0; - continue; - } - r4 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r21 = r21 + 1; - r4 = r4 + -1; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r4; - r4 = r2 + 1; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r22 = r22 + -1; - addr=r21+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r2&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r22 == r0) { - /* Next insn is delay slot */ - pc=0x69cb0; - continue; - } - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - if(r2 > 0) { - /* Next insn is delay slot */ - pc=0x69c34; - continue; - } - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x69ca8; - pc=0x68e00; - run_68e00(); return; - case 0x69ca8: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x69c34; - continue; - } - case 0x69cb0: - r3 = readPages[(r29+340)>>>12][((r29+340)>>>2)&0x3ff]; - r6 = r21 - r20; - r3 = r3 + 1; - writePages[(r29+340)>>>12][((r29+340)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+336)>>>12][((r29+336)>>>2)&0x3ff]; - addr=r21+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r23 = r23 + r6; - writePages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x6927c; - run_69200(); return; - case 0x69cd8: - r4 = r29 + 320; - r5 = r0 + r0; - r6 = r0 + 8; - r21 = r21 & 16; - /* Next insn is delay slot */ - r31=0x69cf0; - pc=0x48fec; - run_48e00(); return; - case 0x69cf0: - writePages[(r29+348)>>>12][((r29+348)>>>2)&0x3ff] = r21; - if(r21 != r0) { - /* Next insn is delay slot */ - pc=0x69f08; - run_69e00(); return; - } - r3 = readPages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff]; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - writePages[(r29+336)>>>12][((r29+336)>>>2)&0x3ff] = r3; - r3 = readPages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff]; - r3 = r3 + 4; - writePages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff] = r3; - case 0x69d20: - r21 = r0 + r0; - case 0x69d24: - /* Next insn is delay slot */ - r31=0x69d2c; - pc=0x5a800; - run_5a800(); return; - case 0x69d2c: - if(r2 == r21) { - /* Next insn is delay slot */ - pc=0x69584; - run_69400(); return; - } - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r3 = r29 + 24; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r6 = r3 + r21; - addr=r6+256; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r4 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r2; - r4 = r4 + -1; - r2 = r29 + 320; - r20 = r21 + 1; - r5 = readPages[(r29+336)>>>12][((r29+336)>>>2)&0x3ff]; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r4; - r6 = r29 + 280; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r4 = r17 + r0; - r7 = r20 + r0; - /* Next insn is delay slot */ - r31=0x69d80; - pc=0x66000; - run_66000(); return; - case 0x69d80: - r3 = r0 + -1; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x69584; - run_69400(); return; - } - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x69f80; - run_69e00(); return; - } - r3 = readPages[(r29+348)>>>12][((r29+348)>>>2)&0x3ff]; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x69db0; - continue; - } - r3 = readPages[(r29+336)>>>12][((r29+336)>>>2)&0x3ff]; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r0; - case 0x69db0: - r3 = readPages[(r29+348)>>>12][((r29+348)>>>2)&0x3ff]; - r23 = r23 + r20; - r22 = r22 + -1; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x69f98; - run_69e00(); return; - } - r3 = readPages[(r29+336)>>>12][((r29+336)>>>2)&0x3ff]; - r21 = r0 + r0; - r3 = r3 + 4; - writePages[(r29+336)>>>12][((r29+336)>>>2)&0x3ff] = r3; - case 0x69dd4: - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - if(r2 <= 0) { - /* Next insn is delay slot */ - pc=0x69f14; - run_69e00(); return; - } - case 0x69de4: - if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x69d24; - continue; - } - case 0x69dec: - r3 = readPages[(r29+348)>>>12][((r29+348)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x69834; - run_69800(); return; - } - /* Next insn is delay slot */ - pc=0x6927c; - run_69200(); return; - case 0x69e00: - pc=0x69e00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_69e00() throws ExecutionException { /* 0x69e00 - 0x6a000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x69e00: - case 0x69e04: - r3 = readPages[(r29+344)>>>12][((r29+344)>>>2)&0x3ff]; - addr=r21+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r0&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r4 = r17 + r0; - r5 = r11 + r0; - writePages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff] = r10; - writePages[(r29+368)>>>12][((r29+368)>>>2)&0x3ff] = r11; - writePages[(r29+364)>>>12][((r29+364)>>>2)&0x3ff] = r12; - r6 = r0 + r0; - r7 = r18 + r0; - /* Next insn is delay slot */ - pc=r3; - r31=0x69e30; - return; - case 0x69e30: - r10 = readPages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff]; - r11 = readPages[(r29+368)>>>12][((r29+368)>>>2)&0x3ff]; - r4 = r10 & 32; - r12 = readPages[(r29+364)>>>12][((r29+364)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x69edc; - continue; - } - case 0x69e48: - r3 = readPages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff]; - r4 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = r3 + 4; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r2; - writePages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff] = r3; - case 0x69e60: - r3 = readPages[(r29+340)>>>12][((r29+340)>>>2)&0x3ff]; - r3 = r3 + 1; - writePages[(r29+340)>>>12][((r29+340)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x698c4; - run_69800(); return; - case 0x69e78: - r3 = readPages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff]; - r4 = r17 + r0; - r5 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r6 = r0 + 1; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r30; - r7 = r22 + r0; - r21 = r3 + 4; - /* Next insn is delay slot */ - r31=0x69e9c; - pc=0x69000; - run_69000(); return; - case 0x69e9c: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x69584; - run_69400(); return; - } - r3 = readPages[(r29+340)>>>12][((r29+340)>>>2)&0x3ff]; - r23 = r2 + r23; - r3 = r3 + 1; - writePages[(r29+340)>>>12][((r29+340)>>>2)&0x3ff] = r3; - writePages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff] = r21; - /* Next insn is delay slot */ - pc=0x6927c; - run_69200(); return; - case 0x69ec0: - r2 = r0 + -1409; - r10 = r10 & r2; - /* Next insn is delay slot */ - pc=0x69868; - run_69800(); return; - case 0x69ed0: - r21 = r29 + 328; - /* Next insn is delay slot */ - pc=0x697f4; - run_69600(); return; - case 0x69edc: - r4 = r10 & 4; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x69e48; - continue; - } - r3 = readPages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff]; - r4 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = r3 + 4; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x69e60; - continue; - case 0x69f08: - writePages[(r29+336)>>>12][((r29+336)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=0x69d20; - run_69c00(); return; - case 0x69f14: - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x69f24; - pc=0x68e00; - run_68e00(); return; - case 0x69f24: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x69de4; - run_69c00(); return; - } - if(r21 == r0) { - /* Next insn is delay slot */ - pc=0x69dec; - run_69c00(); return; - } - /* Next insn is delay slot */ - pc=0x69584; - run_69400(); return; - case 0x69f3c: - addr=r21+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - if((tmp&0x80)!=0) tmp |= 0xffffff00; /* sign extend */ - r5 = tmp; - r7 = r21 + -1; - r4 = r17 + r0; - r6 = r30 + r0; - writePages[(r29+360)>>>12][((r29+360)>>>2)&0x3ff] = r7; - writePages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff] = r10; - writePages[(r29+368)>>>12][((r29+368)>>>2)&0x3ff] = r11; - writePages[(r29+364)>>>12][((r29+364)>>>2)&0x3ff] = r12; - /* Next insn is delay slot */ - r31=0x69f64; - pc=0x68c00; - run_68c00(); return; - case 0x69f64: - r7 = readPages[(r29+360)>>>12][((r29+360)>>>2)&0x3ff]; - r12 = readPages[(r29+364)>>>12][((r29+364)>>>2)&0x3ff]; - r21 = r7 + r0; - r11 = readPages[(r29+368)>>>12][((r29+368)>>>2)&0x3ff]; - r10 = readPages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x698b0; - run_69800(); return; - case 0x69f80: - r3 = r0 + -2; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x69db0; - run_69c00(); return; - } - r21 = r20 + r0; - /* Next insn is delay slot */ - pc=0x69dd4; - run_69c00(); return; - case 0x69f98: - r21 = r0 + r0; - /* Next insn is delay slot */ - pc=0x69dd4; - run_69c00(); return; - case 0x69fa4: - if(r21 == r0) { - /* Next insn is delay slot */ - pc=0x69584; - run_69400(); return; - } - r23 = r23 + r21; - /* Next insn is delay slot */ - pc=0x69470; - run_69400(); return; - case 0x69fb8: - r4 = r17 + r0; - r5 = r30 + r0; - /* Next insn is delay slot */ - r31=0x69fc8; - pc=0x68e00; - run_68e00(); return; - case 0x69fc8: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x69510; - run_69400(); return; - } - /* Next insn is delay slot */ - pc=0x69584; - run_69400(); return; - case 0x69fd8: - r2 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = r3 + 4; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r23; - writePages[(r29+428)>>>12][((r29+428)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x6927c; - run_69200(); return; - case 0x69ff0: - writePages[(r29+352)>>>12][((r29+352)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - r31=0x69ffc; - pc=0x5a800; - run_5a800(); return; - case 0x69ffc: - r6 = readPages[(r29+352)>>>12][((r29+352)>>>2)&0x3ff]; - case 0x6a000: - pc=0x6a000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6a000() throws ExecutionException { /* 0x6a000 - 0x6a200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6a000: - if(r2 == r6) { - /* Next insn is delay slot */ - pc=0x69584; - run_69400(); return; - } - r2 = readPages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff]; - r3 = r29 + 24; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r10 = r6 + 1; - r6 = r3 + r6; - addr=r6+256; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r4 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r30+0)>>>12][((r30+0)>>>2)&0x3ff] = r2; - r4 = r4 + -1; - r2 = r29 + 320; - writePages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff] = r4; - r7 = r10 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r2; - r4 = r17 + r0; - r5 = r21 + r0; - r6 = r29 + 280; - writePages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff] = r10; - /* Next insn is delay slot */ - r31=0x6a05c; - pc=0x66000; - run_66000(); return; - case 0x6a05c: - r3 = r0 + -1; - r10 = readPages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff]; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x69584; - run_69400(); return; - } - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6a0c4; - continue; - } - r3 = r0 + -2; - r6 = r10 + r0; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x6a154; - continue; - } - case 0x6a084: - r2 = readPages[(r30+4)>>>12][((r30+4)>>>2)&0x3ff]; - if(r2 > 0) { - /* Next insn is delay slot */ - pc=0x697f8; - run_69600(); return; - } - r4 = r17 + r0; - r5 = r30 + r0; - writePages[(r29+352)>>>12][((r29+352)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - r31=0x6a0a8; - pc=0x68e00; - run_68e00(); return; - case 0x6a0a8: - r6 = readPages[(r29+352)>>>12][((r29+352)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x697f8; - run_69600(); return; - } - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x69584; - run_69400(); return; - } - /* Next insn is delay slot */ - pc=0x69828; - run_69800(); return; - case 0x6a0c4: - writePages[(r21+0)>>>12][((r21+0)>>>2)&0x3ff] = r0; - r4 = r0 + r0; - case 0x6a0cc: - writePages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff] = r10; - /* Next insn is delay slot */ - r31=0x6a0d8; - pc=0x65e00; - run_65e00(); return; - case 0x6a0d8: - r10 = readPages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6a128; - continue; - } - if(r10 == r0) { - /* Next insn is delay slot */ - pc=0x69828; - run_69800(); return; - } - case 0x6a0ec: - r10 = r10 + -1; - r3 = r29 + 280; - r2 = r3 + r10; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r5 = tmp; - r4 = r17 + r0; - r6 = r30 + r0; - writePages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff] = r10; - /* Next insn is delay slot */ - r31=0x6a110; - pc=0x68c00; - run_68c00(); return; - case 0x6a110: - r10 = readPages[(r29+372)>>>12][((r29+372)>>>2)&0x3ff]; - if(r10 != r0) { - /* Next insn is delay slot */ - pc=0x6a0ec; - continue; - } - /* Next insn is delay slot */ - pc=0x69828; - run_69800(); return; - case 0x6a128: - r23 = r23 + r10; - r22 = r22 + -1; - if(r20 != r0) { - /* Next insn is delay slot */ - pc=0x6a148; - continue; - } - r21 = r21 + 4; - r6 = r0 + r0; - /* Next insn is delay slot */ - pc=0x6a084; - continue; - case 0x6a148: - r6 = r0 + r0; - /* Next insn is delay slot */ - pc=0x6a084; - continue; - case 0x6a154: - r4 = readPages[(r21+0)>>>12][((r21+0)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x6a0cc; - continue; - case 0x6a200: - pc=0x6a200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6a200() throws ExecutionException { /* 0x6a200 - 0x6a400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6a200: - r29 = r29 + -40; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - r16 = r5 + r0; - r5 = readPages[(r5+48)>>>12][((r5+48)>>>2)&0x3ff]; - r2 = r16 + 64; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r31; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r20; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r19; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x6a2a0; - continue; - } - r18 = readPages[(r16+52)>>>12][((r16+52)>>>2)&0x3ff]; - r19 = r18 << 1; - r6 = r19 + r0; - /* Next insn is delay slot */ - r31=0x6a248; - pc=0x40800; - run_40800(); return; - case 0x6a248: - r17 = r2 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6a30c; - continue; - } - r20 = r2 + r18; - r4 = r20 + r0; - r5 = r2 + r0; - r6 = r18 + r0; - /* Next insn is delay slot */ - r31=0x6a26c; - pc=0x48fdc; - run_48e00(); return; - case 0x6a26c: - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r20; - writePages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff] = r17; - writePages[(r16+52)>>>12][((r16+52)>>>2)&0x3ff] = r19; - r2 = r0 + r0; - case 0x6a27c: - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6a2a0: - r5 = r0 + 1024; - /* Next insn is delay slot */ - r31=0x6a2ac; - pc=0x3ec00; - run_3ec00(); return; - case 0x6a2ac: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6a30c; - continue; - } - r3 = r0 + 1024; - writePages[(r16+52)>>>12][((r16+52)>>>2)&0x3ff] = r3; - addr=r16+66; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - writePages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff] = r2; - addr=r2+1023; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - addr=r16+65; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r2 = r2 + 1021; - addr=r2+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - addr=r16+64; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r3&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r31 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - r20 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r19 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r2 = r0 + r0; - r29 = r29 + 40; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6a30c: - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x6a27c; - continue; - case 0x6a400: - pc=0x6a400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6a400() throws ExecutionException { /* 0x6a400 - 0x6a600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6a400: - r29 = r29 + -32; - r2 = r0 + -1; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r18; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r31; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r17; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r16; - r18 = r5 + r0; - if(r5 == r2) { - /* Next insn is delay slot */ - pc=0x6a52c; - continue; - } - r17 = r4 + r0; - r16 = r6 + r0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x6a444; - continue; - } - r2 = readPages[(r4+56)>>>12][((r4+56)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6a538; - continue; - } - case 0x6a444: - addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - if((tmp&0x8000)!=0) tmp |= 0xffff0000; /* sign extend */ - r2 = tmp; - r3 = r2 & 8192; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x6a46c; - continue; - } - r4 = readPages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff]; - r3 = r0 + -8193; - r3 = r4 & r3; - r2 = r2 | 8192; - writePages[(r16+100)>>>12][((r16+100)>>>2)&0x3ff] = r3; - case 0x6a46c: - r3 = r0 + -33; - r2 = r2 & r3; - r3 = r2 & 65535; - r4 = r3 & 4; - addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x6a4a8; - continue; - } - r4 = r3 & 16; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x6a52c; - continue; - } - r3 = r3 & 8; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x6a548; - continue; - } - r2 = r2 | 4; - addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - case 0x6a4a8: - r2 = readPages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff]; - r18 = r18 & 255; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6a588; - continue; - } - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = readPages[(r16+52)>>>12][((r16+52)>>>2)&0x3ff]; - r2 = r3 < r2 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6a514; - continue; - } - case 0x6a4d0: - r2 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - r3 = r2 + -1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r3; - addr=r2+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r2 = r2 + 1; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - r2 = r18 + r0; - case 0x6a4f8: - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6a514: - r4 = r17 + r0; - r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x6a524; - pc=0x6a200; - run_6a200(); return; - case 0x6a524: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6a4d0; - continue; - } - case 0x6a52c: - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x6a4f8; - continue; - case 0x6a538: - /* Next insn is delay slot */ - r31=0x6a540; - pc=0x3a600; - run_3a600(); return; - case 0x6a540: - /* Next insn is delay slot */ - pc=0x6a444; - continue; - case 0x6a548: - r4 = r17 + r0; - r5 = r16 + r0; - /* Next insn is delay slot */ - r31=0x6a558; - pc=0x39800; - run_39800(); return; - case 0x6a558: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6a52c; - continue; - } - addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&2)<<3)) & 0xffff; - r2 = tmp; - writePages[(r16+8)>>>12][((r16+8)>>>2)&0x3ff] = r0; - r2 = r2 & 65527; - r2 = r2 << 16; - r2 = r2 >> 16; - r2 = r2 | 4; - writePages[(r16+24)>>>12][((r16+24)>>>2)&0x3ff] = r0; - addr=r16+12; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&(0xffff<<((addr&2)<<3)))|((r2&0xffff)<<(((~addr)&2)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - /* Next insn is delay slot */ - pc=0x6a4a8; - continue; - case 0x6a588: - r2 = readPages[(r16+16)>>>12][((r16+16)>>>2)&0x3ff]; - r3 = readPages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6a5b4; - continue; - } - r2 = ((r2 & 0xffffffffL) < (r3 & 0xffffffffL)) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6a5b4; - continue; - } - addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r2 == r18) { - /* Next insn is delay slot */ - pc=0x6a604; - run_6a600(); return; - } - case 0x6a5b4: - r2 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - addr=r16+66; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r18&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - writePages[(r16+60)>>>12][((r16+60)>>>2)&0x3ff] = r2; - r2 = r16 + 64; - writePages[(r16+48)>>>12][((r16+48)>>>2)&0x3ff] = r2; - r2 = r0 + 3; - writePages[(r16+52)>>>12][((r16+52)>>>2)&0x3ff] = r2; - r31 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r2 = r16 + 66; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - r2 = r0 + 1; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r2; - writePages[(r16+56)>>>12][((r16+56)>>>2)&0x3ff] = r3; - r2 = r18 + r0; - r17 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r18 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r16 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r29 = r29 + 32; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6a600: - pc=0x6a600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6a600() throws ExecutionException { /* 0x6a600 - 0x6a800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6a600: - case 0x6a604: - r3 = r3 + -1; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r3; - r3 = readPages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff]; - r3 = r3 + 1; - writePages[(r16+4)>>>12][((r16+4)>>>2)&0x3ff] = r3; - /* Next insn is delay slot */ - pc=0x6a4f8; - run_6a400(); return; - case 0x6a800: - pc=0x6a800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6a800() throws ExecutionException { /* 0x6a800 - 0x6aa00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6a800: - r2 = r4 + r0; - r4 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r6 = r5 + r0; - r5 = r2 + r0; - /* Next insn is delay slot */ - pc=0x6a400; - run_6a400(); return; - case 0x6aa00: - pc=0x6aa00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6aa00() throws ExecutionException { /* 0x6aa00 - 0x6ac00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6aa00: - r29 = r29 + -64; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r18; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r17; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r16; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; - r16 = r4 + r0; - r17 = r7 + r0; - r18 = readPages[(r28+-30856)>>>12][((r28+-30856)>>>2)&0x3ff]; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x6aa8c; - continue; - } - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r5; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - r31=0x6aa38; - pc=0x5a600; - run_5a600(); return; - case 0x6aa38: - r5 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r6 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r17; - r4 = r16 + r0; - r7 = r2 + r0; - /* Next insn is delay slot */ - pc=r18; - r31=0x6aa54; - return; - case 0x6aa54: - r3 = r0 + -1; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x6aa70; - continue; - } - r2 = r0 + 138; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r0; - writePages[(r16+0)>>>12][((r16+0)>>>2)&0x3ff] = r2; - r2 = r0 + -1; - case 0x6aa70: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r18 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r17 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r16 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; + case 0x5dc70: + r31= page[(r29+60)>>>2]; + r18= page[(r29+56)>>>2]; + r17= page[(r29+52)>>>2]; + r16= page[(r29+48)>>>2]; r29 = r29 + 64; - /* Next insn is delay slot */ pc=r31; return; - case 0x6aa8c: - /* Next insn is delay slot */ - r31=0x6aa94; + case 0x5dc8c: + r31=0x5dc94; pc=0x5a600; - run_5a600(); return; - case 0x6aa94: + run_5a000(); return; + case 0x5dc94: r7 = r2 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r17; + page[(r29+16)>>>2] = r17; r4 = r16 + r0; r5 = r29 + 24; r6 = r0 + r0; - /* Next insn is delay slot */ pc=r18; - r31=0x6aab0; + r31=0x5dcb0; return; - case 0x6aab0: - /* Next insn is delay slot */ - pc=0x6aa54; + case 0x5dcb0: + pc=0x5dc54; continue; - case 0x6ac00: - pc=0x6ac00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6ac00() throws ExecutionException { /* 0x6ac00 - 0x6ae00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6ac00: - r29 = r29 + -64; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r17; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r16; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r31; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r20; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r19; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r18; - r16 = r4 + r0; - r17 = r6 + r0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x6aca0; - continue; - } - r20 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r18 = r5 + r0; - r19 = readPages[(r28+-30856)>>>12][((r28+-30856)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x6ac40; - pc=0x5a600; - run_5a600(); return; - case 0x6ac40: - r7 = r2 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r17; - r4 = r20 + r0; - r5 = r16 + r0; - r6 = r18 + r0; - /* Next insn is delay slot */ - pc=r19; - r31=0x6ac5c; - return; - case 0x6ac5c: - r3 = r0 + -1; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x6ac7c; - continue; - } - r2 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r3 = r0 + 138; - writePages[(r17+0)>>>12][((r17+0)>>>2)&0x3ff] = r0; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r2 = r0 + -1; - case 0x6ac7c: - r31 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r20 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r19 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r18 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r17 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r16 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r29 = r29 + 64; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6aca0: - r18 = readPages[(r28+-31072)>>>12][((r28+-31072)>>>2)&0x3ff]; - r16 = readPages[(r28+-30856)>>>12][((r28+-30856)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x6acb0; - pc=0x5a600; - run_5a600(); return; - case 0x6acb0: - r7 = r2 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r17; - r4 = r18 + r0; - r5 = r29 + 24; - r6 = r0 + r0; - /* Next insn is delay slot */ - pc=r16; - r31=0x6accc; - return; - case 0x6accc: - /* Next insn is delay slot */ - pc=0x6ac5c; - continue; - case 0x6ae00: - pc=0x6ae00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6ae00() throws ExecutionException { /* 0x6ae00 - 0x6b000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6ae00: + case 0x5de00: if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x6ae24; + pc=0x5de24; continue; } r2 = (r6&0xffffffffL) < (256&0xffffffffL) ? 1 : 0; if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6ae30; + pc=0x5de30; continue; } addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; + tmp= page[(addr)>>>2]; tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r6&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; + page[(addr)>>>2] = tmp; r2 = r0 + 1; - /* Next insn is delay slot */ pc=r31; return; - case 0x6ae24: + case 0x5de24: r2 = r0 + r0; - /* Next insn is delay slot */ pc=r31; return; - case 0x6ae30: + case 0x5de30: r2 = r0 + 138; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r2; + page[(r4+0)>>>2] = r2; r2 = r0 + -1; - /* Next insn is delay slot */ pc=r31; return; - case 0x6b000: - pc=0x6b000; + case 0x5dffc: + case 0x5e000: + pc=0x5e000; return; default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); } - /* NOT REACHED */ - } - } - private final void run_6b000() throws ExecutionException { /* 0x6b000 - 0x6b200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6b000: - r29 = r29 + -56; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r31; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r17; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r16; - r17 = r7 + r0; - r16 = readPages[(r28+-30856)>>>12][((r28+-30856)>>>2)&0x3ff]; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r4; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r5; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - r31=0x6b02c; - pc=0x5a600; - run_5a600(); return; - case 0x6b02c: - r4 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r5 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r6 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r17; - r7 = r2 + r0; - /* Next insn is delay slot */ - pc=r16; - r31=0x6b048; - return; - case 0x6b048: - r31 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r17 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r16 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r29 = r29 + 56; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6b200: - pc=0x6b200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6b200() throws ExecutionException { /* 0x6b200 - 0x6b400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6b200: - r7 = readPages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff]; - r2 = r5 >> 5; - r6 = r2 < r7 ? 1 : 0; - r3 = r4 + 20; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x6b2bc; - continue; - } - r7 = r7 << 2; - r2 = r2 << 2; - r5 = r5 & 31; - r7 = r3 + r7; - r11 = r3 + r2; - if(r5 == r0) { - /* Next insn is delay slot */ - pc=0x6b2cc; - continue; - } - r2 = r11 + 4; - r8 = readPages[(r11+0)>>>12][((r11+0)>>>2)&0x3ff]; - r10 = r0 + 32; - r6 = ((r2 & 0xffffffffL) < (r7 & 0xffffffffL)) ? 1 : 0; - r10 = r10 - r5; - r8 = r8 >>> (r5&0x1f); - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x6b324; - continue; - } - r6 = r3 + r0; - case 0x6b258: - r9 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r6 = r6 + 4; - r9 = r9 << (r10&0x1f); - r8 = r8 | r9; - r2 = r2 + 4; - writePages[(r6+-4)>>>12][((r6+-4)>>>2)&0x3ff] = r8; - r8 = readPages[(r2+-4)>>>12][((r2+-4)>>>2)&0x3ff]; - r9 = ((r2 & 0xffffffffL) < (r7 & 0xffffffffL)) ? 1 : 0; - r8 = r8 >>> (r5&0x1f); - if(r9 != r0) { - /* Next insn is delay slot */ - pc=0x6b258; - continue; - } - r2 = r7 - r11; - r2 = r2 + -5; - r2 = r2 >>> 2; - r2 = r2 + 1; - r2 = r2 << 2; - r2 = r3 + r2; - case 0x6b29c: - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r8; - if(r8 == r0) { - /* Next insn is delay slot */ - pc=0x6b2ac; - continue; - } - r2 = r2 + 4; - case 0x6b2ac: - r3 = r2 - r3; - r3 = r3 >> 2; - /* Next insn is delay slot */ - pc=0x6b310; - continue; - case 0x6b2bc: - writePages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff] = r0; - case 0x6b2c0: - writePages[(r4+20)>>>12][((r4+20)>>>2)&0x3ff] = r0; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6b2cc: - r2 = ((r11 & 0xffffffffL) < (r7 & 0xffffffffL)) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6b2bc; - continue; - } - r2 = r11 + r0; - case 0x6b2dc: - r2 = r2 + 4; - r5 = readPages[(r2+-4)>>>12][((r2+-4)>>>2)&0x3ff]; - r3 = r3 + 4; - writePages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff] = r5; - r5 = ((r2 & 0xffffffffL) < (r7 & 0xffffffffL)) ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x6b2dc; - continue; - } - r3 = ~(r0 | r11); - r3 = r3 + r7; - r3 = r3 >>> 2; - r3 = r3 + 1; - r3 = r3 << 2; - r3 = r3 >> 2; - case 0x6b310: - writePages[(r4+16)>>>12][((r4+16)>>>2)&0x3ff] = r3; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x6b2c0; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6b324: - r2 = r3 + r0; - /* Next insn is delay slot */ - pc=0x6b29c; - continue; - case 0x6b400: - pc=0x6b400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6b400() throws ExecutionException { /* 0x6b400 - 0x6b600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6b400: - r5 = 7 << 16; - r2 = 7 << 16; - r5 = r5 + 5425; - r4 = r0 + 16; - r3 = r0 + 48; - r2 = r2 + 30712; - case 0x6b418: - r3 = r2 + r3; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r4 = r4 + 1; - r4 = r4 & 255; - r5 = r5 + 1; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x6b418; - continue; - } - r5 = 7 << 16; - r5 = r5 + 5417; - r4 = r0 + 26; - r3 = r0 + 97; - case 0x6b448: - r3 = r2 + r3; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r4 = r4 + 1; - r4 = r4 & 255; - r5 = r5 + 1; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x6b448; - continue; - } - r5 = 7 << 16; - r5 = r5 + 5409; - r4 = r0 + 26; - r3 = r0 + 65; - case 0x6b478: - r3 = r2 + r3; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp&~(0xff000000>>>((addr&3)<<3)))|((r4&0xff)<<(((~addr)&3)<<3)); - writePages[(addr)>>>12][((addr)>>>2)&0x3ff] = tmp; - addr=r5+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r4 = r4 + 1; - r4 = r4 & 255; - r5 = r5 + 1; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x6b478; - continue; - } - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6b600: - pc=0x6b600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6b600() throws ExecutionException { /* 0x6b600 - 0x6b800 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6b600: - r29 = r29 + -88; - writePages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff] = r31; - writePages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff] = r21; - writePages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff] = r20; - writePages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff] = r19; - writePages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff] = r18; - writePages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff] = r17; - writePages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff] = r4; - r19 = r5 + r0; - writePages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff] = r6; - writePages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff] = r7; - writePages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff] = r30; - writePages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff] = r23; - writePages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff] = r22; - writePages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff] = r16; - /* Next insn is delay slot */ - r31=0x6b644; - pc=0x5ae00; - run_5ae00(); return; - case 0x6b644: - r17 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r4 = r17 + r0; - /* Next insn is delay slot */ - r31=0x6b658; - pc=0x10268; - run_10200(); return; - case 0x6b658: - r9 = 7 << 16; - r18 = r2 + r0; - r20 = r9 + 30712; - r2 = r17 + r2; - addr=r2+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r21 = tmp; - addr=r20+48; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6bb30; - run_6ba00(); return; - } - case 0x6b67c: - r3 = readPages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff]; - r2 = r0 + 48; - addr=r3+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r8 = tmp; - r23 = r3 + 2; - if(r8 != r2) { - /* Next insn is delay slot */ - pc=0x6be30; - run_6be00(); return; - } - r3 = r3 + 3; - r22 = r0 + r0; - case 0x6b69c: - r23 = r3 + r0; - r3 = r3 + 1; - addr=r3+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r8 = tmp; - r22 = r22 + 1; - if(r8 == r2) { - /* Next insn is delay slot */ - pc=0x6b69c; - continue; - } - case 0x6b6b4: - r8 = r20 + r8; - addr=r8+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6baac; - run_6ba00(); return; - } - addr=r23+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r7 = r0 + r0; - r2 = r2 + r20; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r30 = r0 + r0; - case 0x6b6dc: - r16 = r23 + r0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x6b708; - continue; - } - case 0x6b6e8: - r16 = r16 + 1; - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r2 = r20 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6b6e8; - continue; - } - case 0x6b708: - r4 = r16 + r0; - r5 = r17 + r0; - r6 = r18 + r0; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r7; - /* Next insn is delay slot */ - r31=0x6b720; - pc=0x43000; - run_43000(); return; - case 0x6b720: - r7 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6b7a8; - continue; - } - if(r30 == r0) { - /* Next insn is delay slot */ - pc=0x6be6c; - run_6be00(); return; - } - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - case 0x6b738: - r30 = r30 - r16; - r30 = r30 << 2; - case 0x6b740: - r3 = r0 + 80; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x6b7c0; - continue; - } - case 0x6b74c: - r3 = r0 + 112; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x6b7c0; - continue; - } - case 0x6b758: - r2 = r16 + r0; - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = r2; - if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x6b868; - run_6b800(); return; - } - case 0x6b768: - if(r22 != r0) { - /* Next insn is delay slot */ - pc=0x6bd74; - run_6bc00(); return; - } - r2 = r0 + 6; - case 0x6b774: - r31 = readPages[(r29+84)>>>12][((r29+84)>>>2)&0x3ff]; - r30 = readPages[(r29+80)>>>12][((r29+80)>>>2)&0x3ff]; - r23 = readPages[(r29+76)>>>12][((r29+76)>>>2)&0x3ff]; - r22 = readPages[(r29+72)>>>12][((r29+72)>>>2)&0x3ff]; - r21 = readPages[(r29+68)>>>12][((r29+68)>>>2)&0x3ff]; - r20 = readPages[(r29+64)>>>12][((r29+64)>>>2)&0x3ff]; - r19 = readPages[(r29+60)>>>12][((r29+60)>>>2)&0x3ff]; - r18 = readPages[(r29+56)>>>12][((r29+56)>>>2)&0x3ff]; - r17 = readPages[(r29+52)>>>12][((r29+52)>>>2)&0x3ff]; - r16 = readPages[(r29+48)>>>12][((r29+48)>>>2)&0x3ff]; - r29 = r29 + 88; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6b7a8: - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r30 != r0) { - /* Next insn is delay slot */ - pc=0x6b738; - continue; - } - r3 = r0 + 80; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x6b74c; - continue; - } - case 0x6b7c0: - addr=r16+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r3 = r0 + 43; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x6bd80; - run_6bc00(); return; - } - r3 = r0 + 45; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x6bcfc; - run_6bc00(); return; - } - r4 = r16 + 1; - r6 = r0 + r0; - case 0x6b7e4: - r2 = r20 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - r2 = r3 + -1; - r2 = (r2&0xffffffffL) < (25&0xffffffffL) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6b758; - continue; - } - case 0x6b800: - pc=0x6b800; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6b800() throws ExecutionException { /* 0x6b800 - 0x6ba00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6b800: - r2 = r4 + 1; - r3 = r3 + -16; - addr=r4+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - /* Next insn is delay slot */ - pc=0x6b830; - continue; - case 0x6b814: - r5 = r3 << 1; - r3 = r3 << 3; - r3 = r5 + r3; - r2 = r2 + 1; - r3 = r3 + r4; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r3 = r3 + -16; - case 0x6b830: - r4 = r4 + r20; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r5 = r4 + -1; - r5 = (r5&0xffffffffL) < (25&0xffffffffL) ? 1 : 0; - if(r5 != r0) { - /* Next insn is delay slot */ - pc=0x6b814; - continue; - } - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x6b858; - continue; - } - r3 = r0 - r3; - case 0x6b858: - r30 = r30 + r3; - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = r2; - if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x6b768; - run_6b600(); return; - } - case 0x6b868: - r2 = r16 - r23; - r2 = r2 + -1; - r3 = r2 < 8 ? 1 : 0; - r5 = r0 + r0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x6b894; - continue; - } - case 0x6b880: - r2 = r2 >> 1; - r3 = r2 < 8 ? 1 : 0; - r5 = r5 + 1; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x6b880; - continue; - } - case 0x6b894: - r4 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x6b8a0; - pc=0x5b800; - run_5b800(); return; - case 0x6b8a0: - r19 = r2 + 20; - r22 = r2 + r0; - r2 = ((r23 & 0xffffffffL) < (r16 & 0xffffffffL)) ? 1 : 0; - r11 = r19 + r0; - r8 = r0 + r0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6b9a0; - continue; - } - addr=r16+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r6 = tmp; - r14 = r0 + 1; - r3 = r0 + r0; - r14 = r14 - r18; - r12 = r0 + 32; - r7 = r16 + -1; - if(r6 == r21) { - /* Next insn is delay slot */ - pc=0x6b92c; - continue; - } - case 0x6b8dc: - if(r3 == r12) { - /* Next insn is delay slot */ - pc=0x6ba90; - run_6ba00(); return; - } - r2 = r3 + r0; - r3 = r3 + 4; - case 0x6b8ec: - addr=r16+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r4 = tmp; - r4 = r20 + r4; - addr=r4+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r6 = tmp; - r6 = r6 & 15; - r6 = r6 << (r2&0x1f); - r8 = r8 | r6; - r6 = ((r23 & 0xffffffffL) < (r7 & 0xffffffffL)) ? 1 : 0; - if(r6 == r0) { - /* Next insn is delay slot */ - pc=0x6b9a0; - continue; - } - case 0x6b918: - r16 = r7 + r0; - addr=r16+-1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r6 = tmp; - r7 = r16 + -1; - if(r6 != r21) { - /* Next insn is delay slot */ - pc=0x6b8dc; - continue; - } - case 0x6b92c: - r15 = r7 + r14; - r2 = ((r15 & 0xffffffffL) < (r23 & 0xffffffffL)) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6b8dc; - continue; - } - r4 = r15 + r0; - r5 = r17 + r0; - r6 = r18 + r0; - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r3; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r7; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r8; - writePages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff] = r11; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r12; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r14; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r15; - /* Next insn is delay slot */ - r31=0x6b96c; - pc=0x43000; - run_43000(); return; - case 0x6b96c: - r3 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - r7 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r8 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r11 = readPages[(r29+28)>>>12][((r29+28)>>>2)&0x3ff]; - r12 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r14 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r15 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6b8dc; - continue; - } - r7 = r15 + r0; - r6 = ((r23 & 0xffffffffL) < (r7 & 0xffffffffL)) ? 1 : 0; - if(r6 != r0) { - /* Next insn is delay slot */ - pc=0x6b918; - continue; - } - case 0x6b9a0: - r2 = r11 + 4; - r2 = r2 - r19; - r2 = r2 >> 2; - writePages[(r11+0)>>>12][((r11+0)>>>2)&0x3ff] = r8; - r4 = r8 + r0; - writePages[(r22+16)>>>12][((r22+16)>>>2)&0x3ff] = r2; - r16 = r2 << 5; - /* Next insn is delay slot */ - r31=0x6b9c4; - pc=0x5c000; - run_5c000(); return; - case 0x6b9c4: - r3 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r2 = r16 - r2; - r16 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r3 = r16 < r2 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x6bd8c; - run_6bc00(); return; - } - r3 = r2 < r16 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x6be00; - run_6be00(); return; - } - r17 = r0 + r0; - case 0x6b9f0: - r4 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r3 = readPages[(r4+8)>>>12][((r4+8)>>>2)&0x3ff]; - case 0x6ba00: - pc=0x6ba00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6ba00() throws ExecutionException { /* 0x6ba00 - 0x6bc00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6ba00: - r3 = r3 < r30 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x6bcd4; - run_6bc00(); return; - } - r3 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r2 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r3 = r30 < r2 ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x6bd28; - run_6bc00(); return; - } - r30 = r2 - r30; - r3 = r30 < r16 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x6bb40; - continue; - } - r4 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r3 = readPages[(r4+12)>>>12][((r4+12)>>>2)&0x3ff]; - r4 = r0 + 2; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x6bf1c; - run_6be00(); return; - } - r4 = r0 + 3; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x6becc; - run_6be00(); return; - } - r4 = r0 + 1; - if(r3 == r4) { - /* Next insn is delay slot */ - pc=0x6bf34; - run_6be00(); return; - } - case 0x6ba68: - r4 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r5 = r22 + r0; - /* Next insn is delay slot */ - r31=0x6ba78; - pc=0x5ba00; - run_5ba00(); return; - case 0x6ba78: - r2 = readPages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff]; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r0; - r2 = r0 + 80; - /* Next insn is delay slot */ - pc=0x6b774; - run_6b600(); return; - case 0x6ba90: - writePages[(r11+0)>>>12][((r11+0)>>>2)&0x3ff] = r8; - r3 = r0 + 4; - r11 = r11 + 4; - r8 = r0 + r0; - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x6b8ec; - run_6b800(); return; - case 0x6baac: - r4 = r23 + r0; - r5 = r17 + r0; - r6 = r18 + r0; - /* Next insn is delay slot */ - r31=0x6bac0; - pc=0x43000; - run_43000(); return; - case 0x6bac0: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6bd10; - run_6bc00(); return; - } - r16 = r23 + r18; - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r3 = r2 + r20; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x6be3c; - run_6be00(); return; - } - r4 = r0 + 48; - r23 = r16 + r0; - if(r2 != r4) { - /* Next insn is delay slot */ - pc=0x6bb1c; - continue; - } - r3 = r0 + 48; - case 0x6bafc: - r23 = r23 + 1; - addr=r23+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x6bafc; - continue; - } - r2 = r20 + r2; - addr=r2+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - case 0x6bb1c: - r7 = (r3&0xffffffffL) < (1&0xffffffffL) ? 1 : 0; - r30 = r16 + r0; - r22 = r0 + 1; - /* Next insn is delay slot */ - pc=0x6b6dc; - run_6b600(); return; - case 0x6bb30: - /* Next insn is delay slot */ - r31=0x6bb38; - pc=0x6b400; - run_6b400(); return; - case 0x6bb38: - /* Next insn is delay slot */ - pc=0x6b67c; - run_6b600(); return; - case 0x6bb40: - r18 = r30 + -1; - if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x6bec0; - run_6be00(); return; - } - if(r18 <= 0) { - /* Next insn is delay slot */ - pc=0x6bb68; - continue; - } - r4 = r22 + r0; - r5 = r18 + r0; - /* Next insn is delay slot */ - r31=0x6bb64; - pc=0x5de00; - run_5de00(); return; - case 0x6bb64: - r17 = r2 + r0; - case 0x6bb68: - r2 = r18 >> 5; - r2 = r2 << 2; - r2 = r19 + r2; - r3 = r0 + 1; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r18 = r3 << (r18&0x1f); - r2 = r18 & r2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6bb90; - continue; - } - r17 = r17 | 2; - case 0x6bb90: - r5 = r30 + r0; - r4 = r22 + r0; - /* Next insn is delay slot */ - r31=0x6bba0; - pc=0x6b200; - run_6b200(); return; - case 0x6bba0: - r3 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r16 = r16 - r30; - r30 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - r18 = r0 + 2; - case 0x6bbb0: - if(r17 == r0) { - /* Next insn is delay slot */ - pc=0x6bd58; - run_6bc00(); return; - } - r3 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r2 = readPages[(r3+12)>>>12][((r3+12)>>>2)&0x3ff]; - r3 = r0 + 2; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x6bd34; - run_6bc00(); return; - } - r3 = r0 + 3; - if(r2 == r3) { - /* Next insn is delay slot */ - pc=0x6bd44; - run_6bc00(); return; - } - r3 = r0 + 1; - if(r2 != r3) { - /* Next insn is delay slot */ - pc=0x6bd54; - run_6bc00(); return; - } - r2 = r17 & 2; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6bd54; - run_6bc00(); return; - } - r2 = readPages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff]; - r2 = r17 | r2; - case 0x6bc00: - pc=0x6bc00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6bc00() throws ExecutionException { /* 0x6bc00 - 0x6be00 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6bc00: - r2 = r2 & 1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6bd54; - continue; - } - case 0x6bc0c: - r17 = readPages[(r22+16)>>>12][((r22+16)>>>2)&0x3ff]; - r3 = r19 + r0; - r23 = r17 << 2; - r5 = r19 + r23; - r2 = r0 + -1; - /* Next insn is delay slot */ - pc=0x6bc3c; - continue; - case 0x6bc28: - r3 = r3 + 4; - r4 = ((r3 & 0xffffffffL) < (r5 & 0xffffffffL)) ? 1 : 0; - writePages[(r3+-4)>>>12][((r3+-4)>>>2)&0x3ff] = r0; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x6bf74; - run_6be00(); return; - } - case 0x6bc3c: - r4 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - if(r4 == r2) { - /* Next insn is delay slot */ - pc=0x6bc28; - continue; - } - r4 = r4 + 1; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r4; - r2 = r19 + r0; - case 0x6bc58: - r3 = r0 + 2; - if(r18 == r3) { - /* Next insn is delay slot */ - pc=0x6bfb4; - run_6be00(); return; - } - r3 = readPages[(r22+16)>>>12][((r22+16)>>>2)&0x3ff]; - r17 = r17 < r3 ? 1 : 0; - if(r17 != r0) { - /* Next insn is delay slot */ - pc=0x6bca8; - continue; - } - r16 = r16 & 31; - if(r16 == r0) { - /* Next insn is delay slot */ - pc=0x6bf04; - run_6be00(); return; - } - r2 = r2 + r23; - r4 = readPages[(r2+-4)>>>12][((r2+-4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - r31=0x6bc94; - pc=0x5c000; - run_5c000(); return; - case 0x6bc94: - r3 = r0 + 32; - r16 = r3 - r16; - r2 = r2 < r16 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6bf04; - run_6be00(); return; - } - case 0x6bca8: - r4 = r22 + r0; - r5 = r0 + 1; - /* Next insn is delay slot */ - r31=0x6bcb8; - pc=0x6b200; - run_6b200(); return; - case 0x6bcb8: - r3 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r30 = r30 + 1; - r2 = readPages[(r3+8)>>>12][((r3+8)>>>2)&0x3ff]; - r2 = r2 < r30 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6bf04; - run_6be00(); return; - } - case 0x6bcd4: - r4 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r5 = r22 + r0; - /* Next insn is delay slot */ - r31=0x6bce4; - pc=0x5ba00; - run_5ba00(); return; - case 0x6bce4: - r2 = readPages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff]; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r0; - r2 = r0 + 163; - /* Next insn is delay slot */ - pc=0x6b774; - run_6b600(); return; - case 0x6bcfc: - r6 = r0 + 1; - case 0x6bd00: - r4 = r16 + 2; - addr=r16+2; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - /* Next insn is delay slot */ - pc=0x6b7e4; - run_6b600(); return; - case 0x6bd10: - addr=r23+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r16 = r23 + r0; - r30 = r0 + r0; - r7 = r0 + 1; - /* Next insn is delay slot */ - pc=0x6b740; - run_6b600(); return; - case 0x6bd28: - r18 = r0 + 1; - /* Next insn is delay slot */ - pc=0x6bbb0; - run_6ba00(); return; - case 0x6bd34: - r4 = readPages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff]; - r2 = r0 + 1; - r4 = r2 - r4; - writePages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff] = r4; - case 0x6bd44: - r2 = readPages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff]; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6bc0c; - continue; - } - case 0x6bd54: - r18 = r18 | 16; - case 0x6bd58: - r4 = readPages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff]; - r3 = readPages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff]; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r22; - r2 = r18 + r0; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r30; - /* Next insn is delay slot */ - pc=0x6b774; - run_6b600(); return; - case 0x6bd74: - r2 = r0 + r0; - /* Next insn is delay slot */ - pc=0x6b774; - run_6b600(); return; - case 0x6bd80: - r6 = r0 + r0; - /* Next insn is delay slot */ - pc=0x6bd00; - continue; - case 0x6bd8c: - r18 = r2 - r16; - r4 = r22 + r0; - r5 = r18 + r0; - /* Next insn is delay slot */ - r31=0x6bda0; - pc=0x5de00; - run_5de00(); return; - case 0x6bda0: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6be4c; - run_6be00(); return; - } - r2 = r18 + -1; - r3 = r2 >> 5; - r3 = r3 << 2; - r3 = r19 + r3; - r4 = r0 + 1; - r3 = readPages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff]; - r4 = r4 << (r2&0x1f); - r3 = r4 & r3; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x6beb4; - run_6be00(); return; - } - r2 = r2 < 2 ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6bf10; - run_6be00(); return; - } - r4 = r22 + r0; - r5 = r18 + -2; - /* Next insn is delay slot */ - r31=0x6bdec; - pc=0x5de00; - run_5de00(); return; - case 0x6bdec: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6bf10; - run_6be00(); return; - } - r17 = r0 + 3; - /* Next insn is delay slot */ - pc=0x6be50; - run_6be00(); return; - case 0x6be00: - pc=0x6be00; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6be00() throws ExecutionException { /* 0x6be00 - 0x6c000 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6be00: - r17 = r16 - r2; - r4 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r5 = r22 + r0; - r6 = r17 + r0; - /* Next insn is delay slot */ - r31=0x6be18; - pc=0x5cc00; - run_5cc00(); return; - case 0x6be18: - r30 = r30 - r17; - r22 = r2 + r0; - r19 = r2 + 20; - r17 = r0 + r0; - /* Next insn is delay slot */ - pc=0x6b9f0; - run_6b800(); return; - case 0x6be30: - r22 = r0 + r0; - /* Next insn is delay slot */ - pc=0x6b6b4; - run_6b600(); return; - case 0x6be3c: - r30 = r0 + r0; - r7 = r0 + 1; - /* Next insn is delay slot */ - pc=0x6b740; - run_6b600(); return; - case 0x6be4c: - r17 = r0 + r0; - case 0x6be50: - r4 = r22 + r0; - r5 = r18 + r0; - /* Next insn is delay slot */ - r31=0x6be60; - pc=0x6b200; - run_6b200(); return; - case 0x6be60: - r30 = r30 + r18; - /* Next insn is delay slot */ - pc=0x6b9f0; - run_6b800(); return; - case 0x6be6c: - r30 = r16 + r18; - addr=r30+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r16 = r30 + r0; - r3 = r20 + r2; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x6b738; - run_6b600(); return; - } - case 0x6be8c: - r16 = r16 + 1; - addr=r16+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r3 = r20 + r2; - addr=r3+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r3 = tmp; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x6be8c; - continue; - } - /* Next insn is delay slot */ - pc=0x6b738; - run_6b600(); return; - case 0x6beb4: - r17 = r0 + 1; - /* Next insn is delay slot */ - pc=0x6be50; - continue; - case 0x6bec0: - r17 = r0 + 1; - /* Next insn is delay slot */ - pc=0x6bb68; - run_6ba00(); return; - case 0x6becc: - r3 = readPages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff]; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x6ba68; - run_6ba00(); return; - } - case 0x6bedc: - r3 = readPages[(r29+100)>>>12][((r29+100)>>>2)&0x3ff]; - r4 = readPages[(r29+104)>>>12][((r29+104)>>>2)&0x3ff]; - writePages[(r3+0)>>>12][((r3+0)>>>2)&0x3ff] = r2; - r2 = r0 + 1; - writePages[(r22+16)>>>12][((r22+16)>>>2)&0x3ff] = r2; - writePages[(r19+0)>>>12][((r19+0)>>>2)&0x3ff] = r2; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r22; - r2 = r0 + 98; - /* Next insn is delay slot */ - pc=0x6b774; - run_6b600(); return; - case 0x6bf04: - r18 = r0 + 33; - /* Next insn is delay slot */ - pc=0x6bd58; - run_6bc00(); return; - case 0x6bf10: - r17 = r0 + 2; - /* Next insn is delay slot */ - pc=0x6be50; - continue; - case 0x6bf1c: - r4 = readPages[(r29+108)>>>12][((r29+108)>>>2)&0x3ff]; - if(r4 == r0) { - /* Next insn is delay slot */ - pc=0x6bedc; - continue; - } - /* Next insn is delay slot */ - pc=0x6ba68; - run_6ba00(); return; - case 0x6bf34: - if(r30 != r16) { - /* Next insn is delay slot */ - pc=0x6ba68; - run_6ba00(); return; - } - r3 = r16 < 2 ? 1 : 0; - if(r3 != r0) { - /* Next insn is delay slot */ - pc=0x6bedc; - continue; - } - r4 = r22 + r0; - r5 = r16 + -1; - /* Next insn is delay slot */ - r31=0x6bf58; - pc=0x5de00; - run_5de00(); return; - case 0x6bf58: - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6ba68; - run_6ba00(); return; - } - r3 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r2 = readPages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x6bedc; - continue; - case 0x6bf74: - r2 = readPages[(r22+8)>>>12][((r22+8)>>>2)&0x3ff]; - r2 = r17 < r2 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6bfdc; - continue; - } - r2 = r19 + r0; - r3 = r17 + r0; - case 0x6bf90: - r4 = r3 + 1; - r3 = r3 + 4; - r3 = r3 << 2; - writePages[(r22+16)>>>12][((r22+16)>>>2)&0x3ff] = r4; - r3 = r22 + r3; - r4 = r0 + 1; - writePages[(r3+4)>>>12][((r3+4)>>>2)&0x3ff] = r4; - /* Next insn is delay slot */ - pc=0x6bc58; - run_6bc00(); return; - case 0x6bfb4: - r4 = readPages[(r29+96)>>>12][((r29+96)>>>2)&0x3ff]; - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - r3 = r3 + -1; - if(r3 == r16) { - /* Next insn is delay slot */ - pc=0x6c034; - run_6c000(); return; - } - r18 = r0 + 34; - /* Next insn is delay slot */ - pc=0x6bd58; - run_6bc00(); return; - case 0x6bfdc: - r5 = readPages[(r22+4)>>>12][((r22+4)>>>2)&0x3ff]; - r4 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r5 = r5 + 1; - /* Next insn is delay slot */ - r31=0x6bff0; - pc=0x5b800; - run_5b800(); return; - case 0x6bff0: - r6 = readPages[(r22+16)>>>12][((r22+16)>>>2)&0x3ff]; - r5 = r22 + 12; - r6 = r6 + 2; - r4 = r2 + 12; - case 0x6c000: - pc=0x6c000; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6c000() throws ExecutionException { /* 0x6c000 - 0x6c200 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6c000: - r6 = r6 << 2; - r19 = r2 + r0; - /* Next insn is delay slot */ - r31=0x6c010; - pc=0x48fdc; - run_48e00(); return; - case 0x6c010: - r4 = readPages[(r29+88)>>>12][((r29+88)>>>2)&0x3ff]; - r5 = r22 + r0; - /* Next insn is delay slot */ - r31=0x6c020; - pc=0x5ba00; - run_5ba00(); return; - case 0x6c020: - r22 = r19 + r0; - r3 = readPages[(r19+16)>>>12][((r19+16)>>>2)&0x3ff]; - r2 = r19 + 20; - /* Next insn is delay slot */ - pc=0x6bf90; - run_6be00(); return; - case 0x6c034: - r3 = r16 >> 5; - r3 = r3 << 2; - r2 = r2 + r3; - r2 = readPages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff]; - r3 = r0 + 1; - r16 = r3 << (r16&0x1f); - r18 = r16 & r2; - r18 = ((r0 & 0xffffffffL) < (r18 & 0xffffffffL)) ? 1 : 0; - r2 = r0 + 34; - r18 = r2 - r18; - /* Next insn is delay slot */ - pc=0x6bd58; - run_6bc00(); return; - case 0x6c200: - pc=0x6c200; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6c200() throws ExecutionException { /* 0x6c200 - 0x6c400 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6c200: - r29 = r29 + -48; - writePages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff] = r16; - r16 = 7 << 16; - r16 = r16 + 30712; - addr=r16+48; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - writePages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff] = r31; - writePages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff] = r18; - writePages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff] = r17; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6c4d8; - run_6c400(); return; - } - case 0x6c228: - r24 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r15 = r24 >> 5; - r15 = r15 << 2; - r24 = r24 & 31; - r15 = r6 + r15; - if(r24 == r0) { - /* Next insn is delay slot */ - pc=0x6c24c; - continue; - } - r15 = r15 + 4; - case 0x6c24c: - r3 = readPages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff]; - writePages[(r15+-4)>>>12][((r15+-4)>>>2)&0x3ff] = r0; - addr=r3+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r10 = r15 + -4; - r12 = r10 + r0; - r5 = r10 + r0; - r8 = r0 + r0; - r14 = r0 + r0; - r11 = r0 + r0; - r17 = r0 + 8; - r25 = r0 + 32; - r9 = r3 + 1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6c334; - continue; - } - case 0x6c284: - r7 = r16 + r2; - addr=r7+0; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r7 = tmp; - if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x6c430; - run_6c400(); return; - } - r7 = (r2&0xffffffffL) < (33&0xffffffffL) ? 1 : 0; - if(r7 == r0) { - /* Next insn is delay slot */ - pc=0x6c4ac; - run_6c400(); return; - } - r2 = r14 < r11 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6c320; - continue; - } - r2 = ((r5 & 0xffffffffL) < (r12 & 0xffffffffL)) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6c310; - continue; - } - r2 = r8 < 8 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6c310; - continue; - } - r8 = r17 - r8; - r8 = r8 << 2; - r18 = r25 - r8; - r7 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r2 = r5 + r0; - /* Next insn is delay slot */ - pc=0x6c2e8; - continue; - case 0x6c2e4: - r7 = r3 + r0; - case 0x6c2e8: - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 + 4; - r13 = r3 << (r18&0x1f); - r7 = r7 | r13; - r3 = r3 >>> (r8&0x1f); - writePages[(r2+-4)>>>12][((r2+-4)>>>2)&0x3ff] = r7; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r7 = ((r2 & 0xffffffffL) < (r12 & 0xffffffffL)) ? 1 : 0; - if(r7 != r0) { - /* Next insn is delay slot */ - pc=0x6c2e4; - continue; - } - case 0x6c310: - r2 = ((r6 & 0xffffffffL) < (r5 & 0xffffffffL)) ? 1 : 0; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6c48c; - run_6c400(); return; - } - r8 = r0 + 8; - case 0x6c320: - r3 = r9 + r0; - case 0x6c324: - addr=r3+1; - tmp = readPages[(addr)>>>12][((addr)>>>2)&0x3ff]; - tmp = (tmp>>>(((~addr)&3)<<3)) & 0xff; - r2 = tmp; - r9 = r3 + 1; - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6c284; - continue; - } - case 0x6c334: - if(r11 == r0) { - /* Next insn is delay slot */ - pc=0x6c4b8; - run_6c400(); return; - } - case 0x6c33c: - r2 = ((r5 & 0xffffffffL) < (r12 & 0xffffffffL)) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6c3a4; - continue; - } - r2 = r8 < 8 ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6c3a4; - continue; - } - r2 = r0 + 8; - r8 = r2 - r8; - r8 = r8 << 2; - r9 = r0 + 32; - r9 = r9 - r8; - r7 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r2 = r5 + r0; - /* Next insn is delay slot */ - pc=0x6c37c; - continue; - case 0x6c378: - r7 = r3 + r0; - case 0x6c37c: - r3 = readPages[(r2+4)>>>12][((r2+4)>>>2)&0x3ff]; - r2 = r2 + 4; - r4 = r3 << (r9&0x1f); - r4 = r7 | r4; - r3 = r3 >>> (r8&0x1f); - writePages[(r2+-4)>>>12][((r2+-4)>>>2)&0x3ff] = r4; - writePages[(r2+0)>>>12][((r2+0)>>>2)&0x3ff] = r3; - r4 = ((r2 & 0xffffffffL) < (r12 & 0xffffffffL)) ? 1 : 0; - if(r4 != r0) { - /* Next insn is delay slot */ - pc=0x6c378; - continue; - } - case 0x6c3a4: - r2 = ((r6 & 0xffffffffL) < (r5 & 0xffffffffL)) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6c500; - run_6c400(); return; - } - r2 = r6 + r0; - case 0x6c3b4: - r5 = r5 + 4; - r3 = readPages[(r5+-4)>>>12][((r5+-4)>>>2)&0x3ff]; - r2 = r2 + 4; - writePages[(r2+-4)>>>12][((r2+-4)>>>2)&0x3ff] = r3; - r3 = ((r10 & 0xffffffffL) < (r5 & 0xffffffffL)) ? 1 : 0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x6c3b4; - continue; - } - case 0x6c3d0: - r2 = r2 + 4; - r3 = ((r10 & 0xffffffffL) < (r2 & 0xffffffffL)) ? 1 : 0; - writePages[(r2+-4)>>>12][((r2+-4)>>>2)&0x3ff] = r0; - if(r3 == r0) { - /* Next insn is delay slot */ - pc=0x6c3d0; - continue; - } - case 0x6c3e4: - r2 = readPages[(r15+-4)>>>12][((r15+-4)>>>2)&0x3ff]; - case 0x6c3ec: - if(r2 != r0) { - /* Next insn is delay slot */ - pc=0x6c410; - run_6c400(); return; - } - case 0x6c3f4: - if(r6 == r10) { - /* Next insn is delay slot */ - pc=0x6c528; - run_6c400(); return; - } - r10 = r10 + -4; - case 0x6c400: - pc=0x6c400; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ - } - } - private final void run_6c400() throws ExecutionException { /* 0x6c400 - 0x6c600 */ - int addr, tmp; - for(;;) { - switch(pc) { - case 0x6c400: - r2 = readPages[(r10+0)>>>12][((r10+0)>>>2)&0x3ff]; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6c3f4; - run_6c200(); return; - } - case 0x6c410: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r18 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r17 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r16 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r2 = r0 + 5; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6c430: - r8 = r8 + 1; - r2 = r8 < 9 ? 1 : 0; - r11 = r11 + 1; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6c468; - continue; - } - r2 = readPages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff]; - r2 = r2 << 4; - case 0x6c450: - r7 = r7 & 15; - r7 = r2 | r7; - writePages[(r5+0)>>>12][((r5+0)>>>2)&0x3ff] = r7; - r3 = r9 + r0; - /* Next insn is delay slot */ - pc=0x6c324; - run_6c200(); return; - case 0x6c468: - r2 = ((r6 & 0xffffffffL) < (r5 & 0xffffffffL)) ? 1 : 0; - if(r2 == r0) { - /* Next insn is delay slot */ - pc=0x6c320; - run_6c200(); return; - } - writePages[(r5+-4)>>>12][((r5+-4)>>>2)&0x3ff] = r0; - r2 = r0 + r0; - r5 = r5 + -4; - r8 = r0 + 1; - /* Next insn is delay slot */ - pc=0x6c450; - continue; - case 0x6c48c: - r12 = r5 + -4; - writePages[(r5+-4)>>>12][((r5+-4)>>>2)&0x3ff] = r0; - r14 = r11 + r0; - r5 = r12 + r0; - r8 = r0 + r0; - r3 = r9 + r0; - /* Next insn is delay slot */ - pc=0x6c324; - run_6c200(); return; - case 0x6c4ac: - r7 = r0 + 41; - if(r2 == r7) { - /* Next insn is delay slot */ - pc=0x6c550; - continue; - } - case 0x6c4b8: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r18 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r17 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r16 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r2 = r0 + 4; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6c4d8: - writePages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff] = r4; - writePages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff] = r5; - writePages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff] = r6; - /* Next insn is delay slot */ - r31=0x6c4ec; - pc=0x6b400; - run_6b400(); return; - case 0x6c4ec: - r6 = readPages[(r29+24)>>>12][((r29+24)>>>2)&0x3ff]; - r5 = readPages[(r29+20)>>>12][((r29+20)>>>2)&0x3ff]; - r4 = readPages[(r29+16)>>>12][((r29+16)>>>2)&0x3ff]; - /* Next insn is delay slot */ - pc=0x6c228; - run_6c200(); return; - case 0x6c500: - if(r24 == r0) { - /* Next insn is delay slot */ - pc=0x6c3e4; - run_6c200(); return; - } - r2 = readPages[(r15+-4)>>>12][((r15+-4)>>>2)&0x3ff]; - r24 = r0 - r24; - r3 = r0 + -1; - r3 = r3 >>> (r24&0x1f); - r2 = r3 & r2; - writePages[(r15+-4)>>>12][((r15+-4)>>>2)&0x3ff] = r2; - /* Next insn is delay slot */ - pc=0x6c3ec; - run_6c200(); return; - case 0x6c528: - r31 = readPages[(r29+44)>>>12][((r29+44)>>>2)&0x3ff]; - r2 = r0 + 1; - writePages[(r10+0)>>>12][((r10+0)>>>2)&0x3ff] = r2; - r18 = readPages[(r29+40)>>>12][((r29+40)>>>2)&0x3ff]; - r17 = readPages[(r29+36)>>>12][((r29+36)>>>2)&0x3ff]; - r16 = readPages[(r29+32)>>>12][((r29+32)>>>2)&0x3ff]; - r2 = r0 + 5; - r29 = r29 + 48; - /* Next insn is delay slot */ - pc=r31; - return; - case 0x6c550: - r3 = r3 + 2; - writePages[(r4+0)>>>12][((r4+0)>>>2)&0x3ff] = r3; - if(r11 != r0) { - /* Next insn is delay slot */ - pc=0x6c33c; - run_6c200(); return; - } - /* Next insn is delay slot */ - pc=0x6c4b8; - continue; - case 0x6c5fc: - case 0x6c600: - pc=0x6c600; - return; - default: throw new ExecutionException("invalid address 0x" + Long.toString(pc&0xffffffffL,16)); - } - /* NOT REACHED */ } } private static final int[] _data1 = decodeData("\177\177\177\177x\000\000\000\000\000 \020\010\004\002\001",0x2); private static final int[] _data2 = decodeData("\177\177\177\177x\000\000\000\000\000 \020\010\004\002\001",0x2); - private static final int[] _data3 = decodeData("\022\\h6{UXd\020\033Mw!\001`a9\034lR\001\034Js\023KA \000\000\000\000\022\\jVs-\\o;[D\006{Uhp:]\004\0063=dm0]\004\002CUfe\020\011l6\0234N,\020\011n\006c\005Rn\023H\rw\021\000Na8\034\rF)\034R.\005\000\000\000\002\005\006M\"H\005R\003QPe\020\020(4j\024@C9\033n7\033\005fs2[,&c\025d 3\033n\"\0025jl:\032.\006c\024@E7\035M\027\023=\\m2[NG\030(@ ![n\007KIRg4\035\004\002B\014R \030N'\023A4d0\030M$\004k\005dc7H\010&\013eJ\000\000\000\nFC%f 4\\d\004\n\r\032E\026\010\016&+1Ja9Y$\003\0018r5\027\rD\002A\011\014e7\030m\007+IFh\021\n%B\001H` %\035-b\001H`1\032BD\002\002AXa:\031Mw\0234@i7\031\014W\003\025\\d2[NB\003YJr9Z-vq8\000A!S(R\003\r^m2\\d\007;%hh\020\020(%\032=\030U*\021)EI\001\034O\020\025h\025\022I\002N*\026'2\003\031^r\020\031\014W#\005Rl9H\016&+\005H :\032\014R\003!Jl8\010\014fK1J.\005\010\004\005#!Rs\020\032.2\003\031de2H\0166{\031hw0\\LRa\001Bn2\010\017\026{T@a9\031$\007;\025Xc7[,R\003Q^ 9\031,FKMhr4XNW#\024@i:\010\016Vs\021Jr\005\010\004\006\033\025dt0Z-b\003\r^n2\032.FK=\\s\035H\014\027\031\001^u:\033\r\026s\025H 4[D\007#!J #SJR\002\035Jn2\\L\026a\001 u1\033\r\026\031\001\030i1Y-g\033\024\\\n\"\031,FK\rBt2Y\004\007#<@t4\031$\007;%fe9]\004\006\023\025Rn3H\011\022\003\025le9\010\r\006\013\020@t4\031$\007\0031Ja9].&)\001^f\020\034LV\013\021Rn3BD\002\003\011^o5\\d\006{\030@(1].'\023\025\\t6\036$\007\033AJn2\032-f9\001fo6Y$\007#%Ze\020\031\014V\013\020@f7\\D\007#\005p 9\031,\027\033=\\s\024KA%#!J 7\031.v+Mh ;\031.'\033%^n\020\030l\026q\001De\020\031Mw+9H 0]\004\007#!J PiT)\001Po6Y.\006\013\035J:\005\010\004\006CQhp\035\013ew\033=jr1Y,f{INe\027\033LW!=`/0XmV)5Fr7\\n6\013Mf/\005\002JW\033\005Ne\035\002L\026\0335J -Sj\005\"%\036N\027\013Eei\0016F$S\010Ui8\\.\005\002Iw\003QRo7\034g Q\000@-4\013\004\002i5Pe6\034\004\002\001\000@ \020\010\004\002\001\000@ \020\034m\006{\\@t4\032.2\003!Jl8\010\014\026s\020@e<\032.@Q\000@-3\013\004\002i5Lo9\033,\027!\001\014O)\023(\025!\000@ \020\034lW!\001^u:\034\016W!\001Li6\031$\0063=dm0]\001\"\001\000Zo\026\010\005Rk=jt3\032-F)\001\014I&\021$\002\001\000@ 9Y.B\003=jt8\035.B\003\031Rl2H\rf\0135J\n\020\010\005W\0210@-\026\\LW\003=dt\020\021I\024b\024@ \020\010\004\002\003MJt\020\034LW\003=dt\020\031M\026c\024@n0[,PQ\000@-6\013\004\002i5fy6XMvc1Rs:\010\010dJ1\n \020\034lW!\001fy6XMva\001Xi9]\004\0063%Xe\020\033L\026k\024\024 \020\010\004\002\001\000Z-6\030,&+1Hu6\\\004\002\001\000@ \020\010\004\002C=Xd\020\033L\026k\024@f7\\D\002i5fy6XMvc1Rs:\n!\"\001\000@ \020\010\005RkYRc2[\014\026\023\025Xs\020\021I\024b\024@ 9Y.B\003\031Rl2H\rf\0135J 3\033n\"\0031Bb2[\004\006#UZp\020\032-b\002Y\022C\"H\014f{IZa:\002D\002\001\000@ \020\013%W\033\025hp1H\011e*5\004E)\010\004\002\001\000@s2]\004\007\003I^g9\030-R\003\r^u7\035\014W\020(@ \020\010\004\002\0014Zc8\035$\004\032A* \020\010\004\002\001\000@ \020\010\0166+P@t0\\Lv+P@p9\033l6+Mfo9\002D\002\001\000@ \020\013%VK9Rt6Y-R\0029*M!\021*\"\001\000@d2YM\026s\024@'2[.\007#dN 6Y-V{Ir\n\020\010\004\002\001\000@-\026[,\027C\025dr7\\N2\0029*M!\021*\"\003MJt\020\033NVk\011Jr\020\033lb\003\025dr7\\N2\003\011Jf7\\LR\003\025pi:\032-f8(@ \020\010\004\002\0014Zm0^\014F+Ahh\020\023JTj\011\nR\020\010\0166+P@r2XnW\023MRo7\010\014F+Ahh\020\031Mw\021\001Za1\\Mr\003\rBl6\034d\006\0139H \020\\n&\030(@ \026]HDJ\035\022T\020\010\004\002\001\000@ \020\010\004\002\001\000@ \020\010\0166+P@v2\\L&{MRtL\000\000\023r\000\000\001\036t\000\000\n\011\030\000\000P!@\000\005\003t\000\000'o\000\000\002@&\000\000\023\177\000\000\001 *\000\000\011tP\000\000O\001\000\000\004wT\000\000'\025`\000\0028|\000\000\023S`\000\001\034\177\000\000\011m \000\000Ms@\000\004pp\000\000'\001\000\000\0027\024\000\000\0235P\000\001\033\023\000\000\011WP\000\000M1\000\000\004j$\000\000'W\000\000\002 \000\001\030\016\000\000\011(8\000\000L\007\000\000\004T(\000\000&\003@\000\0020\034\000\000\023\001`\000\001\030\016\000\000\011@p\000\000L\007\000\000\004`8\000\000&\003@\000\0020\034\000\000\023\001`\000\001\030\016\000\000\011@p\000\000JF@\000\004Tl\000\000%)@\000\0020\034\000\000\023\001`\000\001\030\016\000\000\011@p\000\000L\007\000\000\004`8\000\000&\003@\000\0020\034\000\000\023\001`\000\001\030\016\000\000\011@p\000\000L\007\000\000\004`8\000\000&\003@\000\0020\034\000\000\023\001`\000\001\030\016\000\000\011@p\000\000L\007\000\000\004`8\000\000&\003@\000\0020\034\000\000\023\001`\000\001\030\016\000\000\011@p\000\000L\007\000\000\004`8\000\000&\003@\000\0020\034\000\000\023\001`\000\001\030\016\000\000\011'@\000\000L\007\000\000\004`8\000\000&\003@\000\0020\034\000\000\023\001`\000\001\030\016\000\000\011@p\000\000L\007\000\000\004`8\000\000&\003@\000\0020\034\000\000\023\001`\000\001\030\016\000\000\011@p\000\000L\007\000\000\004`8\000\000&\003@\000\0020\034\000\000\023\001`\000\001\030\016\000\000\011@p\000\000L\007\000\000\004`8\000\000&\003@\000\0020\034\000\000\023\001`\000\001\030\016\000\000\011@p\000\000L\007\000\000\004U\014\000\000%F`\000\002.2\000\000\022@\020\000\001\026B\000\000\0116x\000\000K\017\000\000\004\\d\000\000%O`\000\002(@\000\000\022_P\000\001\027<\000\000\011 \010\000\000Kw\000\000\004V<\000\000%\000 \000\002(\002\000\000\022@\020\000\001\024\001\000\000\011 \010\000\000J\000@\000\004P\004\000\000%\000 \000\002(\002\000\000\022@\020\000\001\024\001\000\000\011 \010\000\000J\000@\000\004Ul\000\000%\000 \000\002+\022\000\000\022@\020\000\001\024\001\000\000\011 \010\000\000J\000@\000\004P\004\000\000%\000 \000\002(\002\000\000\022@\020\000\001\024\001\000\000\011 \010\000\000J\000@\000\004P\004\000\000%\000 \000\002(\002\000\000\022@\020\000\001\024\001\000\000\011 \010\000\000J\000@\000\004P\004\000\000%\000 \000\002(\002\000\000\022@\020\000\001\024\001\000\000\011 \010\000\000J\000@\000\004P\004\000\000%\000 \000\002(\002\000\000\022@\020\000\001\024\001\000\000\011 \010\000\000Jf\005#=^ 6X-gI\000N(\023K@\000\000\001\034o\020\035L\026cUJ 3Z.f+8\\\000\"\032.fKMRo7\010\014'I\001te9\033e`\000\000\000%9U-f[9^w7\010\rw\003QRo7\010\005\002i4Js\024KA \000\000\000%9U-f[9^w7\010\0167;%hc4\010\005\002i\025F)\027\002@\000\000\000\000%9S-\027\033MRn3H\004W\0318\024\000\000\011.2+L\\\n\000\000\010W\023I^r\020\032-b\002\r\030I\020\030.&;UZe7\035\0163Q\000\000\000\000\000\0106C=fe7\010\0105\002T@d7Y.2\0039^t\020\034nW\003A^r:\010\rF{9N 9\031,vKMhe9\034e`\001Xj0\031\000\000\000\000\000l5\030L\000\000\000\000\000c\033\r\014G#Xd\000\033\r,3\001H\000\000\000\021.'\023=d:\020\023Mr\0035Jm7\\O\022\003\031^r\020\031\017\026s\005Zi1H\014'+\031Le9\013A \000\000\000C7[Nf+Ifi7[D\007#\005Dl2H\r\026s\r^m8\033\014W#\024\\\000\000\000\000\005+9Vn7]mb\003\025\\c7Y\r\026s\034\\\000\000\000\011\026c1Jg0[\010&c=Fk*\031.&k%\\a:\033n \000\001nh4[\014P\000\000\000u7\035\r\026`\000\000\0002[\0166(\000\000\000\000\024\014\027\023MRn3H\0166{Udc2H\014fK1J \023I.28(\000\000\000\021Mw+9H \023_$r\003%\\s:\031,\026!\001^f\020\031-f!5^f\026YM\026c\024\\\000\000\000\004W\031 Jd\024H\007\"\001\025f \024\011.2\001\025f)\035\010\004W\030(\000\000\000\000\004W\031\000Z #\032-F)\000Js\026\010\rFK9J \022Y\004\002A\025f \022\\e\023Q\000Js\005\000\000\005;\005dn4[Lp\0021Bb2[\004\006s\005Ze\020\034nF\013Ihs\020\035m\027# @a\020\034m\006K\031h-9\\\014\026\033\024@c4\030.&\013\rhe9\013@\005\033\025di7].2\003\025dr7\\@\000\000\001\004u3H\r\026q\001\002C&Q%B\003\r^d2H\014f{1Xo;\\`\000\000\000P0<\011/\003Q$\000\000\000i\031@\000\006N\\\000\0004u`\000\003'.\000\000\032:p\000\001SW\000\000\r\0358\000\000ik@\000\006N\\\000\0004u`\000\003$Z\000\000\032:p\000\001SW\000\000\r\0358\000\000ik@\000\006N\\\000\0004u`\000\003'.\000\000\032:p\000\001SW\000\000\r\0358\000\000ik@\000\006N\\\000\0004u`\000\003'.\000\000\032:p\000\001SW\000\000\r\0358\000\000ik@\000\006N\\\000\0004u`\000\003'.\000\000\032%@\000\001SO\000\000\r\0358\000\000ik@\000\006N\\\000\0004u`\000\003'.\000\000\032:p\000\001SW\000\000\r\0358\000\000iT\000\000\006LL\000\0004u`\000\003%4\000\000\032) 0\000\000\000\000\000\000\000\000\000\010\004\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000 \000\000\004\000\000\000\002\001\000@ \020\010\004\002\001\000@\010\004\000\000\000\000\000\000p8\034\016\007\003A`p8\034\016\007\003A`p8\034\016\007\003A`p8\034\016\007\000\000\000\000\000\030\000\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\000\000\000@\000\000`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\n7K9ha<\010\014W\023I^r\027\000\000\000\002Ado3\\L\026i\001Fo:[NF+H@u7\031\014V3%\\e2\013@\000\0029jm1\031.\"\003=jt\020\033lb\003IBn3Y%`\000\000\000\000#\033nVs\020@e7\031\005V{\030Zf4[\014R\003%\\s:\031,\026!\001^f\020\011oR98\000\000\000\023nW!\001^f\020\033,Vk=dy\027\000\000\004k%fs4[Lr\001\035v'\027\000\000\000\000\001\034o\020\034nG\023%\\g\020\031m\0273\025\\.\000\000\000\000\002\rBn7\033nB\003=`e7\010\r\026sAjt\020\031M\026c\024\\\000\005\016d\002Q(T*\025\nE\"Q\001&o:\\L6)h@%9B@\002)YH \020\000\000\000\001\024`4<\000\000\000\000\000J0\031\036\000\000\000\000\000%\026M\0162\001\024Z1\034\\`\000\002M^u9\030lR\003\031Rl2H\0146{9ha4[N2\003%Xl2Yl\026a\001Fh0\\L\026\033QJr\027\000\n7#IBn3Y)\026sAjt&[lF(\000\000\000\000\024.V{QJs\020\034nFK1X 7\\\014Vq\001Bt\020\031-f!\001^f\020\033\r\026s\024\\\000\000\000\010v\013IDa3Y$\006#\005ha\020\030.B\003\025\\d\020\033lb\003Mha:\031-V+9h.\000\000\000\005;IRt4[Lr\003Q^ 6\032,'\023\005dy\020\033Mw!\001fu8\034\rw\023QJd\027\000\000\000\001\011\002C&Q$\"\003\025\\v4\\Mvs5Jn:\010\016f\013IRa1\033\014R\0039^t\020\031Mw+9H.\000\000\010fK1J 7\030-V)\001bu7]\014W\031\001\\o:\010\014f{U\\d\020\n\004\"\021\001^r\020\017\007bI8\000\000'\033d\0063%Xe\020\033L\026k\024@g4]LVq8\000I6\033\014V;\005X 8\033n7#\031Rx\027\000\000\000\000\000xn7[LSp\000\000\000\000p.@\000\007\003\\\000\0008'\000\000\003C\026\000\000\034\032\000\000\001aV\000\000\016\004\020\000\000p{\000\000\007\007l\000\0009\034\000\000\003J\024\000\000\034\\@\000\001e_\000\000\016-H\000\000r\\@\000\007\022<\000\0009-\000\000\003L$\000\000\034~@\000\001h\016\000\000\016C\010\000\000tC\000\000\007$\000\000\000:\030\000\000\003O2\000\000\035\0130\000\001i\034\000\000\016x`\000\000wS\000\000\007@\010\000\000<\r \000\003_x\000\000\035{@\000\001nk\000\000\016}8\000\000x\030\000\000\007Ld\000\000\\\000\000#zp\000\002\037W\000\000\021zP\000\001\017k@\000\010~\\\000\000Gu`\000\004>t\000\000#t\000\000\002\037W\000\000\021}8\000\001\017k@\000\010~\\\000\000Gu`\000\004?.\000\000#zp\000\002\0376\000\000\021}8\000\001\017k@\000\010}H\000\000Gu`\000\004?.\000\000#zp\000\002\037W\000\000\021}8\000\001\017k@\000\010~\\\000\000Gu`\000\004?.\000\000#zp\000\002\037W\000\000\021}8\000\001\017k@\000\010~\\\000\000Gu`\000\004?.\000\000#zp\000\002\037W\000\000\021}8\000\001\017k@\000\010~\\\000\000Gu`\000\004?.\000\000#zp\000\002\037W\000\000\021}8\000\001\017k@\000\010~\\\000\000G`\000\000\004GH\000\000$8`\000\002#(\000\000\022\031x\000\001\0211\000\000\011\011X\000\000H}@\000\004I2\000\000$JP\000\002$I\000\000\022$ \000\001\022/\000\000\011\022x\000\000I\027@\000\004I<\000\000$K`\000\002$^\000\000\022%p\000\001\022/\000\000\011\022x\000\000I\027@\000\004I<\000\000$K`\000\002$4\000\000\022%p\000\001\022/\000\000\011\021@\000\000I\027@\000\004I<\000\000$K`\000\002$@\000\000\022\"(\000\001\022/\000\000\011\022x\000\000I\027@\000\004I<\000\000$K`\000\002$^\000\000\022%p\000\001\022\036\000\000\011\022x\000\000I\027@\000\004Hp\000\000$K`\000\002$^\000\000\022%p\000\001\022/\000\000\011\022x\000\000I\027@\000\004I<\000\000$K`\000\002$^\000\000\022%p\000\001\022/\000\000\011\022x\000\000I\027@\000\004I<\000\000$K`\000\002$^\000\000\022%p\000\001\022/\000\000\011\022x\000\000I\027@\000\004I<\000\000$K`\000\002$^\000\000\022%p\000\001\022/\000\000\011\022x\000\000I\027@\000\004I<\000\000$@@\000\002(g\000\000\022DP\000\001\024\026@\000\011!\024\000\000Iz \000\004O\n\000\000%\017\020\000\002)X\000\000\022M \000\001\024d@\000\011&\020\000\000J7 \000\004S:\000\000%\033P\000\002)]\000\000\022Mh\000\001\024n@\000\011&t\000\000J7 \000\004S:\000\000%\033P\000\002)]\000\000\022Mh\000\001\024Z\000\000\011&t\000\000J7 \000\004R`\000\000%\033P\000\002)]\000\000\022Mh\000\001\024`\000\000\011%\030\000\000J7 \000\004S:\000\000%\033P\000\002)]\000\000\022Mh\000\001\024n@\000\011&t\000\000J/\000\000\004S:\000\000%\033P\000\002)8\000\000\022Mh\000\001\024n@\000\011&t\000\000J7 \000\004S:\000\000%\033P\000\002)]\000\000\022Mh\000\001\024n@\000\011&t\000\000J7 \000\004S:\000\000%\033P\000\002)]\000\000\022Mh\000\001\024n@\000\011&t\000\000J7 \000\004S:\000\000%\033P\000\002)]\000\000\022Mh\000\001\024n@\000\011&t\000\000J7 \000\004S:\000\000%\033P\000\002)]\000\000\022H0U9Z-f9\001^v2\\N6KiJd\020\030,F#IJs9Z-f9\001Zo2\031%`\000\000\000\000$[\rF+\035Bl\020\030mvk\011Rn0]\r\026{8@o3\010\0146{5Za7\031\004\006\0139H 0Y\014G\023\025fs4[Lr\0035^d2K@\000\000\000\000\000\000\000\033@\006p\000\000\000\000\000\000\000\000\000\000\000\000\017@\003p\000\000\000?\000\000\000\000\000\0006\000\000\000\0030\000l\000\000\000\000\000\000\000\000\000\000\000\000\0020\000\000\000\010\000\000\000\001\030\000\000\027\011@\000\0018\000\000\000\004\"\000\000\000\"\000\000\000\000Q)\024j\000\000\000\000\000\000\000\000\000\000\000\000\001h4\000\000\000\000\000\000\000\000\000\000 \001@\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000P(X\016\000\000\000\000\000\" \000\000\000\001Bq\000\0014[/\027\000\000\000\0258X\000\000\000\000\014H \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004X\000\000_-@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001;\000&`\011p\000\000\000\000\000\000\000\000\000\000\036\013\017FerY|v\000%\000\000\005rh\000\000\000\000\000\000\003=V\177=@\000\000\000\000<\0327ZowZ\037N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\031Tn9\035O's\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Hh6\034\016GCq@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\014J'\024JeRy\004F%\023J%2i\021\011E\"qHl:\037\010\000&3)\\`\013\036Og\023\000\000\000\022\n\005C\001Pp<\020\011\005\002a@h8\036\010\004BA0`4\034\017\004\000\003\021Pl8\035\017\007c\000\000\000\001H\000r\000,@\017\020\004d\0019\0006 \017H\0002\000\034@\013\020\003d\001\031\000. \rH\003r\000\014@\007\020\002d\000y\000& \013H\0032\000|@\000\000\000l\000;\000\026`\007X\000\001\027_m{0\007l\001\037\000\000\000\001hT\000\000\036M \000\002u*\000\000\037.P\000\002;\025\000\000\027[(\000\001]j@\000\017oT\000\000\016E \000\001tj\000\000\027*P\000\001zu\000\000\023Y(\000\001=Z@\000\rnT\000\000~} \001xt*\000\037O&P\002}:U\000\037oW(\002?\035J@\027{mT\001_nu \017\177wj\000\000\000\000\000\000\000>\027\000\000\007s8\000\000_+@\000\007{\\\000\000\000\000\000\000\000\000\000\000\0007zp\000\003\177w\000\000\000\000\000\000\000\r\002@\000\002i\024\000\000&Q \000\0035J\000\000#0P\000\002[%\000\000\031\\(\000\001mr@\000\000h\024\000\000\026I \000\0025\n\000\000\033,P\000\002\033\005\000\000\025Z(\000\001Mb@\000\016o\024\000\017\006A \002y4J\000'S(P\003=Ze\000#qX(\002_-R@\031|n\024\001ovy \000\000\000\000\000\000\003`p\000\000^'\000\000\011t8\000\000o3@\000\010|\034\000\000Wi`\000\006?\016\000\000;|p\000\000\000\000(\034Mv#UFe2\010\016F{<@m:Xm\002\003\r^d2K@\005\033\025Nm2[NB\003IJa1Z\014V!\001Bn7]\r\006+H@o7\031%B\003=le9\035n&KQRn3H\r\027!8\000\000\000\000\011V+5^r\020\003\022\017m\000\0375\036H\002\026ex@\022\17774\001$C{ \013\010cR\000^j=\020\006\024:q\0002l_\010\003#.8@\032\17774\001^\037[ \016$\037Z\000u4\rP\007D1i\000=l\026H\003{)t@ \037ID\002\005\016\\ \020B\006b\001\005Y>\020\010:\0241\000D5g\010\004)RX@\"\17774\002\033\rK \021q}Z\001\020XuP\011\022\017l\001\"|``\006r9\010\000\nJ?@\001\035/Q\000=&Mh\003\001[1\000\022YIp\000CH\020 \017rEF\000UwW0\006\025C7\000\011\rcP\001\004Mi\000\034\0002$\000.u\002 \r\014H8\000\177\007=0\000rb)\000)gn@\002\0045z@\005kZ\020\001\004tg\000\007\001\032h\000/_H\020\001f#V\000\01605\030\000stN\000\020E|,\001=|J\000\003X\177p\000K\177{`\000\0260\017\000;eq\010\002\026Z\005\000\rQ{4\0006?3`\002>,\022\000[Sh`\001}M\036\000\027}\"h\001j']\000\030~_\024\001q=O \0009gn\000E\024R \007)W{\000\027v\021x\002\032]\004\000\n`\031@\000F~\036`\006]/`\000go\004\000\004kh6\000\0075\036\030\002\"a/\000\034aX \000eLa \005xR@\0004\020\021P\007\1771\000\000\023.28\000b\006\003\000\002U6(\000sT2 \006\007\011v\000`#\r3\177dC{ \000\000\000\001yhD\026@\000\000\000\000yx#&\020\000\000\000\000;<3\n\026\000\000\000\000\034|\0038\034\000\000\000\000\016\017\")\001\000\000\000\000\006n\034\010E\000\000\000\000\003+'f\035\000\000\000\000\000\000\000\000\001\000\000\000\000\014\000\000\000\001\000\000\000\000\014C\030\000\000\000\000\000\000\000aL\000\000\000\000\000\000\000\020`\000\000\001\022N#\000\r\026s\030\000N S@\006s\005\\\000\030\014&#\031Pj6\033N\007\024\n\011\006D\"Q@\000\000\000\0000\030LF3!Tl7\034\016,\026\023\rHe3\000\000\000\000\000Pn:[\rBH\000\0000\000\000\000\000\000\020\1770\000\001\010R`\000\010E\026\000\000D\022p\000\004\"K\000\000\"\024X\000\002\021%@\000\021\n,\000\001\010R`\000\010E\026\000\000CNP\000\004\035*\000\000\"\024X\000\002\016>@\000\020\177H\000\001\010R`\000\010@\024\000\000D\001`\000\004 \016\000\000\"\000p\000\002\020\007\000\000\021\0008\000\001\010\003@\000\010@\034\000\000D\001`\000\004 \016\000\000\"\024X\000\002\021%@\000\021\n,\000\001\010R`\000\010E\026\000\000D)0\000\004\"K\000\000\"\024X\000\002\021%@\000\021\n,\000\001\0101\000\000\010CZ\000\000D)0\000\004!m\000\000\"\024X\000\002\021%@\000\021\n,\000\001\010R`\000\010DB\000\000D)0\000\004\"K\000\000\"\001`\000\002\021%@\000\021\n,\000\001\010R`\000\010E\026\000\000D)0\000\004 E\000\000\"\024X\000\002\021%@\000\021\002P\000\001\010R`\000\010E\026\000\000D)0\000\004\"K\000\000\"\024X\000\002\021%@\000\021\n,\000\001\010R`\000\010E\026\000\000D)0\000\004!\005\000\000\"\007\000\000\002\020v@\000\021\0074\000\001\010; \000\010B\002\000\000D\016\000\000\004\"K\000\000\"\024X\000\002\0168@\000\021\n,\000\001\010&`\000\010Dl\000\000D\025p\000\004\034q\000\000\"\024X\000\002\016W\000\000\021\n,\000\001\010I \000\010E\026\000\000D)0\000\004![\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001\000@ \020\010\004\002\001\000@ \020\010\004\002\001\000@\000\002\031\026\000\000\021T\020\000\001\r!\000\000\010dd\000\000FP@\000\0045\004\000\000#( \000\002\032B\000\000\021T\020\000\001\r!\000\000\010^\024\000\000F\000\000\000\0045\004\000\000\"y\020\000\002\031\033\000\000\021T\020\000\001\014j \000\010f\014\000\000F0`\000\0043\006\000\000#\0300\000\002\031C\000\000\021L\030\000\001\014a@\000\010f\014\000\000F0`\000\0045\004\000\000#( \000\002\032B\000\000\021T\020\000\001\r!\000\000\010j\010\000\000FP@\000\0045\004\000\000#( \000\002\032B\000\000\021Q \000\001\014p@\000\010j\010\000\000F8 \000\0045\004\000\000#( \000\002\032B\000\000\021T\020\000\001\014}@\000\010j\010\000\000FP@\000\0042N\000\000#( \000\002\032B\000\000\021T\020\000\001\r!\000\000\010j\010\000\000F.p\000\0045\004\000\000#( \000\002\031}\000\000\021T\020\000\001\r!\000\000\010j\010\000\000FP@\000\0045\004\000\000#( \000\002\032B\000\000\021T\020\000\001\r!\000\000\010j\010\000\000FB`\000\0043\024\000\000#\034\020\000\002\031a\000\000\021N\010\000\001\014i \000\010f(\000\000FP@\000\0045\004\000\000\"x0\000\002\032B\000\000\021R(\000\001\r\027@\000\010fZ\000\000Ep`\000\0045\004\000\000#\000 \000\002\032B\000\000\021S<\000\001\r!\000\000\010j\010\000\000FG\000`0\030\014\006\003\001@`0\030\014\006\003\001@`0\020\010\004\002\001\000@ \020\010\004\002\001\000@ \020\010\nt\nI\034I'\021g\"\003ABt4\030mvs\030t *[M6s=nn\020\010Mf\0135J\"\035\010\004V (\000\000+P*$r%\034G\035\010\0167KMFt6\016D\005+9Vn7]mb\0039Bm2ND\002+\020\024\000\000\013lF+X^c7[N6{1J\000\000\000\000\002+T\\%:KDW)8Ju\000\025-f[9^w7\010\010W\023I^r\000\000\000\002+Lt \022\\a \001=Jt1Klw\023=jp\000\000\004UZxt]\035\011+5qi::\022Z\016P\001=Jt1Kn\006\013Mfw2\000\004UZxt]\035\011+5qi::\022Y\007\"+\020t%-WG%ihJ[/\016KSQ\025f\n\000\000\000\005*M\nR\000\000\000\000\001<\000\000\000\013lF+X^n:[\r@\000\000\000N7H\010W\023I^r\000\000\000\000\002U\\k7\033nvq\001Po9]\000\000\000\000\000H7\\nB\0039Bm2H\rF{=Vu8\010\014f\013%Xu9\031 \000\000\000\000U7\032mf{]\\ 9Y.'3\025d 2\\N&{H\000\000\000\000\011fy\001Bd2\034LW\033L@a9\\mv\033%Bt2Y\004\007;%hh\020\033L\026k\024\000\000\003A @\000\034\n\020\000\001`R\000\000\016\005\036\000\000p*P\000 \020\010\004\002\001\000@ \020\n\005\002A P \020\010\004\002\001\000@ \020\010\004\002\001\000@ \020\010\004\010@@ \020\010\004\002\001\000@ \020\010\004\002\001\000@\010\004\002\001\000@ \020\010\004\002\004\002\001\000@ \020\010\020(\024\n\005\002A\000@ \020\010\004\002\001\000@ \020\010\004\002\001\000@ \020\010\004\002\020\010\004\002\001\000A\004B!\020H$\020\010\004\002\001\000@ \020\010\004\002\001\000@ \020\010\004\002\001\000@!\000@ \020\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\004\002\001\000@ \020\010\004\002A P(\024\010\004\002\001\000@ \020\010\004\002\001\000@ \020\010\004\002\001\002\020\020\010\004\002\001\000@ \020\010\004\002\001\000@ \020\002\001\000@ \020\010\004\002\001\000A\000@ \020\010\004\002\004\n\005\002A P \020\010\004\002\001\000@ \020\010\004\002\001\000@ \020\010\004\002\001\000D\002\001\000@ \020!\020H$\022\011\004\002\001\000@ \020\010\004\002\001\000@ \020\010\004\002\001\000@ \020\010 \020\010\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\022n3\032-fKQr\000\000\000\000\004s\005\034\000(\023j4J`\000\000\000\000\000\000\000\024\000\000\000\006 \000\000\001zb\023<\034R>b\036VQ'\031LTP\177u\011tSO$U]h\021OF%sPV \014(2+\rt\032\r\003CI\177su- NtGd`\035\031\035\"T~u~s_O\007\177\000\000\000\000\000\000\000\004\001\020\000\000\000\000\000\000\002\0012\000\000\000\000\000\000\001\001\017 \000\000\000\000\000\000@ab\000\000\000\000\000\000 >\r \000\000\000\000\000\020%h$\000\000\000\000\000\010\026\030K \000\000\000\000\004\014_/\004\000\000\000\000\002\007\033M2@\000\000\000\001\004\002P\027d\000\000\000\000B\033R\016n@\000\000\000!\033#)%\010\000\000\000\020T#\004sJ@\000\000\010-5s\010\036H\000\000\004\0301Wu\023\r\000\000\002\r\003C\000\000a+p\000\006\n_\000\0000Ux\000\003\005/@\000\030*|\000\001BW`\000\014\025>\000\000a+p\000\006\n_\000\0000Ux\000\003\005/@\000\030*|\000\001BW`\000\014\025>\000\000a+p\000\006\n_\000\0000Ux\000\003\005/@\000\030*|\000\001BW`\000\014\025>\000\000a+p\000\006\n_\000\0000Ux\000\003\005/@\000\030*|\000\001BW`\000\014\025>\000\000a+p\000\006\n_\000\0000Ux\000\003\005/@\000\030*|\000\001BW`\000\014\026v\000\000a+p\000\006\n_\000\0000Ux\000\003\005/@\000\030C\\\000\001BW`\000\014\025>\000\000a+p\000\006\n_\000\0000Ux\000\003\0108\000\000\030C@\000\001D\034\000\000\014!`\000\000b\016\000\000\006\020p\000\0001\007\000\000\003\0108\000\000\030C@\000\001D\034\000\000\014\025>\000\000a+p\000\006\n_\000\0000Ux\000\003\005/@\000\030*|\000\001BW`\000\014\025>\000\000a+p\000\006\n_\000\0000V(\000\003\0106@\000\030*|\000\001D\033 \000\014\025>\000\000a+p\000\006\n_\000\0000Ux\000\003\0105\000\000\030*|\000\001BW`\000\014\027&\000\000a+p\000\006\n_\000\0000Ux\000\003\005/@\000\030*|\000\001BW`\000\014\025>\000\000a+p\000\006\020a\000\0000Ux\000\003\005/@\000\030B`\000\001BW`\000\014\025>\000\000a+p\000\006\n_\000\0000Ux\000\003\005/@\000\030*|\000\001D\025\000\000\014\025L\000\000b\rP\000\006\020m\000\0001\006h\000\003\010(@\000\030B\034\000\001BW`\000\014\025>\000\000b\011`\000\006\n_\000\0001\010@\000\003\005j\000\000\030D\024\000\001BW`\000\014\025>\000\000b\020 \000\006\n_\000\0001\007P\000\003\005/@\000\030*|\000\001D\030 \000\014\035\024\000\000aUP\000\006\016J\000\0000t\010\000\003\006V@\000\0308`\000\001C&`\000\014\0326\000\000aS0\000\006\r\033\000\0000iX\000\003\006M@\000\0304l\000\001C&`\000\014\0326\000\000aUP\000\006\r-\000\0000jh\000\003\006V@\000\03054\000\001C+ \000\014\032Z\000\000as \000\006\r-\000\0000jh\000\003\006V@\000\030<\010\000\001C_\000\000\014\032Z\000\000aUP\000\006\016n\000\0000jh\000\003\006V@\000\03054\000\001C+ \000\014\035:\000\000aUP\000\006\r-\000\0000jh\000\003\006V@\000\03054\000\001CU`\000\014\032Z\000\000aUP\000\006\r-\000\0000jh\000\003\007(@\000\03054\000\001C+ \000\014\032Z\000\000aUP\000\006\r-\000\0000jh\000\003\006V@\000\030P\000\001Cu\000\000\014\037(\000\000b\0000\000\006\020\003\000\0000{\030\000\003\007Y@\000\030=L\000\001Cl`\000\014\036f\000\000av0\000\006\0173\000\0000|0\000\003\007c\000\000\030>\030\000\001Cq@\000\014\037\014\000\000ax`\000\006\0173\000\0000{\030\000\003\007Y@\000\030=L\000\001Cl`\000\014\036f\000\000av0\000\006\0173\000\0000{\030\000\003\007Y@\000\030=L\000\001Cl`\000\014\036f\000\000av0\000\006\0173\000\0000{\030\000\003\007Y@\000\030=\000\000\001Cl`\000\014\036f\000\000av0\000\006\0173\000\0000{\030\000\003\007Y@\000\030=L\000\001Cl`\000\014\037\014\000\000ax`\000\006\017F\000\0000|0\000\003\007c\000\000\030>\030\000\001Cl`\000\014\036f\000\000av0\000\006\0173\000\0000{\030\000\003\007Y@\000\030=L\000\001Cl`\000\014\036f\000\000av0\000\006\0173\000\0000{\030\000\003\007Y@\000\030=L\000\001Cl`\000\014\036f\000\000av0\000\006\017 \000\000P\000\002\000\001\000\0000\000\020\000\005\000\001@\0008\000\020\000\004@\001 \000,\000\014\000\003 \000p\000\036\000\010\000\000\000\000\031\010L\000\001HW`\000\014E>\000\000d#\020\000\006\"_\000\0002\025x\000\003\021/@\000\031\n|\000\001HW`\000\014E>\000\000d\014p\000\006 s\000\0002\025x\000\003\0207@\000\031\005\010\000\001HW`\000\014C\n\000\000d\031\020\000\006!I\000\0002\014H\000\003\020d@\000\031\006$\000\001H2 \000\014C\022\000\000d\031\020\000\006!I\000\0002\025x\000\003\021/@\000\031\n|\000\001HW`\000\014E>\000\000d+p\000\006\"_\000\0002\025x\000\003\021/@\000\031\n|\000\001H5`\000\014E>\000\000d+p\000\006\"_\000\0002\025x\000\003\021/@\000\031\n|\000\001HW`\000\014E>\000\000d+p\000\006\"_\000\0001a@\000\003\021/@\000\031\n|\000\001HW`\000\014E>\000\000d+p\000\006\034\n\000\0002\025x\000\003\021/@\000\031\007,\000\001HW`\000\014E>\000\000d+p\000\006\"_\000\0002\025x\000\003\021/@\000\031\n|\000\001HW`\000\014E>\000\000d+p\000\006!{\000\0002\020@\000\003\021/@\000\031\n|\000\001HW`\000\014B<\000\000d!\000\000\006\"_\000\0002\025x\000\003\016\003\000\000\031\n|\000\001H\035`\000\01482\000\000d&p\000\006\034\006\000\0002\025x\000\003\021\016@\000\031\n|\000\001G\002`\000\014E>\000\000d+p\000\006!\006\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001\000@ \020\010\004\002\001\000@ \020\010\004\002\001\000@n3\000\000\006K9Rt<@\000\000\003\005\\\000\000\000\000ff \000\0068\000\000\0003@\000\000\003\034\000\000\000\031`\000\000\001N\000\000\000\014p\000\000\000g\000\000\000\0068\000\000\0003?@\000\003\033|\000\000\031_`\000\001M~\000\000\014op\000\000g\000\000\000\0068\000\000\0003@\000\000\003\034\000\000\000\031`\000\000\001N\000\000\000\014p\000\000\000g\000\000\000\0068\000\000\0003@\000\000\003\034\000\000\000\031`\000\000\001N\000\000\000\014p\000\000\000g\000\000\000\0068\000\000\0003@\000\000\003\034\000\000\000\031_`\000\001N\000\000\000\014p\000\000\000g\000\000\000\0068\000\000\0003@\000\000\003\034\000\000\000\031`\000\000\001N\000\000\000\014p\000\000\000g\000\000\000\0066^\000\0003@\000\000\003\034\014@\000\032\010L\000\001P@\000\000\r\003t\000\000g\024p\000\006B\014\000\0004\020\000\000\003!\011Cds%2Kv\021\033ae\023v\021u5\n9Le%\007\177(O%\034z%-nA\014|2/\035\007\006\000bC\022Xo!@\000i- \000\006I]\000\0004Mh\000\003$n@\000\032&t\000\001R7 \000\r\023:\000\000i\033P\000\006I]\000\0004Mh\000\003$n@\000\032&t\000\001R7 \000\r\023:\000\000i\033P\000\006I]\000\0004Mh\000\003$n@\000\032&t\000\001R7 \000\r\023:\000\000i\033P\000\006I]\000\0004Mh\000\003$n@\000\032&t\000\001R7 \000\r\023:\000\000i\033P\000\006I]\000\0004Mh\000\003$n@\000\032&t\000\001R7 \000\r\023:\000\000i\033P\000\006I]\000\0004T\000\000\003$n@\000\032&t\000\001R7 \000\r\023:\000\000i_ \000\006I]\000\0004Mh\000\003$n@\000\032&t\000\001R7 \000\r\033z\000\000i_P\000\006M}\000\0004oh\000\003&~@\000\0327t\000\001S? \000\r\033z\000\000i_P\000\006M}\000\0004Mh\000\003$n@\000\032&t\000\001R7 \000\r\023:\000\000i\033P\000\006I]\000\0004Mh\000\003$n@\000\032&t\000\001R8`\000\r\023:\000\000i\033P\000\006I]\000\0004Mh\000\003$n@\000\032&t\000\001R7 \000\r\033n\000\000i\033P\000\006I]\000\0004U\020\000\003$n@\000\032&t\000\001R7 \000\r\023:\000\000i\033P\000\006I]\000\0004Mh\000\003$n@\000\0327P\000\001R7 \000\r\023:\000\000i]0\000\006I]\000\0004Mh\000\003$n@\000\032&t\000\001R7 \000\r\023:\000\000i\033P\000\006Mg\000\0004N \000\003$n@\000\032&t\000\001R7 \000\r\033H\000\000i[P\000\006I]\000\0004Mh\000\003&m\000\000\032&t\000\001S3 \000\r\025&\000\000iXP\000\006I]\000\0004Mh\000\003&a\000\000\032&t\000\001S.`\000\r\023:\000\000i\033P\000\006Mt\000\0004gH\000\003&\023\000\000\0323d\000\001S\011@\000\r\030L\000\000iIp\000\006LH\000\0004d@\000\003&$\000\000\0322 \000\001S\022\000\000\r\031\020\000\000iI\000\000\006L=\000\0004ch\000\003&\023\000\000\0321\030\000\001S\011@\000\r\030L\000\000iD`\000\006L&\000\0004b0\000\003&\033\000\000\0321X\000\001S\r@\000\r\030l\000\000iF`\000\006L6\000\0004b0\000\003&\023\000\000\0321\030\000\001S\011@\000\r\030L\000\000iD`\000\006L&\000\0004b0\000\003&\023\000\000\0321\030\000\001S\011@\000\r\030L\000\000iD`\000\006L&\000\0004b0\000\003&\023\000\000\0321\030\000\001S\004`\000\r\030L\000\000iD`\000\006L&\000\0004b0\000\003&\023\000\000\0321\030\000\001S\011@\000\r\030L\000\000iF`\000\006L6\000\0004c0\000\003&\033\000\000\0321X\000\001S\r@\000\r\030L\000\000iD`\000\006L&\000\0004b0\000\003&\023\000\000\0321\030\000\001S\011@\000\r\030L\000\000iD`\000\006L&\000\0004b0\000\003&\023\000\000\0321\030\000\001S\011@\000\r\030L\000\000iD`\000\006L&\000\0004a\030\000\005\000\000\020\000\010\000\003\000\001\000\000(\000\014\000\003@\001\000\000$\000\n\000\002`\000`\000\032\000\007\000\001p\000@\000\000 PH4\"\025\014\000\000\030,&\033\021Jf\000\000\006\003\011Hf4\032MFsAd\000\000\000\000\000\000\000\000\000\000\000\000 \020\010\004\002\001",0x1151); - private static final int[] _data4 = decodeData("\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006n]\000\0009Ah\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\r]>\000\000s\003P\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033;\004\000\001f\006`\000\000\000\000\000\000\000\000\000\000\000\000\000 \0006v\020\000\003L\014@\000\000\000\000\000\000\000\000\000\000\000\000\000@\000s\0130\000\007\030\021\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001f\026 \000\0160\036\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003L+@\000\034`4\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\007\030[`\0009A8\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\01613@\000s\002P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\034b_\000\001f\004`\000\000\000\000\000\000\000\000\000\000\000\000\000 \0009H\020\000\003L\031@\000\000\000\000\000\000\000\000\000\000\000\000\000@\000s\0170\000\007\0301\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001f `\000\0160j\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\00372\000\000\034aT\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006ne\000\0009B8\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\r]L\000\000s\004P\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\034d\020\000\001f\022 \000\000\000\000\000\000\000\000\000\000\000\000\000 \0009Gr\000\003L'@\000\000\000\000\000\000\000\000\000\000\000\000\000@\000s\017`\000\007\030M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001f\0368\000\0161\026\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\0038-\000\000\034.l\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006p\\\000\0008]@\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\ra<\000\000q:P\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033C\000\000\001bt@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0009H(\000\003Eg@\000\011\034\000\000\000\000\000\027(\000\000\000\000\000$ \000\000\000\000\000\035 \000\000\000\000\001\016@\000\000\000\000\005u\000\000\000\000\000\0040\000\000\000\000\000\027T\000\000\000\000\000\021\030\000\000\000\000\000\036P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\007\030t\000\0009F`\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\0161f\000\000s\rP\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\034cH\000\001f\032aqjn:\032.Fc\025H>\000\000\000\0007\033\030\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:6\000\000\000\002\020\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\007\031\004\000\000\000\004\"\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\0161|\000\000\000\010H\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033S4\000\000\000\021\030\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007&p\000\000\000\002@\000\000\000\000\000\000\000\000\000\000\000\000\000@\000nMp\000\000\000E \000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]\034\000\000\000\001\013\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:8@\000\000\002\027\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006tr\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\rif\000\000\000@\014\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033SP\000\000\001\000(\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007'(\000\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000@\000nN`\000\000\004\001@\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]\035`\000\000\030\"\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:<\000\000\0000T\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006ty\000\000\000QD\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\0162\000\000\000\001$\010\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033Sh\000\000\000A\030\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007'X\000\000\001\002@\000\000\000\000\000\000\000\000\000\000\000\000\000@\000nO@\000\000\002\005 \000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]\037 \000\000\004\013\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:?\000\000\000\030\013\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006t\177\000\000\00006\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\rj\000\000\000\000a,\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033T\004\000\000\001CX\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007(\020\000\000\003\010 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000nP0\000\000\006\022`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]!\000\000\000\014-@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:B@\000\000\030k\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006u\006\000\000\0001v\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\rj\016\000\000\000d,\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033T \000\000\001IX\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007(H\000\000\003\0250\000\000\000\000\000\000\000\000\000\000\000\000\000@\000nQ \000\000\006.`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]\"`\000\000\014u@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003:F\000\000\000\031{\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006u\r\000\000\00036\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rj\034\000\000\000f,\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033S0\000\000\000\020@\000\000\000\000\000\000\000\000\000\000\000\000\000 \0009H \000\000\000!\020\000\000\000\000\000\000\000\000\000\000\000\000\000@\000s\017`\000\000\000B@\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]\033 \000\000\001\005@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:7\000\000\000\000\014\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006to\000\000\000\004\032\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\ri`\000\000\000\0108\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033SD\000\000\000\020x\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007'\030\000\000\002\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000nQp\000\000\002C`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]$\000\000\000\004\010\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:H@\000\000\010\021\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\007\031\001\000\000\000B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\rj$\000\000\000bh\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033TL\000\000\001GP\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007) \000\000\003\033 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000nRP\000\000\006>@\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]%@\000\000\004\006@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:K@\000\000\010\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006u\030\000\000\000\020$\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\0162\002\000\000\001\000H\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033Td\000\000\000B \000\000\000\000\000\000\000\000\000\000\000\000\000\000\0007)P\000\000\001\004P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000nS0\000\000\002\005`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]'\000\000\000\000\014@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:N@\000\000\000\032\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006u\036\000\000\000\0006\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\rj>\000\000\000\000p\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033U\000\000\000\000\001h\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007*\010\000\000\000\003`\000\000\000\000\000\000\000\000\000\000\000\000\000@\000nT \000\000\000\007`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001](`\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:R\000\000\000\010 \000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006u%\000\000\000\020B\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\rjL\000\000\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033U\034\000\000\000B\020\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007*@\000\000\001\0040\000\000\000\000\000\000\000\000\000\000\000\000\000@\000s\020 \000\000\002\006\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]* \000\000\004\014@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:U\000\000\000\010\032\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006u+\000\000\000\0206\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\rjX\000\000\000 p\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033U4\000\000\000Ah\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007*p\000\000\001\003p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000nUp\000\000\002\007@\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]\033\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003LB\000\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\007\030~\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\riZ\000\000\000\010\014\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033S8\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000 \0007&x\000\000\000 P\000\000\000\000\000\000\000\000\000\000\000\000\000@\000nN\000\000\000\000A@\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]\034 \000\000\001\003@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:G@\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\007\031\003\000\000\000\020\002\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\rj`\000\000\000 \010\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\034cl\000\000\000@\030\000\000\000\000\000\000\000\000\000\000\000\000\000 \0009Gd\000\000\001\000@\000\000\000\000\000\000\000\000\000\000\000\000\000@\000nV\020\000\000\002\001 \000\000\000\000\000\000\000\000\000\000\000\000\001\000\001],@\000\000\004\003\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:Y@\000\000\014\007\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006u4\000\000\000\030\020\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\rjj\000\000\0000$\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033UX\000\000\000`P\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007)\000\000\000\001\0010\000\000\000\000\000\000\000\000\000\000\000\000\000@\000nR\020\000\000\002\003\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]-`\000\000\020\010\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:\\\000\000\000 0\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006u9\000\000\000A \000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\rjt\000\000\001\003@\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033Ul\000\000\002\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007+`\000\000\004\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000nWP\000\000\0104\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]/@\000\000\020x\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:9@\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006tt\000\000\000 \002\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\rj~\000\000\000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033V\000\000\000\001@@\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007,\010\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000nX \000\000\006\n\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]0`\000\000\014\034\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:b\000\000\000\030@\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006uE\000\000\0001\020\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\rk\014\000\000\000b`\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033V\034\000\000\001F\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007,@\000\000\003\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000nY\020\000\000\006\036\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]2@\000\000\014D\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:e@\000\000\031\n\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006uL\000\000\00020\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\rk\032\000\000\000dh\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033V8\000\000\001J@\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007,x\000\000\003\025 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000nZ\000\000\000\006.\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001]4 \000\000\014]\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003:i\000\000\000\031H\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006uS\000\000\0003\024\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\rk(\000\000\000f`\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033VT\000\000\001N@\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007-0\000\000\003\035 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000nZp\000\000\006>\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001_\026`\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003L?@\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006|]\000\000\000\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\rXB\000\000,\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033xL\000\000X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0009HR\000\0011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000s\021 \000\002b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001_E\000\000\005D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003?\n@\000\013\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\007\031\005`\000\026\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\r|.\000\000,0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033x`\000\000X`\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007qP\000\0012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000oc0\000\002e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001f\037`\000\005\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003?\016\000\000\n|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006~\035\000\000\025x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\r|>\000\000-P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033y\000\000\000[ \000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0009G\030\000\0016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000s\016@\000\002[\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001f\034@\000\005\\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003L<@\000\013,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006~\"\000\000\025H\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\r|F\000\000+\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033y\024\000\000V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007r0\000\001,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000oe\000\000\002^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001_J@\000\005$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003?\026@\000\n\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006l\r\000\000\0258\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\r|^\000\000,p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033y@\000\000Y@\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0009H\002\000\001+\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000of\020\000\002h\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001[W \000\005*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\0037/@\000\nT\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006~2\000\000\025 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\0162\006@\000+P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033/P\000\000W \000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007s\030\000\001)@\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000s\016\\\000\002S\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001_M\000\000\005T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003L:@\000\013(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006~5\000\000\025`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\r|l\000\000+@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\033y`\000\000T \000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007sH\000\0014@\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000og0\000\002P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001_O \000\005\034\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003?\037\000\000\n4\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006~?\000\000\024`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\r}\002\000\000)0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\034cp\000\000R@\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0007t\030\000\001$@\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000ohP\000\002F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001_Q@\000\005\014\000\000\000\000\000\000\000\006~Y\000\0007uX\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016*\022\000\000rT0\000\007\025=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\034\001P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Laj^4$4s\033;n`\000\n\000\005@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000r[\000\000\007\025X\000\0009-P\000\003Jm\000\000\034Vp\000\001e7\000\000\016+<\000\000r[`\000\007\025`\000\0009.\000\000\003Jq\000\000\034W\010\000\001e9\000\000\016+H\000\000r\\`\000\007\025f\000\0009.@\000\003Jt\000\000\034W(\000\001e:@\000\016+X\000\000r]@\000\007\025n\000\0009.p\000\003Jx\000\000\034W@\000\001e<@\000\016+d\000\000r^@\000\007\025t\000\0009/0\000\003J{\000\000\034W`\000\001e>\000\000\016+t\000\000r_ \000\007\025|\000\0009/`\000\003J\177\000\000\034Wx\000\001e@\000\000\016,\000\000\000r` \000\007\026\002\000\00090 \000\003K\002\000\000\034X\030\000\001eA@\000\016,\020\000\000ra\000\000\007\026\n\000\00090P\000\003K\006\000\000\034X0\000\001eC@\000\016,\034\000\000rb\000\000\007\026\020\000\00091\020\000\003K\011\000\000\034XP\000\001eE\000\000\016,,\000\000rb`\000\007\026\030\000\00091@\000\003K\r\000\000\034Xh\000\001eG\000\000\016,8\000\000rc`\000\007\026\036\000\00092\000\000\003K\020\000\000\034Y\010\000\001eH@\000\016,H\000\000rd@\000\007\026&\000\000920\000\003K\024\000\000\034Y \000\001eJ@\000\016,T\000\000re@\000\007\026,\000\00092p\000\003K\027\000\000\034Y@\000\001eL\000\000\016,d\000\000rf \000\007\0264\000\00093 \000\003K\033\000\000\034YX\000\001eN\000\000\016,p\000\000rg \000\007\026:\000\00093`\000\003K\036\000\000\034Yx\000\001eO@\000\016-\000\000\000rh\000\000\007\026B\000\00094\020\000\003K\"\000\000\034Z\020\000\001eQ@\000\016-\014\000\000ri\000\000\007\026H\000\00094P\000\003K%\000\000\034Z0\000\001eS\000\000\016-\034\000\000ri`\000\007\026P\000\00095\000\000\003K)\000\000\034ZH\000\001eU\000\000\016-(\000\000rj`\000\007\026V\000\00095@\000\003K,\000\000\034Zh\000\001eV@\000\016-8\000\000rk@\000\007\026^\000\00095p\000\003K0\000\000\034[\000\000\001eX@\000\016-D\000\000rl@\000\007\026d\000\000960\000\003K3\000\000\034[ \000\001eZ\000\000\016-T\000\000rm \000\007\026l\000\00096`\000\003K7\000\000\034[8\000\001e\\\000\000\016-`\000\000rn \000\007\026r\000\00097 \000\003K:\000\000\034[X\000\001e]@\000\016-p\000\000ro\000\000\007\026z\000\00097P\000\003K>\000\000\034[p\000\001e_@\000\016-|\000\000rp\000\000\007\027\000\000\00098\020\000\003KA\000\000\034\\\020\000\001ea\000\000\016.\014\000\000rp`\000\007\027\010\000\00098@\000\003KE\000\000\034\\(\000\001ec\000\000\016.\030\000\000rq`\000\007\027\016\000\00099\000\000\003KH\000\000\034\\H\000\001ed@\000\016.(\000\000rr@\000\007\027\026\000\000990\000\003KL\000\000\034\\`\000\001ef@\000\016.4\000\000rs@\000\007\027\034\000\00099p\000\003KO\000\000\034]\000\000\001eh\000\000\016.D\000\000rt \000\007\027$\000\0009: \000\003KS\000\000\034]\030\000\001ej\000\000\016.P\000\000ru \000\007\027*\000\0009:`\000\003KV\000\000\034]8\000\001ek@\000\016.`\000\000rv\000\000\007\0272\000\0009;\020\000\003KZ\000\000\034]P\000\001em@\000\016.l\000\000rw\000\000\007\0278\000\0009;P\000\003K]\000\000\034]p\000\001eo\000\000\016.|\000\000rw`\000\007\027@\000\0009<\000\000\003Ka\000\000\034^\010\000\001eq\000\000\016/\010\000\000rx`\000\007\027F\000\0009<@\000\003Kd\000\000\034^(\000\001er@\000\016/\030\000\000ry@\000\007\027N\000\0009[=z?bU*U*U*U\037lw\014-D]\022A\017|`307\r\000V(\000\001+K\034,bY\004\000\014t'\016\"ETY\177@\000\000\000\000\000\000\000\177i\020~jD!40?x\000\000\000\000\000\000\000_|\000\000\000\000\000\000\000\037F~!r\020\000:g\007\1778U\016`\000\000\000\003rR\\\013|\027;t!\177 \000\000\000\000\000\000\000\177U*U*U*U*?p\000\000\000\000\000\000\000\037}bT;\024W\002\177\020h\000\000\000\000\000\000\000\007|SxPJ\"S]s~6\014JIr;6)\177\"t0*#T\010\004\177U*U*\030y\031\032?m[6m[>W\177\037xf3\031Lf3\001P\001\000\000\000\000\000\000\000\007~v\034\023`\000\000\000\013qx_`\n\026`\037)\177]G\004w\007 \037ty\027\nQlR\\\013|\001R[C|\027cfY\037yEd\030\000\000\000\000\017|br\013}z\034{wb\002qB\014T\033\007\023s\030ni9/TM\001zw= q:&_D~\021+\032Ur.xX?30-A5z{\023\037q*U*U*U\037\020\000\000\000\000\000\000\000\000\007\177I\007vT \000\000\003nBha\r\030L3\011w!40FL\000\000\000w#\014bE`\033Af?r\027f\006n'\021\003\037x\000\000\000\000\000\000\000\016t1L(\\\000\000\000\007\027\\\0164%\020\0228\024\013@\000\000\000\000\000\000\001\177N\000\000\000\000\000\000\000\177R\000\000\000\000\000\000\000?x\000\000\000\000\000\000\000^j\037.Mz\0208j\017D\036tz{4Xq\007i\023y\037\000N\024USwh\003 \014rbY\001}-A6\005X\025\013\\\177%*U*U*U\030?p\000\000\000\000\000\000\000\037\034\000\000\000\000\000\000\000\020.\000\000\000\000\000\000\000\007|\000\000\000\000\000\000\000\004\001\000\000\000\000\000\000\000\001\177@\000\000\000\000\000\000\000\177p\000\000\000\000\000\000\000=rv'%V?*|\037\026\\^4(W\034uOXqo\r/1\177\037'rP\006@\031`X:S|\004\"\021\010D\037\n1\177\nU*U*U*$\177`\000\000\000\000\000\000\000?x\000\000\000\000\000\000\000_|\000\000\000\000\000\000\000\017}\022\017m(D\026F\007H\r\030L3\n\027\000{wMkKmX\n7\031|(~D(\006y\025\030~C\"6\036/\023\024\002?6[$,JX\006(\037eLO$\020\rV\033Ox\021\010D\"\020\177\036GoY)`t_^ZCxJp\017\031<\024~I|`&{FQQ\003 ~Wmr\037n\004\014*?A\011\\>K:\011\023\037jt\033PnfA\177\017zU*U*U*Xoc?\020y\010\000\0353@\000\000\000\001\000\000\000\000\002\r \000\000\000\000\000\000\000\003%7\007x/GM2~\033y\007H@\001k\034\036$\000\000\000\000\000\000\000\000\000sBP\000\007\023N\000\0009\034q\177\177\177\177p\000\010\000\000\000\001`pZ\007`\000\000\000\000\000\000\000\177x\000\000\000\000\000\000\000?i!tv\033=\006a\037qQ\"D-AHYOz4 M!\037<~g\177\000\000\000\000\000\000\000\004\001\020\000\000\000\000\000\000\002\0008\000\000\000\000\000\000\001\000\024\000\000\000\000\000\000\000?p\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\017~\000\000\000\000\000\000\000\010\002 \000\000\000\000\000\000\000\000\031H\000?p\000\000\005\177@\000\000\000\000\000\000\000\177`\000\000\000\000\000\000\000?x\000\000\000\000\000\000\000 |\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\027\177\000\000\000\000\000\000\000\004\016\177\177\177\177p\000\000\002\007@\000\000\000\000\000\000\000\177_\177\177rJ\001V*?p\000\000\003-?J5\037s\177\177|R@5J@\000jp\000\002\001",0x1df); + private static final int[] _data3 = decodeData("\022\\h6{UXd\020\033Mw!\001`a9\034lR\001\034Js\023KA \000\000\000\000)].\007\003=dt2Y\004\0063=dm0]\0162\003\005de\035\002A I\025f\n\005\000\000\000\001\025fI7\035L\026c%H ;\030-G+\024X 7\035-V\023\025d 4\\d\006s\025Na:\032.f)h@'\022\\drp(\000A!S(R\0014@t4\031$\004\n\r\032E\020\020n&{Mfa9\\lVk\011Xe9\010\014f{H@M:[\016FKAXe\020\021-g3%do7\033,VsQf\n\020\010\0106{Arr4Ym\007!\000PC\024H\006\023Idp-\031\014\006#!\001\032a9\030mr\002\011By2@\000\000\002QPi9H\r\027\031\001\002C&Q%B\003IJl2X.6)\000`.\034Md\002A\0114e6HE\022a\000b2\020\021LV\021\000d0\031\r\001\"\001\001 l0]\014f{IZ 4[LF+AJn2\031-g!\001le9\034m\026{8\\\000 PiT)\001Fo6Y.2\003]Rt4\010\010\024\022M\036L*U\010Tbd@N'H\nt\nI$A'\025\013\023Y\001Lo9\010\014F+QBi6\034d\007\023\025Bd\020\035\r\006)\001Pe6\034\004\0063%Xe\027\002D\002\002QPi9H\r\027\031\001Lr2Y$\007\033=Lt;X.&)0@a7\031\004\007K=j 0\\LR\003]Jl1[mV)\001ho\020\034LV#%ft9\032,'+QJ 4]\004\007+9He9\002D\002\003\rJr:\030-\026q\001Fo7\031\r\027#%^n9Nd\006\013L@o:]\rFK9Jd\020\032-b\003QPe\020\021ie)\001\016e7\031.&\0130@P:XMFK\014@L4XlVsMJ.\005\021\014V#%Fa:\031,B\003Q^ :\032\014R\003]Rs2\\nB\003\011Ji7\031d\004I\001Jv2\\D\006C\005H :\032\014R\003AXe0\\nW\023\024@o3\010\016&+\005Hi7\031a\"\001\001Do7Zn2\003=L \024\030nW\023IJn:\033\017\022\003M`e7\031\r\026s\034@s7[,R\003QRm2H\014F+\005H 3\033n\"\003QBx\020\034LV\013M^n9J%`RQPe\020\033LW;\025ft\020\035LW\023MRo7\010\0146\0138@b2H\014f{U\\d\020\030.B\003QPe\020\020(4j\024@h7[,W\003\005Ne\035\002D\002\003!ht8\016Er{M^u9\030lV3=dg2KMf+P^p\027X,6k\024Zc9\033n7\033\005fs\027BA%+MBg2NA&\013\rZe\020\026iu\002Q\022O'\013Ebrt@[#\022)D*t\\.\027\002A${Ahi7[N3P(@ \026Z\005B\0014Zh2[\016\002\001\000@ \020\010\004\002\001\000@ \020\010\004\002\001\001fh7]d\007#!Rs\020\032\014Vc@@a7\031\004\006+aRt\005\010\004\002k\030X \026K,f{IZa:\010\010dzI\032A*\010\004\002\001\000@ \020\034lW!\001^u:\034\016W!\001Li6\031$\0063=dm0]\001\"\001\000Zo\026\010\005Rk=jt3\032-F)\001\014I&\021$\002\001\000@ \020\010\004\007\033\025h 7].G\003Uh 3\032-F)\001\\a6Y!\"\001\000Zr\026\010\005RkIJp7\\NB\002\031\022L\"H\004\002\001\000@ \020\010\004\007\033\025h 9\031.\006{Ih 3\032-F)\001\\a6Y!\"\001\000Zl\026\010\005RkMrm1\033mFc%ft\020\021I\024b\024@ \020\010\004\007\033\025h 9^-V\023=X 6\032.7!\001Li6\031$\006s\005Ze\005\010\004\002\001\000@ \026K-F\013\011Jl2\035-W\001\000@ \020\010\004\002\001\000@ \020\n\rvc\020@n0[,R\003\031^r\020\013%W\033eZb7[\rFKMh)\005\010\004\002\001\000@ \026K.fK\rJl0XLVcL@F$S\010R\001\000@ \020\034lW!\001Li6\031$\006s\005Ze\020\031Mw\021\001Xa1\031-B\003\021jm8\010\r\026q\001,I!Q$\0063=dm0]\001\"\001\000@ \020\010\005RkMJt8\030d\0052\005\030U\"H\004\002\001\000@ \020\010\004\007\033\025h 8\034Mv;IBm\020\030mw+9he9\002D\002\001\000@ \020\013%V3I^m\026]\rr\002Y\002L*Q$\0052\005\030U\"H\0166+P@s:\030.'!\001Bn2\010\014Vs\020V1\020\033lb\003=jt8\035.B\003\031Rl2BD\002\001\000@ \020\013%V\033Aj !T\nR\001\000@ \020\010\004\002\001\000@ \020\010\0166+P@t0\\Lv+P@p9\033l6+Mfo9\002D\002\001\000@ \020\013%VK9Rt6Y-R\002Y\002L*Q$\002\001\000@ \020\010\014F+\031Rn2H\004v+5`t\000\000\004Vc\020@(\030\036\004Vc`R\000\022KF3\003\034\000\000\000\022-Fc\025Na6\023NVk\011Jr*\036.\006)T\000\000'\\\014W\023\005ho9\022.4s=hDs:\034M\026s\034P)\000\032.5{1Rs:\n\005\020\000\000\000i9Wmg+5De9\n\005\020\0031Jn\024\n \000\000\001Br1]\014\026q R\000\000\000\000\006\013IFc7\\e\002H\000\000\000\000\030.&\033MRn\024\n \000\000\000\000t0[E\002H\000\000\0001[n2A$\000\000\000\034m\026q R\000\000\000\014fc=Bt\024\n \006K9h(\024@\000\000\003\005Hd9\031.7\031 R\000\000\000\r\026s\021Jx4[Lp\000\000\000\0006\033lvK\rBl\020\033Mw \001`o;Y.\"\003=L\000\000\000\000\006s\025Na:\032-vp\000\000\000\000\033-v#UXo\000\000\r\026sQJg2\\D\006#%li9Z-vp\000\000\000\000\033.VcQRp6\032,6\013QRo7\000\000\007\033UDt9\030,7#%^n\000\030,F#%hi7[@\000\000\000\000l7Ym\026\033\005X 9Z\r\0263P@r4Ym\007 \001Br4]\r\006k\025hi1H\0166C%Lt\020\034M\026;!h\000\000\034m\006K\031h 6\031,g \000\000b0[M2\003\011rt2H\rv0\000\000\000\000\032\r\026; @b<]\014R\003=L\000\000\000\000\006c=n 1\036.F)\001^f\000\031n&+\005he9\010\016FC\005\\\000\000\000\000\006;IJa:\031.\"\003QPa7\010\rw\021\001Jq:X-@\000\000\000l2\\n2\003QPa7\000\000\000\0031Js9H\016FC\005\\ 7\\D\006+Eja6\000\000\007#\025ft\020\031Mw\021\001Rn2\\.V\0131Rt<@\016F+Mh 3\033n\"\003\025bu0[\r\027#d\000\000\000\033\rv;%Fa6\010\014\026s\020\000e<\030mG+MRv2H\rw\020\000\000\000\000\033\rv;%Fa6\010\rw\020\000\000a8\034\014Vs\020@t7H\rFKMh\000\000\033n\006+8@i7\031\014W@\000\000s:\030.'!\001Xi9]\000\000\0031Jf:\010\016\006\013IJn:\032\014W\033%f\000\000\000\000\007\033QBr:\010\rv1\001Jx8\034LW\033MRo7\000\014Vs\020@o3\010\014WCAde9\\m\026{8\000\000\000\000\000\024\177P\000\001(\010\000\000\nA\020\000\000S0@\000\005\032\030\000\000*\011\000\000\002Pj\000\000\024h \000\001'\016\000\000\n9P\000\000SS\000\000\005\036\024\000\000)t \000\002O8\000\000\024|p\000\001'r\000\000\n4\020\000\000S!\000\000\005\032\010\000\000)P@\000\002Sr\000\000\025\036\000\000\001+\007\000\000\nX8\000\000UJ\000\000\005-\010\000\000*K@\000\002T \000\000\025#\000\000\001*#\000\000\nV0\000\000U6@\000\005+P\000\000*^@\000\002V\002\000\000\025&p\000\001*P\000\000\nUX\000\000Tj\000\000\005&`\000\000+\024 \000\002Y\"\000\000\025J\020\000\001,Q\000\000\ne\010\000\000V(@\000\0052D\000\000+\024 \000\002Xt\000\000\025L\020\000\001,Y\000\000\neH\000\000V,@\000\0052d\000\000+\026 \000\002Y2\000\000\025G \000\001,:\000\000\nc0\000\000V\035\000\000\005k\\\000\000.c`\000\002un\000\000\027.p\000\001:w\000\000\013Zp\000\000]N\000\000\005hP\000\000.G \000\002tb\000\000\027'\000\000\001:?\000\000\013UH\000\000]8\000\000\005qh\000\000/\023\000\000\002y\"\000\000\027L\020\000\001r\000\000\013x \000\000_7@\000\005{<\000\000/Z`\000\002}V\000\000\027m0\000\001>k\000\000\013vX\000\000_5@\000\006\025l\000\0001\025 \000\003\011*\000\000\030JP\000\001E7\000\000\014+\030\000\000b*@\000\006\022T\000\0001\025 \000\003\011`\000\000\030M@\000\001DU\000\000\014(\000\000\000b*@\000\006\023p\000\0001\025 \000\003\011*\000\000\030JP\000\001DU\000\000\014%(\000\000b*@\000\006\022T\000\0001\025 \000\003\011*\000\000\030JP\000\001DU\000\000\014%(\000\000bR\000\000\006\024l\000\0000{@\000\003\011*\000\000\030JP\000\001DU\000\000\014%(\000\000b*@\000\006\022T\000\0001\025 \000\003\011*\000\000\030JP\000\001DU\000\000\014%(\000\000b*@\000\006\022T\000\0001\025 \000\003\011*\000\000\030JP\000\001DU\000\000\014%(\000\000b*@\000\006\022T\000\0001\025 \000\003\011*\000\000\030JP\000\001DU\000\000\014%(\000\000b*@\000\006\022T\000\0001\025 \000\003\n\010\000\000\030JP\000\001DU\000\000\014'@\000\000b*@\000\006\022T\000\0001\025 \000\003\011*\000\000\030JP\000\001DU\000\000\014%(\000\000b*@\000\006\022T\000\0001\025 \000\003\011*\000\000\030JP\000\001DU\000\000\014%(\000\000b*@\000\006\022T\000\0001\025 \000\003\011*\000\000\030JP\000\001DU\000\000\014%(\000\000b*@\000\006\022T\000\0001\025 \000\003\011*\000\000\030JP\000\001DU\000\000\014%(\000\000b*@\000\006\023P\000\0001G@\000\003\014\010\000\000\030@@\000\001F\000\000\000\014.@\000\000d\010@\000\006\030\020\000\0002\017\000\000\003\010\010\000\000\031\006p\000\001G3\000\000\014 \000\000c9@\000\006\037\020\000\0001\001\000\000\003\010\010\000\000\030@@\000\001D\004\000\000\014 \000\000b\002\000\000\006\020\020\000\0001\001\000\000\003\010\010\000\000\030@@\000\001D\004\000\000\014 \000\000b\002\000\000\006\026\020\000\0001\001\000\000\003\r^\000\000\030@@\000\001F\\\000\000\014 \000\000b\002\000\000\006\020\020\000\0001\001\000\000\003\010\010\000\000\030@@\000\001D\004\000\000\014 \000\000b\002\000\000\006\020\020\000\0001\001\000\000\003\010\010\000\000\030@@\000\001D\004\000\000\014 \000\000b\002\000\000\006\020\020\000\0001\001\000\000\003\010\010\000\000\030@@\000\001D\004\000\000\014 \000\000b\002\000\000\006\020\020\000\0001\001\000\000\003\010\010\000\000\030d`\000\001D\004\000\000\014 \000\000c\021\000\000\006:\\\000\0003G@\000\003\0342\000\000\031c`\000\001N\036\000\000\014qp\000\000g\017\000\000\006=H\000\0003G@\000\003\034<\000\000\031c`\000\001N\036\000\000\014|@\000\000g\025\005\033Qdi7\031d\006c\025\\g:\032\004\006KL@n7]\004\003\0118\000C7[Nf+Ihe2\010\016Fy\001Rn:\031,v+H@f7\\D\006\023%\\a9\036$\006c=Ni1H\rw\003\025da:\033n\"p\001\nx8\034LW\033MRo7\010\014FK\020@n7]\004\007\023\025hu9\033D\006\011\001\\u6XLW\0218\000T7[d\006k\005\\y\020\011e\00298\000\000\000\023Mr\003YBl:Y$\006;%le7\013@\004#%li9Z-vq\001Dy\020\036LW\023<\\\000\000\000\004W\032U\\k7\033nvq\001^p:\032-vq\000P-\026I.2I8\024\000\000\000\004W\032U\\k7\033nvq\001fw4]\0146A\000P-\022Xe\022p(\000\000\000\000\004W\0325Rs9Z-f9\000Js\027\002@\000\001\025f%9KA \000\001\nr9\033n\"\003%\\ !S\011\022\003\005dg:[,VsQf:\020\000\000\000\000\001\006h7\\lVq\001\006P*H\014F{\025f 7\033nB\003Mjp8\033n'!\001Xo7\031d\007\023\025Ni9]\014W\023L\\\0007\033-w\031Xj0\031\000\000\000\000\000l5\030L\000\000\000\000\0006\032Xf\003\020\000\000\0009\rFV\031@d\000\000\035fc+\014`2\000\000\006c)`b6\000\000\000\0031UFe\030\014@\000\001Pj0\031\000\000\000\000\001Z6\032@\01431QHt;\014@\0029Xj0\031\011eB\001\035\\m7\\fc)@d'\026\010\004s1Tb0\023K\004\0029Xjc\030\014Dra\000Nr\033\r,3\001HN,\020\011ns1UF0\031\011eB\001\034l5\034\014&b90@'\033\r,6)@d'\026\010\004s!T`2\023K\004\002;4l5\023K\004\002;\014l42\035\016c\021\034\000\000\000\000\010W\023I^r\035\010\011fy\001Ze6[n'I\001Lo9\010\014GK9Bm4Xd\006\023ULf2\\E`P\000\000\000\022[\014@\002\r^n;\031.'\033%^n\020\035\014\026\0231J 4[L6{5`l2]\014Rp\000\000\000\000\025-f[9^w7\010\014Vs\r^d4[Lrp\000\000\0008\031.@\003IBw\000\034l7\020\001\036b5\031,7\"!Bs'\035-FbQrp2@\000\000\002%Xl2Yl\026b\011Xo1ZjF+IZi7\030.F{H\000\000$[\rF+\035Bl&\033mw\002\005Xg7@\016vC%Xe\000\000\000\007+9hi6\000\000\000\002ABr9Z-f9\001fo:\\L6)\001Li6\031$\0029\025f'\005\000\000\000\002\031^u7\031\004\002;tN 4[N7#\025Bd\020\033lb\003\025\\d\026[lbk\031Rl2K@\000\000\0006[\030\033 \000\000\000\000\033-L-QZlf16@\000\000\000m63\031[ \000\000\0006[\031LMP\000\000\000\033-Lffh\000\000\000\022\\e\002+\020R \035\010\004W\031\025f%9H\005\002+L@%9J'\"\001\025f\n\000\000\000\000\002MJr4[nW\031\001Jr9\033n \000\000\000%9I.2+L@-\020\021M\026c\024@%9K\004\006c%\\e\020\011,B\001 Js\020\011.2Ih@%9B@\000\002\025dr7\\@\000\000\001.a9\033M\026s\034\000I7\031Mp\000\000\000\000\"\031,'+\034\000\000\000\023\014\026\023\025X 7\030-V)\001\\o:\010\r\026q\001Xe3\035\rV{Mh 1[mG+5\\.\000\000\n7K5Do6\010\rf\0135J 9]\014\027\023Qf ;Z.FA\001B 9Z\r\0263PZs8\030,6)\001Fh0\\L\026\033QJr\027\000\000\000\000\001\004u3H\r\026q\001\002C&Q%B\003\r^d2H\014f{1Xo;\\`\000\000\000P0<\011/\003Q$\000I6\033\014V;\005XN:[,&+I(y8\031&\000\000\001\022l6\031,v\0131\036b5\031,7\"Qrp2@\000\000\000\000\004\010h\000\000 \\\020\000\002\005a\000\000\020.\010\000\001\002p@\000\010\027\004\000\000A8 \000\004\013B\000\000 \\\020\000\002\005a\000\000\020\"p\000\001\002p@\000\010\027\004\000\000A8 \000\004\013B\000\000 \\\020\000\002\005a\000\000\020.\010\000\001\002p@\000\010\027\004\000\000A8 \000\004\013B\000\000 \\\020\000\002\005a\000\000\020.\010\000\001\002p@\000\010\027\004\000\000A8 \000\004\013B\000\000 \\\020\000\002\005a\000\000\020.\010\000\001\002\025\000\000\010\027\004\000\000A8 \000\004\013B\000\000 \\\020\000\002\005a\000\000\020.\010\000\001\002p@\000\010\027\004\000\000A8 \000\004\013\002\000\000 Y\020\000\002\005a\000\000\020%x\000\001\002&\000\000\010\027\004\000\000A8 \000\004\013B\000\000 \\\020\000\002\005a\000\000\020.\010\000\001\002p@\000\010\027\004\000\000A8 \000\004\013B\000\000 \\\020\000\002\005a\000\000\020.\010\000\001\002p@\000\010\027\004\000\000A8 \000\004\013B\000\000 I@0\000\000\000\000\000\000\000\000\000\010\004\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000 \000\000\004\000\000\001\002\001\000@ \020\010\004\002\001\000@\010\004\000\000\000\000\000\000p8\034\016\007\003A`p8\034\016\007\003A`p8\034\016\007\003A`p8\034\016\007\000\000\000\000\000\030\000\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\000\000\000@\000\000`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\030\014\006\003\001@`0\n7K9ha<\010\014W\023I^r\027\000\000\000\002Mrm1\033mB\003\005Xr2X,GI\001He3\032-f+\020\\\000(\034Mv;IBm\020\030mw+9he9\010\016Vs\021Jf4[LV!8\000\000'\035-V\023\025d 2\033lW\031\001\\o:\010\014fKP@i7\010\006#!\001Di:\034e`\0029jm1\031.\"\003\021^e9H\rf{P@f4]\004\006K8@1\033\010\014&KQf.\000\023NVk\011Jr\020\031\rv+L@n7]\004\0063%h 4[D\003A\001Di:\034e`\000\001\034u6XLW\021\001^u:\010\rv1\001da7\031lRp\000\000\000\000\021Mw+9H 2[LBk=L-3\032-F)\001Rn9]\014V\013\020@o3\010\004wi\034\\\000\000\000\011w+P@o3\010\rV+5^r\000\000\000\000\021LX\000\001\014E\000\000\010e\020\000\000F\031 \000\0044H\000\000##`\000\002\031{\000\000\021DH\000\001\014z@\000\010g<\000\000G= \000\0049t\000\000#R@\000\002\036\031\000\000\021n\030\000\001\016n@\000\010uh\000\000G\025`\000\004;^\000\000#]\020\000\002!p\000\000\022\0108\000\001\020P@\000\011\011\024\000\000HG`\000\004CT\000\000$\030p\000\002 k\000\000\022\021H\000\001\021\011@\000\011&X\000\000J\r`\000\004Q\"\000\000%\024p\000\002)!\000\000\022IX\000\001\024<\000\000\011 P\000\000J@\000\000\004St\000\000%j0\000\002-\014\000\000\022j0\000\001\027\022\000\000\0118t\000\000KE@\000\004[f\000\000%M\020\000\002-l\000\000\022w@\000\001\032a\000\000\011P|\000\000M\016 \000\004j\032\000\000&Pp\000\0025\001\000\000\023%p\000\001\031~\000\000\011Up\000\000M9@\000\004s\014\000\000'\0040\000\0028=\000\000\023I\010\000\001\034E@\000\011d\024\000\000N\030@\000\004p\000\000\000'\030\000\000\0029j\rw\023%Ni7\030-@\000\000\000\0002\031,fK9Rt4[m`\000\001(o7H\014F+\025`l\000\000*'p\000\002R5\000\000\025\022X\000\001(n@\000\nEX\000\000U\000`\000\0055\020\000\000+40\000\002[\035\000\000\025^\030\000\001-\037\000\000\nhx\000\000VE\000\000\0054\024\000\000+\033\000\000\002Y8\000\000\025Y\000\000\0011\017\000\000\013\006|\000\000X6@\000\005C\036\000\000,\030`\000\002a'\000\000\026\011p\000\0010J@\000\013\003\014\000\000X\021\000\000\005EJ\000\000-\023`\000\002h_\000\000\026EP\000\0014'@\000\013\"\030\000\000Z\011`\000\005P<\000\000-\002P\000\002gc\000\000\026< \000\0014r@\000\013A\020\000\000[y\000\000\005_<\000\000-z \000\002oH\000\000\026z@\000\0017O\000\000\013W\000\000\013u\024\000\000_'\000\000\005yT\000\000/I0\000\002~l\000\000\030*X\000\001B6\000\000\014\023\034\000\000a\027\000\000\006\011&\000\0000F@\000\003\004+\000\000\030\"\020\000\001Ax\000\000\014\016D\000\000a<@\000\006\030V\000\0001=@\000\003\013g\000\000\030]`\000\001Ei@\000\014-P\000\000bj`\000\006\026D\000\0001.\000\000\003\nQ\000\000\030g\020\000\001IX@\000\014KH\000\000d[ \000\006%D\000\0002+\020\000\003\022:\000\000\031\023\010\000\001I\024\000\000\014GX\000\000d5`\000\006'p\000\0003$@\000\003\031e\000\000\031N\000\000\001Lj@\000\014f0\000\000f+ \000\0062H\000\0003\0230\000\003\030i\000\000\031DP\000\001M5E+MRn3H\rw3\025ds4^LV!\001Bd2\034LW\033MRn3H\rV{\021J.\000\000\000\000\002\r U\020\031\rv+L@n7]\004\007\033U`p7\\NB\003QPi9H\014\026#\021de9\\m\026s\034@m7Y\014R\003\031^r\020\035\r\006KL@m7\031-V{9Rc\027\000\000\000\000\000\000\000\000\000\033@\000\000\000\000\000\000\000\r`\000\000\000\000\000\017@\003p\000\000\000\010`\017`\000\000\000\000\000\r@\0030\000l\000\000\000\002\020\000\000\000\000\000\000\000\000\000\000L\000\000\000\004`\000\000\\&\000\000\000\001\000\000\000\000\010\000\000\001\010@\000\000\027\000\000\000\000D\000\000\000\000\000\000\000\000\000\000\000\000\000\005zl\000\000\000\000\000\000\000\000\000\000\000\000\0114n,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000.`\011X\002<\000\000\000\000\000\000\000\000\036\013\017FerY|v^-\000\000\000\000\000\000\000\000\000\003aP\000\000\000\000\000\000\000\002)\013J7Zmv[}v\177=@\000\000\000\001\036:\000\n@\000\000\000\000]@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001`P\000\024\016\000\000\000\000\000\000\000\000\000\000\000\000\0028\000\000\000\000\000\0008\014.\023\023Hfs\032Y$W)YL'3H,\022\013\004Ba\022\035\006G!QH$2\011Nc3Xnw\033]f\006\001\003A$qH\000\"2`\rfRV\000~\000\0350\000\000\000\000\001\000\000\000\000\003h\000\000\000\000\000\000\000\000\000\000\003\000@\000\020\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 Q0\034\000\004$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\005#z\000\014 \006\013D\000\005Rm<\\\002\000\000Ub`\000\000\000\0002!\002E$S(\000\000\000\000\000\000\000\000\000\000\000\000\000\003P\0004\000\000\000\0100\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016T\000\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\000\000\000\000\003\020\000\000\000\000\000\n \000\000\000\000\000\034@\000\000\000\000\000I\000\000\000\000\000\0012\000\000\000\000\000\003$\000\000\000\000\000\007H\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\004@\000\000\000\0002\031\000\000\000\000\001$R\000\000\000\000\003Id\000\000\000\000\011\024H\000\000\000\000\026+\020\000\000\000\0004Z \000\000\000\000y<@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0018\000\000\000\000\000\006p\000\000\000\000\000\025`\000\000\000\000\000;@\000\000\000\000\001\027\000\000\000\000\000\002n\000\000\000\000\000\006\\\000\000\000\000\000\0178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003@\000\001\020\000\000'\000\000\006 \000\001\016\000\000\024@\000\003\034\000\0009\000\000\0108\000\001\022\000\000\024p\000\002d\000\0001`\000\006H\000\000s@\000\017\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000L\000\000\000\000\000\003\030\000\000\000\000\000\n0\000\000\000\000\000\034`\000\000\000\000\000I`P \000\000\0013q8\\ \000\003&\000\000\000\000\000\007L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\000\000\000\000\000\021@\000\000\000\000\000C\000\000\000\000\000\001F\000\000\000\000\000\004\014\000\000\000\000\000\n\030\000\000\000\000\000\0300\000\000\000\000\0008`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H$\000\000\004@\003\021H\000\000\031\000\n%\020\000\000R\000\034N \000\001d\000I$@\000\004H\0012Y\000\000\013\020\003%R\000\000\032 \007Kd\000\000\037\017D\000\000\011Lj7\030\002gSyd`\000\000\004\002\001\000@ \002\011\004B!\020@\010\024\n\005\002A\000\030,\026\013\005B\000@`0\030\014\004\001!Ph4\032\010\003\003A`p8\020\007\007Capx \000\000\014FC1`t<\037\014\000\000\000\006 \001H\0002\000\014@\003\020\000\000\0009\000\016 \003H\000r\000\034@\000\000\002d\000Y\000\026 \005H\0012\000\000\000\017\020\003d\000y\000\036 \007H\000\000\000L@\023\020\004d\001\031\000& \000\000\002r\000\\@\027\020\005d\0019\000. \rH\0032\000l@\033\020\006d\000\000\000> \017H\003r\000|@\037\020\000\000\000\000\000\006`\003X\0016\000=@\000\011=~o[\000>`\011x\000\000\000\016E \000\000t*\000\017G\"P\000\000:\025\000\000\003Q(\000\000\000\000\000\000\003iT\000\000\036M \003ytj\000\000\017&P\000\000z5\000\000\000\000\000\000\000]*@\000\005jT\000_.U \000\002u*\000\000\027*P\000\000\000\000\000\000\017W(\000\000}:@\017wkT\000\000>] \000\003uj\000\000\000\000\000\000\002;\025\000\000\023Y(\002?\035J@\000\011lT\000\000Ne \000\000\000\000\000\000/6P\000\002{5\000/w[(\000\001=Z@\000\013mT\000\000^m \000\006w*\000\0007:P\006\177;U\000\000\033](\000\001]j@\000\000\000\000\000\000~} \000\007wj\000\177\177>P\000\003{u\000\000\037_(\000\000\000\000\000\000\000\000\000\000\000\017E`\000\001|n\000\000\027jp\000\001~w\000\000\000\000\000\000\000\000\000\000\000\r~\\\000\000\177}`\000\000\000\000\000\000\003 P\000\000\032\005\000\003aP(\000\000\r\002@\000\000h\024\000\000\006A \000\0014J\000\000\013$P\001iY\177r!}U\010BhaBc7\\`\000\000\000\000a9Z-`\000\000\000\0008\033np\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007dgwVCgt\000`\000\000\000\000\000\000\000\000\001\177E8\001P\000\000\000\000\177p\000\000\000\000\000\000\000?|\000\000\000\000\000\000\000\037~$\037Z\000\022!}P\002-Kq\000\031\020~h\001{)t@\0216/D\001\027{; \n$\037Z\000XF\035\020\005vSi\0001#W\010\003\026ex@\032\032sD\001W{; \rq}Z\000r!}P\007+ m\000<#\016H\003na4@\037ZO$\002\001|L \020(ub\001\004\0206\020\010-Kq\000CQ#\010\004#.8@\"M\025D\002\027{; \021XlZ\001\017\017mP\011\005G-\000I\020~`\n\027f\006\0007\023H@\000TS|\000\011j}\010\003j4n@\030\r[\010\001\025LO\000\004\034A\002\000\177\024,0\005/=;\0001,\0338\000Hn\035\000\010$nH\001`\003\022 \002w(\022\000hdC@\007x;k\000\007\026\022H\002N>t\000\020#/T\000.]Q\000\010'&8\0008\011V@\002}|A\000\0162\0350\000s\003)@\007\037$p\001\004/b`\013odP\000\035G\177\000\004_\177^\000\0013\000x\003^/\010@\0215P(\000m\017[ \0033{\036\000\023ra\020\005]\036F\000\017lip\001?j\026@\016R=h\001Guy \017\013lz\000\003N>p\004)%\022\000:M?X\001?1\017@\021Uh \000V\001L\000\0047qv\0005j~\000\006>x \000&^C0\000;)q@\022\026\nx\001f\rB\000\006,f\n\000/E\024\000\003!\001\r\000?{\010\000\001\032s\023@\006\0200\030\000\025+2@\007\035#\022\00008O0\006\002\030k\037~$\037Z\000\000\000\000\017ND!4\000\000\000\000\007OB\0321\000\000\000\000\003[c\030Q0\000\000\000\001g`\033A`\000\000\000\000pz\022H\010\000\000\000\0006q`D(\000\000\000\000\032Z>1h\000\000\000\000\000\000\000\000\010\000\000\000\000`\000\000\000\010\000\000\000\000d\031@\000\000\000\000\000\000\006\014`\000\000\000\000\000\000\001\006\000\000\000\011\024r\030\000i7\031@\004r\005\034\0007\030-`\001@b2\031M\006S1\\p9 PH4\"\025\014\000\000\000\000\003\001Dd3\032\r&c9`ra1\030lF+\030\000\000\000\000\005\006sUXl\024@\000\000\000\024S0\000\001%r`\000\n/\026\000\000Rbp\000\005\027K\000\000)l\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\001U@\000\030~(\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\003,\000\0001|0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\006Z\000\000cx \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000\032p\000\003\020\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000`5p\000\006 \002\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001@l\000\000\014@\024\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\001X@\000\031\000(\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\0032\000\0001~p\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\006f\000\000c} \000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030\021,\000\001H\014@\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000#\020\000\003\020\037\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000`6@\000\006 :\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001@m \000\014@l\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\025\000\000\000\000\004\000\000\000\005@\0000\0330\000\000\000\005 \000\000\000\001\000\000\000\001(\000\014\006r\000\000\000\001(\000\000\000\000 \000\000\000(\000\003\001^\000\000\000\000*\000\000\000\000\010\000\000\000\011@\000`7p\000\000\000\n@\000\000\000\002\000\000\000\002 \000\030\016\004\000\000\000\002P\000\000\000\000@\000\000\000D\000\006\003D\000\000\000\000T\000\000\000\000\020\000\000\000\020\000\001@q`\000\000\000\025\000\000\000\000\004\000\000\000\003`\0000\034P\000\000\000\005 \000\000\000\001\000\000\000\000p\000\014\007\030\000\000\000\001(\000\000\000\000 \000\000\000\032\000\003\001g\000\000\000\000*\000\000\000\000\010\000\000\000\006\000\000`:\000\000\000\000\n@\000\000\000\002\000\000\000\0010\000\030\016H\000\000\000\002P\000\000\000\000@\000\000\000(\000\006\003T\000\000\000\000P\000\000\000\000 \000\000\000,\000\001@u`\000\000\000\023\000\000\000\000\004\000\000\000\001 \0000\035P\000\000\000\004P\000\000\000\002\000\000\000\0018\000\014\007:\000\000\000\001\020\000\000\000\000 \000\000\000\014\000\003\001p\000\000\000\000\"\000\000\000\000\020\000\000\000\r@\000`<0\000\000\000\010@\000\000\000\004\000\000\000\003 \000\030\017\024\000\000\000\002\020\000\000\000\001\000\000\000\000d\000\006\003g\000\000\000\000D\000\000\000\000 \000\000\000\030\000\001@z@\000\000\000\020\000\000\000\000\010\000\000\000\010\000\0000\036p\000\000\000\004\000\000\000\000\002\000\000\000\001x\000\014\007b\000\000\000\000x\000\000\000\000@\000\000\000<\000\003\001z\000\000\000\000\036\000\000\000\000\020\000\000\000\016@\000`?\020\000\000\000\007@\000\000\000\004\000\000\000\003@\000\030\017|\000\000\000\001`\000\000\000\000@\000\000\000$\000\006\004\002\000\000\000\0008\000\000\000\000\020\000\000\000\010\000\001A\001@\000\000\000\016\000\000\000\000\004\000\000\000\001`\0000 P\000\000\000\003 \000\000\000\002\000\000\000\002(\000\014\010\032\000\000\000\000h\000\000\000\000@\000\000\000H\000\003\002\010@\000\000\000\032\000\000\000\000\020\000\000\000\021@\000`Bp\000\000\000\006@\000\000\000\004\000\000\000\004 \000\030\020h\000\000\000\001@\000\000\000\001\000\000\000\001\030\000\006\004\037\000\000\000\000,\000\000\000\000 \000\000\000!\000\001A\011\000\000\000\000\n\000\000\000\000\010\000\000\000\011`\0000\"H\000\000\000\002 \000\000\000\002\000\000\000\002P\000\014\010X\000\000\000\000H\000\000\000\000@\000\000\000R\000\003\002\026\000\000\000\000\020\000\000\000\000\020\000\000\000\024\000\000`F\000\000\000\000\003@\000\000\000\004\000\000\000\0050\000\030\021L\000\000\000\000@\000\000\000\000\000\000\000\000\020\000\006\0047\000\000\000\000\014\000\000\000\000\000\000\000\000\003\000\001A\016@\000\000\000\002\000\000\000\000\000\000\000\000\000@\0000#h\000\000\000\000 \000\000\000\000\000\000\000\000\010\000\014\011\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\002#@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001Aj \000\014Bb\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\003T\000\000\031\0058\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\007+\000\0002\np\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\016Z\000\000d\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030\035<\000\001H) \000\000\000\000\000\000\000\000\000\000\000\000\000 \0000;\010\000\003\020Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000`v0\000\006!\037\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001Am \000\014B8\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\003[@\000\031\004d\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\0079\000\0002\0110\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\016t\000\000d\0250\000\003\021\000\000\000\000\000Aj\000\000\000\000\000\014(\000\000\000\000\001\007(\000\000\000\000\00000\000\000\000\000\004\035 \000\000\000\000\001L\000\000\000\000\000\002u\000\000\000\000\000\005x\000\000\000\000\001\003T\000\000\000\000\000\027(\000\000\000\000\004\016P\000\000\000\000\000[@\000\000\000\000\020:@\000\000\000\000\002g\000\000\000\000\000Kj\000\000\000\000\000\013\000\000\000\000\000\002/(\000\000\000\000\000+\020\000\000\000\000\010= \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000`}`\000\0063@\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001A{`\000\014g\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003x\000\000\031M|\036\035-g#%hl2Y\007`\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\031\006D\000\001H4 \000\000\000\000\000\000a6\000\000\000\000\000\000\000\000\000\000\000\000\000\001\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001C1\000\000\000\010\021\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\006b@\000\000\020\034\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\rF\000\000\000 P\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\033\016\000\000\000@X\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\0306 \000\000\001\002p\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000\"X\000\000\002\001 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000`6@\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001C2 \000\000\010\002\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\006e\000\000\000\030#\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\rK\000\000\0000:\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\033\030\000\000\000a$\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\03064\000\000\001A8\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000lx\000\000\003\005p\000\000\000\000\000\000\000\000\000\000\000\000\000@\000aZ\020\000\000\006\002`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001C4`\000\000\014\010@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\006j@\000\000\030\005\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\rV\000\000\000P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\0330\000\000\001 \010\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\0306h\000\000\002@\010\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000m`\000\000\005\0000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000a[`\000\000\n\004@\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001C7`\000\000\024\010\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\006p\000\000\000(\n\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\rb\000\000\000P,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\033H\000\000\n\007(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000n(\000\000\014\013@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\\`\000\000\030:@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\006s@\000\000`\\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\033\022\000\000\000\000\014\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030\021,\000\000\000\000H\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000\033 \000\000\000\001p\000\000\000\000\000\000\000\000\000\000\000\000\000@\000aXp\000\000\000\005 \000\000\000\000\000\000\000\000\000\000\000\000\001\000\001C1 \000\000\000\r@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\006b\000\000\000\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\rF\000\000\000\000N\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\033\020\000\000\000\0014\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\0307 \000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000 \0000nH\000\000\004\001@\000\000\000\000\000\000\000\000\000\000\000\000\000@\000a] \000\000\010\003@\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001C:`\000\000`\011@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\006v@\000\001@3\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\ro\000\000\003\001&\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\033b\000\000\006\003L\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\0307L\000\000\014\011\030\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000o(\000\000\030\0260\000\000\000\000\000\000\000\000\000\000\000\000\000@\000a^p\000\00004`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001C> \000\000`y@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\006}@\000\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\r|\000\000\003\001F\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\033z\000\000\006\004\014\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\0307|\000\000\014\010\030\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000\032p\000\000\004\002`\000\000\000\000\000\000\000\000\000\000\000\000\000@\000a`\020\000\000\010\005`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001C@@\000\000\020\014\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\007\001@\000\002!C\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\016\004\000\000\004CF\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\034\n\000\000\001\000d\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\0308\030\000\000\002\021P\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000p8\000\000\004\0030\000\000\000\000\000\000\000\000\000\000\000\000\000@\000aa\000\000\000\010\007\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001CB \000\0000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\007\005\000\000\000`\003\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\016\013\000\000\001@6\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\034\030\000\000\003\001l\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\03084\000\000\006\004\020\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000pp\000\000\014\0010\000\000\000\000\000\000\000\000\000\000\000\000\000@\000aap\000\000\030\n`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001CD\000\000\0000%@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\014\005\000\000\000`[\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\016\021\000\000\001AV\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\034$\000\000\003\003l\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\0308L\000\000\006\rX\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000q \000\000\014\0370\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001CE \000\000\023\002\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\007\013\000\000\000&\005\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\016\027\000\000\000L\014\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\0340\000\000\001\030\034\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\0308d\000\000\002 H\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000lH\000\000\000@ \000\000\000\000\000\000\000\000\000\000\000\000\000@\000`E0\000\000\001\002\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001@m\000\000\000\002\007\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\006c@\000\000\004\024\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\rE\000\000\000\0004\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\033\010\000\000\000\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\0306\030\000\000\000\"0\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000l@\000\000\000E@\000\000\000\000\000\000\000\000\000\000\000\000\000@\000ac \000\000\020\000@\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001C:\000\000\000 \002@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\007\r@\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\016\034\000\000\001\000\014\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\034:\000\000\002\000\034\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\0308x\000\000\020\004 \000\000\000\000\000\000\000\000\000\000\000\000\000 \0000qx\000\000 \n@\000\000\000\000\000\000\000\000\000\000\000\000\000@\000ad\000\000\0008\030@\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001CH \000\000pA\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\007\021\000\000\000 \035\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\016#\000\000\000@<\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\034H\000\000\001\000|\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\0309\024\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000r0\000\000\014\0010\000\000\000\000\000\000\000\000\000\000\000\000\000@\000adp\000\000\030\006`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001CJ\000\000\0000\025@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\007\024@\000\000`;\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\016*\000\000\001A\026\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\034V\000\000\003\002l\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\03090\000\000\006\006X\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000rh\000\000\014\0170\000\000\000\000\000\000\000\000\000\000\000\000\000@\000ae`\000\000\030\"`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001CK`\000\0000M@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\007\030\000\000\000a+\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\0161\000\000\001Bv\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\034d\000\000\003\007,\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\0309L\000\000\006\017X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000s \000\000\014\010 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001CM \000\0000e@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\007\033\000\000\000a[\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\034n\000\000\011\000\034\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\0309d\000\000\022\0018\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000sX\000\000$\004p\000\000\000\000\000\000\000\000\000\000\000\000\000@\000agP\000\000H\r`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001CO`\000\001\020#@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\007 @\000\002 W\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\016C\000\000\004AN\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\035\n\000\000\011\003\\\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030:\034\000\000\022\0108\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000tH\000\000$\022p\000\000\000\000\000\000\000\000\000\000\000\000\000@\000ai0\000\000H)`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001CS \000\001\020[@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\007'@\000\002!G\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\016Q\000\000\004C.\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\035&\000\000\011\007\034\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030:T\000\000\022\0178\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000u8\000\000\024\001p\000\000\000\000\000\000\000\000\000\000\000\000\000@\000ak\020\000\000(\007`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001CV`\000\000P\027@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\007.@\000\001 ?\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\016_\000\000\002A\036\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\035B\000\000\005\002|\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030;\014\000\000\n\006x\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000v(\000\000\024\017p\000\000\000\000\000\000\000\000\000\000\000\000\000@\000alp\000\000(#`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001CZ \000\000PO@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\0075@\000\001!/\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\016m\000\000\002B~\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\035^\000\000\005\006<\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030;D\000\000\n\rx\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000w\030\000\000\024\035p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000anP\000\000(?`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\006d@\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\004+\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\006h\000\000\000\0004\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\0306\034\000\000\000\001\030\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000l(\000\000\000\003\020\000\000\000\000\000\000\000\000\000\000\000\000\000@\000aX@\000\000\000\007`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001C1@\000\000\000\022@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\006d\000\000\000\000+\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\016\032\000\000\001\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\0342\000\000\001\000$\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030;\\\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000w@\000\000\004\002 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000ao\020\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001C^@\000\0000-\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\007=@\000\000`z\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\016|\000\000\001C4\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\035z\000\000\003\007h\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030;x\000\000\002\001\030\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000wx\000\000\004\002@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000ap\000\000\000\010\005 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\007<@\000\001\000\022\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\017\001\000\000\000@\\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\036\004\000\000\001\001<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000x\030\000\000\004\004\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001Ca\000\000\000\000\030@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\007B@\000\000\0002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\017\006\000\000\000\000f\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\036\016\000\000\000\001P\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030< \000\000\000\003(\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000xH\000\000\000\006`\000\000\000\000\000\000\000\000\000\000\000\000\000@\000aq \000\000\000\r`\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001Cb`\000\000\000\034\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\007F\000\000\000 *\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\017\r\000\000\000@V\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\036\034\000\000\000\001d\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030<<\000\000\002\002`\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000y\000\000\000\004\005P\000\000\000\000\000\000\000\000\000\000\000\000\000@\000ar\020\000\000\010\010@\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001@k@\000\000\020\021\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\007I\000\000\000 #\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\017\023\000\000\000@H\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\033H\000\000\001\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030`\014\000\000w@\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0001@ \000\001y@\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000c\000`\000\003r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001?, \000\006|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\014\004\000\000\rx\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\025\017\000\000\036\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\0141f\000\000= \000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030`$\000\000z@\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0001@X\000\001n@\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000c\001@\000\003]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001F\003 \000\007:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\003w@\000\016p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\007n\000\000\035X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\014\017`\000\000; \000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030`<\000\000z \000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0001A\010\000\001k@\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000c\002 \000\003W\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001F\005\000\000\007,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\014\n@\000\016X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\030\027\000\000\036@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\01402\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030a,\000\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0001B`\000\001r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000be@\000\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001EK \000\007\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\013\027@\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\030.\000\000\034`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\0140^\000\00090\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030 \000\000\000r@\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0001C\000\000\001d@\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000`2P\000\003H\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001@e`\000\007\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\014\031\000\000\016\034\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\0304\000\000\036\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\0140l\000\0008`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\030a`\000\000q \000\000\000\000\000\000\000\000\000\000\000\000\000\000 \0000BH\000\001b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000c\007 \000\003C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001F\017\000\000\007\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\003\014 \000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\006\030D\000\000\033x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0141\n\000\0007p\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\010\000\0141\034\000\000c\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000(\000\000\000\000\000\000\014a\016\000\000f\014\020\000\0060{\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030k8\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Laj^4$4s\033;n`\000\n\000\005@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000f\022`\000\0061\026\000\0003\011@\000\003\030L\000\000\031Dh\000\001L&@\000\014b8\000\000f\023@\000\0061\036\000\0003\011p\000\003\030P\000\000\031E\000\000\001L(@\000\014bD\000\000f\024@\000\0061$\000\0003\n0\000\003\030S\000\000\031E \000\001L*\000\000\014bT\000\000f\025 \000\0061,\000\0003\n`\000\003\030W\000\000\031E8\000\001L,\000\000\014b`\000\000f\026 \000\00612\000\0003\013 \000\003\030Z\000\000\031EX\000\001L-@\000\014bp\000\000f\027\000\000\0061:\000\0003\013P\000\003\030^\000\000\031Ep\000\001L/@\000\014b|\000\000f\030\000\000\0061@\000\0003\014\020\000\003\030a\000\000\031F\020\000\001L1\000\000\014c\014\000\000f\030`\000\0061H\000\0003\014@\000\003\030e\000\000\031F(\000\001L3\000\000\014c\030\000\000f\031`\000\0061N\000\0003\r\000\000\003\030h\000\000\031FH\000\001L4@\000\014c(\000\000f\032@\000\0061V\000\0003\r0\000\003\030l\000\000\031F`\000\001L6@\000\014c4\000\000f\033@\000\0061\\\000\0003\rp\000\003\030o\000\000\031G\000\000\001L8\000\000\014cD\000\000f\034 \000\0061d\000\0003\016 \000\003\030s\000\000\031G\030\000\001L:\000\000\014cP\000\000f\035 \000\0061j\000\0003\016`\000\003\030v\000\000\031G8\000\001L;@\000\014c`\000\000f\036\000\000\0061r\000\0003\017\020\000\003\030z\000\000\031GP\000\001L=@\000\014cl\000\000f\037\000\000\0061x\000\0003\017P\000\003\030}\000\000\031Gp\000\001L?\000\000\014c|\000\000f\037`\000\0062\000\000\0003\020\000\000\003\031\001\000\000\031H\010\000\001LA\000\000\014d\010\000\000f `\000\0062\006\000\0003\020@\000\003\031\004\000\000\031H(\000\001LB@\000\014d\030\000\000f!@\000\0062\016\000\0003\020p\000\003\031\010\000\000\031H@\000\001LD@\000\014d$\000\000f\"@\000\0062\024\000\0003\0210\000\003\031\013\000\000\031H`\000\001LF\000\000\014d4\000\000f# \000\0062\034\000\0003\021`\000\003\031\017\000\000\031Hx\000\001LH\000\000\014d@\000\000f$ \000\0062\"\000\0003\022 \000\003\031\022\000\000\031I\030\000\001LI@\000\014dP\000\000f%\000\000\0062*\000\0003\022P\000\003\031\026\000\000\031I0\000\001LK@\000\014d\\\000\000f&\000\000\00620\000\0003\023\020\000\003\031\031\000\000\031IP\000\001LM\000\000\014dl\000\000f&`\000\00628\000\0003\023@\000\003\031\035\000\000\031Ih\000\001LO\000\000\014dx\000\000f'`\000\0062>\000\0003\024\000\000\003\031 \000\000\031J\010\000\001LP@\000\014e\010\000\000f(@\000\0062F\000\0003\0240\000\003\031$\000\000\031J \000\001LR@\000\014e\024\000\000f)@\000\0062L\000\0003\024p\000\003\031'\000\000\031J@\000\001LT\000\000\014e$\000\000f* \000\0062T\000\0003\025 \000\003\031+\000\000\031JX\000\001LV\000\000\014e0\000\000f+ \000\0062Z\000\0003\025`\000\003\031.\000\000\031Jx\000\001LW@\000\014e@\000\000f,\000\000\0062b\000\0003\026\020\000\003\0312\000\000\031K\020\000\001LY@\000\014eL\000\000f-\000\000\0062h\000\0003\026P\000\003\0315\000\000\031K0\000\001L[\000\000\014e\\\000\000f-`\000\0062p\000\0003\027\000\000\003\0319\000\000\031KH\000\001L]\000\000\014eh\000\000f.`\000\0062v\000\0003\027@\000\003\031<\000\000\031Kh\000\001L^@\000\014ex\000\000f/@\000\0062~\000\0003\027p\000\003\031@\000\000\031L\000\000\001L`@\000\014f\004\000\000f0@\000\0063\004\000\0003\0300\000\003\031C\000\000\031L \000\001Lb\000\000\014f\024\000\000f1 \000\0063\014\000\0003\030`\000\003\031G\000\000\031L8\000\001Ld\000\000\014f \000\000f2 \000\0063\022\000\0003\031 \000\003\031J\004\nM\006I$@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001BX \000\013p\014\000\000_\000`\000\005x\006\000\000/@0\000\002|\003\000\000\027`\030\000\001>\001@\000\013p\014\000\000_\000a~\177?_ow{}~\177?_ow{|\000\000",0xac6); + private static final int[] _data5 = decodeData("\000\000\000\004\000\000\000\000 \035l \000\001n\000\000\000\000\000\000\000\020\000\000\000\001\004\000\000\000\000\000\000\000\000\005\177`\000\000\000\000\000\000\000\177p\000\000\000\000\000\000\000@\022\000\000\000\000\000\000\000\000\000:\000\000\000\003T\000\000\000\035\020\000\000\001g\000\000\0003CP\000\003\020j\007\023\010\000\000\000\000\000\000'\177\177\177\177\177\177\177\177|\000\006/\004\000\000\000\000\000?|H?5\"\020Z\030_~$\037ZQ\010-\014\037F~!r\020\000:g\007\177\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\001\177p\000\000\000\000\000\000\002\177p\000\000\000\000\000\000\000?H+'.\031\0134\021\037j/4Y\021l\ruOv\020k\032AP\036T'{:\027\033E&\010\rc~\011\022$I\000\020?y\177*U*U*U(6\177\"Z\021\005FS0^?VwEU\026{{\032\037lv\017\025=i\0326OwG\016\033|#\013\034'|Lf3\031L:xC\177@\000\000\000\000\000\000\001\177`\000\000\000\000\000\000\000\177p\000\000\000\000\000\000\001\177x\000\000\000\000\000\000\000#{\177\177\177\000\000\000\000\017|\000\000\000\000\000\000\000\030~\177\177\177`\000\000\000\007\177@\000\000\000\000\000\000\002\000\022!}U\010Bh`\177y\020~jD!40?\001\017<\020own\011\037R=~\003T\0032D\017tH\021\"jhGNg|N\005*\016D\021\nS~S,\022\001zmwi\177\nU*U*U*T\1773\\16\022tJ\004?s\001MA\\4\002Y \000\005.,q3\nd\020\0003Q\0349\n\026Rg\177\000\000\000\000\000\000\000\003dFL&\031E\013@9\177@\000\000\000\000\000\000\000\177y\020~jD!40\017K./\032\024+N:gl8wFWX\177OSy(\003 \014p,\035)~\002\021\010D\"\017E\030\177E*U*U*U\022?p\000\000\000\000\000\000\000\037|\000\000\000\000\000\000\000/~\000\000\000\000\000\000\000\007~I\007vT\"\013#\003d\006L&\031E\013@={fuevl\005\033L~\024?\"\024\003>>9) { - case 0x80: run_10000(); break; - case 0x81: run_10200(); break; - case 0x82: run_10400(); break; - case 0x83: run_10600(); break; - case 0x84: run_10800(); break; - case 0x85: run_10a00(); break; - case 0x86: run_10c00(); break; - case 0x87: run_10e00(); break; - case 0x88: run_11000(); break; - case 0x89: run_11200(); break; - case 0x8a: run_11400(); break; - case 0x8b: run_11600(); break; - case 0x8c: run_11800(); break; - case 0x8d: run_11a00(); break; - case 0x8e: run_11c00(); break; - case 0x8f: run_11e00(); break; - case 0x90: run_12000(); break; - case 0x91: run_12200(); break; - case 0x92: run_12400(); break; - case 0x93: run_12600(); break; - case 0x94: run_12800(); break; - case 0x95: run_12a00(); break; - case 0x96: run_12c00(); break; - case 0x97: run_12e00(); break; - case 0x98: run_13000(); break; - case 0x99: run_13200(); break; - case 0x9a: run_13400(); break; - case 0x9b: run_13600(); break; - case 0x9c: run_13800(); break; - case 0x9d: run_13a00(); break; - case 0x9e: run_13c00(); break; - case 0x9f: run_13e00(); break; - case 0xa0: run_14000(); break; - case 0xa1: run_14200(); break; - case 0xa2: run_14400(); break; - case 0xa3: run_14600(); break; - case 0xa4: run_14800(); break; - case 0xa5: run_14a00(); break; - case 0xa6: run_14c00(); break; - case 0xa7: run_14e00(); break; - case 0xa8: run_15000(); break; - case 0xa9: run_15200(); break; - case 0xaa: run_15400(); break; - case 0xab: run_15600(); break; - case 0xac: run_15800(); break; - case 0xad: run_15a00(); break; - case 0xae: run_15c00(); break; - case 0xaf: run_15e00(); break; - case 0xb0: run_16000(); break; - case 0xb1: run_16200(); break; - case 0xb2: run_16400(); break; - case 0xb3: run_16600(); break; - case 0xb4: run_16800(); break; - case 0xb5: run_16a00(); break; - case 0xb6: run_16c00(); break; - case 0xb7: run_16e00(); break; - case 0xb8: run_17000(); break; - case 0xb9: run_17200(); break; - case 0xba: run_17400(); break; - case 0xbb: run_17600(); break; - case 0xbc: run_17800(); break; - case 0xbd: run_17a00(); break; - case 0xbe: run_17c00(); break; - case 0xbf: run_17e00(); break; - case 0xc0: run_18000(); break; - case 0xc1: run_18200(); break; - case 0xc2: run_18400(); break; - case 0xc3: run_18600(); break; - case 0xc4: run_18800(); break; - case 0xc5: run_18a00(); break; - case 0xc6: run_18c00(); break; - case 0xc7: run_18e00(); break; - case 0xc8: run_19000(); break; - case 0xc9: run_19200(); break; - case 0xca: run_19400(); break; - case 0xcb: run_19600(); break; - case 0xcc: run_19800(); break; - case 0xcd: run_19a00(); break; - case 0xce: run_19c00(); break; - case 0xcf: run_19e00(); break; - case 0xd0: run_1a000(); break; - case 0xd1: run_1a200(); break; - case 0xd2: run_1a400(); break; - case 0xd3: run_1a600(); break; - case 0xd4: run_1a800(); break; - case 0xd5: run_1aa00(); break; - case 0xd6: run_1ac00(); break; - case 0xd7: run_1ae00(); break; - case 0xd8: run_1b000(); break; - case 0xd9: run_1b200(); break; - case 0xda: run_1b400(); break; - case 0xdb: run_1b600(); break; - case 0xdc: run_1b800(); break; - case 0xdd: run_1ba00(); break; - case 0xde: run_1bc00(); break; - case 0xdf: run_1be00(); break; - case 0xe0: run_1c000(); break; - case 0xe1: run_1c200(); break; - case 0xe2: run_1c400(); break; - case 0xe3: run_1c600(); break; - case 0xe4: run_1c800(); break; - case 0xe5: run_1ca00(); break; - case 0xe6: run_1cc00(); break; - case 0xe7: run_1ce00(); break; - case 0xe8: run_1d000(); break; - case 0xe9: run_1d200(); break; - case 0xea: run_1d400(); break; - case 0xeb: run_1d600(); break; - case 0xec: run_1d800(); break; - case 0xed: run_1da00(); break; - case 0xee: run_1dc00(); break; - case 0xef: run_1de00(); break; - case 0xf0: run_1e000(); break; - case 0xf1: run_1e200(); break; - case 0xf2: run_1e400(); break; - case 0xf3: run_1e600(); break; - case 0xf4: run_1e800(); break; - case 0xf5: run_1ea00(); break; - case 0xf6: run_1ec00(); break; - case 0xf7: run_1ee00(); break; - case 0xf8: run_1f000(); break; - case 0xf9: run_1f200(); break; - case 0xfa: run_1f400(); break; - case 0xfb: run_1f600(); break; - case 0xfc: run_1f800(); break; - case 0xfd: run_1fa00(); break; - case 0xfe: run_1fc00(); break; - case 0xff: run_1fe00(); break; - case 0x100: run_20000(); break; - case 0x101: run_20200(); break; - case 0x102: run_20400(); break; - case 0x103: run_20600(); break; - case 0x104: run_20800(); break; - case 0x105: run_20a00(); break; - case 0x106: run_20c00(); break; - case 0x107: run_20e00(); break; - case 0x108: run_21000(); break; - case 0x109: run_21200(); break; - case 0x10a: run_21400(); break; - case 0x10b: run_21600(); break; - case 0x10c: run_21800(); break; - case 0x10d: run_21a00(); break; - case 0x10e: run_21c00(); break; - case 0x10f: run_21e00(); break; - case 0x110: run_22000(); break; - case 0x111: run_22200(); break; - case 0x112: run_22400(); break; - case 0x113: run_22600(); break; - case 0x114: run_22800(); break; - case 0x115: run_22a00(); break; - case 0x116: run_22c00(); break; - case 0x117: run_22e00(); break; - case 0x118: run_23000(); break; - case 0x119: run_23200(); break; - case 0x11a: run_23400(); break; - case 0x11b: run_23600(); break; - case 0x11c: run_23800(); break; - case 0x11d: run_23a00(); break; - case 0x11e: run_23c00(); break; - case 0x11f: run_23e00(); break; - case 0x120: run_24000(); break; - case 0x121: run_24200(); break; - case 0x122: run_24400(); break; - case 0x123: run_24600(); break; - case 0x124: run_24800(); break; - case 0x125: run_24a00(); break; - case 0x126: run_24c00(); break; - case 0x127: run_24e00(); break; - case 0x128: run_25000(); break; - case 0x129: run_25200(); break; - case 0x12a: run_25400(); break; - case 0x12b: run_25600(); break; - case 0x12c: run_25800(); break; - case 0x12d: run_25a00(); break; - case 0x12e: run_25c00(); break; - case 0x12f: run_25e00(); break; - case 0x130: run_26000(); break; - case 0x131: run_26200(); break; - case 0x132: run_26400(); break; - case 0x133: run_26600(); break; - case 0x134: run_26800(); break; - case 0x135: run_26a00(); break; - case 0x136: run_26c00(); break; - case 0x137: run_26e00(); break; - case 0x138: run_27000(); break; - case 0x139: run_27200(); break; - case 0x13a: run_27400(); break; - case 0x13b: run_27600(); break; - case 0x13c: run_27800(); break; - case 0x13d: run_27a00(); break; - case 0x13e: run_27c00(); break; - case 0x13f: run_27e00(); break; - case 0x140: run_28000(); break; - case 0x141: run_28200(); break; - case 0x142: run_28400(); break; - case 0x143: run_28600(); break; - case 0x144: run_28800(); break; - case 0x145: run_28a00(); break; - case 0x146: run_28c00(); break; - case 0x147: run_28e00(); break; - case 0x148: run_29000(); break; - case 0x149: run_29200(); break; - case 0x14a: run_29400(); break; - case 0x14b: run_29600(); break; - case 0x14c: run_29800(); break; - case 0x14d: run_29a00(); break; - case 0x14e: run_29c00(); break; - case 0x14f: run_29e00(); break; - case 0x150: run_2a000(); break; - case 0x151: run_2a200(); break; - case 0x152: run_2a400(); break; - case 0x153: run_2a600(); break; - case 0x154: run_2a800(); break; - case 0x155: run_2aa00(); break; - case 0x156: run_2ac00(); break; - case 0x157: run_2ae00(); break; - case 0x158: run_2b000(); break; - case 0x159: run_2b200(); break; - case 0x15a: run_2b400(); break; - case 0x15b: run_2b600(); break; - case 0x15c: run_2b800(); break; - case 0x15d: run_2ba00(); break; - case 0x15e: run_2bc00(); break; - case 0x15f: run_2be00(); break; - case 0x160: run_2c000(); break; - case 0x161: run_2c200(); break; - case 0x162: run_2c400(); break; - case 0x163: run_2c600(); break; - case 0x164: run_2c800(); break; - case 0x165: run_2ca00(); break; - case 0x166: run_2cc00(); break; - case 0x167: run_2ce00(); break; - case 0x168: run_2d000(); break; - case 0x169: run_2d200(); break; - case 0x16a: run_2d400(); break; - case 0x16b: run_2d600(); break; - case 0x16c: run_2d800(); break; - case 0x16d: run_2da00(); break; - case 0x16e: run_2dc00(); break; - case 0x16f: run_2de00(); break; - case 0x170: run_2e000(); break; - case 0x171: run_2e200(); break; - case 0x172: run_2e400(); break; - case 0x173: run_2e600(); break; - case 0x174: run_2e800(); break; - case 0x175: run_2ea00(); break; - case 0x176: run_2ec00(); break; - case 0x177: run_2ee00(); break; - case 0x178: run_2f000(); break; - case 0x179: run_2f200(); break; - case 0x17a: run_2f400(); break; - case 0x17b: run_2f600(); break; - case 0x17c: run_2f800(); break; - case 0x17d: run_2fa00(); break; - case 0x17e: run_2fc00(); break; - case 0x17f: run_2fe00(); break; - case 0x180: run_30000(); break; - case 0x181: run_30200(); break; - case 0x182: run_30400(); break; - case 0x183: run_30600(); break; - case 0x184: run_30800(); break; - case 0x185: run_30a00(); break; - case 0x186: run_30c00(); break; - case 0x187: run_30e00(); break; - case 0x188: run_31000(); break; - case 0x189: run_31200(); break; - case 0x18a: run_31400(); break; - case 0x18b: run_31600(); break; - case 0x18c: run_31800(); break; - case 0x18d: run_31a00(); break; - case 0x18e: run_31c00(); break; - case 0x18f: run_31e00(); break; - case 0x190: run_32000(); break; - case 0x191: run_32200(); break; - case 0x192: run_32400(); break; - case 0x193: run_32600(); break; - case 0x194: run_32800(); break; - case 0x195: run_32a00(); break; - case 0x196: run_32c00(); break; - case 0x197: run_32e00(); break; - case 0x198: run_33000(); break; - case 0x199: run_33200(); break; - case 0x19a: run_33400(); break; - case 0x19b: run_33600(); break; - case 0x19c: run_33800(); break; - case 0x19d: run_33a00(); break; - case 0x19e: run_33c00(); break; - case 0x19f: run_33e00(); break; - case 0x1a0: run_34000(); break; - case 0x1a1: run_34200(); break; - case 0x1a2: run_34400(); break; - case 0x1a3: run_34600(); break; - case 0x1a4: run_34800(); break; - case 0x1a5: run_34a00(); break; - case 0x1a6: run_34c00(); break; - case 0x1a7: run_34e00(); break; - case 0x1a8: run_35000(); break; - case 0x1a9: run_35200(); break; - case 0x1aa: run_35400(); break; - case 0x1ab: run_35600(); break; - case 0x1ac: run_35800(); break; - case 0x1ad: run_35a00(); break; - case 0x1ae: run_35c00(); break; - case 0x1af: run_35e00(); break; - case 0x1b0: run_36000(); break; - case 0x1b1: run_36200(); break; - case 0x1b2: run_36400(); break; - case 0x1b3: run_36600(); break; - case 0x1b4: run_36800(); break; - case 0x1b5: run_36a00(); break; - case 0x1b6: run_36c00(); break; - case 0x1b7: run_36e00(); break; - case 0x1b8: run_37000(); break; - case 0x1b9: run_37200(); break; - case 0x1ba: run_37400(); break; - case 0x1bb: run_37600(); break; - case 0x1bc: run_37800(); break; - case 0x1bd: run_37a00(); break; - case 0x1be: run_37c00(); break; - case 0x1bf: run_37e00(); break; - case 0x1c0: run_38000(); break; - case 0x1c1: run_38200(); break; - case 0x1c2: run_38400(); break; - case 0x1c3: run_38600(); break; - case 0x1c4: run_38800(); break; - case 0x1c5: run_38a00(); break; - case 0x1c6: run_38c00(); break; - case 0x1c7: run_38e00(); break; - case 0x1c8: run_39000(); break; - case 0x1c9: run_39200(); break; - case 0x1ca: run_39400(); break; - case 0x1cb: run_39600(); break; - case 0x1cc: run_39800(); break; - case 0x1cd: run_39a00(); break; - case 0x1ce: run_39c00(); break; - case 0x1cf: run_39e00(); break; - case 0x1d0: run_3a000(); break; - case 0x1d1: run_3a200(); break; - case 0x1d2: run_3a400(); break; - case 0x1d3: run_3a600(); break; - case 0x1d4: run_3a800(); break; - case 0x1d5: run_3aa00(); break; - case 0x1d6: run_3ac00(); break; - case 0x1d7: run_3ae00(); break; - case 0x1d8: run_3b000(); break; - case 0x1d9: run_3b200(); break; - case 0x1da: run_3b400(); break; - case 0x1db: run_3b600(); break; - case 0x1dc: run_3b800(); break; - case 0x1dd: run_3ba00(); break; - case 0x1de: run_3bc00(); break; - case 0x1df: run_3be00(); break; - case 0x1e0: run_3c000(); break; - case 0x1e1: run_3c200(); break; - case 0x1e2: run_3c400(); break; - case 0x1e3: run_3c600(); break; - case 0x1e4: run_3c800(); break; - case 0x1e5: run_3ca00(); break; - case 0x1e6: run_3cc00(); break; - case 0x1e7: run_3ce00(); break; - case 0x1e8: run_3d000(); break; - case 0x1e9: run_3d200(); break; - case 0x1ea: run_3d400(); break; - case 0x1eb: run_3d600(); break; - case 0x1ec: run_3d800(); break; - case 0x1ed: run_3da00(); break; - case 0x1ee: run_3dc00(); break; - case 0x1ef: run_3de00(); break; - case 0x1f0: run_3e000(); break; - case 0x1f1: run_3e200(); break; - case 0x1f2: run_3e400(); break; - case 0x1f3: run_3e600(); break; - case 0x1f4: run_3e800(); break; - case 0x1f5: run_3ea00(); break; - case 0x1f6: run_3ec00(); break; - case 0x1f7: run_3ee00(); break; - case 0x1f8: run_3f000(); break; - case 0x1f9: run_3f200(); break; - case 0x1fa: run_3f400(); break; - case 0x1fb: run_3f600(); break; - case 0x1fc: run_3f800(); break; - case 0x1fd: run_3fa00(); break; - case 0x1fe: run_3fc00(); break; - case 0x1ff: run_3fe00(); break; - case 0x200: run_40000(); break; - case 0x201: run_40200(); break; - case 0x202: run_40400(); break; - case 0x203: run_40600(); break; - case 0x204: run_40800(); break; - case 0x205: run_40a00(); break; - case 0x206: run_40c00(); break; - case 0x207: run_40e00(); break; - case 0x208: run_41000(); break; - case 0x209: run_41200(); break; - case 0x20a: run_41400(); break; - case 0x20b: run_41600(); break; - case 0x20c: run_41800(); break; - case 0x20d: run_41a00(); break; - case 0x20e: run_41c00(); break; - case 0x20f: run_41e00(); break; - case 0x210: run_42000(); break; - case 0x211: run_42200(); break; - case 0x212: run_42400(); break; - case 0x213: run_42600(); break; - case 0x214: run_42800(); break; - case 0x215: run_42a00(); break; - case 0x216: run_42c00(); break; - case 0x217: run_42e00(); break; - case 0x218: run_43000(); break; - case 0x219: run_43200(); break; - case 0x21a: run_43400(); break; - case 0x21b: run_43600(); break; - case 0x21c: run_43800(); break; - case 0x21d: run_43a00(); break; - case 0x21e: run_43c00(); break; - case 0x21f: run_43e00(); break; - case 0x220: run_44000(); break; - case 0x221: run_44200(); break; - case 0x222: run_44400(); break; - case 0x223: run_44600(); break; - case 0x224: run_44800(); break; - case 0x225: run_44a00(); break; - case 0x226: run_44c00(); break; - case 0x227: run_44e00(); break; - case 0x228: run_45000(); break; - case 0x229: run_45200(); break; - case 0x22a: run_45400(); break; - case 0x22b: run_45600(); break; - case 0x22c: run_45800(); break; - case 0x22d: run_45a00(); break; - case 0x22e: run_45c00(); break; - case 0x22f: run_45e00(); break; - case 0x230: run_46000(); break; - case 0x231: run_46200(); break; - case 0x232: run_46400(); break; - case 0x233: run_46600(); break; - case 0x234: run_46800(); break; - case 0x235: run_46a00(); break; - case 0x236: run_46c00(); break; - case 0x237: run_46e00(); break; - case 0x238: run_47000(); break; - case 0x239: run_47200(); break; - case 0x23a: run_47400(); break; - case 0x23b: run_47600(); break; - case 0x23c: run_47800(); break; - case 0x23d: run_47a00(); break; - case 0x23e: run_47c00(); break; - case 0x23f: run_47e00(); break; - case 0x240: run_48000(); break; - case 0x241: run_48200(); break; - case 0x242: run_48400(); break; - case 0x243: run_48600(); break; - case 0x244: run_48800(); break; - case 0x245: run_48a00(); break; - case 0x246: run_48c00(); break; - case 0x247: run_48e00(); break; - case 0x248: run_49000(); break; - case 0x249: run_49200(); break; - case 0x24a: run_49400(); break; - case 0x24b: run_49600(); break; - case 0x24c: run_49800(); break; - case 0x24d: run_49a00(); break; - case 0x24e: run_49c00(); break; - case 0x24f: run_49e00(); break; - case 0x250: run_4a000(); break; - case 0x251: run_4a200(); break; - case 0x252: run_4a400(); break; - case 0x253: run_4a600(); break; - case 0x254: run_4a800(); break; - case 0x255: run_4aa00(); break; - case 0x256: run_4ac00(); break; - case 0x257: run_4ae00(); break; - case 0x258: run_4b000(); break; - case 0x259: run_4b200(); break; - case 0x25a: run_4b400(); break; - case 0x25b: run_4b600(); break; - case 0x25c: run_4b800(); break; - case 0x25d: run_4ba00(); break; - case 0x25e: run_4bc00(); break; - case 0x25f: run_4be00(); break; - case 0x260: run_4c000(); break; - case 0x261: run_4c200(); break; - case 0x262: run_4c400(); break; - case 0x263: run_4c600(); break; - case 0x264: run_4c800(); break; - case 0x265: run_4ca00(); break; - case 0x266: run_4cc00(); break; - case 0x267: run_4ce00(); break; - case 0x268: run_4d000(); break; - case 0x269: run_4d200(); break; - case 0x26a: run_4d400(); break; - case 0x26b: run_4d600(); break; - case 0x26c: run_4d800(); break; - case 0x26d: run_4da00(); break; - case 0x26e: run_4dc00(); break; - case 0x26f: run_4de00(); break; - case 0x270: run_4e000(); break; - case 0x271: run_4e200(); break; - case 0x272: run_4e400(); break; - case 0x273: run_4e600(); break; - case 0x274: run_4e800(); break; - case 0x275: run_4ea00(); break; - case 0x276: run_4ec00(); break; - case 0x277: run_4ee00(); break; - case 0x278: run_4f000(); break; - case 0x279: run_4f200(); break; - case 0x27a: run_4f400(); break; - case 0x27b: run_4f600(); break; - case 0x27c: run_4f800(); break; - case 0x27d: run_4fa00(); break; - case 0x27e: run_4fc00(); break; - case 0x27f: run_4fe00(); break; - case 0x280: run_50000(); break; - case 0x281: run_50200(); break; - case 0x282: run_50400(); break; - case 0x283: run_50600(); break; - case 0x284: run_50800(); break; - case 0x285: run_50a00(); break; - case 0x286: run_50c00(); break; - case 0x287: run_50e00(); break; - case 0x288: run_51000(); break; - case 0x289: run_51200(); break; - case 0x28a: run_51400(); break; - case 0x28b: run_51600(); break; - case 0x28c: run_51800(); break; - case 0x28d: run_51a00(); break; - case 0x28e: run_51c00(); break; - case 0x28f: run_51e00(); break; - case 0x290: run_52000(); break; - case 0x291: run_52200(); break; - case 0x292: run_52400(); break; - case 0x293: run_52600(); break; - case 0x294: run_52800(); break; - case 0x295: run_52a00(); break; - case 0x296: run_52c00(); break; - case 0x297: run_52e00(); break; - case 0x298: run_53000(); break; - case 0x299: run_53200(); break; - case 0x29a: run_53400(); break; - case 0x29b: run_53600(); break; - case 0x29c: run_53800(); break; - case 0x29d: run_53a00(); break; - case 0x29e: run_53c00(); break; - case 0x29f: run_53e00(); break; - case 0x2a0: run_54000(); break; - case 0x2a1: run_54200(); break; - case 0x2a2: run_54400(); break; - case 0x2a3: run_54600(); break; - case 0x2a4: run_54800(); break; - case 0x2a5: run_54a00(); break; - case 0x2a6: run_54c00(); break; - case 0x2a7: run_54e00(); break; - case 0x2a8: run_55000(); break; - case 0x2a9: run_55200(); break; - case 0x2aa: run_55400(); break; - case 0x2ab: run_55600(); break; - case 0x2ac: run_55800(); break; - case 0x2ad: run_55a00(); break; - case 0x2ae: run_55c00(); break; - case 0x2af: run_55e00(); break; - case 0x2b0: run_56000(); break; - case 0x2b1: run_56200(); break; - case 0x2b2: run_56400(); break; - case 0x2b3: run_56600(); break; - case 0x2b4: run_56800(); break; - case 0x2b5: run_56a00(); break; - case 0x2b6: run_56c00(); break; - case 0x2b7: run_56e00(); break; - case 0x2b8: run_57000(); break; - case 0x2b9: run_57200(); break; - case 0x2ba: run_57400(); break; - case 0x2bb: run_57600(); break; - case 0x2bc: run_57800(); break; - case 0x2bd: run_57a00(); break; - case 0x2be: run_57c00(); break; - case 0x2bf: run_57e00(); break; - case 0x2c0: run_58000(); break; - case 0x2c1: run_58200(); break; - case 0x2c2: run_58400(); break; - case 0x2c3: run_58600(); break; - case 0x2c4: run_58800(); break; - case 0x2c5: run_58a00(); break; - case 0x2c6: run_58c00(); break; - case 0x2c7: run_58e00(); break; - case 0x2c8: run_59000(); break; - case 0x2c9: run_59200(); break; - case 0x2ca: run_59400(); break; - case 0x2cb: run_59600(); break; - case 0x2cc: run_59800(); break; - case 0x2cd: run_59a00(); break; - case 0x2ce: run_59c00(); break; - case 0x2cf: run_59e00(); break; - case 0x2d0: run_5a000(); break; - case 0x2d1: run_5a200(); break; - case 0x2d2: run_5a400(); break; - case 0x2d3: run_5a600(); break; - case 0x2d4: run_5a800(); break; - case 0x2d5: run_5aa00(); break; - case 0x2d6: run_5ac00(); break; - case 0x2d7: run_5ae00(); break; - case 0x2d8: run_5b000(); break; - case 0x2d9: run_5b200(); break; - case 0x2da: run_5b400(); break; - case 0x2db: run_5b600(); break; - case 0x2dc: run_5b800(); break; - case 0x2dd: run_5ba00(); break; - case 0x2de: run_5bc00(); break; - case 0x2df: run_5be00(); break; - case 0x2e0: run_5c000(); break; - case 0x2e1: run_5c200(); break; - case 0x2e2: run_5c400(); break; - case 0x2e3: run_5c600(); break; - case 0x2e4: run_5c800(); break; - case 0x2e5: run_5ca00(); break; - case 0x2e6: run_5cc00(); break; - case 0x2e7: run_5ce00(); break; - case 0x2e8: run_5d000(); break; - case 0x2e9: run_5d200(); break; - case 0x2ea: run_5d400(); break; - case 0x2eb: run_5d600(); break; - case 0x2ec: run_5d800(); break; - case 0x2ed: run_5da00(); break; - case 0x2ee: run_5dc00(); break; - case 0x2ef: run_5de00(); break; - case 0x2f0: run_5e000(); break; - case 0x2f1: run_5e200(); break; - case 0x2f2: run_5e400(); break; - case 0x2f3: run_5e600(); break; - case 0x2f4: run_5e800(); break; - case 0x2f5: run_5ea00(); break; - case 0x2f6: run_5ec00(); break; - case 0x2f7: run_5ee00(); break; - case 0x2f8: run_5f000(); break; - case 0x2f9: run_5f200(); break; - case 0x2fa: run_5f400(); break; - case 0x2fb: run_5f600(); break; - case 0x2fc: run_5f800(); break; - case 0x2fd: run_5fa00(); break; - case 0x2fe: run_5fc00(); break; - case 0x2ff: run_5fe00(); break; - case 0x300: run_60000(); break; - case 0x301: run_60200(); break; - case 0x302: run_60400(); break; - case 0x303: run_60600(); break; - case 0x304: run_60800(); break; - case 0x305: run_60a00(); break; - case 0x306: run_60c00(); break; - case 0x307: run_60e00(); break; - case 0x308: run_61000(); break; - case 0x309: run_61200(); break; - case 0x30a: run_61400(); break; - case 0x30b: run_61600(); break; - case 0x30c: run_61800(); break; - case 0x30d: run_61a00(); break; - case 0x30e: run_61c00(); break; - case 0x30f: run_61e00(); break; - case 0x310: run_62000(); break; - case 0x311: run_62200(); break; - case 0x312: run_62400(); break; - case 0x313: run_62600(); break; - case 0x314: run_62800(); break; - case 0x315: run_62a00(); break; - case 0x316: run_62c00(); break; - case 0x317: run_62e00(); break; - case 0x318: run_63000(); break; - case 0x319: run_63200(); break; - case 0x31a: run_63400(); break; - case 0x31b: run_63600(); break; - case 0x31c: run_63800(); break; - case 0x31d: run_63a00(); break; - case 0x31e: run_63c00(); break; - case 0x31f: run_63e00(); break; - case 0x320: run_64000(); break; - case 0x321: run_64200(); break; - case 0x322: run_64400(); break; - case 0x323: run_64600(); break; - case 0x324: run_64800(); break; - case 0x325: run_64a00(); break; - case 0x326: run_64c00(); break; - case 0x327: run_64e00(); break; - case 0x328: run_65000(); break; - case 0x329: run_65200(); break; - case 0x32a: run_65400(); break; - case 0x32b: run_65600(); break; - case 0x32c: run_65800(); break; - case 0x32d: run_65a00(); break; - case 0x32e: run_65c00(); break; - case 0x32f: run_65e00(); break; - case 0x330: run_66000(); break; - case 0x331: run_66200(); break; - case 0x332: run_66400(); break; - case 0x333: run_66600(); break; - case 0x334: run_66800(); break; - case 0x335: run_66a00(); break; - case 0x336: run_66c00(); break; - case 0x337: run_66e00(); break; - case 0x338: run_67000(); break; - case 0x339: run_67200(); break; - case 0x33a: run_67400(); break; - case 0x33b: run_67600(); break; - case 0x33c: run_67800(); break; - case 0x33d: run_67a00(); break; - case 0x33e: run_67c00(); break; - case 0x33f: run_67e00(); break; - case 0x340: run_68000(); break; - case 0x341: run_68200(); break; - case 0x342: run_68400(); break; - case 0x343: run_68600(); break; - case 0x344: run_68800(); break; - case 0x345: run_68a00(); break; - case 0x346: run_68c00(); break; - case 0x347: run_68e00(); break; - case 0x348: run_69000(); break; - case 0x349: run_69200(); break; - case 0x34a: run_69400(); break; - case 0x34b: run_69600(); break; - case 0x34c: run_69800(); break; - case 0x34d: run_69a00(); break; - case 0x34e: run_69c00(); break; - case 0x34f: run_69e00(); break; - case 0x350: run_6a000(); break; - case 0x351: run_6a200(); break; - case 0x352: run_6a400(); break; - case 0x353: run_6a600(); break; - case 0x354: run_6a800(); break; - case 0x355: run_6aa00(); break; - case 0x356: run_6ac00(); break; - case 0x357: run_6ae00(); break; - case 0x358: run_6b000(); break; - case 0x359: run_6b200(); break; - case 0x35a: run_6b400(); break; - case 0x35b: run_6b600(); break; - case 0x35c: run_6b800(); break; - case 0x35d: run_6ba00(); break; - case 0x35e: run_6bc00(); break; - case 0x35f: run_6be00(); break; - case 0x360: run_6c000(); break; - case 0x361: run_6c200(); break; - case 0x362: run_6c400(); break; + switch(pc>>>11) { + case 0x20: run_10000(); break; + case 0x21: run_10800(); break; + case 0x22: run_11000(); break; + case 0x23: run_11800(); break; + case 0x24: run_12000(); break; + case 0x25: run_12800(); break; + case 0x26: run_13000(); break; + case 0x27: run_13800(); break; + case 0x28: run_14000(); break; + case 0x29: run_14800(); break; + case 0x2a: run_15000(); break; + case 0x2b: run_15800(); break; + case 0x2c: run_16000(); break; + case 0x2d: run_16800(); break; + case 0x2e: run_17000(); break; + case 0x2f: run_17800(); break; + case 0x30: run_18000(); break; + case 0x31: run_18800(); break; + case 0x32: run_19000(); break; + case 0x33: run_19800(); break; + case 0x34: run_1a000(); break; + case 0x35: run_1a800(); break; + case 0x36: run_1b000(); break; + case 0x37: run_1b800(); break; + case 0x38: run_1c000(); break; + case 0x39: run_1c800(); break; + case 0x3a: run_1d000(); break; + case 0x3b: run_1d800(); break; + case 0x3c: run_1e000(); break; + case 0x3d: run_1e800(); break; + case 0x3e: run_1f000(); break; + case 0x3f: run_1f800(); break; + case 0x40: run_20000(); break; + case 0x41: run_20800(); break; + case 0x42: run_21000(); break; + case 0x43: run_21800(); break; + case 0x44: run_22000(); break; + case 0x45: run_22800(); break; + case 0x46: run_23000(); break; + case 0x47: run_23800(); break; + case 0x48: run_24000(); break; + case 0x49: run_24800(); break; + case 0x4a: run_25000(); break; + case 0x4b: run_25800(); break; + case 0x4c: run_26000(); break; + case 0x4d: run_26800(); break; + case 0x4e: run_27000(); break; + case 0x4f: run_27800(); break; + case 0x50: run_28000(); break; + case 0x51: run_28800(); break; + case 0x52: run_29000(); break; + case 0x53: run_29800(); break; + case 0x54: run_2a000(); break; + case 0x55: run_2a800(); break; + case 0x56: run_2b000(); break; + case 0x57: run_2b800(); break; + case 0x58: run_2c000(); break; + case 0x59: run_2c800(); break; + case 0x5a: run_2d000(); break; + case 0x5b: run_2d800(); break; + case 0x5c: run_2e000(); break; + case 0x5d: run_2e800(); break; + case 0x5e: run_2f000(); break; + case 0x5f: run_2f800(); break; + case 0x60: run_30000(); break; + case 0x61: run_30800(); break; + case 0x62: run_31000(); break; + case 0x63: run_31800(); break; + case 0x64: run_32000(); break; + case 0x65: run_32800(); break; + case 0x66: run_33000(); break; + case 0x67: run_33800(); break; + case 0x68: run_34000(); break; + case 0x69: run_34800(); break; + case 0x6a: run_35000(); break; + case 0x6b: run_35800(); break; + case 0x6c: run_36000(); break; + case 0x6d: run_36800(); break; + case 0x6e: run_37000(); break; + case 0x6f: run_37800(); break; + case 0x70: run_38000(); break; + case 0x71: run_38800(); break; + case 0x72: run_39000(); break; + case 0x73: run_39800(); break; + case 0x74: run_3a000(); break; + case 0x75: run_3a800(); break; + case 0x76: run_3b000(); break; + case 0x77: run_3b800(); break; + case 0x78: run_3c000(); break; + case 0x79: run_3c800(); break; + case 0x7a: run_3d000(); break; + case 0x7b: run_3d800(); break; + case 0x7c: run_3e000(); break; + case 0x7d: run_3e800(); break; + case 0x7e: run_3f000(); break; + case 0x7f: run_3f800(); break; + case 0x80: run_40000(); break; + case 0x81: run_40800(); break; + case 0x82: run_41000(); break; + case 0x83: run_41800(); break; + case 0x84: run_42000(); break; + case 0x85: run_42800(); break; + case 0x86: run_43000(); break; + case 0x87: run_43800(); break; + case 0x88: run_44000(); break; + case 0x89: run_44800(); break; + case 0x8a: run_45000(); break; + case 0x8b: run_45800(); break; + case 0x8c: run_46000(); break; + case 0x8d: run_46800(); break; + case 0x8e: run_47000(); break; + case 0x8f: run_47800(); break; + case 0x90: run_48000(); break; + case 0x91: run_48800(); break; + case 0x92: run_49000(); break; + case 0x93: run_49800(); break; + case 0x94: run_4a000(); break; + case 0x95: run_4a800(); break; + case 0x96: run_4b000(); break; + case 0x97: run_4b800(); break; + case 0x98: run_4c000(); break; + case 0x99: run_4c800(); break; + case 0x9a: run_4d000(); break; + case 0x9b: run_4d800(); break; + case 0x9c: run_4e000(); break; + case 0x9d: run_4e800(); break; + case 0x9e: run_4f000(); break; + case 0x9f: run_4f800(); break; + case 0xa0: run_50000(); break; + case 0xa1: run_50800(); break; + case 0xa2: run_51000(); break; + case 0xa3: run_51800(); break; + case 0xa4: run_52000(); break; + case 0xa5: run_52800(); break; + case 0xa6: run_53000(); break; + case 0xa7: run_53800(); break; + case 0xa8: run_54000(); break; + case 0xa9: run_54800(); break; + case 0xaa: run_55000(); break; + case 0xab: run_55800(); break; + case 0xac: run_56000(); break; + case 0xad: run_56800(); break; + case 0xae: run_57000(); break; + case 0xaf: run_57800(); break; + case 0xb0: run_58000(); break; + case 0xb1: run_58800(); break; + case 0xb2: run_59000(); break; + case 0xb3: run_59800(); break; + case 0xb4: run_5a000(); break; + case 0xb5: run_5a800(); break; + case 0xb6: run_5b000(); break; + case 0xb7: run_5b800(); break; + case 0xb8: run_5c000(); break; + case 0xb9: run_5c800(); break; + case 0xba: run_5d000(); break; + case 0xbb: run_5d800(); break; default: throw new ExecutionException("invalid address 0x" + Long.toString(this.pc&0xffffffffL,16) + ": r2: " + r2); } } } public AcmeCrossAssembler() { - super(4096,65536); - initPages(_data1,0x6c600,false); - initPages(_data2,0x6c608,false); - initPages(_data3,0x6d000,true); - initPages(_data4,0x71548,false); - initPages(_data5,0x73010,false); - clearPages(0x7378c,0x48); - clearPages(0x738b0,0x1012); + super(4194304,1); + initPages(_data1,0x5e000,false); + initPages(_data2,0x5e008,false); + initPages(_data3,0x5f000,true); + initPages(_data4,0x63ba0,false); + initPages(_data5,0x666c0,false); + clearPages(0x66c10,0x26); + clearPages(0x66ca8,0x392); } protected int entryPoint() { return 0x10400; } - protected int heapStart() { return 0x778f8; } - protected int gp() { return 0x7b010; } + protected int heapStart() { return 0x67af0; } + protected int gp() { return 0x6e6c0; } public static void main(String[] args) throws Exception { AcmeCrossAssembler me = new AcmeCrossAssembler(); - int status = me.run("Acme",args); + int status = me.run("jace.assembly.AcmeCrossAssembler",args); System.exit(status); } @@ -91861,284 +71946,176 @@ public final class AcmeCrossAssembler extends UnixRuntime { private static final java.util.Hashtable symbols = new java.util.Hashtable(); static { - symbols.put("setgrent",new Integer(0x53c00)); - symbols.put("chroot",new Integer(0x4cc00)); - symbols.put("strcpy",new Integer(0x42e00)); - symbols.put("cliargs_get_rest",new Integer(0x16e00)); - symbols.put("flow_store_doloop_condition",new Integer(0x19600)); - symbols.put("fabs",new Integer(0x32a00)); - symbols.put("waitpid",new Integer(0x4ae00)); - symbols.put("vcpu_set_pc",new Integer(0x27e00)); - symbols.put("flow_parse_block_else_block",new Integer(0x19a00)); - symbols.put("Output_passinit",new Integer(0x27600)); - symbols.put("Input_until_terminator",new Integer(0x1d800)); - symbols.put("GetQuotedByte",new Integer(0x1c600)); - symbols.put("getgid",new Integer(0x496c4)); - symbols.put("sysconf",new Integer(0x4a400)); - symbols.put("printf",new Integer(0x3fc00)); - symbols.put("vsprintf",new Integer(0x65200)); - symbols.put("utime",new Integer(0x4a800)); - symbols.put("Input_skip_or_store_block",new Integer(0x1d400)); - symbols.put("getlogin",new Integer(0x54e00)); - symbols.put("recv",new Integer(0x4fe00)); - symbols.put("Input_skip_remainder",new Integer(0x1c800)); - symbols.put("connect",new Integer(0x4e200)); - symbols.put("ungetc",new Integer(0x6a800)); - symbols.put("GetByte",new Integer(0x1c000)); - symbols.put("safe_malloc",new Integer(0x1b400)); - symbols.put("geteuid",new Integer(0x496b4)); - symbols.put("symbol_fix_forward_anon_name",new Integer(0x30800)); - symbols.put("memmove",new Integer(0x5b600)); - symbols.put("keyword_is_65816mnemo",new Integer(0x24e00)); - symbols.put("snprintf",new Integer(0x41c00)); - symbols.put("pathconf",new Integer(0x4c800)); - symbols.put("Tree_easy_scan",new Integer(0x31000)); - symbols.put("mknod",new Integer(0x4ce00)); - symbols.put("getgrgid",new Integer(0x53800)); - symbols.put("dump_tree",new Integer(0x31400)); - symbols.put("getenv",new Integer(0x3e000)); - symbols.put("fchmod",new Integer(0x4c000)); - symbols.put("floor",new Integer(0x37600)); - symbols.put("getegid",new Integer(0x496d4)); - symbols.put("setpriority",new Integer(0x4e000)); - symbols.put("getpriority",new Integer(0x4de00)); - symbols.put("usleep",new Integer(0x4d200)); - symbols.put("typesystem_want_imm",new Integer(0x32000)); - symbols.put("getpagesize",new Integer(0x48b80)); - symbols.put("fchown",new Integer(0x4ba00)); - symbols.put("fgets",new Integer(0x59400)); - symbols.put("dirname",new Integer(0x55000)); - symbols.put("Section_finalize",new Integer(0x2e600)); - symbols.put("Throw_warning",new Integer(0x1ac00)); - symbols.put("memcpy",new Integer(0x48fdc)); - symbols.put("DynaBuf_to_lower",new Integer(0x18000)); - symbols.put("Throw_error",new Integer(0x1b000)); - symbols.put("ALU_any_result",new Integer(0x16400)); - symbols.put("readlink",new Integer(0x4b600)); - symbols.put("puts",new Integer(0x40400)); - symbols.put("dup2",new Integer(0x4ac00)); - symbols.put("mbrtowc",new Integer(0x66200)); - symbols.put("getpass",new Integer(0x54a00)); - symbols.put("getuid",new Integer(0x496a4)); - symbols.put("malloc",new Integer(0x3e800)); - symbols.put("isatty",new Integer(0x5a200)); - symbols.put("symbol_define",new Integer(0x30200)); - symbols.put("iswspace",new Integer(0x65e00)); - symbols.put("endpwent",new Integer(0x54800)); - symbols.put("sleep",new Integer(0x48af0)); - symbols.put("vsnprintf",new Integer(0x64e00)); - symbols.put("recvfrom",new Integer(0x4f800)); - symbols.put("strtoul",new Integer(0x5fc00)); - symbols.put("ACME_finalize",new Integer(0x11800)); - symbols.put("typesystem_force_address_statement",new Integer(0x31e00)); - symbols.put("gethostbyaddr",new Integer(0x53200)); - symbols.put("rmdir",new Integer(0x4a200)); - symbols.put("Input_append_keyword_to_global_dynabuf",new Integer(0x1dc00)); - symbols.put("socket",new Integer(0x4e400)); - symbols.put("select",new Integer(0x4fa00)); - symbols.put("readdir",new Integer(0x52600)); - symbols.put("lchown",new Integer(0x4bc00)); - symbols.put("setgroups",new Integer(0x50e00)); - symbols.put("fflush",new Integer(0x39a00)); - symbols.put("cliargs_safe_get_next",new Integer(0x16a00)); - symbols.put("ftruncate",new Integer(0x4d000)); - symbols.put("realpath",new Integer(0x4d800)); - symbols.put("keyword_is_6510mnemo",new Integer(0x23000)); - symbols.put("chown",new Integer(0x4b800)); - symbols.put("send",new Integer(0x4fc00)); - symbols.put("vcpu_check_and_set_reg_length",new Integer(0x17200)); - symbols.put("Output_init",new Integer(0x26e00)); - symbols.put("chmod",new Integer(0x4be00)); - symbols.put("alarm",new Integer(0x49a64)); - symbols.put("Parse_optional_block",new Integer(0x1b600)); - symbols.put("strtol",new Integer(0x43600)); - symbols.put("pipe",new Integer(0x4aa00)); - symbols.put("encoding_passinit",new Integer(0x18e00)); - symbols.put("uname",new Integer(0x55400)); - symbols.put("symbol_parse_definition",new Integer(0x2fc00)); - symbols.put("Output_start_segment",new Integer(0x27a00)); - symbols.put("accept",new Integer(0x4ea00)); - symbols.put("rint",new Integer(0x38000)); - symbols.put("basename",new Integer(0x55200)); - symbols.put("ALU_optional_defined_int",new Integer(0x15a00)); - symbols.put("output_set_output_filename",new Integer(0x26c00)); - symbols.put("DynaBuf_get_copy",new Integer(0x17a00)); - symbols.put("output_set_output_format",new Integer(0x26800)); - symbols.put("strtod",new Integer(0x68800)); - symbols.put("Throw_first_pass_warning",new Integer(0x1ae00)); - symbols.put("Parse_until_eob_or_eof",new Integer(0x1a400)); - symbols.put("sysctl",new Integer(0x4dc00)); - symbols.put("fstat",new Integer(0x62e00)); - symbols.put("fprintf",new Integer(0x3bc00)); - symbols.put("cputype_passinit",new Integer(0x17400)); - symbols.put("setpwent",new Integer(0x54600)); - symbols.put("bind",new Integer(0x4f000)); - symbols.put("inet_addr",new Integer(0x56200)); - symbols.put("mkfifo",new Integer(0x4d400)); - symbols.put("chdir",new Integer(0x4a600)); - symbols.put("Input_read_keyword",new Integer(0x1ec00)); - symbols.put("cputype_find",new Integer(0x17000)); - symbols.put("initgroups",new Integer(0x56600)); - symbols.put("Macro_parse_definition",new Integer(0x20600)); - symbols.put("endgrent",new Integer(0x53e00)); - symbols.put("setsockopt",new Integer(0x4ee00)); - symbols.put("fseek",new Integer(0x3d400)); - symbols.put("cos",new Integer(0x32800)); - symbols.put("memchr",new Integer(0x5b400)); - symbols.put("output_le16",new Integer(0x26000)); - symbols.put("umask",new Integer(0x49694)); - symbols.put("symbol_set_value",new Integer(0x2f600)); - symbols.put("symbol_find",new Integer(0x2f400)); - symbols.put("lstat",new Integer(0x4c200)); - symbols.put("sin",new Integer(0x32c00)); - symbols.put("setgid",new Integer(0x50a00)); - symbols.put("signal",new Integer(0x5ea00)); - symbols.put("output_8",new Integer(0x25e00)); - symbols.put("strncmp",new Integer(0x43000)); - symbols.put("DynaBuf_create",new Integer(0x17600)); - symbols.put("pow",new Integer(0x33400)); - symbols.put("keyword_is_6502mnemo",new Integer(0x22600)); - symbols.put("strncpy",new Integer(0x5f400)); - symbols.put("DynaBuf_add_string",new Integer(0x17e00)); - symbols.put("Input_read_filename",new Integer(0x1fc00)); - symbols.put("sync",new Integer(0x51e00)); - symbols.put("ALU_int_result",new Integer(0x15c00)); - symbols.put("sendto",new Integer(0x4f600)); - symbols.put("realloc",new Integer(0x40600)); - symbols.put("vcpu_get_statement_size",new Integer(0x28200)); - symbols.put("Section_passinit",new Integer(0x2e800)); - symbols.put("listen",new Integer(0x4f200)); - symbols.put("fork",new Integer(0x62c00)); - symbols.put("sscanf",new Integer(0x5f000)); - symbols.put("getgrent",new Integer(0x53a00)); - symbols.put("sigaction",new Integer(0x52200)); - symbols.put("fread",new Integer(0x3c600)); - symbols.put("inet_aton",new Integer(0x55e00)); - symbols.put("Input_read_and_lower_keyword",new Integer(0x1f400)); - symbols.put("symlink",new Integer(0x4b400)); - symbols.put("encoding_find",new Integer(0x19200)); - symbols.put("Tree_add_table",new Integer(0x30e00)); - symbols.put("DynaBuf_init",new Integer(0x18200)); - symbols.put("fopen",new Integer(0x3b800)); - symbols.put("memset",new Integer(0x48fec)); - symbols.put("main",new Integer(0x11c00)); - symbols.put("typesystem_want_addr",new Integer(0x32200)); - symbols.put("Output_end_segment",new Integer(0x27800)); - symbols.put("Output_fake",new Integer(0x25c00)); - symbols.put("add_node_to_tree",new Integer(0x30c00)); - symbols.put("pseudoopcodes_init",new Integer(0x2e000)); - symbols.put("DynaBuf_append",new Integer(0x17c00)); - symbols.put("matherr",new Integer(0x37c00)); - symbols.put("fclose",new Integer(0x39200)); - symbols.put("inet_ntoa",new Integer(0x52a00)); - symbols.put("getppid",new Integer(0x491bc)); - symbols.put("opendir",new Integer(0x52400)); - symbols.put("getgroups",new Integer(0x50000)); - symbols.put("keyword_is_c64dtv2mnemo",new Integer(0x23a00)); - symbols.put("getgrouplist",new Integer(0x56400)); - symbols.put("seteuid",new Integer(0x50800)); - symbols.put("keyword_is_65c02mnemo",new Integer(0x24400)); - symbols.put("putc",new Integer(0x40000)); - symbols.put("output_initmem",new Integer(0x26600)); - symbols.put("finite",new Integer(0x37400)); - symbols.put("herror",new Integer(0x53000)); - symbols.put("strcmp",new Integer(0x42c00)); - symbols.put("flow_forloop",new Integer(0x19400)); - symbols.put("shutdown",new Integer(0x4f400)); - symbols.put("tan",new Integer(0x32e00)); - symbols.put("ttyname",new Integer(0x52000)); - symbols.put("vfiprintf",new Integer(0x64a00)); - symbols.put("getpwuid",new Integer(0x54200)); - symbols.put("Input_read_zone_and_keyword",new Integer(0x1e400)); - symbols.put("dup",new Integer(0x4c600)); - symbols.put("copysign",new Integer(0x38800)); - symbols.put("getcwd",new Integer(0x4b000)); - symbols.put("Section_new_zone",new Integer(0x2e400)); - symbols.put("encoding_load",new Integer(0x19000)); - symbols.put("gethostbyname",new Integer(0x53400)); - symbols.put("getpwnam",new Integer(0x54000)); - symbols.put("getservbyname",new Integer(0x52c00)); - symbols.put("atan",new Integer(0x32400)); - symbols.put("gethostname",new Integer(0x55a00)); - symbols.put("sprintf",new Integer(0x42000)); - symbols.put("pseudoopcode_parse",new Integer(0x2e200)); - symbols.put("Tree_hard_scan",new Integer(0x31200)); - symbols.put("strtof",new Integer(0x68a00)); - symbols.put("atexit",new Integer(0x38a00)); - symbols.put("cliargs_get_next",new Integer(0x16600)); - symbols.put("output_le32",new Integer(0x26400)); - symbols.put("asin",new Integer(0x33200)); - symbols.put("setlocale",new Integer(0x5b000)); - symbols.put("getpeername",new Integer(0x50400)); - symbols.put("Throw_serious_error",new Integer(0x1b200)); - symbols.put("nanf",new Integer(0x66a00)); - symbols.put("cliargs_init",new Integer(0x16c00)); - symbols.put("scalbn",new Integer(0x38400)); - symbols.put("vfork",new Integer(0x4ca00)); - symbols.put("ALU_liberal_int",new Integer(0x16200)); - symbols.put("symbols_vicelabels",new Integer(0x30600)); - symbols.put("fsync",new Integer(0x51200)); - symbols.put("Mnemo_init",new Integer(0x22400)); - symbols.put("fputc",new Integer(0x3c000)); - symbols.put("symbol_set_label",new Integer(0x2f800)); - symbols.put("DynaBuf_enlarge",new Integer(0x17800)); - symbols.put("getsockopt",new Integer(0x4ec00)); - symbols.put("typesystem_force_address_block",new Integer(0x31c00)); - symbols.put("hstrerror",new Integer(0x52e00)); - symbols.put("vcpu_end_statement",new Integer(0x28400)); - symbols.put("nan",new Integer(0x37e00)); - symbols.put("Macro_parse_call",new Integer(0x20a00)); - symbols.put("encoding_encode_char",new Integer(0x18c00)); - symbols.put("Input_new_file",new Integer(0x1be00)); - symbols.put("localeconv",new Integer(0x5b200)); - symbols.put("Tree_dump_forest",new Integer(0x31800)); - symbols.put("Bug_found",new Integer(0x1b800)); - symbols.put("Output_save_file",new Integer(0x27000)); - symbols.put("fwrite",new Integer(0x3dc00)); - symbols.put("vcpu_read_pc",new Integer(0x28000)); - symbols.put("access",new Integer(0x4a000)); - symbols.put("ALU_any_int",new Integer(0x15e00)); - symbols.put("notreallypo_setpc",new Integer(0x2de00)); - symbols.put("getdents",new Integer(0x4c400)); - symbols.put("Input_accept_comma",new Integer(0x20000)); - symbols.put("exit",new Integer(0x38e00)); - symbols.put("klogctl",new Integer(0x4d600)); - symbols.put("typesystem_says_address",new Integer(0x31a00)); - symbols.put("getgrnam",new Integer(0x53600)); - symbols.put("make_hash",new Integer(0x30a00)); - symbols.put("output_prefer_cbm_file_format",new Integer(0x26a00)); - symbols.put("AnyOS_entry",new Integer(0x28600)); - symbols.put("Macro_init",new Integer(0x20400)); - symbols.put("ALU_init",new Integer(0x15800)); - symbols.put("getpwent",new Integer(0x54400)); - symbols.put("daemon",new Integer(0x55c00)); - symbols.put("strlen",new Integer(0x10268)); - symbols.put("open",new Integer(0x63000)); - symbols.put("Input_get_force_bit",new Integer(0x20200)); - symbols.put("fputs",new Integer(0x59a00)); - symbols.put("setsid",new Integer(0x51000)); - symbols.put("setegid",new Integer(0x50c00)); - symbols.put("closedir",new Integer(0x52800)); - symbols.put("cliargs_handle_options",new Integer(0x16800)); - symbols.put("acos",new Integer(0x33000)); - symbols.put("output_le24",new Integer(0x26200)); - symbols.put("vasprintf",new Integer(0x54c00)); - symbols.put("Input_ensure_EOS",new Integer(0x1ce00)); - symbols.put("setuid",new Integer(0x50600)); - symbols.put("mkdir",new Integer(0x49e00)); - symbols.put("ALU_defined_int",new Integer(0x16000)); - symbols.put("wcrtomb",new Integer(0x6ac00)); - symbols.put("close",new Integer(0x62a00)); - symbols.put("symbols_list",new Integer(0x30400)); - symbols.put("flow_parse_and_close_file",new Integer(0x19c00)); - symbols.put("flow_doloop",new Integer(0x19800)); - symbols.put("_call_helper",new Integer(0x10284)); - symbols.put("vfprintf",new Integer(0x48000)); - symbols.put("fputwc",new Integer(0x65c00)); - symbols.put("raise",new Integer(0x5e800)); - symbols.put("free",new Integer(0x3ea00)); - symbols.put("getsockname",new Integer(0x50200)); + symbols.put("strcpy",Integer.valueOf(0x51800)); + symbols.put("cliargs_get_rest",Integer.valueOf(0x1b400)); + symbols.put("flow_store_doloop_condition",Integer.valueOf(0x1e600)); + symbols.put("fabs",Integer.valueOf(0x43600)); + symbols.put("typesystem_want_nonaddr",Integer.valueOf(0x42c00)); + symbols.put("vcpu_set_pc",Integer.valueOf(0x36800)); + symbols.put("section_new_cheap_scope",Integer.valueOf(0x3fc00)); + symbols.put("check_ifdef_condition",Integer.valueOf(0x1e000)); + symbols.put("input_read_and_lower_keyword",Integer.valueOf(0x26e00)); + symbols.put("printf",Integer.valueOf(0x4f200)); + symbols.put("throw_message",Integer.valueOf(0x1fc00)); + symbols.put("outbuf_set_outfile_limit",Integer.valueOf(0x34c00)); + symbols.put("input_skip_remainder",Integer.valueOf(0x23800)); + symbols.put("GetByte",Integer.valueOf(0x23000)); + symbols.put("safe_malloc",Integer.valueOf(0x20200)); + symbols.put("output_get_xor",Integer.valueOf(0x36400)); + symbols.put("symbol_fix_forward_anon_name",Integer.valueOf(0x41800)); + symbols.put("memmove",Integer.valueOf(0x5ae00)); + symbols.put("flow_do_while",Integer.valueOf(0x1ea00)); + symbols.put("input_unescape_dynabuf",Integer.valueOf(0x24c00)); + symbols.put("keyword_is_r65c02_mnemo",Integer.valueOf(0x2ea00)); + symbols.put("section_new",Integer.valueOf(0x3fa00)); + symbols.put("parser_set_nowarn_prefix",Integer.valueOf(0x1f800)); + symbols.put("input_quoted_to_dynabuf",Integer.valueOf(0x24800)); + symbols.put("output_passinit",Integer.valueOf(0x35c00)); + symbols.put("dynabuf_enlarge",Integer.valueOf(0x1c000)); + symbols.put("parser_change_nowarn_block_flag",Integer.valueOf(0x1f400)); + symbols.put("keyword_is_w65c02_mnemo",Integer.valueOf(0x2f800)); + symbols.put("getenv",Integer.valueOf(0x4d800)); + symbols.put("floor",Integer.valueOf(0x48200)); + symbols.put("input_readscopeandsymbolname",Integer.valueOf(0x26200)); + symbols.put("parser_set_addr_prefix",Integer.valueOf(0x1f600)); + symbols.put("pseudopc_end_all",Integer.valueOf(0x37400)); + symbols.put("parse_assignment",Integer.valueOf(0x1fa00)); + symbols.put("flow_store_while_condition",Integer.valueOf(0x1e800)); + symbols.put("getpagesize",Integer.valueOf(0x56fd0)); + symbols.put("outputfile_set_filename",Integer.valueOf(0x35200)); + symbols.put("keyword_is_65ce02_mnemo",Integer.valueOf(0x30600)); + symbols.put("input_read_keyword",Integer.valueOf(0x26600)); + symbols.put("keyword_is_4502_mnemo",Integer.valueOf(0x31400)); + symbols.put("memcpy",Integer.valueOf(0x56fe0)); + symbols.put("ALU_any_result",Integer.valueOf(0x1aa00)); + symbols.put("output_setdefault",Integer.valueOf(0x34800)); + symbols.put("puts",Integer.valueOf(0x4f800)); + symbols.put("malloc",Integer.valueOf(0x4de00)); + symbols.put("isatty",Integer.valueOf(0x5a400)); + symbols.put("keyword_is_65816_mnemo",Integer.valueOf(0x33000)); + symbols.put("symbol_define",Integer.valueOf(0x41200)); + symbols.put("outbuf_set_outfile_start",Integer.valueOf(0x34a00)); + symbols.put("macro_parse_call",Integer.valueOf(0x28800)); + symbols.put("keyword_is_nmos6502_mnemo",Integer.valueOf(0x2c000)); + symbols.put("ACME_finalize",Integer.valueOf(0x12000)); + symbols.put("output_set_xor",Integer.valueOf(0x36600)); + symbols.put("input_accept_comma",Integer.valueOf(0x27c00)); + symbols.put("parse_until_eob_or_eof",Integer.valueOf(0x20800)); + symbols.put("input_read_input_filename",Integer.valueOf(0x27800)); + symbols.put("tree_hard_scan",Integer.valueOf(0x42800)); + symbols.put("fflush",Integer.valueOf(0x4a600)); + symbols.put("dynabuf_add_string",Integer.valueOf(0x1c600)); + symbols.put("cliargs_safe_get_next",Integer.valueOf(0x1b000)); + symbols.put("encoding_load_from_file",Integer.valueOf(0x1da00)); + symbols.put("dynabuf_append",Integer.valueOf(0x1c400)); + symbols.put("keyword_is_6502_mnemo",Integer.valueOf(0x2b200)); + symbols.put("vcpu_check_and_set_reg_length",Integer.valueOf(0x1b800)); + symbols.put("strtol",Integer.valueOf(0x52000)); + symbols.put("encoding_passinit",Integer.valueOf(0x1d800)); + symbols.put("rint",Integer.valueOf(0x48c00)); + symbols.put("Throw_first_pass_warning",Integer.valueOf(0x21200)); + symbols.put("outputfile_prefer_cbm_format",Integer.valueOf(0x35000)); + symbols.put("input_read_output_filename",Integer.valueOf(0x27a00)); + symbols.put("includepaths_open_ro",Integer.valueOf(0x28200)); + symbols.put("fstat",Integer.valueOf(0x5ce00)); + symbols.put("fprintf",Integer.valueOf(0x4b800)); + symbols.put("cputype_passinit",Integer.valueOf(0x1ba00)); + symbols.put("parse_optional_block",Integer.valueOf(0x21000)); + symbols.put("cputype_find",Integer.valueOf(0x1b600)); + symbols.put("pseudopc_end",Integer.valueOf(0x37200)); + symbols.put("fseek",Integer.valueOf(0x4ce00)); + symbols.put("output_save_file",Integer.valueOf(0x35600)); + symbols.put("dynabuf_add_bytes",Integer.valueOf(0x1c800)); + symbols.put("cos",Integer.valueOf(0x43400)); + symbols.put("memchr",Integer.valueOf(0x5ac00)); + symbols.put("output_le16",Integer.valueOf(0x22000)); + symbols.put("symbol_find",Integer.valueOf(0x40c00)); + symbols.put("sin",Integer.valueOf(0x43800)); + symbols.put("pseudopc_unpseudo",Integer.valueOf(0x37600)); + symbols.put("dynabuf_clear",Integer.valueOf(0x1be00)); + symbols.put("output_8",Integer.valueOf(0x21c00)); + symbols.put("strncmp",Integer.valueOf(0x51a00)); + symbols.put("pow",Integer.valueOf(0x44000)); + symbols.put("pseudopc_start",Integer.valueOf(0x37000)); + symbols.put("realloc",Integer.valueOf(0x4fa00)); + symbols.put("vcpu_get_statement_size",Integer.valueOf(0x36c00)); + symbols.put("memcmp",Integer.valueOf(0x4ec00)); + symbols.put("fread",Integer.valueOf(0x4c000)); + symbols.put("encoding_find",Integer.valueOf(0x1dc00)); + symbols.put("fopen",Integer.valueOf(0x4b600)); + symbols.put("memset",Integer.valueOf(0x56ff0)); + symbols.put("main",Integer.valueOf(0x12400)); + symbols.put("typesystem_want_addr",Integer.valueOf(0x42e00)); + symbols.put("symbol_fix_dynamic_name",Integer.valueOf(0x41c00)); + symbols.put("outputfile_set_format",Integer.valueOf(0x34e00)); + symbols.put("matherr",Integer.valueOf(0x48800)); + symbols.put("fclose",Integer.valueOf(0x49e00)); + symbols.put("output_start_segment",Integer.valueOf(0x36000)); + symbols.put("keyword_is_m65_mnemo",Integer.valueOf(0x32200)); + symbols.put("includepaths_add",Integer.valueOf(0x28000)); + symbols.put("input_new_file",Integer.valueOf(0x22e00)); + symbols.put("finite",Integer.valueOf(0x48000)); + symbols.put("symbol_set_object",Integer.valueOf(0x40e00)); + symbols.put("strcmp",Integer.valueOf(0x51600)); + symbols.put("flow_forloop",Integer.valueOf(0x1e200)); + symbols.put("tan",Integer.valueOf(0x43a00)); + symbols.put("copysign",Integer.valueOf(0x49400)); + symbols.put("atan",Integer.valueOf(0x43000)); + symbols.put("sprintf",Integer.valueOf(0x50c00)); + symbols.put("pseudoopcode_parse",Integer.valueOf(0x3f800)); + symbols.put("atexit",Integer.valueOf(0x49600)); + symbols.put("cliargs_get_next",Integer.valueOf(0x1ac00)); + symbols.put("output_le32",Integer.valueOf(0x22800)); + symbols.put("asin",Integer.valueOf(0x43e00)); + symbols.put("cliargs_init",Integer.valueOf(0x1b200)); + symbols.put("scalbn",Integer.valueOf(0x49000)); + symbols.put("symbols_vicelabels",Integer.valueOf(0x41600)); + symbols.put("output_be24",Integer.valueOf(0x22200)); + symbols.put("symbol_set_force_bit",Integer.valueOf(0x41000)); + symbols.put("fputc",Integer.valueOf(0x4ba00)); + symbols.put("section_finalize",Integer.valueOf(0x3fe00)); + symbols.put("keyword_is_65c02_mnemo",Integer.valueOf(0x2dc00)); + symbols.put("vcpu_end_statement",Integer.valueOf(0x36e00)); + symbols.put("nan",Integer.valueOf(0x48a00)); + symbols.put("encoding_encode_char",Integer.valueOf(0x1d600)); + symbols.put("config_default",Integer.valueOf(0x1f000)); + symbols.put("dynabuf_get_copy",Integer.valueOf(0x1c200)); + symbols.put("fwrite",Integer.valueOf(0x4d600)); + symbols.put("vcpu_read_pc",Integer.valueOf(0x36a00)); + symbols.put("ALU_any_int",Integer.valueOf(0x1a200)); + symbols.put("notreallypo_setpc",Integer.valueOf(0x3f600)); + symbols.put("input_ensure_EOS",Integer.valueOf(0x24000)); + symbols.put("output_skip",Integer.valueOf(0x34600)); + symbols.put("dynabuf_add_signed_long",Integer.valueOf(0x1ca00)); + symbols.put("exit",Integer.valueOf(0x49a00)); + symbols.put("output_be16",Integer.valueOf(0x21e00)); + symbols.put("macro_parse_definition",Integer.valueOf(0x28400)); + symbols.put("tree_easy_scan",Integer.valueOf(0x42400)); + symbols.put("tree_dump_forest",Integer.valueOf(0x42a00)); + symbols.put("pseudopc_get_context",Integer.valueOf(0x37800)); + symbols.put("output_createbuffer",Integer.valueOf(0x35400)); + symbols.put("AnyOS_entry",Integer.valueOf(0x37a00)); + symbols.put("dynabuf_to_lower",Integer.valueOf(0x1cc00)); + symbols.put("keyword_is_c64dtv2_mnemo",Integer.valueOf(0x2ce00)); + symbols.put("strlen",Integer.valueOf(0x10268)); + symbols.put("input_get_force_bit",Integer.valueOf(0x27e00)); + symbols.put("input_append_symbol_name_to_global_dynabuf",Integer.valueOf(0x25800)); + symbols.put("cliargs_handle_options",Integer.valueOf(0x1ae00)); + symbols.put("acos",Integer.valueOf(0x43c00)); + symbols.put("output_le24",Integer.valueOf(0x22400)); + symbols.put("ALU_addrmode_int",Integer.valueOf(0x1a800)); + symbols.put("section_passinit",Integer.valueOf(0x40000)); + symbols.put("output_end_segment",Integer.valueOf(0x35e00)); + symbols.put("output_object",Integer.valueOf(0x21800)); + symbols.put("output_be32",Integer.valueOf(0x22600)); + symbols.put("input_skip_or_store_block",Integer.valueOf(0x24e00)); + symbols.put("ALU_defined_int",Integer.valueOf(0x1a400)); + symbols.put("symbols_list",Integer.valueOf(0x41400)); + symbols.put("parser_change_addr_block_flag",Integer.valueOf(0x1f200)); + symbols.put("flow_parse_and_close_file",Integer.valueOf(0x1ee00)); + symbols.put("_call_helper",Integer.valueOf(0x10284)); + symbols.put("BUG",Integer.valueOf(0x21400)); + symbols.put("free",Integer.valueOf(0x4e000)); } public int lookupSymbol(String symbol) { Integer i = (Integer) symbols.get(symbol); return i==null ? -1 : i.intValue(); } - } diff --git a/src/main/java/jace/assembly/AssemblyHandler.java b/src/main/java/jace/assembly/AssemblyHandler.java index 5cc12b3..9e0f708 100644 --- a/src/main/java/jace/assembly/AssemblyHandler.java +++ b/src/main/java/jace/assembly/AssemblyHandler.java @@ -1,66 +1,89 @@ package jace.assembly; +import java.nio.ByteBuffer; + import jace.Emulator; +import jace.core.Computer; import jace.core.RAM; import jace.ide.CompileResult; +import jace.ide.HeadlessProgram; import jace.ide.LanguageHandler; import jace.ide.Program; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.util.logging.Level; -import java.util.logging.Logger; /** * * @author blurry */ -public class AssemblyHandler implements LanguageHandler { +public class AssemblyHandler implements LanguageHandler { @Override public String getNewDocumentContent() { return "\t\t*= $300;\n\t\t!cpu 65c02;\n;--- Insert your code here ---\n"; } @Override - public CompileResult compile(Program proxy) { + public CompileResult compile(Program proxy) { AcmeCompiler compiler = new AcmeCompiler(); compiler.compile(proxy); return compiler; } - @Override - public void execute(CompileResult lastResult) { + public void compileToRam(String code) { + HeadlessProgram prg = new HeadlessProgram(Program.DocumentType.assembly); + prg.setValue(code); + + CompileResult lastResult = compile(prg); if (lastResult.isSuccessful()) { - try { - boolean resume = false; - if (Emulator.computer.isRunning()) { - resume = true; - Emulator.computer.pause(); - } - RAM memory = Emulator.computer.getMemory(); - FileInputStream input = new FileInputStream(lastResult.getCompiledAsset()); - int startLSB = input.read(); - int startMSB = input.read(); - int pos = startLSB + startMSB << 8; - Emulator.computer.getCpu().JSR(pos); - int next; - while ((next=input.read()) != -1) { - memory.write(pos++, (byte) next, false, true); - } - if (resume) { - Emulator.computer.resume(); - } - } catch (IOException ex) { - Logger.getLogger(AssemblyHandler.class.getName()).log(Level.SEVERE, null, ex); - } + Emulator.withComputer(c -> { + RAM memory = c.getMemory(); + ByteBuffer input = lastResult.getCompiledAsset(); + input.rewind(); + int startLSB = input.get(); + int startMSB = input.get(); + int start = startLSB + startMSB << 8; + System.out.printf("Storing assembled code to $%s%n", Integer.toHexString(start)); + c.getCpu().whileSuspended(() -> { + int pos = start; + while (input.hasRemaining()) { + memory.write(pos++, input.get(), false, true); + } + }); + }); + } + } + + @Override + public void execute(CompileResult lastResult) throws Exception { + if (lastResult.isSuccessful()) { + Computer c = Emulator.withComputer(c1 -> c1, null); + + RAM memory = c.getMemory(); + ByteBuffer input = lastResult.getCompiledAsset(); + input.rewind(); + int startLSB = input.get() & 0x0ff; + int startMSB = input.get() & 0x0ff; + int start = startLSB + startMSB << 8; + // System.out.printf("Executing code at $%s%n", Integer.toHexString(start)); + c.getCpu().whileSuspended(() -> { + // System.out.printf("Storing assembled code to $%s%n", Integer.toHexString(start)); + int pos = start; + while (input.hasRemaining()) { + memory.write(pos++, input.get(), false, true); + } + // System.out.printf("Issuing JSR to $%s%n", Integer.toHexString(start)); + c.getCpu().JSR(start); + }); + // }); + } else { + System.err.println("Compilation failed"); + lastResult.getErrors().forEach((line, message) -> System.err.printf("Line %d: %s%n", line, message)); + lastResult.getOtherMessages().forEach(System.err::println); + throw new Exception("Compilation failed"); } clean(lastResult); } @Override - public void clean(CompileResult lastResult) { - if (lastResult.getCompiledAsset() != null) { - lastResult.getCompiledAsset().delete(); - } + public void clean(CompileResult lastResult) { + // Nothing to do here } } diff --git a/src/main/java/jace/cheat/Cheats.java b/src/main/java/jace/cheat/Cheats.java index 27db3fc..254fb40 100644 --- a/src/main/java/jace/cheat/Cheats.java +++ b/src/main/java/jace/cheat/Cheats.java @@ -1,31 +1,31 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.cheat; +import java.util.HashSet; +import java.util.Set; +import java.util.function.Supplier; + import jace.apple2e.MOS65C02; +import jace.config.DeviceEnum; import jace.config.InvokableAction; -import jace.core.Computer; import jace.core.Device; import jace.core.RAMEvent; import jace.core.RAMListener; -import java.util.HashSet; -import java.util.Set; /** * Represents some combination of hacks that can be enabled or disabled through @@ -34,13 +34,44 @@ import java.util.Set; * @author Brendan Robert (BLuRry) brendan.robert@gmail.com */ public abstract class Cheats extends Device { + public static enum Cheat implements DeviceEnum { + Metacheat("Metacheat", MetaCheat.class, MetaCheat::new), + MontezumasRevenge("Montezuma's Revenge", MontezumasRevengeCheats.class, MontezumasRevengeCheats::new), + PrinceOfPersia("Prince of Persia", PrinceOfPersiaCheats.class, PrinceOfPersiaCheats::new), + ProgramIdentity("Identify program", ProgramIdentity.class, ProgramIdentity::new); + + Supplier factory; + String name; + Class clazz; + + Cheat(String name, Class clazz, Supplier factory) { + this.name = name; + this.clazz = clazz; + this.factory = factory; + } + + @Override + public String getName() { + return name; + } + + @Override + public Cheats create() { + return factory.get(); + } + + @Override + public boolean isInstance(Cheats cheat) { + if (cheat == null) { + return false; + } + return clazz == cheat.getClass(); + } + } + boolean cheatsActive = true; Set listeners = new HashSet<>(); - - public Cheats(Computer computer) { - super(computer); - } - + @InvokableAction(name = "Toggle Cheats", alternatives = "cheat;Plug-in", defaultKeyMapping = "ctrl+shift+m") public void toggleCheats() { cheatsActive = !cheatsActive; @@ -51,36 +82,36 @@ public abstract class Cheats extends Device { } } - public RAMListener bypassCode(int address, int addressEnd) { + public RAMListener bypassCode(String name, int address, int addressEnd) { int noOperation = MOS65C02.COMMAND.NOP.ordinal(); - return addCheat(RAMEvent.TYPE.READ, (e) -> e.setNewValue(noOperation), address, addressEnd); + return addCheat(name, RAMEvent.TYPE.READ, (e) -> e.setNewValue(noOperation), address, addressEnd); } - public RAMListener forceValue(int value, int... address) { - return addCheat(RAMEvent.TYPE.ANY, (e) -> e.setNewValue(value), address); + public RAMListener forceValue(String name, int value, int... address) { + return addCheat(name, RAMEvent.TYPE.ANY, (e) -> e.setNewValue(value), address); } - public RAMListener forceValue(int value, boolean auxFlag, int... address) { - return addCheat(RAMEvent.TYPE.ANY, auxFlag, (e) -> e.setNewValue(value), address); + public RAMListener forceValue(String name, int value, Boolean auxFlag, int... address) { + return addCheat(name, RAMEvent.TYPE.ANY, auxFlag, (e) -> e.setNewValue(value), address); } - public RAMListener addCheat(RAMEvent.TYPE type, RAMEvent.RAMEventHandler handler, int... address) { + public RAMListener addCheat(String name, RAMEvent.TYPE type, RAMEvent.RAMEventHandler handler, int... address) { RAMListener listener; if (address.length == 1) { - listener = computer.getMemory().observe(type, address[0], handler); + listener = getMemory().observe(getName() + ": " + name, type, address[0], handler); } else { - listener = computer.getMemory().observe(type, address[0], address[1], handler); + listener = getMemory().observe(getName() + ": " + name, type, address[0], address[1], handler); } listeners.add(listener); return listener; } - public RAMListener addCheat(RAMEvent.TYPE type, boolean auxFlag, RAMEvent.RAMEventHandler handler, int... address) { + public RAMListener addCheat(String name, RAMEvent.TYPE type, Boolean auxFlag, RAMEvent.RAMEventHandler handler, int... address) { RAMListener listener; if (address.length == 1) { - listener = computer.getMemory().observe(type, address[0], auxFlag, handler); + listener = getMemory().observe(getName() + ": " + name, type, address[0], auxFlag, handler); } else { - listener = computer.getMemory().observe(type, address[0], address[1], auxFlag, handler); + listener = getMemory().observe(getName() + ": " + name, type, address[0], address[1], auxFlag, handler); } listeners.add(listener); return listener; @@ -101,13 +132,13 @@ public abstract class Cheats extends Device { protected void unregisterListeners() { listeners.stream().forEach((l) -> { - computer.getMemory().removeListener(l); + getMemory().removeListener(l); }); listeners.clear(); } public void removeListener(RAMListener l) { - computer.getMemory().removeListener(l); + getMemory().removeListener(l); listeners.remove(l); } diff --git a/src/main/java/jace/cheat/DynamicCheat.java b/src/main/java/jace/cheat/DynamicCheat.java index 1f1a1be..608ed11 100644 --- a/src/main/java/jace/cheat/DynamicCheat.java +++ b/src/main/java/jace/cheat/DynamicCheat.java @@ -9,7 +9,6 @@ import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.util.Callback; -import javax.script.ScriptException; /** * @@ -21,22 +20,23 @@ public class DynamicCheat extends RAMListener { StringProperty expression; BooleanProperty active; StringProperty name; + String cheatName; Callback expressionCallback; - public DynamicCheat(int address, String expr) { - super(RAMEvent.TYPE.ANY, RAMEvent.SCOPE.ADDRESS, RAMEvent.VALUE.ANY); + public DynamicCheat(String cheatName, int address, int holdValue) { + super(cheatName, RAMEvent.TYPE.ANY, RAMEvent.SCOPE.ADDRESS, RAMEvent.VALUE.ANY); id = (int) (Math.random() * 10000000); addr = new SimpleIntegerProperty(address); - expression = new SimpleStringProperty(expr); + expression = new SimpleStringProperty(String.valueOf(holdValue)); + isHold = true; active = new SimpleBooleanProperty(false); name = new SimpleStringProperty("Untitled"); - expression.addListener((param, oldValue, newValue) -> { - expressionCallback = parseExpression(newValue); - }); - expressionCallback = parseExpression(expr); + expressionCallback = (RAMEvent e) -> holdValue; doConfig(); } + boolean isHold = false; + @Override protected void doConfig() { if (addr != null) { @@ -73,29 +73,6 @@ public class DynamicCheat extends RAMListener { return expression; } - private Callback parseExpression(String expr) { - String functionName = "processCheat" + id; - String functionBody = "function " + functionName + "(old,val){" + (expr.contains("return") ? expr : "return " + expr) + "}"; - try { - MetaCheat.NASHORN_ENGINE.eval(functionBody); - return (RAMEvent e) -> { - try { - Object result = MetaCheat.NASHORN_INVOCABLE.invokeFunction(functionName, e.getOldValue(), e.getNewValue()); - if (result instanceof Number) { - return ((Number) result).intValue(); - } else { - System.err.println("Not able to handle non-numeric return value: " + result.getClass()); - return null; - } - } catch (ScriptException | NoSuchMethodException ex) { - return null; - } - }; - } catch (ScriptException ex) { - return null; - } - } - public static String escape(String in) { return in.replaceAll(";", "~~").replaceAll("\n","\\n"); } @@ -106,18 +83,19 @@ public class DynamicCheat extends RAMListener { public static final String DELIMITER = ";"; public String serialize() { - return escape(name.get()) + DELIMITER + return escape(cheatName) + DELIMITER + escape(name.get()) + DELIMITER + escape("$"+Integer.toHexString(addr.get())) + DELIMITER + escape(expression.get()); } static public DynamicCheat deserialize(String in) { String[] parts = in.split(DELIMITER); - String name = unescape(parts[0]); - Integer addr = Integer.parseInt(parts[1].substring(1), 16); - String expr = unescape(parts[2]); + String cheatName = unescape(parts[0]); + String name = unescape(parts[1]); + Integer addr = Integer.parseInt(parts[2].substring(1), 16); + String expr = unescape(parts[3]); - DynamicCheat out = new DynamicCheat(addr, expr); + DynamicCheat out = new DynamicCheat(cheatName, addr, Integer.parseInt(expr)); out.name.set(name); return out; } diff --git a/src/main/java/jace/cheat/MemoryCell.java b/src/main/java/jace/cheat/MemoryCell.java index 82e01ec..79aa70d 100644 --- a/src/main/java/jace/cheat/MemoryCell.java +++ b/src/main/java/jace/cheat/MemoryCell.java @@ -6,6 +6,7 @@ package jace.cheat; import java.util.ArrayList; + import javafx.beans.binding.BooleanBinding; import javafx.beans.property.IntegerProperty; import javafx.beans.property.SimpleIntegerProperty; @@ -13,7 +14,6 @@ import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; -import javafx.scene.shape.Shape; /** * @@ -32,6 +32,10 @@ public class MemoryCell implements Comparable { public ObservableList writeInstructions = FXCollections.observableList(new ArrayList<>()); public ObservableList writeInstructionsDisassembly = FXCollections.observableArrayList(new ArrayList<>()); public ObservableList execInstructionsDisassembly = FXCollections.observableArrayList(new ArrayList<>()); + private int x; + private int y; + private int width; + private int height; public static void setListener(ChangeListener l) { listener = l; @@ -46,22 +50,44 @@ public class MemoryCell implements Comparable { value.addListener(changeListener); } + public void setRect(int x, int y, int w, int h) { + this.x = x; + this.y = y; + this.width = w; + this.height = h; + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + @Override public int compareTo(MemoryCell o) { return address - o.address; } + @Override + public boolean equals(Object o) { + if (o instanceof MemoryCell) { + MemoryCell om = (MemoryCell) o; + return address == om.address || (x == om.x && y == om.y); + } + return false; + } + public boolean hasCounts() { return hasCount.get(); } - - private Shape shape; - - public void setShape(Shape s) { - shape = s; - } - - public Shape getShape() { - return shape; - } } diff --git a/src/main/java/jace/cheat/MetaCheat.java b/src/main/java/jace/cheat/MetaCheat.java index 54e9f6c..ef7bf70 100644 --- a/src/main/java/jace/cheat/MetaCheat.java +++ b/src/main/java/jace/cheat/MetaCheat.java @@ -1,14 +1,5 @@ package jace.cheat; -import jace.Emulator; -import jace.JaceApplication; -import jace.core.CPU; -import jace.core.Computer; -import jace.core.RAM; -import jace.core.RAMEvent; -import jace.core.RAMListener; -import jace.state.State; -import jace.ui.MetacheatUI; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; @@ -19,6 +10,14 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; + +import jace.Emulator; +import jace.JaceApplication; +import jace.core.CPU; +import jace.core.RAMEvent; +import jace.core.RAMListener; +import jace.state.State; +import jace.ui.MetacheatUI; import javafx.application.Platform; import javafx.beans.property.BooleanProperty; import javafx.beans.property.Property; @@ -28,20 +27,13 @@ import javafx.beans.property.StringProperty; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; -import javax.script.Invocable; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineManager; public class MetaCheat extends Cheats { - - static final ScriptEngine NASHORN_ENGINE = new ScriptEngineManager().getEngineByName("nashorn"); - static Invocable NASHORN_INVOCABLE = (Invocable) NASHORN_ENGINE; - - public static enum SearchType { + public enum SearchType { VALUE, TEXT, CHANGE } - public static enum SearchChangeType { + public enum SearchChangeType { NO_CHANGE, ANY_CHANGE, LESS, GREATER, AMOUNT } @@ -72,7 +64,7 @@ public class MetaCheat extends Cheats { public int historyLength = 10; private int startAddress = 0; - private int endAddress = 0x0AFFF; + private int endAddress = 0x0BFFF; private final StringProperty startAddressProperty = new SimpleStringProperty(Integer.toHexString(startAddress)); private final StringProperty endAddressProperty = new SimpleStringProperty(Integer.toHexString(endAddress)); private boolean byteSized = true; @@ -85,17 +77,16 @@ public class MetaCheat extends Cheats { private final ObservableList resultList = FXCollections.observableArrayList(); private final ObservableList snapshotList = FXCollections.observableArrayList(); - public MetaCheat(Computer computer) { - super(computer); + public MetaCheat() { addNumericValidator(startAddressProperty); addNumericValidator(endAddressProperty); addNumericValidator(searchValueProperty); addNumericValidator(changeByProperty); startAddressProperty.addListener((prop, oldVal, newVal) -> { - startAddress = Math.max(0, Math.min(65535, Integer.parseInt(newVal, 16))); + startAddress = Math.max(0, Math.min(65535, parseInt(newVal))); }); endAddressProperty.addListener((prop, oldVal, newVal) -> { - endAddress = Math.max(0, Math.min(65535, Integer.parseInt(newVal, 16))); + endAddress = Math.max(0, Math.min(65535, parseInt(newVal))); }); } @@ -139,24 +130,24 @@ public class MetaCheat extends Cheats { public void addCheat(DynamicCheat cheat) { cheatList.add(cheat); - computer.getMemory().addListener(cheat); + getMemory().addListener(cheat); cheat.addressProperty().addListener((prop, oldVal, newVal) -> { - computer.getMemory().removeListener(cheat); + getMemory().removeListener(cheat); cheat.doConfig(); - computer.getMemory().addListener(cheat); + getMemory().addListener(cheat); }); } public void removeCheat(DynamicCheat cheat) { cheat.active.set(false); - computer.getMemory().removeListener(cheat); + getMemory().removeListener(cheat); cheatList.remove(cheat); } @Override protected void unregisterListeners() { super.unregisterListeners(); - cheatList.stream().forEach(computer.getMemory()::removeListener); + cheatList.forEach(getMemory()::removeListener); } @Override @@ -167,7 +158,7 @@ public class MetaCheat extends Cheats { @Override public void detach() { super.detach(); - ui.detach(); + JaceApplication.getApplication().closeMetacheat(); } @Override @@ -230,54 +221,63 @@ public class MetaCheat extends Cheats { } public void newSearch() { - RAM memory = Emulator.computer.getMemory(); - resultList.clear(); - int compare = parseInt(searchValueProperty.get()); - for (int i = 0; i < 0x10000; i++) { - boolean signed = signedProperty.get(); - int val - = byteSized - ? signed ? memory.readRaw(i) : memory.readRaw(i) & 0x0ff - : signed ? memory.readWordRaw(i) : memory.readWordRaw(i) & 0x0ffff; - if (!searchType.equals(SearchType.VALUE) || val == compare) { - SearchResult result = new SearchResult(i, val); - resultList.add(result); + Emulator.withMemory(memory -> { + resultList.clear(); + int compare = parseInt(searchValueProperty.get()); + for (int i = 0; i < 0x10000; i++) { + boolean signed = signedProperty.get(); + int val + = byteSized + ? signed ? memory.readRaw(i) : memory.readRaw(i) & 0x0ff + : signed ? memory.readWordRaw(i) : memory.readWordRaw(i) & 0x0ffff; + if (!searchType.equals(SearchType.VALUE) || val == compare) { + SearchResult result = new SearchResult(i, val); + resultList.add(result); + } } - } + }); } public void performSearch() { - RAM memory = Emulator.computer.getMemory(); - boolean signed = signedProperty.get(); - resultList.removeIf((SearchResult result) -> { - int val = byteSized - ? signed ? memory.readRaw(result.address) : memory.readRaw(result.address) & 0x0ff - : signed ? memory.readWordRaw(result.address) : memory.readWordRaw(result.address) & 0x0ffff; - int last = result.lastObservedValue; - result.lastObservedValue = val; - switch (searchType) { - case VALUE: - int compare = parseInt(searchValueProperty.get()); - return compare != val; - case CHANGE: - switch (searchChangeType) { - case AMOUNT: - int amount = parseInt(searchChangeByProperty().getValue()); - return (val - last) != amount; - case GREATER: - return val <= last; - case ANY_CHANGE: - return val == last; - case LESS: - return val >= last; - case NO_CHANGE: - return val != last; + Emulator.withMemory(memory -> { + boolean signed = signedProperty.get(); + resultList.removeIf((SearchResult result) -> { + int val = byteSized + ? signed ? memory.readRaw(result.address) : memory.readRaw(result.address) & 0x0ff + : signed ? memory.readWordRaw(result.address) : memory.readWordRaw(result.address) & 0x0ffff; + int last = result.lastObservedValue; + result.lastObservedValue = val; + switch (searchType) { + case VALUE -> { + int compare = parseInt(searchValueProperty.get()); + return compare != val; } - break; - case TEXT: - break; - } - return false; + case CHANGE -> { + switch (searchChangeType) { + case AMOUNT -> { + int amount = parseInt(searchChangeByProperty().getValue()); + return (val - last) != amount; + } + case GREATER -> { + return val <= last; + } + case ANY_CHANGE -> { + return val == last; + } + case LESS -> { + return val >= last; + } + case NO_CHANGE -> { + return val != last; + } + } + } + + case TEXT -> { + } + } + return false; + }); }); } @@ -289,41 +289,36 @@ public class MetaCheat extends Cheats { } public void initMemoryView() { - RAM memory = Emulator.computer.getMemory(); - for (int addr = getStartAddress(); addr <= getEndAddress(); addr++) { - if (getMemoryCell(addr) == null) { - MemoryCell cell = new MemoryCell(); - cell.address = addr; - cell.value.set(memory.readRaw(addr)); - memoryCells.put(addr, cell); + Emulator.withMemory(memory -> { + for (int addr = getStartAddress(); addr <= getEndAddress(); addr++) { + if (getMemoryCell(addr) == null) { + MemoryCell cell = new MemoryCell(); + cell.address = addr; + cell.value.set(memory.readRaw(addr)); + memoryCells.put(addr, cell); + } } - } - if (memoryViewListener == null) { - memoryViewListener = memory.observe(RAMEvent.TYPE.ANY, startAddress, endAddress, this::processMemoryEvent); - listeners.add(memoryViewListener); - } + if (memoryViewListener == null) { + memoryViewListener = memory.observe("Metacheat memory viewer", RAMEvent.TYPE.ANY, startAddress, endAddress, this::processMemoryEvent); + listeners.add(memoryViewListener); + } + }); } int fadeCounter = 0; - int FADE_TIMER_VALUE = (int) (Emulator.computer.getMotherboard().getSpeedInHz() / 60); + int FADE_TIMER_VALUE = Emulator.withComputer(c-> (int) (c.getMotherboard().getSpeedInHz() / 60), 100); @Override public void tick() { - computer.cpu.performSingleTrace(); + Emulator.withComputer(c-> c.getCpu().performSingleTrace()); if (fadeCounter-- <= 0) { fadeCounter = FADE_TIMER_VALUE; memoryCells.values().stream() - .filter((cell) -> cell.hasCounts()) + .filter(MemoryCell::hasCounts) .forEach((cell) -> { - if (cell.execCount.get() > 0) { - cell.execCount.set(Math.max(0, cell.execCount.get() - fadeRate)); - } - if (cell.readCount.get() > 0) { - cell.readCount.set(Math.max(0, cell.readCount.get() - fadeRate)); - } - if (cell.writeCount.get() > 0) { - cell.writeCount.set(Math.max(0, cell.writeCount.get() - fadeRate)); - } + cell.execCount.set(Math.max(0, cell.execCount.get() - fadeRate)); + cell.readCount.set(Math.max(0, cell.readCount.get() - fadeRate)); + cell.writeCount.set(Math.max(0, cell.writeCount.get() - fadeRate)); if (MemoryCell.listener != null) { MemoryCell.listener.changed(null, cell, cell); } @@ -339,107 +334,90 @@ public class MetaCheat extends Cheats { private void processMemoryEvent(RAMEvent e) { MemoryCell cell = getMemoryCell(e.getAddress()); if (cell != null) { - CPU cpu = Emulator.computer.getCpu(); - int pc = cpu.getProgramCounter(); - String trace = cpu.getLastTrace(); - switch (e.getType()) { - case EXECUTE: - cell.execInstructionsDisassembly.add(trace); - if (cell.execInstructionsDisassembly.size() > historyLength) { - cell.execInstructionsDisassembly.remove(0); - } - case READ_OPERAND: - cell.execCount.set(Math.min(255, cell.execCount.get() + lightRate)); - break; - case WRITE: - cell.writeCount.set(Math.min(255, cell.writeCount.get() + lightRate)); - if (ui.isInspecting(cell.address)) { - if (pendingInspectorUpdates.incrementAndGet() < 5) { - Platform.runLater(() -> { - pendingInspectorUpdates.decrementAndGet(); - cell.writeInstructions.add(pc); - cell.writeInstructionsDisassembly.add(trace); - if (cell.writeInstructions.size() > historyLength) { - cell.writeInstructions.remove(0); - cell.writeInstructionsDisassembly.remove(0); - } - }); + Emulator.withComputer(c -> { + CPU cpu = c.getCpu(); + int pc = cpu.getProgramCounter(); + String trace = cpu.getLastTrace(); + switch (e.getType()) { + case EXECUTE: + cell.execInstructionsDisassembly.add(trace); + if (cell.execInstructionsDisassembly.size() > historyLength) { + cell.execInstructionsDisassembly.remove(0); } - } else { - cell.writeInstructions.add(cpu.getProgramCounter()); - cell.writeInstructionsDisassembly.add(cpu.getLastTrace()); - if (cell.writeInstructions.size() > historyLength) { - cell.writeInstructions.remove(0); - cell.writeInstructionsDisassembly.remove(0); + case READ_OPERAND: + cell.execCount.set(Math.min(255, cell.execCount.get() + lightRate)); + break; + case WRITE: + cell.writeCount.set(Math.min(255, cell.writeCount.get() + lightRate)); + if (ui.isInspecting(cell.address)) { + if (pendingInspectorUpdates.incrementAndGet() < 5) { + Platform.runLater(() -> { + pendingInspectorUpdates.decrementAndGet(); + cell.writeInstructions.add(pc); + cell.writeInstructionsDisassembly.add(trace); + if (cell.writeInstructions.size() > historyLength) { + cell.writeInstructions.remove(0); + cell.writeInstructionsDisassembly.remove(0); + } + }); + } + } else { + cell.writeInstructions.add(cpu.getProgramCounter()); + cell.writeInstructionsDisassembly.add(cpu.getLastTrace()); + if (cell.writeInstructions.size() > historyLength) { + cell.writeInstructions.remove(0); + cell.writeInstructionsDisassembly.remove(0); + } } - } - break; - default: - cell.readCount.set(Math.min(255, cell.readCount.get() + lightRate)); - if (ui.isInspecting(cell.address)) { - if (pendingInspectorUpdates.incrementAndGet() < 5) { - Platform.runLater(() -> { - pendingInspectorUpdates.decrementAndGet(); - cell.readInstructions.add(pc); - cell.readInstructionsDisassembly.add(trace); - if (cell.readInstructions.size() > historyLength) { - cell.readInstructions.remove(0); - cell.readInstructionsDisassembly.remove(0); - } - }); + break; + default: + cell.readCount.set(Math.min(255, cell.readCount.get() + lightRate)); + if (ui.isInspecting(cell.address)) { + if (pendingInspectorUpdates.incrementAndGet() < 5) { + Platform.runLater(() -> { + pendingInspectorUpdates.decrementAndGet(); + cell.readInstructions.add(pc); + cell.readInstructionsDisassembly.add(trace); + if (cell.readInstructions.size() > historyLength) { + cell.readInstructions.remove(0); + cell.readInstructionsDisassembly.remove(0); + } + }); + } + } else { + cell.readInstructions.add(cpu.getProgramCounter()); + cell.readInstructionsDisassembly.add(cpu.getLastTrace()); + if (cell.readInstructions.size() > historyLength) { + cell.readInstructions.remove(0); + cell.readInstructionsDisassembly.remove(0); + } } - } else { - cell.readInstructions.add(cpu.getProgramCounter()); - cell.readInstructionsDisassembly.add(cpu.getLastTrace()); - if (cell.readInstructions.size() > historyLength) { - cell.readInstructions.remove(0); - cell.readInstructionsDisassembly.remove(0); - } - } - } - cell.value.set(e.getNewValue()); + } + cell.value.set(e.getNewValue()); + }); } } public void saveCheats(File saveFile) { - FileWriter writer = null; - try { - writer = new FileWriter(saveFile); + try (FileWriter writer = new FileWriter(saveFile)) { for (DynamicCheat cheat : cheatList) { writer.write(cheat.serialize()); writer.write("\n"); } - writer.close(); } catch (IOException ex) { Logger.getLogger(MetaCheat.class.getName()).log(Level.SEVERE, null, ex); - } finally { - try { - writer.close(); - } catch (IOException ex) { - Logger.getLogger(MetaCheat.class.getName()).log(Level.SEVERE, null, ex); - } } } public void loadCheats(File saveFile) { - BufferedReader in = null; - try { - in = new BufferedReader(new FileReader(saveFile)); - StringBuilder guts = new StringBuilder(); + try (BufferedReader in = new BufferedReader(new FileReader(saveFile))) { String line; while ((line = in.readLine()) != null) { DynamicCheat cheat = DynamicCheat.deserialize(line); addCheat(cheat); } - in.close(); } catch (IOException ex) { Logger.getLogger(MetaCheat.class.getName()).log(Level.SEVERE, null, ex); - } finally { - try { - in.close(); - } catch (IOException ex) { - Logger.getLogger(MetaCheat.class.getName()).log(Level.SEVERE, null, ex); - } } } } diff --git a/src/main/java/jace/cheat/MontezumasRevengeCheats.java b/src/main/java/jace/cheat/MontezumasRevengeCheats.java index ecd9c32..bfe26e8 100644 --- a/src/main/java/jace/cheat/MontezumasRevengeCheats.java +++ b/src/main/java/jace/cheat/MontezumasRevengeCheats.java @@ -3,8 +3,6 @@ package jace.cheat; import jace.Emulator; import jace.EmulatorUILogic; import jace.config.ConfigurableField; -import jace.core.Computer; -import jace.core.RAM; import jace.core.RAMEvent; import javafx.event.EventHandler; import javafx.scene.Node; @@ -54,10 +52,6 @@ public class MontezumasRevengeCheats extends Cheats { public static int lastX = 0; - public MontezumasRevengeCheats(Computer computer) { - super(computer); - } - double mouseX; double mouseY; EventHandler listener = (event) -> { @@ -71,54 +65,55 @@ public class MontezumasRevengeCheats extends Cheats { @Override public void registerListeners() { - RAM memory = Emulator.computer.memory; if (repulsiveHack) { - addCheat(RAMEvent.TYPE.WRITE, this::repulsiveBehavior, 0x1508, 0x1518); + addCheat("Repulsive", RAMEvent.TYPE.WRITE, this::repulsiveBehavior, 0x1508, 0x1518); } if (featherFall) { - addCheat(RAMEvent.TYPE.WRITE, this::featherFallBehavior, PLAYER_Y); + addCheat("Feather fall", RAMEvent.TYPE.WRITE, this::featherFallBehavior, PLAYER_Y); // Bypass the part that realizes you should die when you hit the floor - bypassCode(0x6bb3, 0x6bb4); + bypassCode("Feather fall code hack", 0x6bb3, 0x6bb4); } if (moonJump) { - addCheat(RAMEvent.TYPE.WRITE, this::moonJumpBehavior, Y_VELOCITY); + addCheat("Moon jump", RAMEvent.TYPE.WRITE, this::moonJumpBehavior, Y_VELOCITY); } if (infiniteLives) { - forceValue(11, LIVES); + forceValue("Infinite lives", 11, LIVES); } if (safePassage) { - //blank out pattern for floors/doors - for (int addr = 0x0b54; addr <= 0xb5f; addr++) { - memory.write(addr, (byte) 0, false, false); - memory.write(addr + 0x0400, (byte) 0, false, false); - } - memory.write(0x0b50, (byte) 0b11010111, false, false); - memory.write(0x0b51, (byte) 0b00010000, false, false); - memory.write(0x0b52, (byte) 0b10001000, false, false); - memory.write(0x0b53, (byte) 0b10101010, false, false); - memory.write(0x0f50, (byte) 0b10101110, false, false); - memory.write(0x0f51, (byte) 0b00001000, false, false); - memory.write(0x0f52, (byte) 0b10000100, false, false); - memory.write(0x0f53, (byte) 0b11010101, false, false); - forceValue(32, FLOOR_TIMER); - forceValue(32, HAZARD_TIMER); - forceValue(1, HAZARD_FLAG); + Emulator.withMemory(memory -> { + //blank out pattern for floors/doors + for (int addr = 0x0b54; addr <= 0xb5f; addr++) { + memory.write(addr, (byte) 0, false, false); + memory.write(addr + 0x0400, (byte) 0, false, false); + } + memory.write(0x0b50, (byte) 0b11010111, false, false); + memory.write(0x0b51, (byte) 0b00010000, false, false); + memory.write(0x0b52, (byte) 0b10001000, false, false); + memory.write(0x0b53, (byte) 0b10101010, false, false); + memory.write(0x0f50, (byte) 0b10101110, false, false); + memory.write(0x0f51, (byte) 0b00001000, false, false); + memory.write(0x0f52, (byte) 0b10000100, false, false); + memory.write(0x0f53, (byte) 0b11010101, false, false); + forceValue("Hack floor timer", 32, FLOOR_TIMER); + forceValue("Hack hazard timer", 32, HAZARD_TIMER); + forceValue("Hack hazard flag", 1, HAZARD_FLAG); + }); } if (scoreHack) { // Score: 900913 - forceValue(0x90, SCORE); - forceValue(0x09, SCORE + 1); - forceValue(0x13, SCORE + 2); + forceValue("Hack score 1", 0x90, SCORE); + forceValue("Hack score 2", 0x09, SCORE + 1); + forceValue("Hack score 3", 0x13, SCORE + 2); } if (snakeCharmer) { // Skip the code that determines you're touching an enemy - bypassCode(0x07963, 0x07964); + bypassCode("Snake charmer", 0x07963, 0x07964); } if (mouseHack) { EmulatorUILogic.addMouseListener(listener); @@ -132,11 +127,11 @@ public class MontezumasRevengeCheats extends Cheats { } private void repulsiveBehavior(RAMEvent e) { - int playerX = computer.getMemory().readRaw(PLAYER_X); - int playerY = computer.getMemory().readRaw(PLAYER_Y); + int playerX = getMemory().readRaw(PLAYER_X); + int playerY = getMemory().readRaw(PLAYER_Y); for (int num = 7; num > 0; num--) { - int monsterX = computer.getMemory().readRaw(PLAYER_X + num); - int monsterY = computer.getMemory().readRaw(PLAYER_Y + num); + int monsterX = getMemory().readRaw(PLAYER_X + num); + int monsterY = getMemory().readRaw(PLAYER_Y + num); if (monsterX != 0 && monsterY != 0) { if (Math.abs(monsterY - playerY) < 19) { if (Math.abs(monsterX - playerX) < 7) { @@ -149,7 +144,7 @@ public class MontezumasRevengeCheats extends Cheats { monsterX = 80; } } - computer.getMemory().write(PLAYER_X + num, (byte) monsterX, false, false); + getMemory().write(PLAYER_X + num, (byte) monsterX, false, false); } } } @@ -159,9 +154,9 @@ public class MontezumasRevengeCheats extends Cheats { private void featherFallBehavior(RAMEvent yCoordChangeEvent) { if (yCoordChangeEvent.getNewValue() != yCoordChangeEvent.getOldValue()) { - int yVel = computer.getMemory().readRaw(Y_VELOCITY); + int yVel = getMemory().readRaw(Y_VELOCITY); if (yVel > MAX_VEL) { - computer.getMemory().write(Y_VELOCITY, (byte) MAX_VEL, false, false); + getMemory().write(Y_VELOCITY, (byte) MAX_VEL, false, false); } } } @@ -177,7 +172,7 @@ public class MontezumasRevengeCheats extends Cheats { } private boolean inStartingSequence() { - int roomLevel = computer.getMemory().readRaw(ROOM_LEVEL); + int roomLevel = getMemory().readRaw(ROOM_LEVEL); return roomLevel == -1; } @@ -198,7 +193,7 @@ public class MontezumasRevengeCheats extends Cheats { private void mouseClicked(MouseButton button) { byte newX = (byte) (mouseX * X_MAX); byte newY = (byte) (mouseY * Y_MAX); - computer.memory.write(PLAYER_X, newX, false, false); - computer.memory.write(PLAYER_Y, newY, false, false); + getMemory().write(PLAYER_X, newX, false, false); + getMemory().write(PLAYER_Y, newY, false, false); } } \ No newline at end of file diff --git a/src/main/java/jace/cheat/PrinceOfPersiaCheats.java b/src/main/java/jace/cheat/PrinceOfPersiaCheats.java index 77b6545..3ca7374 100644 --- a/src/main/java/jace/cheat/PrinceOfPersiaCheats.java +++ b/src/main/java/jace/cheat/PrinceOfPersiaCheats.java @@ -1,28 +1,24 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.cheat; import jace.EmulatorUILogic; import jace.apple2e.RAM128k; -import jace.apple2e.SoftSwitches; import jace.config.ConfigurableField; -import jace.core.Computer; import jace.core.PagedMemory; import jace.core.RAMEvent; import javafx.event.EventHandler; @@ -145,17 +141,13 @@ public class PrinceOfPersiaCheats extends Cheats { // This is the correct value for an open exit door. public static int ExitOpen = 172; - public PrinceOfPersiaCheats(Computer computer) { - super(computer); - } - double mouseX; double mouseY; EventHandler listener = (event) -> { Node source = (Node) event.getSource(); mouseX = event.getSceneX() / source.getBoundsInLocal().getWidth(); mouseY = event.getSceneY() / source.getBoundsInLocal().getHeight(); - if (event.isPrimaryButtonDown()) { + if (event.isPrimaryButtonDown() || event.isSecondaryButtonDown()) { mouseClicked(event.getButton()); } }; @@ -173,19 +165,19 @@ public class PrinceOfPersiaCheats extends Cheats { @Override public void registerListeners() { if (velocityHack) { - addCheat(RAMEvent.TYPE.READ_DATA, true, this::velocityHackBehavior, CharYVel); + addCheat("Hack velocity", RAMEvent.TYPE.READ_DATA, true, this::velocityHackBehavior, CharYVel); } if (invincibilityHack) { - forceValue(3, true, KidStrength); + forceValue("Hack invincibility", 3, true, KidStrength); } if (sleepHack) { - forceValue(0, true, EnemyAlert); + forceValue("Go to sleep!", 0, true, EnemyAlert); } if (swordHack) { - forceValue(1, true, hasSword); + forceValue("Can haz sword", 1, true, hasSword); } if (timeHack) { - forceValue(0x69, true, MinLeft); + forceValue("Hack time", 0x69, true, MinLeft); } if (mouseHack) { EmulatorUILogic.addMouseListener(listener); @@ -234,7 +226,7 @@ public class PrinceOfPersiaCheats extends Cheats { // Note: POP uses a 255-pixel horizontal axis, Pixels 0-57 are offscreen to the left // and 198-255 offscreen to the right. // System.out.println("Clicked on " + col + "," + row + " -- screen " + (x * 280) + "," + (y * 192)); - RAM128k mem = (RAM128k) computer.getMemory(); + RAM128k mem = (RAM128k) getMemory(); PagedMemory auxMem = mem.getAuxMemory(); if (button == MouseButton.PRIMARY) { @@ -262,7 +254,7 @@ public class PrinceOfPersiaCheats extends Cheats { byte warpX = (byte) (x * 140 + 58); // This aliases the Y coordinate so the prince is on the floor at the correct spot. byte warpY = (byte) ((row * 63) + 54); -// System.out.println("Warping to " + warpX + "," + warpY); + // System.out.println("Warping to " + warpX + "," + warpY); auxMem.writeByte(KidX, warpX); auxMem.writeByte(KidY, warpY); auxMem.writeByte(KidBlockX, (byte) col); @@ -280,7 +272,7 @@ public class PrinceOfPersiaCheats extends Cheats { * @param direction */ public void performAction(int row, int col, int direction) { - RAM128k mem = (RAM128k) computer.getMemory(); + RAM128k mem = (RAM128k) getMemory(); PagedMemory auxMem = mem.getAuxMemory(); byte currentScrn = auxMem.readByte(KidScrn); if (col < 0) { @@ -291,7 +283,7 @@ public class PrinceOfPersiaCheats extends Cheats { } currentScrn = (byte) scrnLeft; byte prev = auxMem.readByte(PREV + row); - byte sprev = auxMem.readByte(SPREV + row); + // byte sprev = auxMem.readByte(SPREV + row); // If the block to the left is gate, let's lie about it being open... for science // This causes odd-looking screen behavior but it gets the job done. if (prev == 4) { diff --git a/src/main/java/jace/cheat/ProgramIdentity.java b/src/main/java/jace/cheat/ProgramIdentity.java new file mode 100644 index 0000000..9914f0b --- /dev/null +++ b/src/main/java/jace/cheat/ProgramIdentity.java @@ -0,0 +1,119 @@ +package jace.cheat; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.zip.CRC32; + +import jace.apple2e.RAM128k; +import jace.apple2e.SoftSwitches; +import jace.core.PagedMemory; +import jace.core.RAMEvent; +import jace.core.RAMEvent.TYPE; + +public class ProgramIdentity extends Cheats { + private Map programIdentities; + + @Override + public void registerListeners() { + addCheat("Track execution", TYPE.ANY, this::trackActivity, 0, 0x0ffff); + } + + @Override + protected String getDeviceName() { + return "Program Identity"; + } + + int INTERVAL = 1000000; + int THRESHOLD_VALUE = 10000; + int CLIP_VALUE = THRESHOLD_VALUE * 2; + int DECAY = THRESHOLD_VALUE / 2; + + int[] programRegions = new int[512]; + private void trackActivity(RAMEvent e) { + int bank = e.getAddress() >> 8; + if (bank >= 0xc0 && bank < 0xd0) { + // Skip I/O region + return; + } + // Detect language card ram execution + if (bank >= 0xd0 && SoftSwitches.LCRAM.isOff()) { + // Skip rom execution + return; + } + if (!e.isMainMemory()) { + bank += 256; + } + if (e.getType() == RAMEvent.TYPE.EXECUTE) { + programRegions[bank] = Math.min(CLIP_VALUE, programRegions[bank] + 1); + } else if (e.getType() == RAMEvent.TYPE.WRITE) { + programRegions[bank] = 0; + } + } + + private String generateChecksum() { + CRC32 crc = new CRC32(); + RAM128k ram = (RAM128k) getMemory(); + int bankCount = 0; + for (int i=0; i < 512; i++) { + if (programRegions[i] > THRESHOLD_VALUE) { + PagedMemory mem = ram.getMainMemory(); + if (i >= 0x0d0 && i < 0x0100) { + mem = ram.getLanguageCard(); + } else if (i >= 0x0100 && i < 0x01d0) { + mem = ram.getAuxMemory(); + } else if (i >= 0x01d0) { + mem = ram.getAuxLanguageCard(); + } + bankCount++; + crc.update(mem.getMemoryPage((i & 0x0ff) << 8)); + } + } + return Long.toHexString(crc.getValue())+"-"+bankCount; + } + + @Override + public void resume() { + super.resume(); + Arrays.fill(programRegions, 0); + readProgramIdentities(); + } + + int counter = 0; + String lastChecksum = ""; + @Override + public void tick() { + if (counter++ >= INTERVAL) { + String checksum = generateChecksum(); + if (!checksum.equals(lastChecksum)) { + String identity = programIdentities.getOrDefault(checksum, "UNKNOWN"); + System.out.println(checksum + "," + identity); + lastChecksum = checksum; + } + counter = 0; + for (int i=0; i < 512; i++) { + programRegions[i] = Math.max(0, programRegions[i] - DECAY); + } + } + } + + private void readProgramIdentities() { + // Read from resources file + InputStream in = Cheats.class.getResourceAsStream("/jace/cheats/program-identities.txt"); + try { + programIdentities = new HashMap<>(); + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + String line; + while ((line = reader.readLine()) != null) { + String[] parts = line.split(","); + programIdentities.put(parts[0], parts[1]); + } + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/jace/config/ClassSelection.java b/src/main/java/jace/config/ClassSelection.java deleted file mode 100644 index ca53310..0000000 --- a/src/main/java/jace/config/ClassSelection.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package jace.config; - -import jace.core.Utility; -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -/** - * - * @author Brendan Robert (BLuRry) brendan.robert@gmail.com - */ - -public class ClassSelection extends DynamicSelection { - - Class template = null; - - public ClassSelection(Class supertype, Class defaultValue) { - super(defaultValue); - template = supertype; - } - - @Override - public LinkedHashMap getSelections() { - LinkedHashMap selections = new LinkedHashMap<>(); - Set allClasses = Utility.findAllSubclasses(template); - if (!allClasses.contains(null)) { - allClasses.add(null); - } - List> values = new ArrayList<>(); - if (allowNull()) { - values.add(new Entry() { - - @Override - public Class getKey() { - return null; - } - - @Override - public String getValue() { - return "***Empty***"; - } - - @Override - public String setValue(String v) { - throw new UnsupportedOperationException("Not supported yet."); - } - }); - } - for (final Class c : allClasses) { - Entry entry = new Map.Entry() { - - @Override - public Class getKey() { - return c; - } - - @Override - public String getValue() { - if (c == null) { - return "**Empty**"; - } - if (c.isAnnotationPresent(Name.class)) { - return ((Name) c.getAnnotation(Name.class)).value(); - } - return c.getSimpleName(); - } - - @Override - public String setValue(String value) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public String toString() { - return getValue(); - } - - @Override - public boolean equals(Object obj) { - return super.equals(obj) || obj == getKey() || getKey() != null && getKey().equals(obj); - } - }; - values.add(entry); - } - Collections.sort(values, (Entry o1, Entry o2) -> { - if (o1.getKey() == null) { - return -1; - } - if (o2.getKey() == null) { - return 1; - } else { - return (o1.getValue().compareTo(o2.getValue())); - } - }); - values.stream().forEach((entry) -> { - Class key = entry.getKey(); - selections.put(key, entry.getValue()); - }); - return selections; - } - - @Override - public boolean allowNull() { - return false; - } - - @Override - public void setValue(Class value) { - Object v = value; - if (v != null && v instanceof String) { - super.setValueByMatch((String) v); - return; - } - super.setValue(value); - } -} \ No newline at end of file diff --git a/src/main/java/jace/config/ConfigurableField.java b/src/main/java/jace/config/ConfigurableField.java index 608f4b0..1f80582 100644 --- a/src/main/java/jace/config/ConfigurableField.java +++ b/src/main/java/jace/config/ConfigurableField.java @@ -1,21 +1,19 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.config; import java.lang.annotation.ElementType; @@ -39,10 +37,10 @@ import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface ConfigurableField { - public String name(); - public String shortName() default ""; - public String defaultValue() default ""; - public String description() default ""; - public String category() default "General"; - public boolean enablesDevice() default false; + String name(); + String shortName() default ""; + String defaultValue() default ""; + String description() default ""; + String category() default "General"; + boolean enablesDevice() default false; } \ No newline at end of file diff --git a/src/main/java/jace/config/Configuration.java b/src/main/java/jace/config/Configuration.java index 1527e26..aa0fcb9 100644 --- a/src/main/java/jace/config/Configuration.java +++ b/src/main/java/jace/config/Configuration.java @@ -1,40 +1,33 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.config; -import jace.Emulator; -import jace.EmulatorUILogic; -import jace.core.Computer; -import jace.core.Keyboard; -import jace.core.Utility; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InvalidClassException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.ObjectStreamException; import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.GenericArrayType; -import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayList; @@ -47,9 +40,16 @@ import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.TreeMap; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Stream; + +import jace.Emulator; +import jace.EmulatorUILogic; +import jace.core.Keyboard; +import jace.core.Utility; +import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.control.TreeItem; import javafx.scene.image.ImageView; @@ -60,14 +60,10 @@ import javafx.scene.image.ImageView; * @author Brendan Robert (BLuRry) brendan.robert@gmail.com */ public class Configuration implements Reconfigurable { + public EmulatorUILogic ui; - private static Method findAnyMethodByName(Class aClass, String m) { - for (Method method : aClass.getMethods()) { - if (method.getName().equals(m)) { - return method; - } - } - return null; + public Configuration() { + ui = Emulator.getUILogic(); } static ConfigurableField getConfigurableFieldInfo(Reconfigurable subject, String settingName) { @@ -85,15 +81,6 @@ public class Configuration implements Reconfigurable { return (f != null && !f.shortName().equals("")) ? f.shortName() : longName; } - public static InvokableAction getInvokableActionInfo(Reconfigurable subject, String actionName) { - for (Method m : subject.getClass().getMethods()) { - if (m.getName().equals(actionName) && m.isAnnotationPresent(InvokableAction.class)) { - return m.getAnnotation(InvokableAction.class); - } - } - return null; - } - public static Optional getChangedIcon() { return Utility.loadIcon("icon_exclaim.gif").map(ImageView::new); } @@ -120,6 +107,7 @@ public class Configuration implements Reconfigurable { * configuration 2) Provide a simple persistence mechanism to load/store * configuration */ + @SuppressWarnings("all") public static class ConfigNode extends TreeItem implements Serializable { public transient ConfigNode root; @@ -144,14 +132,21 @@ public class Configuration implements Reconfigurable { private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException { - children = super.getChildren(); + // Create children list if it doesn't exist + if (children == null) { + children = FXCollections.observableArrayList(); + children.setAll(getChildren()); + } + children.setAll(super.getChildren()); id = (String) in.readObject(); name = (String) in.readObject(); - settings = (Map) in.readObject(); - hotkeys = (Map) in.readObject(); + settings = (Map) in.readObject(); + hotkeys = (Map) in.readObject(); Object[] nodeArray = (Object[]) in.readObject(); - for (Object child : nodeArray) { - children.add((ConfigNode) child); + synchronized (children) { + for (Object child : nodeArray) { + children.add((ConfigNode) child); + } } } @@ -189,17 +184,16 @@ public class Configuration implements Reconfigurable { } public void setFieldValue(String field, Serializable value) { + setChanged(true); if (value != null) { if (value.equals(getFieldValue(field))) { return; } } else { if (getFieldValue(field) == null) { - setChanged(false); return; } } - setChanged(true); setRawFieldValue(field, value); } @@ -216,19 +210,23 @@ public class Configuration implements Reconfigurable { } @Override - public ObservableList getChildren() { + final public ObservableList getChildren() { return super.getChildren(); } private boolean removeChild(String childName) { ConfigNode child = findChild(childName); - return children.remove(child); + synchronized (children) { + return children.remove(child); + } } private ConfigNode findChild(String id) { - for (ConfigNode node : children) { - if (id.equalsIgnoreCase(node.id)) { - return node; + synchronized (children) { + for (ConfigNode node : children) { + if (id.equalsIgnoreCase(node.id)) { + return node; + } } } return null; @@ -245,7 +243,9 @@ public class Configuration implements Reconfigurable { index++; } } - children.add(index, newChild); + synchronized (children) { + children.add(index, newChild); + } } private void setChanged(boolean b) { @@ -258,40 +258,47 @@ public class Configuration implements Reconfigurable { } public Stream getTreeAsStream() { - return Stream.concat( - Stream.of(this), - children.stream().flatMap(ConfigNode::getTreeAsStream)); + synchronized (children) { + return Stream.concat( + Stream.of(this), + children.stream().flatMap(ConfigNode::getTreeAsStream)); + } } } public static ConfigNode BASE; - public static EmulatorUILogic ui = Emulator.logic; - public static Computer emulator = Emulator.computer; @ConfigurableField(name = "Autosave Changes", description = "If unchecked, changes are only saved when the Save button is pressed.") public static boolean saveAutomatically = false; public static void buildTree() { BASE = new ConfigNode(new Configuration()); - buildTree(BASE, new LinkedHashSet()); + Set visited = new LinkedHashSet<>(); + buildTree(BASE, visited); + Emulator.withComputer(c->{ + ConfigNode computer = new ConfigNode(BASE, c); + BASE.putChild(c.getName(), computer); + buildTree(computer, visited); + }); } + @SuppressWarnings("all") private static void buildTree(ConfigNode node, Set visited) { if (node.subject == null) { return; } - for (Method m : node.subject.getClass().getMethods()) { - if (!m.isAnnotationPresent(InvokableAction.class)) { - continue; - } - InvokableAction action = m.getDeclaredAnnotation(InvokableAction.class); - node.hotkeys.put(m.getName(), action.defaultKeyMapping()); - } + InvokableActionRegistry registry = InvokableActionRegistry.getInstance(); + registry.getStaticMethodNames(node.subject.getClass()).stream().forEach((name) -> + node.hotkeys.put(name, registry.getStaticMethodInfo(name).defaultKeyMapping()) + ); + registry.getInstanceMethodNames(node.subject.getClass()).stream().forEach((name) -> + node.hotkeys.put(name, registry.getInstanceMethodInfo(name).defaultKeyMapping()) + ); for (Field f : node.subject.getClass().getFields()) { // System.out.println("Evaluating field " + f.getName()); try { Object o = f.get(node.subject); - if (!f.getType().isPrimitive() && f.getType() != String.class && visited.contains(o)) { + if (o == null || !f.getType().isPrimitive() && f.getType() != String.class && visited.contains(o)) { continue; } visited.add(o); @@ -301,7 +308,7 @@ public class Configuration implements Reconfigurable { // if (o.getClass().isAssignableFrom(Reconfigurable.class)) { // if (Reconfigurable.class.isAssignableFrom(o.getClass())) { if (f.isAnnotationPresent(ConfigurableField.class)) { - if (o != null && ISelection.class.isAssignableFrom(o.getClass())) { + if (ISelection.class.isAssignableFrom(o.getClass())) { ISelection selection = (ISelection) o; node.setRawFieldValue(f.getName(), (Serializable) selection.getSelections().get(selection.getValue())); } else { @@ -309,16 +316,14 @@ public class Configuration implements Reconfigurable { } continue; } - if (o == null) { - continue; - } - if (o instanceof Reconfigurable) { - Reconfigurable r = (Reconfigurable) o; + if (o instanceof Reconfigurable r) { ConfigNode child = node.findChild(r.getName()); if (child == null || !child.subject.equals(o)) { child = new ConfigNode(node, r); node.putChild(f.getName(), child); + } else { + Logger.getLogger(Configuration.class.getName()).severe("Unable to find child named %s for node %s".formatted(r.getName(), node.name)); } buildTree(child, visited); } else if (o.getClass().isArray()) { @@ -331,8 +336,7 @@ public class Configuration implements Reconfigurable { if (Optional.class.isAssignableFrom(type)) { Type genericTypes = f.getGenericType(); // System.out.println("Looking at generic parmeters " + genericTypes.getTypeName() + " for reconfigurable class, type " + genericTypes.getClass().getName()); - if (genericTypes instanceof GenericArrayType) { - GenericArrayType aType = (GenericArrayType) genericTypes; + if (genericTypes instanceof GenericArrayType aType) { ParameterizedType pType = (ParameterizedType) aType.getGenericComponentType(); if (pType.getActualTypeArguments().length != 1) { continue; @@ -346,11 +350,13 @@ public class Configuration implements Reconfigurable { continue; } - for (Optional child : (Optional[]) o) { - if (child.isPresent()) { - children.add(child.get()); - } else { - children.add(null); + synchronized (children) { + for (Optional child : (Optional[]) o) { + if (child.isPresent()) { + children.add(child.get()); + } else { + children.add(null); + } } } } @@ -386,7 +392,6 @@ public class Configuration implements Reconfigurable { defaultKeyMapping = "meta+ctrl+s" ) public static void saveSettings() { - FileOutputStream fos = null; { ObjectOutputStream oos = null; try { @@ -417,29 +422,29 @@ public class Configuration implements Reconfigurable { defaultKeyMapping = "meta+ctrl+r" ) public static void loadSettings() { - { - boolean successful = false; - ObjectInputStream ois = null; + boolean successful = false; + ObjectInputStream ois = null; + try { + ois = new ObjectInputStream(new FileInputStream(getSettingsFile())); + ConfigNode newRoot = (ConfigNode) ois.readObject(); + applyConfigTree(newRoot, BASE); + successful = true; + } catch (FileNotFoundException ex) { + // This just means there are no settings to be saved -- just ignore it. + } catch (InvalidClassException | NullPointerException ex) { + Logger.getLogger(Configuration.class.getName()).log(Level.WARNING, "Unable to load settings, Jace version is newer and incompatible with old settings."); + } catch (ClassNotFoundException | IOException ex) { + Logger.getLogger(Configuration.class.getName()).log(Level.SEVERE, null, ex); + } finally { try { - ois = new ObjectInputStream(new FileInputStream(getSettingsFile())); - ConfigNode newRoot = (ConfigNode) ois.readObject(); - applyConfigTree(newRoot, BASE); - successful = true; - } catch (FileNotFoundException ex) { - // This just means there are no settings to be saved -- just ignore it. - } catch (ClassNotFoundException | IOException ex) { - Logger.getLogger(Configuration.class.getName()).log(Level.SEVERE, null, ex); - } finally { - try { - if (ois != null) { - ois.close(); - } - if (!successful) { - applySettings(BASE); - } - } catch (IOException ex) { - Logger.getLogger(Configuration.class.getName()).log(Level.SEVERE, null, ex); + if (ois != null) { + ois.close(); } + if (!successful) { + applySettings(BASE); + } + } catch (IOException ex) { + Logger.getLogger(Configuration.class.getName()).log(Level.SEVERE, null, ex); } } } @@ -452,6 +457,34 @@ public class Configuration implements Reconfigurable { return new File(System.getProperty("user.dir"), ".jace.conf"); } + public static void registerKeyHandlers() { + registerKeyHandlers(BASE, true); + } + + public static void registerKeyHandlers(ConfigNode node, boolean recursive) { + Keyboard.unregisterAllHandlers(node.subject); + InvokableActionRegistry registry = InvokableActionRegistry.getInstance(); + node.hotkeys.keySet().stream().forEach((name) -> { + InvokableAction action = registry.getStaticMethodInfo(name); + if (action != null) { + for (String code : node.hotkeys.get(name)) { + Keyboard.registerInvokableAction(action, node.subject, registry.getStaticFunction(name), code); + } + } + action = registry.getInstanceMethodInfo(name); + if (action != null) { + for (String code : node.hotkeys.get(name)) { + Keyboard.registerInvokableAction(action, node.subject, registry.getInstanceFunction(name), code); + } + } + }); + if (recursive) { + node.getChildren().stream().forEach((child) -> { + registerKeyHandlers(child, true); + }); + } + } + /** * Apply settings from node tree to the object model This also calls * "reconfigure" on objects in sequence @@ -461,33 +494,29 @@ public class Configuration implements Reconfigurable { * descendants */ public static boolean applySettings(ConfigNode node) { - boolean resume = false; - if (node == BASE) { - resume = Emulator.computer.pause(); - } - boolean hasChanged = false; - if (node.changed) { - doApply(node); - hasChanged = true; - } + AtomicBoolean hasChanged = new AtomicBoolean(false); - // Now that the object structure reflects the current configuration, - // process reconfiguration from the children, etc. - for (ConfigNode child : node.getChildren()) { - hasChanged |= applySettings(child); - } + Emulator.whileSuspended(c-> { + if (node.changed) { + doApply(node); + hasChanged.set(true); + } - if (node.equals(BASE) && hasChanged) { + // Now that the object structure reflects the current configuration, + // process reconfiguration from the children, etc. + for (ConfigNode child : node.getChildren()) { + if (applySettings(child)) hasChanged.set(true); + } + }); + + if (node.equals(BASE) && hasChanged.get()) { buildTree(); } - if (resume) { - Emulator.computer.resume(); - } - - return hasChanged; + return hasChanged.get(); } + @SuppressWarnings("all") private static void applyConfigTree(ConfigNode newRoot, ConfigNode oldRoot) { if (oldRoot == null || newRoot == null) { return; @@ -509,18 +538,10 @@ public class Configuration implements Reconfigurable { }); } + @SuppressWarnings("all") private static void doApply(ConfigNode node) { List removeList = new ArrayList<>(); - Keyboard.unregisterAllHandlers(node.subject); - node.hotkeys.keySet().stream().forEach((m) -> { - Method method = findAnyMethodByName(node.subject.getClass(), m); - if (method != null) { - InvokableAction action = method.getAnnotation(InvokableAction.class); - for (String code : node.hotkeys.get(m)) { - Keyboard.registerInvokableAction(action, node.subject, method, code); - } - } - }); + registerKeyHandlers(node, false); for (String f : node.settings.keySet()) { try { @@ -585,7 +606,7 @@ public class Configuration implements Reconfigurable { String fieldName = parts[1]; ConfigNode n = shortNames.get(deviceName.toLowerCase()); if (n == null) { - System.err.println("Unable to find device named " + deviceName + ", try one of these: " + Utility.join(shortNames.keySet(), ", ")); + System.err.println("Unable to find device named " + deviceName + ", try one of these: " + String.join(", ", shortNames.keySet())); continue; } @@ -607,7 +628,7 @@ public class Configuration implements Reconfigurable { } } if (!found) { - System.err.println("Unable to find property " + fieldName + " for device " + deviceName + ". Try one of these: " + Utility.join(shortFieldNames, ", ")); + System.err.println("Unable to find property " + fieldName + " for device " + deviceName + ". Try one of these: " + String.join(", ", shortFieldNames)); } } } @@ -615,27 +636,29 @@ public class Configuration implements Reconfigurable { private static void buildNodeMap(ConfigNode n, Map shortNames) { // System.out.println("Encountered " + n.subject.getShortName().toLowerCase()); shortNames.put(n.subject.getShortName().toLowerCase(), n); - n.getChildren().stream().forEach((c) -> { - buildNodeMap(c, shortNames); - }); + synchronized (n.getChildren()) { + n.getChildren().stream().forEach((c) -> { + buildNodeMap(c, shortNames); + }); + } } - private static void printTree(ConfigNode n, String prefix, int i) { - n.getAllSettingNames().stream().forEach((setting) -> { - for (int j = 0; j < i; j++) { - System.out.print(" "); - } - ConfigurableField f = null; - try { - f = n.subject.getClass().getField(setting).getAnnotation(ConfigurableField.class); - } catch (NoSuchFieldException | SecurityException ex) { - Logger.getLogger(Configuration.class.getName()).log(Level.SEVERE, null, ex); - } - String sn = (f != null && !f.shortName().equals("")) ? f.shortName() : setting; - System.out.println(prefix + ">>" + setting + " (" + n.subject.getShortName() + "." + sn + ")"); - }); - n.getChildren().stream().forEach((c) -> { - printTree(c, prefix + "." + c.toString(), i + 1); - }); - } + // private static void printTree(ConfigNode n, String prefix, int i) { + // n.getAllSettingNames().stream().forEach((setting) -> { + // for (int j = 0; j < i; j++) { + // System.out.print(" "); + // } + // ConfigurableField f = null; + // try { + // f = n.subject.getClass().getField(setting).getAnnotation(ConfigurableField.class); + // } catch (NoSuchFieldException | SecurityException ex) { + // Logger.getLogger(Configuration.class.getName()).log(Level.SEVERE, null, ex); + // } + // String sn = (f != null && !f.shortName().equals("")) ? f.shortName() : setting; + // System.out.println(prefix + ">>" + setting + " (" + n.subject.getShortName() + "." + sn + ")"); + // }); + // n.getChildren().stream().forEach((c) -> { + // printTree(c, prefix + "." + c, i + 1); + // }); + // } } diff --git a/src/main/java/jace/config/ConfigurationUIController.java b/src/main/java/jace/config/ConfigurationUIController.java index edd4a26..0f111e9 100644 --- a/src/main/java/jace/config/ConfigurationUIController.java +++ b/src/main/java/jace/config/ConfigurationUIController.java @@ -1,19 +1,19 @@ package jace.config; -import jace.config.Configuration.ConfigNode; import java.io.File; import java.io.Serializable; import java.lang.reflect.Field; import java.net.URL; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashSet; +import java.util.Optional; import java.util.ResourceBundle; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Pattern; -import java.util.stream.Collectors; + +import jace.config.Configuration.ConfigNode; import javafx.beans.Observable; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; @@ -88,11 +88,12 @@ public class ConfigurationUIController { assert settingsScroll != null : "fx:id=\"settingsScroll\" was not injected: check your FXML file 'Configuration.fxml'."; assert deviceTree != null : "fx:id=\"deviceTree\" was not injected: check your FXML file 'Configuration.fxml'."; assert treeScroll != null : "fx:id=\"treeScroll\" was not injected: check your FXML file 'Configuration.fxml'."; - resetDeviceTree(); + cancelConfig(null); deviceTree.getSelectionModel().selectedItemProperty().addListener(this::selectionChanged); deviceTree.maxWidthProperty().bind(treeScroll.widthProperty()); } + @SuppressWarnings("all") private void resetDeviceTree() { Set expanded = new HashSet<>(); String current = getCurrentNodePath(); @@ -104,8 +105,8 @@ public class ConfigurationUIController { private void getExpandedNodes(String prefix, TreeItem root, Set expanded) { if (root == null) return; - root.getChildren().stream().filter((item) -> (item.isExpanded())).forEach((item) -> { - String name = prefix+item.toString(); + root.getChildren().stream().filter(TreeItem::isExpanded).forEach((item) -> { + String name = prefix+ item; expanded.add(name); getExpandedNodes(name+DELIMITER, item, expanded); }); @@ -113,7 +114,7 @@ public class ConfigurationUIController { private void setExpandedNodes(String prefix, TreeItem root, Set expanded) { if (root == null) return; - root.getChildren().stream().forEach((item) -> { + root.getChildren().forEach((item) -> { String name = prefix+item.toString(); if (expanded.contains(name)) { item.setExpanded(true); @@ -133,6 +134,7 @@ public class ConfigurationUIController { return out; } + @SuppressWarnings("all") private void setCurrentNodePath(String value) { if (value == null) return; String[] parts = value.split(Pattern.quote(DELIMITER)); @@ -163,12 +165,8 @@ public class ConfigurationUIController { if (node == null) { return; } - node.hotkeys.forEach((name, values) -> { - settingsVbox.getChildren().add(buildKeyShortcutRow(node, name, values)); - }); - node.settings.forEach((name, value) -> { - settingsVbox.getChildren().add(buildSettingRow(node, name, value)); - }); + node.hotkeys.forEach((name, values) -> buildKeyShortcutRow(node, name, values).ifPresent(settingsVbox.getChildren()::add)); + node.settings.forEach((name, value) -> settingsVbox.getChildren().add(buildSettingRow(node, name, value))); } private Node buildSettingRow(ConfigNode node, String settingName, Serializable value) { @@ -188,33 +186,36 @@ public class ConfigurationUIController { return row; } - private Node buildKeyShortcutRow(ConfigNode node, String actionName, String[] values) { - InvokableAction actionInfo = Configuration.getInvokableActionInfo(node.subject, actionName); + private Optional buildKeyShortcutRow(ConfigNode node, String actionName, String[] values) { + InvokableActionRegistry registry = InvokableActionRegistry.getInstance(); + InvokableAction actionInfo = registry.getInstanceMethodInfo(actionName); if (actionInfo == null) { - return null; + actionInfo = registry.getStaticMethodInfo(actionName); + } + if (actionInfo == null) { + return Optional.empty(); } HBox row = new HBox(); row.getStyleClass().add("setting-row"); Label label = new Label(actionInfo.name()); label.getStyleClass().add("setting-keyboard-shortcut"); label.setMinWidth(150.0); - String value = Arrays.stream(values).collect(Collectors.joining(" or ")); + String value = String.join(" or ", values); Text widget = new Text(value); widget.setWrappingWidth(180.0); widget.getStyleClass().add("setting-keyboard-value"); - widget.setOnMouseClicked((event) -> { - editKeyboardShortcut(node, actionName, widget); - }); + widget.setOnMouseClicked((event) -> editKeyboardShortcut(node, actionName, widget)); label.setLabelFor(widget); row.getChildren().add(label); row.getChildren().add(widget); - return row; + return Optional.of(row); } private void editKeyboardShortcut(ConfigNode node, String actionName, Text widget) { throw new UnsupportedOperationException("Not supported yet."); } + @SuppressWarnings("all") private Node buildEditField(ConfigNode node, String settingName, Serializable value) { Field field; try { @@ -237,8 +238,6 @@ public class ConfigurationUIController { } } else if (type.equals(File.class)) { // TODO: Add file support! - } else if (Class.class.isEnum()) { - // TODO: Add enumeration support! } else if (ISelection.class.isAssignableFrom(type)) { return buildDynamicSelectComponent(node, settingName, value); } @@ -247,21 +246,18 @@ public class ConfigurationUIController { private Node buildTextField(ConfigNode node, String settingName, Serializable value, String validationPattern) { TextField widget = new TextField(String.valueOf(value)); - widget.textProperty().addListener((e) -> { - node.setFieldValue(settingName, widget.getText()); - }); + widget.textProperty().addListener((e) -> node.setFieldValue(settingName, widget.getText())); return widget; } private Node buildBooleanField(ConfigNode node, String settingName, Serializable value) { CheckBox widget = new CheckBox(); widget.setSelected(value.equals(Boolean.TRUE)); - widget.selectedProperty().addListener((e) -> { - node.setFieldValue(settingName, widget.isSelected()); - }); + widget.selectedProperty().addListener((e) -> node.setFieldValue(settingName, widget.isSelected())); return widget; } + @SuppressWarnings("all") private Node buildDynamicSelectComponent(ConfigNode node, String settingName, Serializable value) { try { DynamicSelection sel = (DynamicSelection) node.subject.getClass().getField(settingName).get(node.subject); @@ -284,9 +280,9 @@ public class ConfigurationUIController { } else { widget.setValue(selected); } - widget.valueProperty().addListener((Observable e) -> { - node.setFieldValue(settingName, widget.getConverter().toString(widget.getValue())); - }); + widget.valueProperty().addListener((Observable e) -> + node.setFieldValue(settingName, widget.getConverter().toString(widget.getValue())) + ); return widget; } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException ex) { Logger.getLogger(ConfigurationUIController.class.getName()).log(Level.SEVERE, null, ex); diff --git a/src/main/java/jace/config/DeviceEnum.java b/src/main/java/jace/config/DeviceEnum.java new file mode 100644 index 0000000..78f8ea1 --- /dev/null +++ b/src/main/java/jace/config/DeviceEnum.java @@ -0,0 +1,7 @@ +package jace.config; + +public interface DeviceEnum { + public String getName(); + public T create(); + public boolean isInstance(T t); +} \ No newline at end of file diff --git a/src/main/java/jace/config/DeviceSelection.java b/src/main/java/jace/config/DeviceSelection.java new file mode 100644 index 0000000..44116b4 --- /dev/null +++ b/src/main/java/jace/config/DeviceSelection.java @@ -0,0 +1,80 @@ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + +package jace.config; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; + +/** + * + * @author Brendan Robert (BLuRry) brendan.robert@gmail.com + * @param Enum class which implements DeviceEnum + */ +// C is an enum class which implements DeviceEnum +@SuppressWarnings("all") +public class DeviceSelection extends DynamicSelection { + + Class enumClass; + boolean nullAllowed = false; + + public DeviceSelection(Class enumClass, C defaultValue) { + super(defaultValue); + if (defaultValue == null) { + nullAllowed = true; + } + this.enumClass = enumClass; + } + + public DeviceSelection(Class enumClass, C defaultValue, boolean nullAllowed) { + this(enumClass, defaultValue); + this.nullAllowed = nullAllowed; + } + + @Override + public LinkedHashMap getSelections() { + LinkedHashMap selections = new LinkedHashMap<>(); + if (allowNull()) { + selections.put(null, "***Empty***"); + } + // Sort enum constants by getName + List sorted = new ArrayList<>(); + sorted.addAll(Arrays.asList(enumClass.getEnumConstants())); + Collections.sort(sorted, (C o1, C o2) -> o1.getName().compareTo(o2.getName())); + for (C c : enumClass.getEnumConstants()) { + selections.put(c, c.getName()); + } + return selections; + } + + @Override + public boolean allowNull() { + return nullAllowed; + } + + @Override + public void setValue(C value) { + Object v = value; + if (v != null && v instanceof String) { + super.setValueByMatch((String) v); + return; + } + super.setValue(value); + } +} \ No newline at end of file diff --git a/src/main/java/jace/config/DynamicSelection.java b/src/main/java/jace/config/DynamicSelection.java index d8d9bd3..79889a5 100644 --- a/src/main/java/jace/config/DynamicSelection.java +++ b/src/main/java/jace/config/DynamicSelection.java @@ -1,27 +1,26 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.config; -import jace.core.Utility; import java.util.Iterator; import java.util.Map; +import jace.core.Utility; + /** * * @author Brendan Robert (BLuRry) brendan.robert@gmail.com diff --git a/src/main/java/jace/config/ISelection.java b/src/main/java/jace/config/ISelection.java index 4c66b48..2672144 100644 --- a/src/main/java/jace/config/ISelection.java +++ b/src/main/java/jace/config/ISelection.java @@ -1,21 +1,19 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.config; import java.io.Serializable; @@ -27,11 +25,11 @@ import java.util.LinkedHashMap; */ public interface ISelection extends Serializable { - public LinkedHashMap getSelections(); + LinkedHashMap getSelections(); - public T getValue(); + T getValue(); - public void setValue(T value); + void setValue(T value); - public void setValueByMatch(String value); + void setValueByMatch(String value); } diff --git a/src/main/java/jace/config/InvokableAction.java b/src/main/java/jace/config/InvokableAction.java index 9f96782..4bbde77 100644 --- a/src/main/java/jace/config/InvokableAction.java +++ b/src/main/java/jace/config/InvokableAction.java @@ -1,21 +1,19 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.config; import java.lang.annotation.ElementType; @@ -26,19 +24,19 @@ import java.lang.annotation.Target; /** * A invokable action annotation means that an object method can be called by the end-user. * This serves as a hook for keybindings as well as semantic navigation potential. - *
+ *
* Name should be short, meaningful, and succinct. e.g. "Insert disk" - *
+ *
* Category can be used to group actions by overall topic, for example an automated table of contents - *
+ *
* Description is descriptive text which provides additional clarity, e.g. * "This will present you with a file selection dialog to pick a floppy disk image. * Currently, dos-ordered (DSK, DO), Prodos-ordered (PO), and Nibble (NIB) formats are supported. - *
+ *
* Alternatives should be delimited by semicolons) can provide more powerful search * For "insert disk", alternatives might be "change disk;switch disk" and * reboot might have alternatives as "warm start;cold start;boot;restart". - *
+ *
* NOTE: Any method that implements this must be public and take no parameters! * If a method signature is not correct, it will result in a runtime exception * when the action is triggered. There is no way to offer a compiler @@ -51,37 +49,37 @@ public @interface InvokableAction { /* * Should be short and meaningful name for action being invoked, e.g. "Insert disk" */ - public String name(); + String name(); /* * Can be used to group actions by overall topic, for example an automated table of contents * To be determined... */ - public String category() default "General"; + String category() default "General"; /* * More descriptive text which provides additional clarity, e.g. * "This will present you with a file selection dialog to pick a floppy disk image. * Currently, dos-ordered (DSK, DO), Prodos-ordered (PO), and Nibble (NIB) formats are supported." */ - public String description() default ""; + String description() default ""; /* * Alternatives should be delimited by semicolons) can provide more powerful search * For "insert disk", alternatives might be "change disk;switch disk" and * reboot might have alternatives as "warm start;cold start;boot;restart". */ - public String alternatives() default ""; + String alternatives() default ""; /* * If true, the key event will be consumed and not processed by any other event handlers * If the corresponding method returns a boolean, that value will be used instead. * True = consume (stop processing keystroke), false = pass-through to other handlers */ - public boolean consumeKeyEvent() default true; + boolean consumeKeyEvent() default true; /* * If false (default) event is only triggered on press, not release. If true, * method is notified on press and on release */ - public boolean notifyOnRelease() default false; + boolean notifyOnRelease() default false; /* * Standard keyboard mapping */ - public String[] defaultKeyMapping(); + String[] defaultKeyMapping(); } \ No newline at end of file diff --git a/src/main/java/jace/config/InvokableActionAnnotationProcessor.java b/src/main/java/jace/config/InvokableActionAnnotationProcessor.java new file mode 100644 index 0000000..b8fd74a --- /dev/null +++ b/src/main/java/jace/config/InvokableActionAnnotationProcessor.java @@ -0,0 +1,168 @@ +package jace.config; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.file.Files; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.Messager; +import javax.annotation.processing.ProcessingEnvironment; +import javax.annotation.processing.RoundEnvironment; +import javax.annotation.processing.SupportedAnnotationTypes; +import javax.annotation.processing.SupportedSourceVersion; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.TypeElement; + +// Compile-time annotation processor which creates a registry of all static methods annotated with @InvokableAction. +@SupportedSourceVersion(SourceVersion.RELEASE_17) +@SupportedAnnotationTypes("jace.config.InvokableAction") +public class InvokableActionAnnotationProcessor extends AbstractProcessor { + Messager messager; + Map staticMethods = new HashMap<>(); + Map instanceMethods = new HashMap<>(); + + @Override + public synchronized void init(ProcessingEnvironment processingEnv) { + super.init(processingEnv); + this.messager = processingEnv.getMessager(); + messager.printMessage(javax.tools.Diagnostic.Kind.NOTE, "InvokableActionAnnotationProcessor init()"); + } + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv) { + messager.printMessage(javax.tools.Diagnostic.Kind.NOTE, "InvokableActionAnnotationProcessor process()"); + + // Get list of methods annotated with @InvokableAction. + Set elements = roundEnv.getElementsAnnotatedWith(InvokableAction.class); + for (Element element : elements) { + if (element.getModifiers().contains(javax.lang.model.element.Modifier.STATIC)) { + // If the annotation method is static, add it to the static method registry. + trackStaticMethod(element); + } else { + // For non-static methods, track in a separate registry. + trackInstanceMethod(element); + } + try { + // Write class that contains static and instance methods. + writeRegistryClass(); + } catch (IOException ex) { + messager.printMessage(javax.tools.Diagnostic.Kind.ERROR, "Error writing InvokableActionRegistry.java: " + ex.getMessage()); + } + } + return true; + } + + private void trackStaticMethod(Element element) { + // Store the method in the static method registry. + staticMethods.put(element.getAnnotation(InvokableAction.class), (ExecutableElement) element); + } + + private void trackInstanceMethod(Element element) { + // Store the method in the instance method registry. + instanceMethods.put(element.getAnnotation(InvokableAction.class), (ExecutableElement) element); + } + + private String serializeArrayOfStrings(String... strings) { + return Arrays.stream(strings).map(s -> "\"" + s + "\"").collect(Collectors.joining(",")); + } + + private void serializeInvokableAction(InvokableAction annotation, String variableName, PrintWriter writer) { + writer.append(""" + %s = createInvokableAction("%s", "%s", "%s", "%s", %s, %s, new String[] {%s}); + """.formatted( + variableName, + annotation.name(), + annotation.category(), + annotation.description(), + annotation.alternatives(), + annotation.consumeKeyEvent(), + annotation.notifyOnRelease(), + serializeArrayOfStrings(annotation.defaultKeyMapping()) + )); + } + + // Write the registry class. + private void writeRegistryClass() throws IOException { + Files.createDirectories(new File("target/generated-sources/jace/config").toPath()); + try (PrintWriter writer = new PrintWriter(new FileWriter("target/generated-sources/jace/config/InvokableActionRegistryImpl.java"))) { + writer.write(""" +package jace.config; + +import java.util.logging.Level; + +public class InvokableActionRegistryImpl extends InvokableActionRegistry { + @Override + public void init() { + InvokableAction annotation; +"""); + for (Map.Entry entry : staticMethods.entrySet()) { + InvokableAction annotation = entry.getKey(); + ExecutableElement method = entry.getValue(); + String packageName = method.getEnclosingElement().getEnclosingElement().toString(); + String className = method.getEnclosingElement().getSimpleName().toString(); + String fqnClassName = packageName + "." + className; + serializeInvokableAction(annotation, "annotation", writer); + boolean takesBoolenParameter = method.getParameters().size() == 1 && method.getParameters().get(0).asType().toString().equalsIgnoreCase("boolean"); + boolean returnsBoolean = method.getReturnType().toString().equalsIgnoreCase("boolean"); + writer.write(""" + putStaticAction(annotation.name(), %s.class, annotation, (b) -> { + try { + %s %s.%s(%s); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking %s", ex); + %s + } + }); + """.formatted( + fqnClassName, + returnsBoolean ? "return " : "", + fqnClassName, + method.getSimpleName(), + takesBoolenParameter ? "b" : "", + fqnClassName + "." + method.getSimpleName(), + returnsBoolean ? "return false;" : "" + )); + } + + // Now for the instance methods, do the same except use a biconsumer which takes the instance as well as the boolean parameter. + for (Map.Entry entry : instanceMethods.entrySet()) { + InvokableAction annotation = entry.getKey(); + ExecutableElement method = entry.getValue(); + String packageName = method.getEnclosingElement().getEnclosingElement().toString(); + String className = method.getEnclosingElement().getSimpleName().toString(); + String fqnClassName = packageName + "." + className; + serializeInvokableAction(annotation, "annotation", writer); + boolean takesBoolenParameter = method.getParameters().size() == 1 && method.getParameters().get(0).asType().toString().equalsIgnoreCase("boolean"); + boolean returnsBoolean = method.getReturnType().toString().equalsIgnoreCase("boolean"); + writer.write(""" + putInstanceAction(annotation.name(), %s.class, annotation, (o, b) -> { + try { + %s ((%s) o).%s(%s); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking %s", ex); + %s + } + }); + """.formatted( + fqnClassName, + returnsBoolean ? "return " : "", + fqnClassName, + method.getSimpleName(), + takesBoolenParameter ? "b" : "", + fqnClassName + "." + method.getSimpleName(), + returnsBoolean ? "return false;" : "" + )); + } + writer.write("}\n}"); + } + } +} \ No newline at end of file diff --git a/src/main/java/jace/config/InvokableActionRegistry.java b/src/main/java/jace/config/InvokableActionRegistry.java new file mode 100644 index 0000000..666077f --- /dev/null +++ b/src/main/java/jace/config/InvokableActionRegistry.java @@ -0,0 +1,149 @@ +package jace.config; + +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; +import java.util.function.BiConsumer; +import java.util.function.BiFunction; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.logging.Logger; + +@SuppressWarnings("all") +public abstract class InvokableActionRegistry { + protected static final Logger logger = Logger.getLogger(InvokableActionRegistry.class.getName()); + private final Map> staticMethodNames = new HashMap<>(); + private final Map staticMethodInfo = new HashMap<>(); + private final Map> staticMethodCallers = new HashMap<>(); + private final Map> instanceMethodNames = new HashMap<>(); + private final Map instanceMethodInfo = new HashMap<>(); + private final Map> instanceMethodCallers = new HashMap<>(); + + protected static InvokableActionRegistry instance; + + public static InvokableActionRegistry getInstance() { + if (instance == null) { + instance = new InvokableActionRegistryImpl(); + instance.init(); + } + return instance; + } + + + abstract public void init(); + + final public void putStaticAction(String name, Class c, InvokableAction action, Consumer caller) { + putStaticAction(name, c, action, (b) -> { + caller.accept(b); + return true; + }); + } + + final public void putStaticAction(String name, Class c, InvokableAction action, Function caller) { + staticMethodInfo.put(name, action); + staticMethodCallers.put(name, caller); + staticMethodNames.computeIfAbsent(c, k -> new TreeSet<>()).add(name); + } + + public void putInstanceAction(String name, Class c, InvokableAction action, BiConsumer caller) { + putInstanceAction(name, c, action, (o, b) -> { + caller.accept(o, b); + return true; + }); + } + + public void putInstanceAction(String name, Class c, InvokableAction action, BiFunction caller) { + instanceMethodInfo.put(name, action); + instanceMethodCallers.put(name, caller); + instanceMethodNames.computeIfAbsent(c, k -> new TreeSet<>()).add(name); + } + + public Set getStaticMethodNames(Class c) { + // Build a set of all the method names for this class and all its superclasses. + Set result = new TreeSet<>(); + Class current = c; + while (current != null) { + result.addAll(staticMethodNames.getOrDefault(current, Collections.EMPTY_SET)); + current = current.getSuperclass(); + } + return result; + } + + public Set getInstanceMethodNames(Class c) { + // Build a set of all the method names for this class and all its superclasses. + Set result = new TreeSet<>(); + Class current = c; + while (current != null) { + result.addAll(instanceMethodNames.getOrDefault(current, Collections.EMPTY_SET)); + current = current.getSuperclass(); + } + return result; + } + + public InvokableAction getStaticMethodInfo(String name) { + return staticMethodInfo.get(name); + } + + public InvokableAction getInstanceMethodInfo(String name) { + return instanceMethodInfo.get(name); + } + + public Function getStaticFunction(String name) { + return staticMethodCallers.get(name); + } + + public BiFunction getInstanceFunction(String name) { + return instanceMethodCallers.get(name); + } + + public Set getAllStaticActions() { + return new HashSet<>(staticMethodInfo.values()); + } + + protected InvokableAction createInvokableAction(String name, String category, String description, String alternatives, boolean consumeKeyEvent, boolean notifyOnRelease, String[] defaultKeyMapping) { + return new InvokableAction() { + @Override + public String name() { + return name; + } + + @Override + public String category() { + return category; + } + + @Override + public String description() { + return description; + } + + @Override + public String alternatives() { + return alternatives; + } + + @Override + public boolean consumeKeyEvent() { + return consumeKeyEvent; + } + + @Override + public boolean notifyOnRelease() { + return notifyOnRelease; + } + + @Override + public String[] defaultKeyMapping() { + return defaultKeyMapping; + } + + @Override + public Class annotationType() { + return InvokableAction.class; + } + }; + } +} \ No newline at end of file diff --git a/src/main/java/jace/config/InvokableActionRegistryImpl.java b/src/main/java/jace/config/InvokableActionRegistryImpl.java new file mode 100644 index 0000000..3ac929a --- /dev/null +++ b/src/main/java/jace/config/InvokableActionRegistryImpl.java @@ -0,0 +1,226 @@ +package jace.config; + +import java.io.IOException; +import java.util.logging.Level; + +// NOTE: This is generated code. Do not edit. +public class InvokableActionRegistryImpl extends InvokableActionRegistry { + + @Override + public void init() { + InvokableAction annotation; + annotation = createInvokableAction("Resize window", "general", "Resize the screen to 1x/1.5x/2x/3x video size", "Aspect;Adjust screen;Adjust window size;Adjust aspect ratio;Fix screen;Fix window size;Fix aspect ratio;Correct aspect ratio;", true, false, new String[]{"ctrl+shift+a"}); + putStaticAction(annotation.name(), jace.EmulatorUILogic.class, annotation, (b) -> { + try { + jace.EmulatorUILogic.scaleIntegerRatio(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.EmulatorUILogic.scaleIntegerRatio", ex); + } + }); + annotation = createInvokableAction("Rewind", "General", "Go back 1 second", "Timewarp", true, false, new String[]{"ctrl+shift+Open Bracket"}); + putStaticAction(annotation.name(), jace.state.StateManager.class, annotation, (b) -> { + try { + jace.state.StateManager.beKindRewind(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.state.StateManager.beKindRewind", ex); + } + }); + annotation = createInvokableAction("Configuration", "general", "Edit emulator configuraion", "Reconfigure;Preferences;Settings;Config", true, false, new String[]{"f4", "ctrl+shift+c"}); + putStaticAction(annotation.name(), jace.EmulatorUILogic.class, annotation, (b) -> { + try { + jace.EmulatorUILogic.showConfig(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.EmulatorUILogic.showConfig", ex); + } + }); + annotation = createInvokableAction("Load settings", "general", "Load all configuration settings previously saved", "load preferences;revert settings;revert preferences", true, false, new String[]{"meta+ctrl+r"}); + putStaticAction(annotation.name(), jace.config.Configuration.class, annotation, (b) -> { + try { + jace.config.Configuration.loadSettings(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.config.Configuration.loadSettings", ex); + } + }); + annotation = createInvokableAction("About", "general", "Display about window", "info;credits", true, false, new String[]{"ctrl+shift+."}); + putStaticAction(annotation.name(), jace.EmulatorUILogic.class, annotation, (b) -> { + try { + jace.EmulatorUILogic.showAboutWindow(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.EmulatorUILogic.showAboutWindow", ex); + } + }); + annotation = createInvokableAction("Record sound", "sound", "Toggles recording (saving) sound output to a file", "", true, false, new String[]{"ctrl+shift+w"}); + putStaticAction(annotation.name(), jace.apple2e.Speaker.class, annotation, (b) -> { + try { + jace.apple2e.Speaker.toggleFileOutput(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.apple2e.Speaker.toggleFileOutput", ex); + } + }); + annotation = createInvokableAction("BRUN file", "file", "Loads a binary file in memory and executes it. File should end with #06xxxx, where xxxx is the start address in hex", "Execute program;Load binary;Load program;Load rom;Play single-load game", true, false, new String[]{"ctrl+shift+b"}); + putStaticAction(annotation.name(), jace.EmulatorUILogic.class, annotation, (b) -> { + try { + jace.EmulatorUILogic.runFile(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.EmulatorUILogic.runFile", ex); + } + }); + annotation = createInvokableAction("Save Raw Screenshot", "general", "Save raw (RAM) format of visible screen", "screendump;raw screenshot", true, false, new String[]{"ctrl+shift+z"}); + putStaticAction(annotation.name(), jace.EmulatorUILogic.class, annotation, (b) -> { + try { + jace.EmulatorUILogic.saveScreenshotRaw(); + } catch (IOException ex) { + logger.log(Level.SEVERE, "Error invoking jace.EmulatorUILogic.saveScreenshotRaw", ex); + } + }); + annotation = createInvokableAction("Save settings", "general", "Save all configuration settings as defaults", "save preferences;save defaults", true, false, new String[]{"meta+ctrl+s"}); + putStaticAction(annotation.name(), jace.config.Configuration.class, annotation, (b) -> { + try { + jace.config.Configuration.saveSettings(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.config.Configuration.saveSettings", ex); + } + }); + annotation = createInvokableAction("Toggle fullscreen", "general", "Activate/deactivate fullscreen mode", "fullscreen;maximize", true, false, new String[]{"ctrl+shift+f"}); + putStaticAction(annotation.name(), jace.EmulatorUILogic.class, annotation, (b) -> { + try { + jace.EmulatorUILogic.toggleFullscreen(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.EmulatorUILogic.toggleFullscreen", ex); + } + }); + annotation = createInvokableAction("Toggle Debug", "debug", "Show/hide the debug panel", "Show Debug;Hide Debug;Inspect", true, false, new String[]{"ctrl+shift+d"}); + putStaticAction(annotation.name(), jace.EmulatorUILogic.class, annotation, (b) -> { + try { + jace.EmulatorUILogic.toggleDebugPanel(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.EmulatorUILogic.toggleDebugPanel", ex); + } + }); + annotation = createInvokableAction("Refresh screen", "display", "Marks screen contents as changed, forcing full screen redraw", "redraw", true, false, new String[]{"ctrl+shift+r"}); + putStaticAction(annotation.name(), jace.core.Video.class, annotation, (b) -> { + try { + jace.core.Video.forceRefresh(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.core.Video.forceRefresh", ex); + } + }); + annotation = createInvokableAction("Toggle video mode", "video", "", "Gfx mode;color;b&w;monochrome", true, false, new String[]{"ctrl+shift+g"}); + putStaticAction(annotation.name(), jace.apple2e.VideoNTSC.class, annotation, (b) -> { + try { + jace.apple2e.VideoNTSC.changeVideoMode(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.apple2e.VideoNTSC.changeVideoMode", ex); + } + }); + annotation = createInvokableAction("Save Screenshot", "general", "Save image of visible screen", "Save image;save framebuffer;screenshot", true, false, new String[]{"ctrl+shift+s"}); + putStaticAction(annotation.name(), jace.EmulatorUILogic.class, annotation, (b) -> { + try { + jace.EmulatorUILogic.saveScreenshot(); + } catch (IOException ex) { + logger.log(Level.SEVERE, "Error invoking jace.EmulatorUILogic.saveScreenshot", ex); + } + }); + annotation = createInvokableAction("Paste clipboard", "Keyboard", "", "paste", true, false, new String[]{"Ctrl+Shift+V", "Shift+Insert"}); + putStaticAction(annotation.name(), jace.core.Keyboard.class, annotation, (b) -> { + try { + jace.core.Keyboard.pasteFromClipboard(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.core.Keyboard.pasteFromClipboard", ex); + } + }); + annotation = createInvokableAction("Open IDE", "development", "Open new IDE window for Basic/Assembly/Plasma coding", "IDE;dev;development;acme;assembler;editor", true, false, new String[]{"ctrl+shift+i"}); + putStaticAction(annotation.name(), jace.EmulatorUILogic.class, annotation, (b) -> { + try { + jace.EmulatorUILogic.showIDE(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.EmulatorUILogic.showIDE", ex); + } + }); + annotation = createInvokableAction("Up", "joystick", "", "", true, true, new String[]{"up"}); + putInstanceAction(annotation.name(), jace.hardware.Joystick.class, annotation, (o, b) -> { + try { + return ((jace.hardware.Joystick) o).joystickUp(b); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.hardware.Joystick.joystickUp", ex); + return false; + } + }); + annotation = createInvokableAction("Open Apple Key", "Keyboard", "", "OA", false, true, new String[]{"Alt"}); + putInstanceAction(annotation.name(), jace.core.Keyboard.class, annotation, (o, b) -> { + try { + ((jace.core.Keyboard) o).openApple(b); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.core.Keyboard.openApple", ex); + } + }); + annotation = createInvokableAction("Left", "joystick", "", "", true, true, new String[]{"left"}); + putInstanceAction(annotation.name(), jace.hardware.Joystick.class, annotation, (o, b) -> { + try { + return ((jace.hardware.Joystick) o).joystickLeft(b); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.hardware.Joystick.joystickLeft", ex); + return false; + } + }); + annotation = createInvokableAction("Right", "joystick", "", "", true, true, new String[]{"right"}); + putInstanceAction(annotation.name(), jace.hardware.Joystick.class, annotation, (o, b) -> { + try { + return ((jace.hardware.Joystick) o).joystickRight(b); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.hardware.Joystick.joystickRight", ex); + return false; + } + }); + annotation = createInvokableAction("Closed Apple Key", "Keyboard", "", "CA", false, true, new String[]{"Shortcut", "Meta", "Command"}); + putInstanceAction(annotation.name(), jace.core.Keyboard.class, annotation, (o, b) -> { + try { + ((jace.core.Keyboard) o).solidApple(b); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.core.Keyboard.solidApple", ex); + } + }); + annotation = createInvokableAction("Down", "joystick", "", "", true, true, new String[]{"down"}); + putInstanceAction(annotation.name(), jace.hardware.Joystick.class, annotation, (o, b) -> { + try { + return ((jace.hardware.Joystick) o).joystickDown(b); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.hardware.Joystick.joystickDown", ex); + return false; + } + }); + annotation = createInvokableAction("Pause", "General", "Stops the computer, allowing reconfiguration of core elements", "freeze;halt", true, false, new String[]{"meta+pause", "alt+pause"}); + putInstanceAction(annotation.name(), jace.core.Computer.class, annotation, (o, b) -> { + try { + return ((jace.core.Computer) o).pause(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.core.Computer.pause", ex); + return false; + } + }); + annotation = createInvokableAction("Reset", "general", "Process user-initatiated reboot (ctrl+apple+reset)", "reboot;reset;three-finger-salute;restart", true, false, new String[]{"Ctrl+Ignore Alt+Ignore Meta+Backspace", "Ctrl+Ignore Alt+Ignore Meta+Delete"}); + putInstanceAction(annotation.name(), jace.core.Computer.class, annotation, (o, b) -> { + try { + ((jace.core.Computer) o).invokeReset(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.core.Computer.invokeWarmStart", ex); + } + }); + annotation = createInvokableAction("Toggle Cheats", "General", "", "cheat;Plug-in", true, false, new String[]{"ctrl+shift+m"}); + putInstanceAction(annotation.name(), jace.cheat.Cheats.class, annotation, (o, b) -> { + try { + ((jace.cheat.Cheats) o).toggleCheats(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.cheat.Cheats.toggleCheats", ex); + } + }); + annotation = createInvokableAction("Resume", "General", "Resumes the computer if it was previously paused", "unpause;unfreeze;resume;play", true, false, new String[]{"meta+shift+pause", "alt+shift+pause"}); + putInstanceAction(annotation.name(), jace.core.Computer.class, annotation, (o, b) -> { + try { + ((jace.core.Computer) o).resume(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error invoking jace.core.Computer.resume", ex); + } + }); + } +} diff --git a/src/main/java/jace/config/Name.java b/src/main/java/jace/config/Name.java index 69175e1..3ea293a 100644 --- a/src/main/java/jace/config/Name.java +++ b/src/main/java/jace/config/Name.java @@ -1,21 +1,19 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.config; import java.lang.annotation.ElementType; @@ -30,6 +28,6 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Name { - public String value(); - public String description() default ""; + String value(); + String description() default ""; } diff --git a/src/main/java/jace/config/Reconfigurable.java b/src/main/java/jace/config/Reconfigurable.java index dcbcfdd..85a1705 100644 --- a/src/main/java/jace/config/Reconfigurable.java +++ b/src/main/java/jace/config/Reconfigurable.java @@ -1,21 +1,19 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.config; /** @@ -23,7 +21,7 @@ package jace.config; * @author Brendan Robert (BLuRry) brendan.robert@gmail.com */ public interface Reconfigurable { - public String getName(); - public String getShortName(); - public void reconfigure(); + String getName(); + String getShortName(); + void reconfigure(); } diff --git a/src/main/java/jace/core/CPU.java b/src/main/java/jace/core/CPU.java index 3718133..2635551 100644 --- a/src/main/java/jace/core/CPU.java +++ b/src/main/java/jace/core/CPU.java @@ -1,28 +1,27 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; -import jace.config.ConfigurableField; import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; +import jace.config.ConfigurableField; + /** * CPU is a vague abstraction of a CPU. It is defined as something which can be * debugged or traced. It has a program counter which can be incremented or @@ -35,10 +34,6 @@ import java.util.logging.Logger; public abstract class CPU extends Device { private static final Logger LOG = Logger.getLogger(CPU.class.getName()); - public CPU(Computer computer) { - super(computer); - } - @Override public String getShortName() { return "cpu"; @@ -73,14 +68,14 @@ public abstract class CPU extends Device { } public void dumpTrace() { - computer.pause(); - ArrayList newLog = new ArrayList<>(); - ArrayList oldLog = traceLog; - traceLog = newLog; - computer.resume(); - LOG.log(Level.INFO, "Most recent {0} instructions:", traceLength); - oldLog.stream().forEach(LOG::info); - oldLog.clear(); + whileSuspended(()->{ + ArrayList newLog = new ArrayList<>(); + ArrayList oldLog = traceLog; + traceLog = newLog; + LOG.log(Level.INFO, "Most recent {0} instructions:", traceLength); + oldLog.forEach(LOG::info); + oldLog.clear(); + }); } public void setDebug(Debugger d) { @@ -117,9 +112,9 @@ public abstract class CPU extends Device { try { if (debugger != null) { if (!debugger.isActive() && debugger.hasBreakpoints()) { - debugger.getBreakpoints().stream().filter((i) -> (i == getProgramCounter())).forEach((_item) -> { + if (debugger.getBreakpoints().contains(getProgramCounter())){ debugger.setActive(true); - }); + } } if (debugger.isActive()) { debugger.updateStatus(); @@ -127,11 +122,7 @@ public abstract class CPU extends Device { // If the debugger is active and we aren't ready for the next step, sleep and exit // Without the sleep, this would constitute a very rapid-fire loop and would eat // an unnecessary amount of CPU. - try { - Thread.sleep(10); - } catch (InterruptedException ex) { - Logger.getLogger(CPU.class.getName()).log(Level.SEVERE, null, ex); - } + Thread.onSpinWait(); return; } } diff --git a/src/main/java/jace/core/Card.java b/src/main/java/jace/core/Card.java index dde4e2e..763161d 100644 --- a/src/main/java/jace/core/Card.java +++ b/src/main/java/jace/core/Card.java @@ -1,21 +1,19 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; import jace.apple2e.SoftSwitches; @@ -33,10 +31,10 @@ import jace.apple2e.SoftSwitches; * * @author Brendan Robert (BLuRry) brendan.robert@gmail.com */ -public abstract class Card extends Device { +public abstract class Card extends TimedDevice { - private final PagedMemory cxRom; - private final PagedMemory c8Rom; + private PagedMemory cxRom; + private PagedMemory c8Rom; private int slot; private RAMListener ioListener; private RAMListener firmwareListener; @@ -47,10 +45,10 @@ public abstract class Card extends Device { * * @param computer */ - public Card(Computer computer) { - super(computer); - cxRom = new PagedMemory(0x0100, PagedMemory.Type.CARD_FIRMWARE, computer); - c8Rom = new PagedMemory(0x0800, PagedMemory.Type.CARD_FIRMWARE, computer); + public Card(boolean isThrottled) { + super(isThrottled); + cxRom = new PagedMemory(0x0100, PagedMemory.Type.CARD_FIRMWARE); + c8Rom = new PagedMemory(0x0800, PagedMemory.Type.CARD_FIRMWARE); } @Override @@ -101,50 +99,43 @@ public abstract class Card extends Device { @Override public void reconfigure() { - boolean restart = suspend(); - unregisterListeners(); - if (restart) { - resume(); - } - registerListeners(); + // Emulator.whileSuspended(c-> { + unregisterListeners(); + registerListeners(); + // }); } public void notifyVBLStateChanged(boolean state) { // Do nothing unless overridden } - public boolean suspendWithCPU() { - return false; - } - protected void registerListeners() { - RAM memory = computer.getMemory(); int baseIO = 0x0c080 + slot * 16; int baseRom = 0x0c000 + slot * 256; - ioListener = memory.observe(RAMEvent.TYPE.ANY, baseIO, baseIO + 15, (e) -> { + ioListener = getMemory().observe("Slot " + getSlot() + " " + getDeviceName() + " IO access", RAMEvent.TYPE.ANY, baseIO, baseIO + 15, (e) -> { int address = e.getAddress() & 0x0f; handleIOAccess(address, e.getType(), e.getNewValue(), e); }); - firmwareListener = memory.observe(RAMEvent.TYPE.ANY, baseRom, baseRom + 255, (e) -> { - computer.getMemory().setActiveCard(slot); + firmwareListener = getMemory().observe("Slot " + getSlot() + " " + getDeviceName() + " CX Firmware access", RAMEvent.TYPE.ANY, baseRom, baseRom + 255, (e) -> { + getMemory().setActiveCard(slot); // Sather 6-4: Writes will still go through even when CXROM inhibits slot ROM if (SoftSwitches.CXROM.isOff() || !e.getType().isRead()) { handleFirmwareAccess(e.getAddress() & 0x0ff, e.getType(), e.getNewValue(), e); } }); - c8firmwareListener = memory.observe(RAMEvent.TYPE.ANY, 0xc800, 0xcfff, (e) -> { + c8firmwareListener = getMemory().observe("Slot " + getSlot() + " " + getDeviceName() + " C8 Firmware access", RAMEvent.TYPE.ANY, 0xc800, 0xcfff, (e) -> { if (SoftSwitches.CXROM.isOff() && SoftSwitches.INTC8ROM.isOff() - && computer.getMemory().getActiveSlot() == slot) { + && getMemory().getActiveSlot() == slot) { handleC8FirmwareAccess(e.getAddress() - 0x0c800, e.getType(), e.getNewValue(), e); } }); } protected void unregisterListeners() { - computer.getMemory().removeListener(ioListener); - computer.getMemory().removeListener(firmwareListener); - computer.getMemory().removeListener(c8firmwareListener); + getMemory().removeListener(ioListener); + getMemory().removeListener(firmwareListener); + getMemory().removeListener(c8firmwareListener); } } diff --git a/src/main/java/jace/core/Computer.java b/src/main/java/jace/core/Computer.java index cbce122..f4ebd2b 100644 --- a/src/main/java/jace/core/Computer.java +++ b/src/main/java/jace/core/Computer.java @@ -1,29 +1,32 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; +import java.io.IOException; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + +import jace.JaceApplication; +import jace.apple2e.SoftSwitches; import jace.config.ConfigurableField; +import jace.config.Configuration; import jace.config.InvokableAction; import jace.config.Reconfigurable; import jace.state.StateManager; -import java.io.IOException; -import java.util.Optional; import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.value.ChangeListener; @@ -44,31 +47,35 @@ public abstract class Computer implements Reconfigurable { public Keyboard keyboard; public StateManager stateManager; public Motherboard motherboard; - public boolean romLoaded; + public final CompletableFuture romLoaded; @ConfigurableField(category = "advanced", name = "State management", shortName = "rewind", description = "This enables rewind support, but consumes a lot of memory when active.") public boolean enableStateManager; - public final SoundMixer mixer; + public final SoundMixer mixer = new SoundMixer(); final private BooleanProperty runningProperty = new SimpleBooleanProperty(false); /** * Creates a new instance of Computer */ public Computer() { - keyboard = new Keyboard(this); - mixer = new SoundMixer(this); - romLoaded = false; + romLoaded = new CompletableFuture<>(); } - public RAM getMemory() { + abstract protected RAM createMemory(); + + final public RAM getMemory() { + if (memory == null) { + memory = createMemory(); + memory.configureActiveMemory(); + } return memory; } - public Motherboard getMotherboard() { + final public Motherboard getMotherboard() { return motherboard; } ChangeListener runningPropertyListener = (prop, oldVal, newVal) -> runningProperty.set(newVal); - public void setMotherboard(Motherboard m) { + final public void setMotherboard(Motherboard m) { if (motherboard != null && motherboard.isRunning()) { motherboard.suspend(); } @@ -78,11 +85,11 @@ public abstract class Computer implements Reconfigurable { public BooleanProperty getRunningProperty() { return runningProperty; } - - public boolean isRunning() { + + final public boolean isRunning() { return getRunningProperty().get(); } - + public void notifyVBLStateChanged(boolean state) { for (Optional c : getMemory().cards) { c.ifPresent(card -> card.notifyVBLStateChanged(state)); @@ -92,42 +99,63 @@ public abstract class Computer implements Reconfigurable { } } - public void setMemory(RAM memory) { + final public void setMemory(RAM memory) { if (this.memory != memory) { - if (this.memory != null) { - this.memory.detach(); + RAM oldMemory = this.memory; + if (oldMemory != null) { + oldMemory.detach(); + } + this.memory = memory; + if (memory != null) { + if (oldMemory != null) { + memory.copyFrom(oldMemory); + oldMemory.detach(); + } + memory.attach(); } - memory.attach(); } - this.memory = memory; } public void waitForNextCycle() { //@TODO IMPLEMENT TIMER SLEEP CODE! } - public Video getVideo() { + final public Video getVideo() { return video; } - public void setVideo(Video video) { + final public void setVideo(Video video) { + if (this.video != null && this.video != video) { + getMotherboard().removeChildDevice(this.video); + } this.video = video; + if (video != null) { + getMotherboard().addChildDevice(video); + video.configureVideoMode(); + video.reconfigure(); + } + if (JaceApplication.getApplication() != null) { + JaceApplication.getApplication().reconnectUIHooks(); + JaceApplication.getApplication().controller.connectVideo(video); + } } - public CPU getCpu() { + final public CPU getCpu() { return cpu; } - public void setCpu(CPU cpu) { + final public void setCpu(CPU cpu) { this.cpu = cpu; } + abstract public void loadRom(boolean reload) throws IOException; + public void loadRom(String path) throws IOException { memory.loadRom(path); - romLoaded = true; + romLoaded.complete(true); } - public void deactivate() { + final public void deactivate() { if (cpu != null) { cpu.suspend(); } @@ -135,46 +163,44 @@ public abstract class Computer implements Reconfigurable { motherboard.suspend(); } if (video != null) { - video.suspend(); + video.suspend(); } if (mixer != null) { mixer.detach(); } } + /** + * If the user wants a full reset, use the coldStart method. + * This ensures a more consistent state of the machine. + * Some games make bad assumptions about the initial state of the machine + * and that fails to work if the machine is not reset to a known state first. + */ @InvokableAction( - name = "Cold boot", - description = "Process startup sequence from power-up", - category = "general", - alternatives = "Full reset;reset emulator", - consumeKeyEvent = true, - defaultKeyMapping = {"Ctrl+Shift+Backspace", "Ctrl+Shift+Delete"}) - public void invokeColdStart() { - if (!romLoaded) { - Thread delayedStart = new Thread(() -> { - while (!romLoaded) { - Thread.yield(); - } - coldStart(); - }); - delayedStart.start(); - } else { - coldStart(); - } - } - - public abstract void coldStart(); - - @InvokableAction( - name = "Warm boot", + name = "Reset", description = "Process user-initatiated reboot (ctrl+apple+reset)", category = "general", alternatives = "reboot;reset;three-finger-salute;restart", defaultKeyMapping = {"Ctrl+Ignore Alt+Ignore Meta+Backspace", "Ctrl+Ignore Alt+Ignore Meta+Delete"}) - public void invokeWarmStart() { - warmStart(); + public void invokeReset() { + if (SoftSwitches.PDL0.isOn()) { + coldStart(); + } else { + warmStart(); + } } + /** + * In a cold start, memory is reset (either two bytes per page as per Sather 4-15) or full-wipe + * Also video softswitches are reset + * Otherwise it does the same as warm start + **/ + public abstract void coldStart(); + + /** + * In a warm start, memory is not reset, but the CPU and cards are reset + * All but video softswitches are reset, putting the MMU in a known state + */ public abstract void warmStart(); public Keyboard getKeyboard() { @@ -186,7 +212,7 @@ public abstract class Computer implements Reconfigurable { protected abstract void doResume(); @InvokableAction(name = "Pause", description = "Stops the computer, allowing reconfiguration of core elements", alternatives = "freeze;halt", defaultKeyMapping = {"meta+pause", "alt+pause"}) - public boolean pause() { + final public boolean pause() { boolean result = getRunningProperty().get(); doPause(); getRunningProperty().set(false); @@ -194,13 +220,16 @@ public abstract class Computer implements Reconfigurable { } @InvokableAction(name = "Resume", description = "Resumes the computer if it was previously paused", alternatives = "unpause;unfreeze;resume;play", defaultKeyMapping = {"meta+shift+pause", "alt+shift+pause"}) - public void resume() { + final public void resume() { doResume(); getRunningProperty().set(true); } @Override public void reconfigure() { + if (keyboard == null) { + keyboard = new Keyboard(); + } mixer.reconfigure(); if (enableStateManager) { stateManager = StateManager.getInstance(this); @@ -208,5 +237,6 @@ public abstract class Computer implements Reconfigurable { stateManager = null; StateManager.getInstance(this).invalidate(); } + Configuration.registerKeyHandlers(); } } diff --git a/src/main/java/jace/core/Debugger.java b/src/main/java/jace/core/Debugger.java index 1401d5b..f7ce789 100644 --- a/src/main/java/jace/core/Debugger.java +++ b/src/main/java/jace/core/Debugger.java @@ -1,25 +1,24 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * A debugger has the ability to track a list of breakpoints and step a CPU one @@ -48,19 +47,9 @@ public abstract class Debugger { public List getBreakpoints() { return breakpoints; } - private boolean hasBreakpoints = false; boolean hasBreakpoints() { - return hasBreakpoints; - } - - public void updateBreakpoints() { - hasBreakpoints = false; - for (Integer i : breakpoints) { - if (i != null) { - hasBreakpoints = true; - } - } + return !breakpoints.isEmpty() && breakpoints.stream().anyMatch(Objects::nonNull); } boolean takeStep() { diff --git a/src/main/java/jace/core/Device.java b/src/main/java/jace/core/Device.java index 166ba37..b325c77 100644 --- a/src/main/java/jace/core/Device.java +++ b/src/main/java/jace/core/Device.java @@ -1,31 +1,29 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; -import jace.state.Stateful; -import jace.config.Reconfigurable; -import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; -import java.util.List; -import javafx.beans.property.BooleanProperty; -import javafx.beans.property.SimpleBooleanProperty; +import java.util.Set; +import java.util.concurrent.CopyOnWriteArraySet; +import java.util.function.Supplier; + +import jace.Emulator; +import jace.config.Reconfigurable; +import jace.state.Stateful; /** * Device is a very simple abstraction of any emulation component. A device @@ -35,62 +33,78 @@ import javafx.beans.property.SimpleBooleanProperty; * * Depending on the type of device, some special work might be required to * attach or detach it to the active emulation (such as what should happen when - * a card is inserted or removed from a slot?) - * Created on May 10, 2007, 5:46 PM + * a card is inserted or removed from a slot?) Created on May 10, 2007, 5:46 PM * - * @author Brendan Robert (BLuRry) brendan.robert@gmail.com + * @author Brendan Robert (BLuRry) brendan.robert@gmail.com */ @Stateful public abstract class Device implements Reconfigurable { - protected Computer computer; - private List children; - - private Device() { - children = Collections.synchronizedList(new ArrayList<>()); - } - - public Device(Computer computer) { - this(); - this.computer = computer; - } - + + private final Set children = new CopyOnWriteArraySet<>(); + private Device[] childrenArray = new Device[0]; + private Runnable tickHandler = this::__doTickNotRunning; + // Number of cycles to do nothing (for cpu/video cycle accuracy) @Stateful private int waitCycles = 0; @Stateful - private final BooleanProperty run = new SimpleBooleanProperty(true); + private boolean run = false; @Stateful - public boolean isPaused = false; + // Pausing a device overrides its run state, and is not reset by resuming directly + // Therefore a caller pausing a device must unpause it directly! + private boolean paused = false; @Stateful public boolean isAttached = false; - - public void addChildDevice(Device d) { - children.add(d); - if (isAttached) { - d.attach(); + + private RAM _ram = null; + protected RAM getMemory() { + if (_ram == null) { + _ram = Emulator.withMemory(m->m, null); + _ram.onDetach(()->_ram = null); } - } - - public void removeChildDevice(Device d) { - children.remove(d); - d.suspend(); - if (isAttached) { - d.detach(); - } - } - - public void addAllDevices(Collection devices) { - devices.forEach(this::addChildDevice); - } - - public List getChildren() { - return Collections.unmodifiableList(children); + return _ram; } - public BooleanProperty getRunningProperty() { - return run; + Device parentDevice = null; + public Device getParent() { + return parentDevice; + } + + public void addChildDevice(Device d) { + if (d == null || children.contains(d) || d.equals(this)) { + return; + } + d.parentDevice = this; + children.add(d); + d.attach(); + childrenArray = children.toArray(Device[]::new); + updateTickHandler(); + } + + public void removeChildDevice(Device d) { + if (d == null) { + return; + } + children.remove(d); + d.suspend(); + d.detach(); + childrenArray = children.toArray(Device[]::new); + updateTickHandler(); + } + + public void addAllDevices(Iterable devices) { + devices.forEach(this::addChildDevice); + } + + public Iterable getChildren() { + return children; } + public void setAllDevices(Collection newDevices) { + children.stream().filter(d-> !newDevices.contains(d)).forEach(this::removeChildDevice); + newDevices.stream().filter(d-> !children.contains(d)).forEach(this::addChildDevice); + } + public void addWaitCycles(int wait) { waitCycles += wait; } @@ -99,41 +113,76 @@ public abstract class Device implements Reconfigurable { waitCycles = wait; } + private void updateTickHandler() { + if (!isRunning() || isPaused()) { + tickHandler = this::__doTickNotRunning; + } else if (childrenArray.length == 0) { + tickHandler = this::__doTickNoDevices; + } else { + tickHandler = this::__doTickIsRunning; + } + } + + private void __doTickNotRunning() { + // Do nothing + } + + private void __doTickIsRunning() { + for (Device d : childrenArray) { + if (d.isRunning() && !d.isPaused()) { + d.doTick(); + } + } + if (waitCycles <= 0) { + tick(); + return; + } + waitCycles--; + } + + private void __doTickNoDevices() { + if (waitCycles <= 0) { + tick(); + return; + } + waitCycles--; + } + + /** + * This is called every tick, but it is critical that tick() should be overridden + * not this method! This is only overridable so timed device can implement timing + * semantics around this without interfering with the tick() method implementations. + */ public void doTick() { - /* - if (waitCycles <= 0) - tick(); - else - waitCycles--; - */ - - if (!run.get()) { -// System.out.println("Device stopped: " + getName()); - isPaused = true; - return; - } - // The following might be as much as 7% faster than the above - // My guess is that the above results in a GOTO - // whereas the following pre-emptive return avoids that - if (waitCycles > 0) { - waitCycles--; - return; - } - // Implicit else... - children.forEach(Device::doTick); - tick(); + tickHandler.run(); } public boolean isRunning() { - return run.get(); + return run; + } + + public final boolean isPaused() { + return paused; } - public synchronized void setRun(boolean run) { -// System.out.println(Thread.currentThread().getName() + (run ? " resuming " : " suspending ")+ getDeviceName()); - isPaused = false; - this.run.set(run); + public final synchronized void setRun(boolean run) { + // if (this.run != run) { + // System.out.println(getDeviceName() + " " + (run ? "RUN" : "STOP")); + // Thread.dumpStack(); + // } + this.run = run; + updateTickHandler(); } + public synchronized void setPaused(boolean paused) { + // if (this.paused != paused) { + // System.out.println(getDeviceName() + " " + (paused ? "PAUSED" : "UNPAUSED")); + // Thread.dumpStack(); + // } + this.paused = paused; + updateTickHandler(); + } + protected abstract String getDeviceName(); @Override @@ -142,20 +191,69 @@ public abstract class Device implements Reconfigurable { } public abstract void tick(); + + public void whileSuspended(Runnable r) { + whileSuspended(()->{ + r.run(); + return null; + }, null); + } + public void whilePaused(Runnable r) { + whilePaused(()->{ + r.run(); + return null; + }, null); + } + + public T whileSuspended(Supplier r, T defaultValue) { + T result; + if (isRunning()) { + suspend(); + result = r.get(); + resume(); + } else { + result = r.get(); + } + return result != null ? result : defaultValue; + } + + public T whilePaused(Supplier r, T defaultValue) { + T result; + if (!isPaused() && isRunning()) { + setPaused(true); + result = r.get(); + setPaused(false); + } else { + result = r.get(); + } + return result != null ? result : defaultValue; + } + + public boolean suspend() { + // Suspending the parent device means the children are not going to run + // children.forEach(Device::suspend); if (isRunning()) { setRun(false); return true; } - children.forEach(Device::suspend); return false; } + public void resumeAll() { + resume(); + children.forEach(Device::resumeAll); + } + public void resume() { - setRun(true); - waitCycles = 0; - children.forEach(Device::resume); + // Resuming children pre-emptively might lead to unexpected behavior + // Don't do that unless we really mean to (such as cold-starting the computer) + // children.forEach(Device::resume); + if (!isRunning()) { + setRun(true); + waitCycles = 0; + } } public void attach() { @@ -164,8 +262,13 @@ public abstract class Device implements Reconfigurable { } public void detach() { - Keyboard.unregisterAllHandlers(this); children.forEach(Device::suspend); children.forEach(Device::detach); + Keyboard.unregisterAllHandlers(this); + if (this.isRunning()) { + this.suspend(); + } + isAttached = false; + _ram = null; } } diff --git a/src/main/java/jace/core/Font.java b/src/main/java/jace/core/Font.java index 8a28378..e8fe188 100644 --- a/src/main/java/jace/core/Font.java +++ b/src/main/java/jace/core/Font.java @@ -1,24 +1,23 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; import java.io.InputStream; + import javafx.scene.image.Image; import javafx.scene.image.PixelReader; import javafx.scene.paint.Color; @@ -35,34 +34,31 @@ public class Font { static public boolean initialized = false; static public int getByte(int c, int yOffset) { - if (!initialized) { + if (font == null || !initialized) { initalize(); } return font[c][yOffset]; } private static void initalize() { - initialized = true; font = new int[256][8]; - Thread fontLoader = new Thread(() -> { - InputStream in = Font.class.getClassLoader().getResourceAsStream("jace/data/font.png"); - Image image = new Image(in); - PixelReader reader = image.getPixelReader(); - for (int i = 0; i < 256; i++) { - int x = (i >> 4) * 13 + 2; - int y = (i & 15) * 13 + 4; - for (int j = 0; j < 8; j++) { - int row = 0; - for (int k = 0; k < 7; k++) { - Color color = reader.getColor((7 - k) + x, j + y); - boolean on = color.getRed() != 0; - row = (row << 1) | (on ? 0 : 1); - } - font[i][j] = row; + InputStream in = Font.class.getResourceAsStream("/jace/data/font.png"); + Image image = new Image(in); + PixelReader reader = image.getPixelReader(); + for (int i = 0; i < 256; i++) { + int x = (i >> 4) * 13 + 2; + int y = (i & 15) * 13 + 4; + for (int j = 0; j < 8; j++) { + int row = 0; + for (int k = 0; k < 7; k++) { + Color color = reader.getColor((7 - k) + x, j + y); + boolean on = color.getRed() != 0; + row = (row << 1) | (on ? 0 : 1); } + font[i][j] = row; } - }); - fontLoader.start(); + } + initialized = true; } /** diff --git a/src/main/java/jace/core/IndependentTimedDevice.java b/src/main/java/jace/core/IndependentTimedDevice.java new file mode 100644 index 0000000..d19b268 --- /dev/null +++ b/src/main/java/jace/core/IndependentTimedDevice.java @@ -0,0 +1,150 @@ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + +package jace.core; + +/** + * This is the core of a device that runs with its own independent clock in its + * own thread. Device timing is controlled by pausing the thread at regular + * intervals as necessary. + * + * This is primarily only used for the system clock, but it is possible to + * use for other devices that need to operate independently -- but it is best + * to do so only with caution as extra threads can lead to weird glitches if they + * need to have guarantees of synchronization, etc. + * + * @author brobert + */ +public abstract class IndependentTimedDevice extends TimedDevice { + + public IndependentTimedDevice() { + super(false); + } + + // The actual worker that the device runs as + public Thread worker; + public boolean hasStopped = true; + + @Override + /* We really don't want to suspect the worker thread if we're running in it. + * The goal for suspending the thread is to prevent any concurrent activity + * affecting the emulator state. However, if we're already in the worker + * thread, then we're already blocking the execution of the emulator, so + * we don't need to suspend it. + */ + public void whileSuspended(Runnable r) { + if (isDeviceThread()) { + r.run(); + } else { + super.whileSuspended(r); + } + } + + @Override + public T whileSuspended(java.util.function.Supplier r, T defaultValue) { + if (isDeviceThread()) { + return r.get(); + } else { + return super.whileSuspended(r, defaultValue); + } + } + + + public boolean isDeviceThread() { + return Thread.currentThread() == worker; + } + + /** + * This is used in unit tests where we want the device + * to act like it is resumed, but not actual free-running. + * This allows tests to step manually to check behaviors, etc. + */ + public void resumeInThread() { + super.resume(); + setPaused(false); + } + + @Override + public boolean suspend() { + boolean result = super.suspend(); + Thread w = worker; + worker = null; + if (w != null && w.isAlive()) { + try { + w.interrupt(); + w.join(100); + } catch (InterruptedException ex) { + } + } + return result; + } + + @Override + protected void pauseStart() { + // KLUDGE: Sleeping to wait for worker thread to hit paused state. We might be inside the worker (?) + if (!isDeviceThread()) { + Thread.onSpinWait(); + } + } + + public static int SLEEP_PRECISION_LIMIT = 100; + public void sleepUntil(Long time) { + if (time != null) { + while (System.nanoTime() < time) { + int waitTime = (int) ((time - System.nanoTime()) / 1000000); + if (waitTime >= SLEEP_PRECISION_LIMIT) { + try { + Thread.sleep(waitTime); + } catch (InterruptedException ex) { + return; + } + } else { + Thread.onSpinWait(); + } + } + } + } + + @Override + public synchronized void resume() { + super.resume(); + if (worker != null && worker.isAlive()) { + return; + } + Thread newWorker = new Thread(() -> { + // System.out.println("Worker thread for " + getDeviceName() + " starting"); + while (isRunning()) { + if (isPaused()) { + hasStopped = true; + while (isPaused() && isRunning()) { + Thread.onSpinWait(); + } + hasStopped = false; + } else { + doTick(); + sleepUntil(calculateResyncDelay()); + } + } + hasStopped = true; + // System.out.println("Worker thread for " + getDeviceName() + " stopped"); + }); + this.worker = newWorker; + newWorker.setDaemon(false); + newWorker.setPriority(Thread.MAX_PRIORITY); + newWorker.setName("Timed device " + getDeviceName() + " worker"); + newWorker.start(); + } +} diff --git a/src/main/java/jace/core/KeyHandler.java b/src/main/java/jace/core/KeyHandler.java index 108e9f2..3510997 100644 --- a/src/main/java/jace/core/KeyHandler.java +++ b/src/main/java/jace/core/KeyHandler.java @@ -1,21 +1,19 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; import javafx.scene.input.KeyCode; diff --git a/src/main/java/jace/core/Keyboard.java b/src/main/java/jace/core/Keyboard.java index e7cfb5c..098217d 100644 --- a/src/main/java/jace/core/Keyboard.java +++ b/src/main/java/jace/core/Keyboard.java @@ -1,46 +1,40 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; +import java.io.IOException; +import java.io.StringReader; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.function.BiFunction; +import java.util.function.Function; +import java.util.logging.Level; +import java.util.logging.Logger; + import jace.Emulator; import jace.apple2e.SoftSwitches; import jace.config.InvokableAction; import jace.config.Reconfigurable; -import java.awt.Toolkit; -import java.awt.datatransfer.Clipboard; -import java.awt.datatransfer.DataFlavor; -import java.awt.datatransfer.UnsupportedFlavorException; -import java.io.IOException; -import java.io.StringReader; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; import javafx.event.EventHandler; +import javafx.scene.input.Clipboard; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; -import javafx.stage.WindowEvent; /** * Keyboard manages all keyboard-related activities. For now, all hotkeys are @@ -58,12 +52,6 @@ public class Keyboard implements Reconfigurable { solidApple(false); } - private Computer computer; - - public Keyboard(Computer computer) { - this.computer = computer; - } - @Override public String getShortName() { return "kbd"; @@ -96,53 +84,58 @@ public class Keyboard implements Reconfigurable { */ public Keyboard() { } - private static Map> keyHandlersByKey = new HashMap<>(); - private static Map> keyHandlersByOwner = new HashMap<>(); + private static final Map> keyHandlersByKey = new HashMap<>(); + private static final Map> keyHandlersByOwner = new HashMap<>(); - public static void registerInvokableAction(InvokableAction action, Object owner, Method method, String code) { - boolean isStatic = Modifier.isStatic(method.getModifiers()); + /** + * + * @param action + * @param owner + * @param method + * @param code + */ + public static void registerInvokableAction(InvokableAction action, Object owner, Function method, String code) { registerKeyHandler(new KeyHandler(code) { @Override public boolean handleKeyUp(KeyEvent e) { - Emulator.computer.getKeyboard().shiftPressed = e.isShiftDown(); + Emulator.withComputer(c -> c.getKeyboard().shiftPressed = e.isShiftDown()); if (action == null || !action.notifyOnRelease()) { return false; } -// System.out.println("Key up: "+method.toString()); - Object returnValue = null; - try { - if (method.getParameterCount() > 0) { - returnValue = method.invoke(isStatic ? null : owner, false); - } else { - returnValue = method.invoke(isStatic ? null : owner); - } - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { - Logger.getLogger(Keyboard.class.getName()).log(Level.SEVERE, null, ex); - } - if (returnValue != null) { - return (Boolean) returnValue; - } - return action.consumeKeyEvent(); + return method.apply(false) && action.consumeKeyEvent(); } @Override public boolean handleKeyDown(KeyEvent e) { // System.out.println("Key down: "+method.toString()); - Emulator.computer.getKeyboard().shiftPressed = e.isShiftDown(); - Object returnValue = null; - try { - if (method.getParameterCount() > 0) { - returnValue = method.invoke(isStatic ? null : owner, true); - } else { - returnValue = method.invoke(isStatic ? null : owner); - } - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { - Logger.getLogger(Keyboard.class.getName()).log(Level.SEVERE, null, ex); + Emulator.withComputer(c -> c.getKeyboard().shiftPressed = e.isShiftDown()); + if (action == null) { + return false; } - if (returnValue != null) { - return (Boolean) returnValue; + return method.apply(true) && action.consumeKeyEvent(); + } + }, owner); + } + + public static void registerInvokableAction(InvokableAction action, Object owner, BiFunction method, String code) { + registerKeyHandler(new KeyHandler(code) { + @Override + public boolean handleKeyUp(KeyEvent e) { + Emulator.withComputer(c -> c.getKeyboard().shiftPressed = e.isShiftDown()); + if (action == null || !action.notifyOnRelease()) { + return false; } - return action != null ? action.consumeKeyEvent() : null; + return method.apply(owner, false) && action.consumeKeyEvent(); + } + + @Override + public boolean handleKeyDown(KeyEvent e) { +// System.out.println("Key down: "+method.toString()); + Emulator.withComputer(c -> c.getKeyboard().shiftPressed = e.isShiftDown()); + if (action == null) { + return false; + } + return method.apply(owner, true) && action.consumeKeyEvent(); } }, owner); } @@ -163,9 +156,8 @@ public class Keyboard implements Reconfigurable { if (!keyHandlersByOwner.containsKey(owner)) { return; } - keyHandlersByOwner.get(owner).stream().filter((handler) -> !(!keyHandlersByKey.containsKey(handler.key))).forEach((handler) -> { - keyHandlersByKey.get(handler.key).remove(handler); - }); + keyHandlersByOwner.get(owner).stream().filter((handler) -> keyHandlersByKey.containsKey(handler.key)).forEach( + (handler) -> keyHandlersByKey.get(handler.key).remove(handler)); keyHandlersByOwner.remove(owner); } @@ -252,7 +244,7 @@ public class Keyboard implements Reconfigurable { default: } - Emulator.computer.getKeyboard().shiftPressed = e.isShiftDown(); + Emulator.withComputer(computer -> computer.getKeyboard().shiftPressed = e.isShiftDown()); if (e.isShiftDown()) { c = fixShiftedChar(c); } @@ -310,18 +302,18 @@ public class Keyboard implements Reconfigurable { e.consume(); } + public static boolean isOpenApplePressed = false; @InvokableAction(name = "Open Apple Key", alternatives = "OA", category = "Keyboard", notifyOnRelease = true, defaultKeyMapping = "Alt", consumeKeyEvent = false) public void openApple(boolean pressed) { - computer.pause(); + isOpenApplePressed = pressed; SoftSwitches.PB0.getSwitch().setState(pressed); - computer.resume(); } + public static boolean isClosedApplePressed = false; @InvokableAction(name = "Closed Apple Key", alternatives = "CA", category = "Keyboard", notifyOnRelease = true, defaultKeyMapping = {"Shortcut","Meta","Command"}, consumeKeyEvent = false) public void solidApple(boolean pressed) { - computer.pause(); + isClosedApplePressed = pressed; SoftSwitches.PB1.getSwitch().setState(pressed); - computer.resume(); } public static void pasteFromString(String text) { @@ -331,18 +323,10 @@ public class Keyboard implements Reconfigurable { @InvokableAction(name = "Paste clipboard", alternatives = "paste", category = "Keyboard", notifyOnRelease = false, defaultKeyMapping = {"Ctrl+Shift+V","Shift+Insert"}, consumeKeyEvent = true) public static void pasteFromClipboard() { - try { - Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard(); - String contents = (String) clip.getData(DataFlavor.stringFlavor); - if (contents != null && !"".equals(contents)) { - contents = contents.replaceAll("\\r?\\n|\\r", (char) 0x0d + ""); - pasteBuffer = new StringReader(contents); - } - } catch (UnsupportedFlavorException | IOException ex) { - Logger.getLogger(Keyboard.class - .getName()).log(Level.SEVERE, null, ex); + Clipboard clipboard = Clipboard.getSystemClipboard(); + if (clipboard.hasString()) { + pasteFromString(clipboard.getString()); } - } static StringReader pasteBuffer = null; diff --git a/src/main/java/jace/core/Media.java b/src/main/java/jace/core/Media.java new file mode 100644 index 0000000..83f5dc4 --- /dev/null +++ b/src/main/java/jace/core/Media.java @@ -0,0 +1,181 @@ +package jace.core; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.ByteBuffer; +import java.nio.IntBuffer; +import java.nio.ShortBuffer; + +import org.lwjgl.stb.STBVorbis; +import org.lwjgl.stb.STBVorbisInfo; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; + +import javafx.util.Duration; + +public class Media { + int totalSamples = 0; + float totalDuration = 0; + long sampleRate = 0; + boolean isStereo = true; + ShortBuffer sampleBuffer; + File tempFile; + + public Media(String resourcePath) throws IOException { + System.out.println("Loading media: " + resourcePath); + byte[] oggFile; + try (InputStream oggStream = getClass().getResourceAsStream(resourcePath)) { + oggFile = oggStream.readAllBytes(); + } + + ByteBuffer oggBuffer = null; + STBVorbisInfo info = null; + ShortBuffer tempSampleBuffer = null; + try (MemoryStack stack = MemoryStack.stackPush()) { + oggBuffer = MemoryUtil.memAlloc(oggFile.length); + oggBuffer.put(oggFile); + oggBuffer.flip(); + IntBuffer error = stack.callocInt(1); + Long decoder = STBVorbis.stb_vorbis_open_memory(oggBuffer, error, null); + if (decoder == null || decoder <= 0) { + throw new RuntimeException("Failed to open Ogg Vorbis file. Error: " + getError(error.get(0)) + " -- file is located at " + resourcePath); + } + info = STBVorbisInfo.malloc(stack); + STBVorbis.stb_vorbis_get_info(decoder, info); + totalSamples = STBVorbis.stb_vorbis_stream_length_in_samples(decoder); + totalDuration = STBVorbis.stb_vorbis_stream_length_in_seconds(decoder); + sampleRate = info.sample_rate(); + isStereo = info.channels() == 2; + if (isStereo) { + totalSamples *= 2; + } + + tempSampleBuffer = MemoryUtil.memAllocShort(2048); + sampleBuffer = ShortBuffer.allocate(totalSamples); + int sampleCount = 1; + int currentOffset = 0; + while (sampleCount > 0) { + sampleCount = STBVorbis.stb_vorbis_get_samples_short_interleaved(decoder, isStereo?2:1, tempSampleBuffer); + if (sampleCount == 0) { + break; + } + // copy sample buffer into byte buffer so we can deallocate, then transfer the buffer contents + sampleBuffer.put(currentOffset, tempSampleBuffer, 0, sampleCount * (isStereo ? 2 : 1)); + tempSampleBuffer.rewind(); + currentOffset += sampleCount * (isStereo ? 2 : 1); + } + STBVorbis.stb_vorbis_close(decoder); + sampleBuffer.rewind(); + } catch (RuntimeException ex) { + throw ex; + } finally { + if (oggBuffer != null) + MemoryUtil.memFree(oggBuffer); + if (tempSampleBuffer != null) + MemoryUtil.memFree(tempSampleBuffer); + } + } + + public String getError(int vorbisErrorCode) { + switch (vorbisErrorCode) { + case STBVorbis.VORBIS__no_error: + return "VORBIS_no_error"; + case STBVorbis.VORBIS_need_more_data: + return "VORBIS_need_more_data"; + case STBVorbis.VORBIS_invalid_api_mixing: + return "VORBIS_invalid_api_mixing"; + case STBVorbis.VORBIS_outofmem: + return "VORBIS_outofmem"; + case STBVorbis.VORBIS_feature_not_supported: + return "VORBIS_feature_not_supported"; + case STBVorbis.VORBIS_too_many_channels: + return "VORBIS_too_many_channels"; + case STBVorbis.VORBIS_file_open_failure: + return "VORBIS_file_open_failure"; + case STBVorbis.VORBIS_seek_without_length: + return "VORBIS_seek_without_length"; + case STBVorbis.VORBIS_unexpected_eof: + return "VORBIS_unexpected_eof"; + case STBVorbis.VORBIS_seek_invalid: + return "VORBIS_seek_invalid"; + case STBVorbis.VORBIS_invalid_setup: + return "VORBIS_invalid_setup"; + case STBVorbis.VORBIS_invalid_stream: + return "VORBIS_invalid_stream"; + case STBVorbis.VORBIS_missing_capture_pattern: + return "VORBIS_missing_capture_pattern"; + case STBVorbis.VORBIS_invalid_stream_structure_version: + return "VORBIS_invalid_stream_structure_version"; + case STBVorbis.VORBIS_continued_packet_flag_invalid: + return "VORBIS_continued_packet_flag_invalid"; + case STBVorbis.VORBIS_incorrect_stream_serial_number: + return "VORBIS_incorrect_stream_serial_number"; + case STBVorbis.VORBIS_invalid_first_page: + return "VORBIS_invalid_first_page"; + case STBVorbis.VORBIS_bad_packet_type: + return "VORBIS_bad_packet_type"; + case STBVorbis.VORBIS_cant_find_last_page: + return "VORBIS_cant_find_last_page"; + case STBVorbis.VORBIS_seek_failed: + return "VORBIS_seek_failed"; + case STBVorbis.VORBIS_ogg_skeleton_not_supported: + return "VORBIS_ogg_skeleton_not_supported"; + default: + return "Unknown error code: " + vorbisErrorCode; + } + } + + public void close() { + if (sampleBuffer != null) + sampleBuffer.clear(); + if (tempFile != null && tempFile.exists()) + tempFile.delete(); + } + + public void seekToTime(Duration millis) { + int sampleNumber = (int) (millis.toMillis() * sampleRate / 1000); + sampleNumber = Math.max(0, Math.min(sampleNumber, totalSamples)); + sampleBuffer.position(sampleNumber * (isStereo ? 2 : 1)); + } + + public boolean isEnded() { + return sampleBuffer.remaining() == 0; + } + + public void restart() { + sampleBuffer.rewind(); + } + + public short getNextLeftSample() { + // read next sample for left and right channels + if (isEnded()) { + return 0; + } + return sampleBuffer.get(); + } + + public short getNextRightSample() { + if (isEnded()) { + return 0; + } + return isStereo ? sampleBuffer.get() : sampleBuffer.get(sampleBuffer.position()); + } + + public java.time.Duration getCurrentTime() { + int sampleNumber = sampleBuffer.position() / (isStereo ? 2 : 1); + return java.time.Duration.ofMillis((long) (sampleNumber * 1000 / sampleRate)); + } + + public float getTotalDuration() { + return totalDuration; + } + + public int getTotalSamples() { + return totalSamples; + } + + public long getSampleRate() { + return sampleRate; + } +} \ No newline at end of file diff --git a/src/main/java/jace/core/MediaPlayer.java b/src/main/java/jace/core/MediaPlayer.java new file mode 100644 index 0000000..2cb6cb1 --- /dev/null +++ b/src/main/java/jace/core/MediaPlayer.java @@ -0,0 +1,134 @@ +package jace.core; + +import java.time.Duration; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; + +import jace.core.SoundMixer.SoundBuffer; +import jace.core.SoundMixer.SoundError; + +public class MediaPlayer { + + double vol = 1.0; + int repeats = 0; + int maxRepetitions = 1; + Status status = Status.NOT_STARTED; + Media soundData; + SoundBuffer playbackBuffer; + Duration lastKnownDuration = Duration.ZERO; + Executor executor = Executors.newSingleThreadExecutor(); + + public static enum Status { + NOT_STARTED, PLAYING, PAUSED, STOPPED + } + + public static final int INDEFINITE = -1; + + public MediaPlayer(Media song) { + this.soundData = song; + } + + public Status getStatus() { + return status; + } + + public Duration getCurrentTime() { + if (soundData == null) { + return lastKnownDuration; + } else { + return soundData.getCurrentTime(); + } + } + + public double getVolume() { + return vol; + } + + // NOTE: Once a song is stopped, it cannot be restarted. + public void stop() { + status = Status.STOPPED; + try { + if (playbackBuffer != null) { + playbackBuffer.flush(); + playbackBuffer.shutdown(); + playbackBuffer = null; + } + } catch (InterruptedException | ExecutionException | SoundError e) { + // Ignore exception on shutdown + } finally { + if (soundData != null) { + lastKnownDuration = soundData.getCurrentTime(); + soundData.close(); + } + soundData = null; + } + } + + public void setCycleCount(int i) { + maxRepetitions = i; + } + + public void setVolume(double d) { + vol = Math.max(0.0, Math.min(1.0, d)); + } + + public void setStartTime(javafx.util.Duration millis) { + soundData.seekToTime(millis); + } + + public void pause() { + status = Status.PAUSED; + } + + public void play() { + if (status == Status.STOPPED) { + return; + } else if (status == Status.NOT_STARTED) { + repeats = 0; + if (playbackBuffer == null || !playbackBuffer.isAlive()) { + try { + playbackBuffer = SoundMixer.createBuffer(true); + } catch (InterruptedException | ExecutionException | SoundError e) { + stop(); + return; + } + if (playbackBuffer == null) { + stop(); + return; + } + } + } + executor.execute(() -> { + SoundBuffer theBuffer = playbackBuffer; + status = Status.PLAYING; + // System.out.println("Song playback thread started"); + Media theSoundData = soundData; + while (status == Status.PLAYING && (maxRepetitions == INDEFINITE || repeats < maxRepetitions) && theSoundData != null && theBuffer != null) { + if (theSoundData.isEnded()) { + if (maxRepetitions == INDEFINITE) { + theSoundData.restart(); + } else { + repeats++; + if (repeats < maxRepetitions) { + theSoundData.restart(); + } else { + System.out.println("Song ended"); + this.stop(); + break; + } + } + } + try { + theBuffer.playSample((short) (theSoundData.getNextLeftSample() * vol)); + theBuffer.playSample((short) (theSoundData.getNextRightSample() * vol)); + } catch (InterruptedException | ExecutionException | SoundError e) { + e.printStackTrace(); + this.stop(); + } + theSoundData = soundData; + theBuffer = playbackBuffer; + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/jace/core/Motherboard.java b/src/main/java/jace/core/Motherboard.java index 0877d62..fff4963 100644 --- a/src/main/java/jace/core/Motherboard.java +++ b/src/main/java/jace/core/Motherboard.java @@ -1,31 +1,27 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; +import java.util.HashSet; + +import jace.Emulator; import jace.apple2e.SoftSwitches; import jace.apple2e.Speaker; import jace.config.ConfigurableField; -import java.util.HashSet; -import java.util.Optional; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; /** * Motherboard is the heart of the computer. It can have a list of cards @@ -37,20 +33,20 @@ import java.util.logging.Logger; * * @author Brendan Robert (BLuRry) brendan.robert@gmail.com */ -public class Motherboard extends TimedDevice { - +public class Motherboard extends IndependentTimedDevice { + @ConfigurableField(name = "Enable Speaker", shortName = "speaker", defaultValue = "true") public static boolean enableSpeaker = true; public Speaker speaker; void vblankEnd() { SoftSwitches.VBL.getSwitch().setState(true); - computer.notifyVBLStateChanged(true); + Emulator.withComputer(c->c.notifyVBLStateChanged(true)); } void vblankStart() { SoftSwitches.VBL.getSwitch().setState(false); - computer.notifyVBLStateChanged(false); + Emulator.withComputer(c->c.notifyVBLStateChanged(false)); } /** @@ -58,8 +54,8 @@ public class Motherboard extends TimedDevice { * @param computer * @param oldMotherboard */ - public Motherboard(Computer computer, Motherboard oldMotherboard) { - super(computer); + public Motherboard(Motherboard oldMotherboard) { + super(); if (oldMotherboard != null) { addAllDevices(oldMotherboard.getChildren()); speaker = oldMotherboard.speaker; @@ -78,69 +74,42 @@ public class Motherboard extends TimedDevice { public String getShortName() { return "mb"; } - @ConfigurableField(category = "advanced", name = "CPU per clock", defaultValue = "1", description = "Number of CPU cycles per clock cycle (normal = 1)") - public static int cpuPerClock = 1; - public int clockCounter = 1; + + private CPU _cpu = null; + public CPU getCpu() { + if (_cpu == null) { + _cpu = Emulator.withComputer(Computer::getCpu, null); + } + return _cpu; + } @Override public void tick() { - Optional[] cards = computer.getMemory().getAllCards(); - try { - clockCounter--; - computer.getCpu().doTick(); - if (clockCounter > 0) { - return; - } - clockCounter = cpuPerClock; - computer.getVideo().doTick(); - for (Optional card : cards) { - card.ifPresent(Card::doTick); - } - } catch (Throwable t) { - Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, t); - } - } - // From the holy word of Sather 3:5 (Table 3.1) :-) - // This average speed averages in the "long" cycles - public static long SPEED = 1020484L; // (NTSC) - //public static long SPEED = 1015625L; // (PAL) - - @Override - public long defaultCyclesPerSecond() { - return SPEED; } @Override public synchronized void reconfigure() { - boolean startAgain = pause(); + _cpu = null; accelorationRequestors.clear(); + disableTempMaxSpeed(); super.reconfigure(); + // Now create devices as needed, e.g. sound if (enableSpeaker) { try { if (speaker == null) { - speaker = new Speaker(computer); - if (computer.mixer.lineAvailable) { - speaker.attach(); - addChildDevice(speaker); - } else { - System.out.print("No lines available! Speaker not running."); - } + speaker = new Speaker(); + speaker.attach(); } speaker.reconfigure(); + addChildDevice(speaker); } catch (Throwable t) { System.out.println("Unable to initalize sound -- deactivating speaker out"); - removeChildDevice(speaker); + t.printStackTrace(); } } else { System.out.println("Speaker not enabled, leaving it off."); - if (speaker != null) { - removeChildDevice(speaker); - } - } - if (startAgain && computer.getMemory() != null) { - resume(); } } HashSet accelorationRequestors = new HashSet<>(); @@ -151,50 +120,8 @@ public class Motherboard extends TimedDevice { } public void cancelSpeedRequest(Object requester) { - accelorationRequestors.remove(requester); - if (accelorationRequestors.isEmpty()) { + if (accelorationRequestors.remove(requester) && accelorationRequestors.isEmpty()) { disableTempMaxSpeed(); } } - - @Override - public void attach() { - } - final Set resume = new HashSet<>(); - - @Override - public boolean suspend() { - synchronized (resume) { - resume.clear(); - for (Optional c : computer.getMemory().getAllCards()) { - if (!c.isPresent()) { - continue; - } - if (!c.get().suspendWithCPU() || !c.get().isRunning()) { - continue; - } - if (c.get().suspend()) { - resume.add(c.get()); - } - } - } - return super.suspend(); - } - - @Override - public void resume() { - super.resume(); - synchronized (resume) { - resume.stream().forEach((c) -> { - c.resume(); - }); - } - } - - @Override - public void detach() { - System.out.println("Detaching motherboard"); -// halt(); - super.detach(); - } } diff --git a/src/main/java/jace/core/PagedMemory.java b/src/main/java/jace/core/PagedMemory.java index 292d3cf..2a13268 100644 --- a/src/main/java/jace/core/PagedMemory.java +++ b/src/main/java/jace/core/PagedMemory.java @@ -1,26 +1,25 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; +import java.util.Arrays; + import jace.state.StateManager; import jace.state.Stateful; -import java.util.Arrays; /** * This represents bank-switchable ram which can reside at fixed portions of the @@ -41,9 +40,9 @@ public class PagedMemory { FIRMWARE_80COL(0x0c300), SLOW_ROM(0x0c100), RAM(0x0000); - protected int baseAddress; + int baseAddress; - private Type(int newBase) { + Type(int newBase) { baseAddress = newBase; } @@ -59,10 +58,10 @@ public class PagedMemory { /** * Creates a new instance of PagedMemory + * @param size The size of the memory region, in multiples of 256 + * @param memType The type of the memory region */ - Computer computer; - public PagedMemory(int size, Type memType, Computer computer) { - this.computer = computer; + public PagedMemory(int size, Type memType) { type = memType; internalMemory = new byte[size >> 8][256]; for (int i = 0; i < size; i += 256) { @@ -77,12 +76,10 @@ public class PagedMemory { loadData(romData); } - public void loadData(byte[] romData) { + public final void loadData(byte[] romData) { for (int i = 0; i < romData.length; i += 256) { byte[] b = new byte[256]; - for (int j = 0; j < 256; j++) { - b[j] = romData[i + j]; - } + System.arraycopy(romData, i, b, 0, 256); internalMemory[i >> 8] = b; } } @@ -111,9 +108,7 @@ public class PagedMemory { public byte[] getMemoryPage(int memoryBase) { int offset = memoryBase - type.baseAddress; -// int page = offset >> 8; int page = (offset >> 8) & 0x0ff; -// return get(page); return internalMemory[page]; } @@ -129,7 +124,7 @@ public class PagedMemory { public void writeByte(int address, byte value) { byte[] page = getMemoryPage(address); - StateManager.markDirtyValue(page, computer); + StateManager.markDirtyValue(page); getMemoryPage(address)[address & 0x0ff] = value; } @@ -137,10 +132,10 @@ public class PagedMemory { byte[][] sourceMemory = source.getMemory(); int sourceBase = source.type.getBaseAddress() >> 8; int thisBase = type.getBaseAddress() >> 8; - int start = sourceBase > thisBase ? sourceBase : thisBase; + int start = Math.max(sourceBase, thisBase); int sourceEnd = sourceBase + source.getMemory().length; int thisEnd = thisBase + getMemory().length; - int end = sourceEnd < thisEnd ? sourceEnd : thisEnd; + int end = Math.min(sourceEnd, thisEnd); for (int i = start; i < end; i++) { set(i - thisBase, sourceMemory[i - sourceBase]); } diff --git a/src/main/java/jace/core/Palette.java b/src/main/java/jace/core/Palette.java index 3de0e88..2826b95 100644 --- a/src/main/java/jace/core/Palette.java +++ b/src/main/java/jace/core/Palette.java @@ -1,21 +1,19 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; import javafx.scene.paint.Color; diff --git a/src/main/java/jace/core/RAM.java b/src/main/java/jace/core/RAM.java index 94e99b9..e4e298e 100644 --- a/src/main/java/jace/core/RAM.java +++ b/src/main/java/jace/core/RAM.java @@ -1,29 +1,33 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; -import jace.apple2e.SoftSwitches; -import jace.config.Reconfigurable; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.Set; +import java.util.concurrent.ConcurrentSkipListSet; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; + +import jace.Emulator; +import jace.apple2e.SoftSwitches; +import jace.config.Reconfigurable; /** * RAM is a 64K address space of paged memory. It also manages sets of memory @@ -37,23 +41,22 @@ public abstract class RAM implements Reconfigurable { public PagedMemory activeRead; public PagedMemory activeWrite; - public List listeners; - public List[] listenerMap; - public List[] ioListenerMap; - public Optional[] cards; + private final Set listeners = new ConcurrentSkipListSet<>(); + @SuppressWarnings("unchecked") + private final Set[] listenerMap = (Set[]) new Set[256]; + @SuppressWarnings("unchecked") + private final Set[] ioListenerMap = (Set[]) new Set[256]; + @SuppressWarnings("unchecked") + public Optional[] cards = (Optional[]) new Optional[8]; // card 0 = 80 column card firmware / system rom public int activeSlot = 0; - protected final Computer computer; /** * Creates a new instance of RAM * * @param computer */ - public RAM(Computer computer) { - this.computer = computer; - listeners = new ArrayList<>(); - cards = new Optional[8]; + public RAM() { for (int i = 0; i < 8; i++) { cards[i] = Optional.empty(); } @@ -89,11 +92,10 @@ public abstract class RAM implements Reconfigurable { cards[slot] = Optional.of(c); c.setSlot(slot); c.attach(); + configureActiveMemory(); } public void removeCard(Card c) { - c.suspend(); - c.detach(); removeCard(c.getSlot()); } @@ -104,6 +106,13 @@ public abstract class RAM implements Reconfigurable { } abstract public void configureActiveMemory(); + public void copyFrom(RAM other) { + cards = other.cards; + activeSlot = other.activeSlot; + listeners.addAll(other.listeners); + refreshListenerMap(); + configureActiveMemory(); + } public void write(int address, byte b, boolean generateEvent, boolean requireSynchronization) { byte[] page = activeWrite.getMemoryPage(address); @@ -124,9 +133,9 @@ public abstract class RAM implements Reconfigurable { public void writeWord(int address, int w, boolean generateEvent, boolean requireSynchronization) { write(address, (byte) (w & 0x0ff), generateEvent, requireSynchronization); - write(address + 1, (byte) (w >> 8), generateEvent, requireSynchronization); + write(address + 1, (byte) ((w >> 8) & 0x0ff), generateEvent, requireSynchronization); } - + public byte readRaw(int address) { // if (address >= 65536) return 0; return activeRead.getMemoryPage(address)[address & 0x0FF]; @@ -136,7 +145,8 @@ public abstract class RAM implements Reconfigurable { // if (address >= 65536) return 0; byte value = activeRead.getMemoryPage(address)[address & 0x0FF]; // if (triggerEvent || ((address & 0x0FF00) == 0x0C000)) { - if (triggerEvent || (address & 0x0FFF0) == 0x0c030) { +// if (triggerEvent || (address & 0x0FFF0) == 0x0c030) { + if (triggerEvent) { value = callListener(eventType, address, value, value, requireSyncronization); } return value; @@ -151,31 +161,26 @@ public abstract class RAM implements Reconfigurable { public int readWord(int address, RAMEvent.TYPE eventType, boolean triggerEvent, boolean requireSynchronization) { int lsb = 0x00ff & read(address, eventType, triggerEvent, requireSynchronization); int msb = (0x00ff & read(address + 1, eventType, triggerEvent, requireSynchronization)) << 8; - int value = msb + lsb; - return value; + return msb + lsb; } - private void mapListener(RAMListener l, int address) { + private synchronized void mapListener(RAMListener l, int address) { if ((address & 0x0FF00) == 0x0C000) { int index = address & 0x0FF; - List ioListeners = ioListenerMap[index]; + Set ioListeners = ioListenerMap[index]; if (ioListeners == null) { - ioListeners = new ArrayList<>(); + ioListeners = new ConcurrentSkipListSet<>(); ioListenerMap[index] = ioListeners; } - if (!ioListeners.contains(l)) { - ioListeners.add(l); - } + ioListeners.add(l); } else { - int index = address >> 8; - List otherListeners = listenerMap[index]; + int index = (address >> 8) & 0x0FF; + Set otherListeners = listenerMap[index]; if (otherListeners == null) { - otherListeners = new ArrayList<>(); + otherListeners = new ConcurrentSkipListSet<>(); listenerMap[index] = otherListeners; } - if (!otherListeners.contains(l)) { - otherListeners.add(l); - } + otherListeners.add(l); } } @@ -183,11 +188,11 @@ public abstract class RAM implements Reconfigurable { if (l.getScope() == RAMEvent.SCOPE.ADDRESS) { mapListener(l, l.getScopeStart()); } else { - int start = 0; - int end = 0x0ffff; - if (l.getScope() == RAMEvent.SCOPE.RANGE) { - start = l.getScopeStart(); - end = l.getScopeEnd(); + int start = l.getScopeStart(); + int end = l.getScopeEnd(); + if (l.getScope() == RAMEvent.SCOPE.ANY) { + start = 0; + end = 0x0FFFF; } for (int i = start; i <= end; i++) { mapListener(l, i); @@ -196,145 +201,189 @@ public abstract class RAM implements Reconfigurable { } private void refreshListenerMap() { - listenerMap = new ArrayList[256]; - ioListenerMap = new ArrayList[256]; - listeners.stream().forEach((l) -> { - addListenerRange(l); - }); - } - - public RAMListener observe(RAMEvent.TYPE type, int address, RAMEvent.RAMEventHandler handler) { - return addListener(new RAMListener(type, RAMEvent.SCOPE.ADDRESS, RAMEvent.VALUE.ANY) { - @Override - protected void doConfig() { - setScopeStart(address); - } - - @Override - protected void doEvent(RAMEvent e) { - handler.handleEvent(e); - } - }); - } - - public RAMListener observe(RAMEvent.TYPE type, int address, boolean auxFlag, RAMEvent.RAMEventHandler handler) { - return addListener(new RAMListener(type, RAMEvent.SCOPE.ADDRESS, RAMEvent.VALUE.ANY) { - @Override - protected void doConfig() { - setScopeStart(address); - } - - @Override - protected void doEvent(RAMEvent e) { - if (isAuxFlagCorrect(e, auxFlag)) { - handler.handleEvent(e); - } - } - }); - } - - public RAMListener observe(RAMEvent.TYPE type, int addressStart, int addressEnd, RAMEvent.RAMEventHandler handler) { - return addListener(new RAMListener(type, RAMEvent.SCOPE.RANGE, RAMEvent.VALUE.ANY) { - @Override - protected void doConfig() { - setScopeStart(addressStart); - setScopeEnd(addressEnd); - } - - @Override - protected void doEvent(RAMEvent e) { - handler.handleEvent(e); - } - }); - } - - public RAMListener observe(RAMEvent.TYPE type, int addressStart, int addressEnd, boolean auxFlag, RAMEvent.RAMEventHandler handler) { - return addListener(new RAMListener(type, RAMEvent.SCOPE.RANGE, RAMEvent.VALUE.ANY) { - @Override - protected void doConfig() { - setScopeStart(addressStart); - setScopeEnd(addressEnd); - } - - @Override - protected void doEvent(RAMEvent e) { - if (isAuxFlagCorrect(e, auxFlag)) { - handler.handleEvent(e); - } - } - }); - } - - private boolean isAuxFlagCorrect(RAMEvent e, boolean auxFlag) { - if (e.getAddress() < 0x0100) { - if (SoftSwitches.AUXZP.getState() != auxFlag) { - return false; - } - } else if (SoftSwitches.RAMRD.getState() != auxFlag) { - return false; + // Wipe out existing maps + for (int i = 0; i < 256; i++) { + listenerMap[i] = null; + ioListenerMap[i] = null; } - return true; + listeners.forEach(this::addListenerRange); + } + + public RAMListener observeOnce(String observerationName, RAMEvent.TYPE type, int address, RAMEvent.RAMEventHandler handler) { + return addListener(new RAMListener(observerationName, type, RAMEvent.SCOPE.ADDRESS, RAMEvent.VALUE.ANY) { + @Override + protected void doConfig() { + setScopeStart(address); + } + + @Override + protected void doEvent(RAMEvent e) { + handler.handleEvent(e); + unregister(); + } + }); + } + + public RAMListener observe(String observerationName, RAMEvent.TYPE type, int address, RAMEvent.RAMEventHandler handler) { + return addListener(new RAMListener(observerationName, type, RAMEvent.SCOPE.ADDRESS, RAMEvent.VALUE.ANY) { + @Override + protected void doConfig() { + setScopeStart(address); + } + + @Override + protected void doEvent(RAMEvent e) { + handler.handleEvent(e); + } + }); + } + + public RAMListener observe(String observerationName, RAMEvent.TYPE type, int address, Boolean auxFlag, RAMEvent.RAMEventHandler handler) { + return addListener(new RAMListener(observerationName, type, RAMEvent.SCOPE.ADDRESS, RAMEvent.VALUE.ANY) { + @Override + protected void doConfig() { + setScopeStart(address); + } + + @Override + protected void doEvent(RAMEvent e) { + if (isAuxFlagCorrect(e, auxFlag)) { + handler.handleEvent(e); + } + } + }); + } + + public RAMListener observe(String observerationName, RAMEvent.TYPE type, int addressStart, int addressEnd, RAMEvent.RAMEventHandler handler) { + return addListener(new RAMListener(observerationName, type, RAMEvent.SCOPE.RANGE, RAMEvent.VALUE.ANY) { + @Override + protected void doConfig() { + setScopeStart(addressStart); + setScopeEnd(addressEnd); + } + + @Override + protected void doEvent(RAMEvent e) { + handler.handleEvent(e); + } + }); + } + + public RAMListener observe(String observerationName, RAMEvent.TYPE type, int addressStart, int addressEnd, Boolean auxFlag, RAMEvent.RAMEventHandler handler) { + return addListener(new RAMListener(observerationName, type, RAMEvent.SCOPE.RANGE, RAMEvent.VALUE.ANY) { + @Override + protected void doConfig() { + setScopeStart(addressStart); + setScopeEnd(addressEnd); + } + + @Override + protected void doEvent(RAMEvent e) { + if (isAuxFlagCorrect(e, auxFlag)) { + handler.handleEvent(e); + } + } + }); + } + + private boolean isAuxFlagCorrect(RAMEvent e, Boolean auxFlag) { + if (e.getAddress() < 0x0100) { + return SoftSwitches.AUXZP.getState() == auxFlag; + } else if (e.getAddress() >= 0x0C000 && e.getAddress() <= 0x0CFFF) { + // I/O page doesn't care about the aux flag + return true; + } else return auxFlag == null || SoftSwitches.RAMRD.getState() == auxFlag; } public RAMListener addListener(final RAMListener l) { - boolean restart = computer.pause(); - if (listeners.contains(l)) { + if (l == null) { return l; } - listeners.add(l); - addListenerRange(l); - if (restart) { - computer.resume(); + if (listeners.contains(l)) { + removeListener(l); } + listeners.add(l); + Emulator.whileSuspended((c)->addListenerRange(l)); return l; } + + public RAMListener addExecutionTrap(String observerationName, int address, Consumer handler) { + RAMListener listener = new RAMListener(observerationName, RAMEvent.TYPE.EXECUTE, RAMEvent.SCOPE.ADDRESS, RAMEvent.VALUE.ANY) { + @Override + protected void doConfig() { + setScopeStart(address); + } + + @Override + protected void doEvent(RAMEvent e) { + handler.accept(e); + } + }; + addListener(listener); + return listener; + } public void removeListener(final RAMListener l) { - boolean restart = computer.pause(); - listeners.remove(l); - refreshListenerMap(); - if (restart) { - computer.resume(); + if (l == null) { + return; } + if (!listeners.contains(l)) { + return; + } + listeners.remove(l); + Emulator.whileSuspended(c->refreshListenerMap()); } - public byte callListener(RAMEvent.TYPE t, int address, int oldValue, int newValue, boolean requireSyncronization) { - List activeListeners; - if (requireSyncronization) { - computer.getCpu().suspend(); - } + private byte _callListener(RAMEvent.TYPE t, int address, int oldValue, int newValue) { + Set activeListeners; if ((address & 0x0FF00) == 0x0C000) { activeListeners = ioListenerMap[address & 0x0FF]; if (activeListeners == null && t.isRead()) { - if (requireSyncronization) { - computer.getCpu().resume(); - } - return computer.getVideo().getFloatingBus(); + return Emulator.withComputer(c->c.getVideo().getFloatingBus(), (byte) 0); } } else { activeListeners = listenerMap[(address >> 8) & 0x0ff]; } - if (activeListeners != null) { + if (activeListeners != null && !activeListeners.isEmpty()) { RAMEvent e = new RAMEvent(t, RAMEvent.SCOPE.ADDRESS, RAMEvent.VALUE.ANY, address, oldValue, newValue); - activeListeners.stream().forEach((l) -> { - l.handleEvent(e); - }); - if (requireSyncronization) { - computer.getCpu().resume(); + activeListeners.forEach((l) -> l.handleEvent(e)); + if (!e.isIntercepted() && (address & 0x0FF00) == 0x0C000) { + return Emulator.withComputer(c->c.getVideo().getFloatingBus(), (byte) 0); } return (byte) e.getNewValue(); } - if (requireSyncronization) { - computer.getCpu().resume(); - } return (byte) newValue; } + public byte callListener(RAMEvent.TYPE t, int address, int oldValue, int newValue, boolean requireSyncronization) { + if (requireSyncronization && Emulator.withComputer(c->c.getMotherboard().isDeviceThread(), false)) { + AtomicInteger returnValue = new AtomicInteger(); + Emulator.withComputer(computer -> { + computer.getCpu().whileSuspended(()-> returnValue.set(_callListener(t, address, oldValue, newValue))); + _callListener(t, address, oldValue, newValue); + }); + return (byte) returnValue.get(); + } else { + return _callListener(t, address, oldValue, newValue); + } + } + abstract protected void loadRom(String path) throws IOException; abstract public void attach(); - abstract public void detach(); + public void detach() { + detachListeners.forEach(Runnable::run); + } abstract public void performExtendedCommand(int i); + + abstract public String getState(); + + abstract public void resetState(); + + List detachListeners = new ArrayList<>(); + public void onDetach(Runnable r) { + detachListeners.add(r); + } } diff --git a/src/main/java/jace/core/RAMEvent.java b/src/main/java/jace/core/RAMEvent.java index 4b8ec46..2171176 100644 --- a/src/main/java/jace/core/RAMEvent.java +++ b/src/main/java/jace/core/RAMEvent.java @@ -1,23 +1,23 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; +import jace.apple2e.SoftSwitches; + /** * A RAM event is defined as anything that causes a read or write to the * mainboard RAM of the computer. This could be the result of an indirect @@ -31,19 +31,19 @@ package jace.core; */ public class RAMEvent { - static public interface RAMEventHandler { - public void handleEvent(RAMEvent e); + public interface RAMEventHandler { + void handleEvent(RAMEvent e); } public enum TYPE { READ(true), READ_DATA(true), - EXECUTE(true), READ_OPERAND(true), + EXECUTE(true), WRITE(false), ANY(false); - boolean read = false; + boolean read; TYPE(boolean r) { this.read = r; @@ -52,14 +52,14 @@ public class RAMEvent { public boolean isRead() { return read; } - }; + } public enum SCOPE { ADDRESS, RANGE, ANY - }; + } public enum VALUE { @@ -68,11 +68,13 @@ public class RAMEvent { EQUALS, NOT_EQUALS, CHANGE_BY - }; + } + private TYPE type; private SCOPE scope; private VALUE value; private int address, oldValue, newValue; + private boolean valueIntercepted = false; /** * Creates a new instance of RAMEvent @@ -97,6 +99,9 @@ public class RAMEvent { } public final void setType(TYPE type) { + if (type == TYPE.ANY) { + throw new RuntimeException("Event type=Any is reserved for listeners, not for triggering events!"); + } this.type = type; } @@ -138,5 +143,27 @@ public class RAMEvent { public final void setNewValue(int newValue) { this.newValue = newValue; + valueIntercepted = true; + } + + public final boolean isIntercepted() { + return valueIntercepted; + } + + public boolean isMainMemory() { + if (type.isRead() && SoftSwitches.RAMRD.isOn()) { + return false; + } else if (!type.isRead() && SoftSwitches.RAMWRT.isOn()) { + return false; + } else if (address < 0x0200) { + // Check if zero page is pointed to auxiliary memory + return SoftSwitches.AUXZP.isOff(); + } + if ((address >= 0x400 && address < 0x0800) || (address >= 0x2000 && address < 0x4000)) { + if (SoftSwitches._80STORE.isOn() && SoftSwitches.PAGE2.isOn()) { + return false; + } + } + return true; } } diff --git a/src/main/java/jace/core/RAMListener.java b/src/main/java/jace/core/RAMListener.java index 3eb4d3a..72f9e3a 100644 --- a/src/main/java/jace/core/RAMListener.java +++ b/src/main/java/jace/core/RAMListener.java @@ -1,23 +1,22 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; +import jace.Emulator; import jace.core.RAMEvent.TYPE; /** @@ -29,7 +28,7 @@ import jace.core.RAMEvent.TYPE; * * @author Brendan Robert (BLuRry) brendan.robert@gmail.com */ -public abstract class RAMListener implements RAMEvent.RAMEventHandler { +public abstract class RAMListener implements RAMEvent.RAMEventHandler, Comparable { private RAMEvent.TYPE type; private RAMEvent.SCOPE scope; @@ -39,20 +38,27 @@ public abstract class RAMListener implements RAMEvent.RAMEventHandler { private int valueStart; private int valueEnd; private int valueAmount; + private String name; /** * Creates a new instance of RAMListener + * @param name * @param t * @param s * @param v */ - public RAMListener(RAMEvent.TYPE t, RAMEvent.SCOPE s, RAMEvent.VALUE v) { + public RAMListener(String name, RAMEvent.TYPE t, RAMEvent.SCOPE s, RAMEvent.VALUE v) { + setName(name); setType(t); setScope(s); setValue(v); doConfig(); } + public void unregister() { + Emulator.withMemory(m -> m.removeListener(this)); + } + public RAMEvent.TYPE getType() { return type; } @@ -77,6 +83,14 @@ public abstract class RAMListener implements RAMEvent.RAMEventHandler { this.value = value; } + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + public int getScopeStart() { return scopeStart; } @@ -118,18 +132,6 @@ public abstract class RAMListener implements RAMEvent.RAMEventHandler { } public boolean isRelevant(RAMEvent e) { - // Skip event if it's not the right type - if (type != TYPE.ANY && e.getType() != TYPE.ANY) { - if ((type != e.getType())) { - if (type == TYPE.READ) { - if (!e.getType().isRead()) { - return false; - } - } else { - return false; - } - } - } // Skip event if it's not in the scope we care about if (scope != RAMEvent.SCOPE.ANY) { if (scope == RAMEvent.SCOPE.ADDRESS && e.getAddress() != scopeStart) { @@ -139,6 +141,11 @@ public abstract class RAMListener implements RAMEvent.RAMEventHandler { } } + // Skip event if it's not the right type + if (!(type == TYPE.ANY || type == e.getType() || (type == TYPE.READ && e.getType().isRead()))) { + return false; + } + // Skip event if the value modification is uninteresting if (value != RAMEvent.VALUE.ANY) { if (value == RAMEvent.VALUE.CHANGE_BY && e.getNewValue() - e.getOldValue() != valueAmount) { @@ -147,9 +154,7 @@ public abstract class RAMListener implements RAMEvent.RAMEventHandler { return false; } else if (value == RAMEvent.VALUE.NOT_EQUALS && e.getNewValue() == valueAmount) { return false; - } else if (value == RAMEvent.VALUE.RANGE && (e.getNewValue() < valueStart || e.getNewValue() > valueEnd)) { - return false; - } + } else return value != RAMEvent.VALUE.RANGE || (e.getNewValue() >= valueStart && e.getNewValue() <= valueEnd); } // Ok, so we've filtered out the uninteresting stuff @@ -158,7 +163,7 @@ public abstract class RAMListener implements RAMEvent.RAMEventHandler { } @Override - public void handleEvent(RAMEvent e) { + public final void handleEvent(RAMEvent e) { if (isRelevant(e)) { doEvent(e); } @@ -167,4 +172,39 @@ public abstract class RAMListener implements RAMEvent.RAMEventHandler { abstract protected void doConfig(); abstract protected void doEvent(RAMEvent e); + + @Override + public int compareTo(RAMListener o) { + if (o.name.equals(name)) { + if (o.scopeStart == scopeStart) { + if (o.scopeEnd == scopeEnd) { + if (o.type == type) { + // Ignore hash codes -- combination of name, address range and type should identify similar listeners. + return (int) 0; + } else { + return Integer.compare(o.type.ordinal(), type.ordinal()); + } + } else { + return Integer.compare(o.scopeEnd, scopeEnd); + } + } else { + return Integer.compare(o.scopeStart, scopeStart); + } + } else { + return o.name.compareTo(name); + } + } + + /** + * + * @param o + * @return + */ + @Override + public boolean equals(Object o) { + if (o == null || ! (o instanceof RAMListener) ) { + return false; + } + return this.compareTo((RAMListener) o) == 0; + } } diff --git a/src/main/java/jace/core/SoftSwitch.java b/src/main/java/jace/core/SoftSwitch.java index a021463..ddc2262 100644 --- a/src/main/java/jace/core/SoftSwitch.java +++ b/src/main/java/jace/core/SoftSwitch.java @@ -1,28 +1,28 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; -import jace.state.Stateful; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import jace.Emulator; +import jace.state.Stateful; + /** * A softswitch is a hidden bit that lives in the MMU, it can be activated or * deactivated to change operating characteristics of the computer such as video @@ -40,14 +40,13 @@ public abstract class SoftSwitch { @Stateful public Boolean state; - private Boolean initalState; - private List listeners; + private final Boolean initalState; + private final List listeners; private final List exclusionActivate = new ArrayList<>(); private final List exclusionDeactivate = new ArrayList<>(); private final List exclusionQuery = new ArrayList<>(); - private String name; + private final String name; private boolean toggleType = false; - protected Computer computer; /** * Creates a new instance of SoftSwitch @@ -105,7 +104,7 @@ public abstract class SoftSwitch { exclusionActivate.add(i); } } - RAMListener l = new RAMListener(changeType, RAMEvent.SCOPE.RANGE, RAMEvent.VALUE.ANY) { + RAMListener l = new RAMListener("Softswitch toggle " + name, changeType, RAMEvent.SCOPE.RANGE, RAMEvent.VALUE.ANY) { @Override protected void doConfig() { setScopeStart(beginAddr); @@ -135,7 +134,7 @@ public abstract class SoftSwitch { exclusionActivate.add(i); } } - RAMListener l = new RAMListener(changeType, RAMEvent.SCOPE.RANGE, RAMEvent.VALUE.ANY) { + RAMListener l = new RAMListener("Softswitch on " + name, changeType, RAMEvent.SCOPE.RANGE, RAMEvent.VALUE.ANY) { @Override protected void doConfig() { setScopeStart(beginAddr); @@ -145,10 +144,10 @@ public abstract class SoftSwitch { @Override protected void doEvent(RAMEvent e) { if (e.getType().isRead()) { - e.setNewValue(computer.getVideo().getFloatingBus()); + e.setNewValue(Emulator.withComputer(c->c.getVideo().getFloatingBus(), (byte) 0)); } if (!exclusionActivate.contains(e.getAddress())) { - // System.out.println("Access to "+Integer.toHexString(e.getAddress())+" ENABLES switch "+getName()); + // System.out.println("Access to "+Integer.toHexString(e.getAddress())+" ENABLES switch "+getName()); setState(true); } } @@ -168,7 +167,7 @@ public abstract class SoftSwitch { exclusionDeactivate.add(i); } } - RAMListener l = new RAMListener(changeType, RAMEvent.SCOPE.RANGE, RAMEvent.VALUE.ANY) { + RAMListener l = new RAMListener("Softswitch off " + name, changeType, RAMEvent.SCOPE.RANGE, RAMEvent.VALUE.ANY) { @Override protected void doConfig() { setScopeStart(beginAddr); @@ -179,7 +178,7 @@ public abstract class SoftSwitch { protected void doEvent(RAMEvent e) { if (!exclusionDeactivate.contains(e.getAddress())) { setState(false); -// System.out.println("Access to "+Integer.toHexString(e.getAddress())+" disables switch "+getName()); + // System.out.println("Access to "+Integer.toHexString(e.getAddress())+" disables switch "+getName()); } } }; @@ -200,7 +199,7 @@ public abstract class SoftSwitch { } } // RAMListener l = new RAMListener(changeType, RAMEvent.SCOPE.RANGE, RAMEvent.VALUE.ANY) { - RAMListener l = new RAMListener(RAMEvent.TYPE.READ, RAMEvent.SCOPE.RANGE, RAMEvent.VALUE.ANY) { + RAMListener l = new RAMListener("Softswitch read state " + name, RAMEvent.TYPE.READ, RAMEvent.SCOPE.RANGE, RAMEvent.VALUE.ANY) { @Override protected void doConfig() { setScopeStart(beginAddr); @@ -239,39 +238,23 @@ public abstract class SoftSwitch { } } - public void register(Computer computer) { - this.computer = computer; - RAM m = computer.getMemory(); - listeners.stream().forEach((l) -> { - m.addListener(l); + public void register() { + Emulator.withMemory(m -> { + listeners.forEach(m::addListener); }); } public void unregister() { - RAM m = computer.getMemory(); - listeners.stream().forEach((l) -> { - m.removeListener(l); + Emulator.withMemory(m -> { + listeners.forEach(m::removeListener); }); - this.computer = null; } public void setState(boolean newState) { if (inhibit()) { return; } -// if (this != SoftSwitches.VBL.getSwitch() && -// this != SoftSwitches.KEYBOARD.getSwitch()) -// System.out.println("Switch "+name+" set to "+newState); state = newState; - /* - if (queryAddresses != null) { - RAM m = computer.getMemory(); - for (int i:queryAddresses) { - byte old = m.read(i, false); - m.write(i, (byte) (old & 0x7f | (state ? 0x080:0x000)), false); - } - } - */ stateChanged(); } diff --git a/src/main/java/jace/core/SoundMixer.java b/src/main/java/jace/core/SoundMixer.java index d80f17d..d710c66 100644 --- a/src/main/java/jace/core/SoundMixer.java +++ b/src/main/java/jace/core/SoundMixer.java @@ -1,43 +1,43 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; -import jace.config.ConfigurableField; -import jace.config.DynamicSelection; -import jace.config.Reconfigurable; +import java.nio.BufferOverflowException; +import java.nio.ShortBuffer; +import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; -import java.util.logging.Level; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.logging.Logger; -import java.util.regex.Pattern; -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.DataLine; -import javax.sound.sampled.Line; -import javax.sound.sampled.LineUnavailableException; -import javax.sound.sampled.Mixer; -import javax.sound.sampled.Mixer.Info; -import javax.sound.sampled.SourceDataLine; + +import org.lwjgl.BufferUtils; +import org.lwjgl.openal.AL; +import org.lwjgl.openal.AL10; +import org.lwjgl.openal.ALC; +import org.lwjgl.openal.ALC10; +import org.lwjgl.openal.ALCCapabilities; +import org.lwjgl.openal.ALCapabilities; + +import jace.Emulator; +import jace.config.ConfigurableField; /** * Manages sound resources used by various audio devices (such as speaker and @@ -49,54 +49,310 @@ import javax.sound.sampled.SourceDataLine; * @author Brendan Robert (BLuRry) brendan.robert@gmail.com */ public class SoundMixer extends Device { + public static boolean DEBUG_SOUND = false; - private final Set availableLines = Collections.synchronizedSet(new HashSet<>()); - private final Map activeLines = Collections.synchronizedMap(new HashMap<>()); /** * Bits per sample + * Making this configurable requires too much effort and not a lot of benefit */ - @ConfigurableField(name = "Bits per sample", shortName = "bits") + // @ConfigurableField(name = "Bits per sample", shortName = "bits") public static int BITS = 16; /** * Sample playback rate */ @ConfigurableField(name = "Playback Rate", shortName = "freq") - public static int RATE = 48000; + public static int RATE = 44100; @ConfigurableField(name = "Mute", shortName = "mute") public static boolean MUTE = false; + + @ConfigurableField(name = "Buffer size", shortName = "buffer") + //public static int BUFFER_SIZE = 1024; Ok on MacOS but choppy on Windows! + public static int BUFFER_SIZE = 2048; + + public static boolean PLAYBACK_ENABLED = false; + // Innocent until proven guilty by a failed initialization + public static boolean PLAYBACK_DRIVER_DETECTED = true; + public static boolean PLAYBACK_INITIALIZED = false; - /** - * Sound format used for playback - */ - private AudioFormat af; - /** - * Is sound line available for playback at all? - */ - public boolean lineAvailable; - @ConfigurableField(name = "Audio device", description = "Audio output device") - public static DynamicSelection preferredMixer = new DynamicSelection(null) { - @Override - public boolean allowNull() { - return false; + private static String defaultDeviceName; + private static long audioDevice = -1; + private static long audioContext = -1; + private static ALCCapabilities audioCapabilities; + private static ALCapabilities audioLibCapabilities; + // In case the OpenAL implementation wants to be run in a single thread, use a single thread executor + protected static ExecutorService soundThreadExecutor = Executors.newSingleThreadExecutor(); + public SoundMixer() { + if (!Utility.isHeadlessMode()) { + defaultDeviceName = ALC10.alcGetString(0, ALC10.ALC_DEFAULT_DEVICE_SPECIFIER); } + } - @Override - public LinkedHashMap getSelections() { - Info[] mixerInfo = AudioSystem.getMixerInfo(); - LinkedHashMap out = new LinkedHashMap<>(); - for (Info i : mixerInfo) { - out.put(i.getName(), i.getName()); + public static class SoundError extends Exception { + private static final long serialVersionUID = 1L; + public SoundError(String message) { + super(message); + } + } + + public static T performSoundFunction(Callable operation, String action) throws SoundError { + return performSoundFunction(operation, action, false); + } + + public static T performSoundFunction(Callable operation, String action, boolean ignoreError) throws SoundError { + Future result = soundThreadExecutor.submit(operation); + try { + Future error = soundThreadExecutor.submit(AL10::alGetError); + int err; + err = error.get(); + if (!ignoreError && DEBUG_SOUND) { + if (err != AL10.AL_NO_ERROR) { + System.err.println(">>>SOUND ERROR " + AL10.alGetString(err) + " when performing action: " + action); + // throw new SoundError(AL10.alGetString(err)); + } } - return out; + return result.get(); + } catch (ExecutionException e) { + System.out.println("Error when executing sound action: " + e.getMessage()); + e.printStackTrace(); + } catch (InterruptedException e) { + // Do nothing: sound is probably being reset } - }; - private Mixer theMixer; + return null; + } - public SoundMixer(Computer computer) { - super(computer); + public static void performSoundOperation(Runnable operation, String action) throws SoundError { + performSoundOperation(operation, action, false); + } + + public static void performSoundOperation(Runnable operation, String action, boolean ignoreError) throws SoundError { + performSoundFunction(()->{ + operation.run(); + return null; + }, action, ignoreError); + } + + public static void performSoundOperationAsync(Runnable operation, String action) { + soundThreadExecutor.submit(operation, action); + } + + protected static void initSound() { + if (Utility.isHeadlessMode()) { + return; + } + try { + performSoundOperation(()->{ + if (!PLAYBACK_INITIALIZED) { + audioDevice = ALC10.alcOpenDevice(defaultDeviceName); + audioContext = ALC10.alcCreateContext(audioDevice, new int[]{0}); + ALC10.alcMakeContextCurrent(audioContext); + audioCapabilities = ALC.createCapabilities(audioDevice); + audioLibCapabilities = AL.createCapabilities(audioCapabilities); + if (!audioLibCapabilities.OpenAL10) { + PLAYBACK_DRIVER_DETECTED = false; + Logger.getLogger(SoundMixer.class.getName()).warning("OpenAL 1.0 not supported"); + Emulator.withComputer(c->c.mixer.detach()); + } + PLAYBACK_INITIALIZED = true; + } else { + ALC10.alcMakeContextCurrent(audioContext); + } + }, "Initalize audio device"); + } catch (SoundError e) { + PLAYBACK_DRIVER_DETECTED = false; + Logger.getLogger(SoundMixer.class.getName()).warning("Error when initializing sound: " + e.getMessage()); + Emulator.withComputer(c->c.mixer.detach()); + } + } + + // Lots of inspiration from https://www.youtube.com/watch?v=dLrqBTeipwg + @Override + public void attach() { + if (Utility.isHeadlessMode()) { + return; + } + if (!PLAYBACK_DRIVER_DETECTED) { + Logger.getLogger(SoundMixer.class.getName()).warning("Sound driver not detected"); + return; + } + super.attach(); + initSound(); + PLAYBACK_ENABLED = true; + } + + private static List buffers = Collections.synchronizedList(new ArrayList<>()); + public static SoundBuffer createBuffer(boolean stereo) throws InterruptedException, ExecutionException, SoundError { + if (!PLAYBACK_ENABLED) { + System.err.println("Sound playback not enabled, buffer not created."); + return null; + } + SoundBuffer buffer = new SoundBuffer(stereo); + buffers.add(buffer); + return buffer; + } + public static class SoundBuffer { + public static int MAX_BUFFER_ID; + private ShortBuffer currentBuffer; + private ShortBuffer alternateBuffer; + private int audioFormat; + private int currentBufferId; + private int alternateBufferId; + private int sourceId; + private boolean isAlive; + private int buffersGenerated = 0; + + public SoundBuffer(boolean stereo) throws InterruptedException, ExecutionException, SoundError { + initSound(); + currentBuffer = BufferUtils.createShortBuffer(BUFFER_SIZE * (stereo ? 2 : 1)); + alternateBuffer = BufferUtils.createShortBuffer(BUFFER_SIZE * (stereo ? 2 : 1)); + try { + currentBufferId = performSoundFunction(AL10::alGenBuffers, "Initalize sound buffer: primary"); + alternateBufferId = performSoundFunction(AL10::alGenBuffers, "Initalize sound buffer: alternate"); + boolean hasSource = false; + while (!hasSource) { + sourceId = performSoundFunction(AL10::alGenSources, "Initalize sound buffer: create source"); + hasSource = performSoundFunction(()->AL10.alIsSource(sourceId), "Initalize sound buffer: Check if source is valid"); + } + performSoundOperation(()->AL10.alSourcei(sourceId, AL10.AL_LOOPING, AL10.AL_FALSE), "Set looping to false"); + } catch (SoundError e) { + Logger.getLogger(SoundMixer.class.getName()).warning("Error when creating sound buffer: " + e.getMessage()); + Thread.dumpStack(); + shutdown(); + throw e; + } + audioFormat = stereo ? AL10.AL_FORMAT_STEREO16 : AL10.AL_FORMAT_MONO16; + isAlive = true; + } + + public boolean isAlive() { + return isAlive; + } + + /* If stereo, call this once for left and then again for right sample */ + public void playSample(short sample) throws InterruptedException, ExecutionException, SoundError { + if (!isAlive) { + return; + } + if (!currentBuffer.hasRemaining()) { + this.flush(); + } + try { + currentBuffer.put(sample); + } catch (BufferOverflowException e) { + if (DEBUG_SOUND) { + System.err.println("Buffer overflow, trying to compensate"); + } + currentBuffer.clear(); + currentBuffer.put(sample); + } + } + + public void shutdown() throws InterruptedException, ExecutionException, SoundError { + if (!isAlive) { + return; + } + isAlive = false; + + try { + performSoundOperation(()->{if (AL10.alIsSource(sourceId)) AL10.alSourceStop(sourceId);}, "Shutdown: stop source"); + } finally { + try { + performSoundOperation(()->{if (AL10.alIsSource(sourceId)) AL10.alDeleteSources(sourceId);}, "Shutdown: delete source"); + } finally { + sourceId = -1; + try { + performSoundOperation(()->{if (AL10.alIsBuffer(alternateBufferId)) AL10.alDeleteBuffers(alternateBufferId);}, "Shutdown: delete buffer 1"); + } finally { + alternateBufferId = -1; + try { + performSoundOperation(()->{if (AL10.alIsBuffer(currentBufferId)) AL10.alDeleteBuffers(currentBufferId);}, "Shutdown: delete buffer 2"); + } finally { + currentBufferId = -1; + buffers.remove(this); + } + } + } + } + } + + public void flush() throws SoundError { + buffersGenerated++; + if (buffersGenerated > 2) { + int[] unqueueBuffers = new int[]{currentBufferId}; + performSoundOperation(()->{ + int buffersProcessed = AL10.alGetSourcei(sourceId, AL10.AL_BUFFERS_PROCESSED); + while (buffersProcessed < 1) { + Thread.onSpinWait(); + buffersProcessed = AL10.alGetSourcei(sourceId, AL10.AL_BUFFERS_PROCESSED); + } + }, "Flush: wait for buffers to finish playing"); + if (!isAlive) { + return; + } + // TODO: Figure out why we get Invalid Value on a new buffer + performSoundOperation(()->AL10.alSourceUnqueueBuffers(sourceId, unqueueBuffers), "Flush: unqueue buffers"); + } + if (!isAlive) { + return; + } + // TODO: Figure out why we get Invalid Operation error on a new buffer after unqueue reports Invalid Value + currentBuffer.flip(); + performSoundOperation(()->AL10.alBufferData(currentBufferId, audioFormat, currentBuffer, RATE), "Flush: buffer data"); + currentBuffer.clear(); + if (!isAlive) { + return; + } + // TODO: Figure out why we get Invalid Operation error on a new buffer after unqueue reports Invalid Value + performSoundOperation(()->AL10.alSourceQueueBuffers(sourceId, currentBufferId), "Flush: queue buffer"); + performSoundOperationAsync(()->{ + if (AL10.alGetSourcei(sourceId, AL10.AL_SOURCE_STATE) != AL10.AL_PLAYING) { + AL10.alSourcePlay(sourceId); + } + }, "Flush: Start playing buffer"); + + // Swap AL buffers + int tempId = currentBufferId; + currentBufferId = alternateBufferId; + alternateBufferId = tempId; + // Swap Java buffers + ShortBuffer tempBuffer = currentBuffer; + currentBuffer = alternateBuffer; + alternateBuffer = tempBuffer; + } + } + + public int getActiveBuffers() { + return buffers.size(); } @Override + public void detach() { + if (!PLAYBACK_ENABLED) { + return; + } + MUTE = true; + PLAYBACK_ENABLED = false; + + while (!buffers.isEmpty()) { + SoundBuffer buffer = buffers.remove(0); + try { + buffer.shutdown(); + } catch (InterruptedException | ExecutionException | SoundError e) { + Logger.getLogger(SoundMixer.class.getName()).warning("Error when detaching sound mixer: " + e.getMessage()); + } + } + buffers.clear(); + PLAYBACK_INITIALIZED = false; + try { + performSoundOperation(()->ALC10.alcDestroyContext(audioContext), "Detach: destroy context", true); + performSoundOperation(()->ALC10.alcCloseDevice(audioDevice), "Detach: close device", true); + } catch (SoundError e) { + // Shouldn't throw but have to catch anyway + } + super.detach(); + } + + @Override + public String getDeviceName() { return "Sound Output"; } @@ -108,173 +364,15 @@ public class SoundMixer extends Device { @Override public synchronized void reconfigure() { - if (MUTE) { - detach(); - } else if (isConfigDifferent()) { - detach(); - try { - initMixer(); - if (lineAvailable) { - initAudio(); - } else { - System.out.println("Sound not stared: Line not available"); - } - } catch (LineUnavailableException ex) { - System.out.println("Unable to start sound"); - Logger.getLogger(SoundMixer.class.getName()).log(Level.SEVERE, null, ex); - } + PLAYBACK_ENABLED = PLAYBACK_DRIVER_DETECTED && !MUTE; + if (PLAYBACK_ENABLED) { attach(); - } - } - - private AudioFormat getAudioFormat() { - return new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, RATE, BITS, 2, BITS / 4, RATE, true); - } - - /** - * Obtain sound playback line if available - * - * @throws javax.sound.sampled.LineUnavailableException If there is no line - * available - */ - private void initAudio() throws LineUnavailableException { - af = getAudioFormat(); - DataLine.Info dli = new DataLine.Info(SourceDataLine.class, af); - lineAvailable = AudioSystem.isLineSupported(dli); - } - - public synchronized SourceDataLine getLine(Object requester) throws LineUnavailableException { - if (activeLines.containsKey(requester)) { - return activeLines.get(requester); - } - SourceDataLine sdl; - if (availableLines.isEmpty()) { - sdl = getNewLine(); } else { - sdl = availableLines.iterator().next(); - availableLines.remove(sdl); + detach(); } - activeLines.put(requester, sdl); - sdl.start(); - return sdl; - } - - public void returnLine(Object requester) { - if (activeLines.containsKey(requester)) { - SourceDataLine sdl = activeLines.remove(requester); -// Calling drain on pulse driver can cause it to freeze up (?) -// sdl.drain(); - if (sdl.isRunning()) { - sdl.flush(); - sdl.stop(); - } - availableLines.add(sdl); - } - } - - private SourceDataLine getNewLine() throws LineUnavailableException { - SourceDataLine l = null; -// Line.Info[] info = theMixer.getSourceLineInfo(); - DataLine.Info dli = new DataLine.Info(SourceDataLine.class, af); - System.out.println("Maximum output lines: " + theMixer.getMaxLines(dli)); - System.out.println("Allocated output lines: " + theMixer.getSourceLines().length); - System.out.println("Getting source line from " + theMixer.getMixerInfo().toString() + ": " + af.toString()); - try { - l = (SourceDataLine) theMixer.getLine(dli); - } catch (IllegalArgumentException e) { - lineAvailable = false; - throw new LineUnavailableException(e.getMessage()); - } catch (LineUnavailableException e) { - lineAvailable = false; - throw e; - } - if (!(l instanceof SourceDataLine)) { - lineAvailable = false; - throw new LineUnavailableException("Line is not an output line!"); - } - final SourceDataLine sdl = l; - sdl.open(); - return sdl; - } - - public byte randomByte() { - return (byte) (Math.random() * 256); } @Override public void tick() { } - - @Override - public void attach() { -// if (Motherboard.enableSpeaker) -// Motherboard.speaker.attach(); - } - - @Override - public void detach() { - availableLines.stream().forEach((line) -> { - line.close(); - }); - Set requesters = new HashSet(activeLines.keySet()); - requesters.stream().map((o) -> { - if (o instanceof Device) { - ((Device) o).detach(); - } - return o; - }).filter((o) -> (o instanceof Card)).forEach((o) -> { - ((Reconfigurable) o).reconfigure(); - }); - if (theMixer != null) { - for (Line l : theMixer.getSourceLines()) { -// if (l.isOpen()) { -// l.close(); -// } - } - } - availableLines.clear(); - activeLines.clear(); - super.detach(); - } - - private void initMixer() { - Info selected; - Info[] mixerInfo = AudioSystem.getMixerInfo(); - - if (mixerInfo == null || mixerInfo.length == 0) { - theMixer = null; - lineAvailable = false; - System.out.println("No sound mixer is available!"); - return; - } - - String mixer = preferredMixer.getValue(); - selected = mixerInfo[0]; - for (Info i : mixerInfo) { - if (i.getName().equalsIgnoreCase(mixer)) { - selected = i; - break; - } - } - theMixer = AudioSystem.getMixer(selected); -// for (Line l : theMixer.getSourceLines()) { -// l.close(); -// } - lineAvailable = true; - } - - String oldPreferredMixer = null; - - private boolean isConfigDifferent() { - boolean changed = false; - AudioFormat newAf = getAudioFormat(); - changed |= (af == null || !newAf.matches(af)); - if (oldPreferredMixer == null) { - changed |= preferredMixer.getValue() != null; - } else { - changed |= !oldPreferredMixer.matches(Pattern.quote(preferredMixer.getValue())); - } - oldPreferredMixer = preferredMixer.getValue(); - return changed; - } } diff --git a/src/main/java/jace/core/TimedDevice.java b/src/main/java/jace/core/TimedDevice.java index e447492..ddb4f6c 100644 --- a/src/main/java/jace/core/TimedDevice.java +++ b/src/main/java/jace/core/TimedDevice.java @@ -1,20 +1,17 @@ /* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. + * Copyright (C) 2024 Brendan Robert brendan.robert@gmail.com. + * * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * http://www.apache.org/licenses/LICENSE-2.0 * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package jace.core; @@ -23,98 +20,98 @@ import jace.config.ConfigurableField; /** * A timed device is a device which executes so many ticks in a given time interval. This is the core of the emulator * timing mechanics. + * + * This basic implementation does not run freely and instead will skip cycles if it is running too fast + * This allows a parent timer to run at a faster rate without causing this device to do the same. + * Useful for devices which generate sound or video at a specific rate. * * @author Brendan Robert (BLuRry) brendan.robert@gmail.com */ public abstract class TimedDevice extends Device { - - /** - * Creates a new instance of TimedDevice - * - * @param computer - */ - public TimedDevice(Computer computer) { - super(computer); - setSpeedInHz(cyclesPerSecond); - } + // From the holy word of Sather 3:5 (Table 3.1) :-) + // This average speed averages in the "long" cycles + public static final long NTSC_1MHZ = 1020484L; + public static final long PAL_1MHZ = 1015625L; + public static final long SYNC_FREQ_HZ = 60; + public static final double NANOS_PER_SECOND = 1000000000.0; + public static final long NANOS_PER_MILLISECOND = 1000000L; + public static final long SYNC_SLOP = NANOS_PER_MILLISECOND * 10L; // 10ms slop for synchronization + public static int TEMP_SPEED_MAX_DURATION = 1000000; @ConfigurableField(name = "Speed", description = "(Percentage)") public int speedRatio = 100; - private long cyclesPerSecond = defaultCyclesPerSecond(); @ConfigurableField(name = "Max speed") + public boolean forceMaxspeed = false; public boolean maxspeed = false; - - @Override - public abstract void tick(); - private static final double NANOS_PER_SECOND = 1000000000.0; - // current cycle within the period + private long cyclesPerSecond = defaultCyclesPerSecond(); private int cycleTimer = 0; - // The actual worker that the device runs as - public Thread worker; - public static int TEMP_SPEED_MAX_DURATION = 1000000; private int tempSpeedDuration = 0; - public boolean hasStopped = true; + private long nanosPerInterval; // How long to wait between pauses + private long cyclesPerInterval; // How many cycles to wait until a pause interval + private long nextSync = System.nanoTime(); // When is the next sync interval supposed to finish? + protected Runnable unthrottledTick = () -> super.doTick(); + Long waitUntil = null; + protected Runnable throttledTick = () -> { + if (waitUntil == null || System.nanoTime() >= waitUntil) { + super.doTick(); + waitUntil = calculateResyncDelay(); + } + }; + protected final Runnable tickHandler; + /** + * Creates a new instance of TimedDevice, setting default speed + * Protected as overriding the tick handler should only done + * for the independent timed device + */ + protected TimedDevice(boolean throttleUsingTicks) { + super(); + setSpeedInHz(defaultCyclesPerSecond()); + tickHandler = throttleUsingTicks ? throttledTick : unthrottledTick; + resetSyncTimer(); + } + + public TimedDevice() { + this(true); + } + + @Override + public final void doTick() { + tickHandler.run(); + } + + public final void resetSyncTimer() { + nextSync = System.nanoTime() + nanosPerInterval; + cycleTimer = 0; + } + @Override public boolean suspend() { disableTempMaxSpeed(); - boolean result = super.suspend(); - Thread w = worker; - if (w != null && w.isAlive()) { - try { - w.interrupt(); - w.join(1000); - } catch (InterruptedException ex) { - } - } - worker = null; - return result; + return super.suspend(); } - Thread timerThread; - public boolean pause() { - if (!isRunning()) { - return false; + + @Override + public void setPaused(boolean paused) { + if (!isPaused() && paused) { + pauseStart(); } - isPaused = true; - try { - // KLUDGE: Sleeping to wait for worker thread to hit paused state. We might be inside the worker (?) - Thread.sleep(10); - } catch (InterruptedException ex) { + super.setPaused(paused); + if (!paused) { + resetSyncTimer(); } - return true; + } + + protected void pauseStart() { + // Override if you need to add a pause behavior } @Override public void resume() { super.resume(); - isPaused = false; - if (worker != null && worker.isAlive()) { - return; - } - worker = new Thread(() -> { - while (isRunning()) { - hasStopped = false; - doTick(); - while (isPaused) { - hasStopped = true; - try { - Thread.sleep(10); - } catch (InterruptedException ex) { - return; - } - } - resync(); - } - hasStopped = true; - }); - worker.setDaemon(false); - worker.setPriority(Thread.MAX_PRIORITY); - worker.start(); - worker.setName("Timed device " + getDeviceName() + " worker"); + setPaused(false); + resetSyncTimer(); } - long nanosPerInterval; // How long to wait between pauses - long cyclesPerInterval; // How many cycles to wait until a pause interval - long nextSync; // When was the last pause? public final int getSpeedRatio() { return speedRatio; @@ -123,30 +120,34 @@ public abstract class TimedDevice extends Device { public final void setMaxSpeed(boolean enabled) { maxspeed = enabled; if (!enabled) { - disableTempMaxSpeed(); + resetSyncTimer(); } } - public final boolean isMaxSpeed() { + public final boolean isMaxSpeedEnabled() { return maxspeed; } - public final long getSpeedInHz() { - return cyclesPerInterval * 100L; + public final boolean isMaxSpeed() { + return forceMaxspeed || maxspeed; } - public final void setSpeedInHz(long cyclesPerSecond) { -// System.out.println("Raw set speed for " + getName() + " to " + cyclesPerSecond + "hz"); + public final long getSpeedInHz() { + return cyclesPerSecond; + } + + public final void setSpeedInHz(long newSpeed) { + // System.out.println("Raw set speed for " + getName() + " to " + cyclesPerSecond + "hz"); + // Thread.dumpStack(); + cyclesPerSecond = newSpeed; speedRatio = (int) Math.round(cyclesPerSecond * 100.0 / defaultCyclesPerSecond()); - cyclesPerInterval = cyclesPerSecond / 100L; + cyclesPerInterval = cyclesPerSecond / SYNC_FREQ_HZ; nanosPerInterval = (long) (cyclesPerInterval * NANOS_PER_SECOND / cyclesPerSecond); -// System.out.println("Will pause " + nanosPerInterval + " nanos every " + cyclesPerInterval + " cycles"); - cycleTimer = 0; + // System.out.println("Will pause " + nanosPerInterval + " nanos every " + cyclesPerInterval + " cycles"); resetSyncTimer(); } public final void setSpeedInPercentage(int ratio) { -// System.out.println("Setting " + getName() + " speed ratio to " + speedRatio); cyclesPerSecond = defaultCyclesPerSecond() * ratio / 100; if (cyclesPerSecond == 0) { cyclesPerSecond = defaultCyclesPerSecond(); @@ -154,14 +155,6 @@ public abstract class TimedDevice extends Device { setSpeedInHz(cyclesPerSecond); } - long skip = 0; - long wait = 0; - - public final void resetSyncTimer() { - nextSync = System.nanoTime() + nanosPerInterval; - cycleTimer = 0; - } - public void enableTempMaxSpeed() { tempSpeedDuration = TEMP_SPEED_MAX_DURATION; } @@ -171,40 +164,41 @@ public abstract class TimedDevice extends Device { resetSyncTimer(); } - protected void resync() { - if (++cycleTimer >= cyclesPerInterval) { - if (maxspeed || tempSpeedDuration > 0) { - if (tempSpeedDuration > 0) { - tempSpeedDuration -= cyclesPerInterval; - } - resetSyncTimer(); - return; - } - long now = System.nanoTime(); - if (now < nextSync) { - cycleTimer = 0; - long currentSyncDiff = nextSync - now; - // Don't bother resynchronizing unless we're off by 10ms - if (currentSyncDiff > 10000000L) { - try { -// System.out.println("Sleeping for " + currentSyncDiff / 1000000 + " milliseconds"); - Thread.sleep(currentSyncDiff / 1000000L, (int) (currentSyncDiff % 1000000L)); - } catch (InterruptedException ex) { - System.err.println(getDeviceName() + " was trying to sleep for " + (currentSyncDiff / 1000000) + " millis but was woken up"); -// Logger.getLogger(TimedDevice.class.getName()).log(Level.SEVERE, null, ex); - } - } else { -// System.out.println("Sleeping for " + currentSyncDiff + " nanoseconds"); -// LockSupport.parkNanos(currentSyncDiff); - } - } - nextSync += nanosPerInterval; - } - } - @Override public void reconfigure() { + resetSyncTimer(); } - public abstract long defaultCyclesPerSecond(); -} + public long defaultCyclesPerSecond() { + return NTSC_1MHZ; + } + + private boolean useParentTiming() { + if (getParent() != null && getParent() instanceof TimedDevice) { + TimedDevice pd = (TimedDevice) getParent(); + if (pd.useParentTiming() || (!pd.isMaxSpeed() && pd.getSpeedInHz() <= getSpeedInHz())) { + return true; + } + } + return false; + } + + protected Long calculateResyncDelay() { + if (++cycleTimer < cyclesPerInterval) { + return null; + } + cycleTimer = 0; + long retVal = nextSync; + nextSync = Math.max(nextSync, System.nanoTime()) + nanosPerInterval; + if (isMaxSpeed() || useParentTiming()) { + if (tempSpeedDuration > 0) { + tempSpeedDuration -= cyclesPerInterval; + if (tempSpeedDuration <= 0) { + disableTempMaxSpeed(); + } + } + return null; + } + return retVal; + } +} \ No newline at end of file diff --git a/src/main/java/jace/core/Utility.java b/src/main/java/jace/core/Utility.java index 7a44110..c38c38b 100644 --- a/src/main/java/jace/core/Utility.java +++ b/src/main/java/jace/core/Utility.java @@ -1,31 +1,23 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; -import jace.Emulator; -import jace.config.Configuration; -import jace.config.InvokableAction; import java.io.File; import java.io.InputStream; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -34,13 +26,14 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; +import java.util.function.Function; + +import jace.config.InvokableAction; +import jace.config.InvokableActionRegistry; import javafx.application.Platform; import javafx.geometry.Pos; import javafx.scene.control.Alert; +import javafx.scene.control.ButtonBar.ButtonData; import javafx.scene.control.ButtonType; import javafx.scene.control.ContentDisplay; import javafx.scene.control.Label; @@ -48,7 +41,6 @@ import javafx.scene.effect.DropShadow; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.paint.Color; -import org.reflections.Reflections; /** * This is a set of helper functions which do not belong anywhere else. @@ -58,12 +50,6 @@ import org.reflections.Reflections; */ public class Utility { - static Reflections reflections = new Reflections("jace"); - - public static Set findAllSubclasses(Class clazz) { - return reflections.getSubTypesOf(clazz); - } - //------------------------------ String comparators /** * Rank two strings similarity in terms of distance The lower the number, @@ -107,6 +93,7 @@ public class Utility { /** * Normalize distance based on longest string + * * @param s * @param t * @return Similarity ranking, higher is better @@ -115,7 +102,6 @@ public class Utility { return Math.max(s.length(), t.length()) - levenshteinDistance(s, t); } - /** * Compare strings based on a tally of similar patterns found, using a fixed * search window The resulting score is heavily penalized if the strings @@ -148,17 +134,10 @@ public class Utility { return score * adjustment * adjustment; } - public static String join(Collection c, String d) { - return c.stream().collect(Collectors.joining(d)); - } - private static boolean isHeadless = false; public static void setHeadlessMode(boolean headless) { isHeadless = headless; - if (Emulator.instance == null && headless) { - Emulator.instance = new Emulator(Collections.emptyList()); - } } public static boolean isHeadlessMode() { @@ -169,7 +148,11 @@ public class Utility { if (isHeadless) { return Optional.empty(); } - InputStream stream = Utility.class.getClassLoader().getResourceAsStream("jace/data/" + filename); + InputStream stream = Utility.class.getResourceAsStream("/jace/data/" + filename); + if (stream == null) { + System.err.println("Could not load icon: " + filename); + return Optional.empty(); + } return Optional.of(new Image(stream)); } @@ -177,12 +160,14 @@ public class Utility { if (isHeadless) { return Optional.empty(); } - Image img = loadIcon(filename).get(); + Optional img = loadIcon(filename); + if (img.isEmpty()) { + return Optional.empty(); + } Label label = new Label() { @Override public boolean equals(Object obj) { - if (obj instanceof Label) { - Label l2 = (Label) obj; + if (obj instanceof Label l2) { return super.equals(l2) || l2.getText().equals(getText()); } else { return super.equals(obj); @@ -194,7 +179,7 @@ public class Utility { return getText().hashCode(); } }; - label.setGraphic(new ImageView(img)); + label.setGraphic(new ImageView(img.get())); label.setAlignment(Pos.CENTER); label.setContentDisplay(ContentDisplay.TOP); label.setTextFill(Color.WHITE); @@ -217,26 +202,25 @@ public class Utility { }); } -// public static void runModalProcess(String title, final Runnable runnable) { -//// final JDialog frame = new JDialog(Emulator.getFrame()); -// final JProgressBar progressBar = new JProgressBar(); -// progressBar.setIndeterminate(true); -// final JPanel contentPane = new JPanel(); -// contentPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); -// contentPane.setLayout(new BorderLayout()); -// contentPane.add(new JLabel(title), BorderLayout.NORTH); -// contentPane.add(progressBar, BorderLayout.CENTER); -// frame.setContentPane(contentPane); -// frame.pack(); -// frame.setLocationRelativeTo(null); -// frame.setVisible(true); -// -// new Thread(() -> { -// runnable.run(); -// frame.setVisible(false); -// frame.dispose(); -// }).start(); -// } + public static void decision(String title, String message, String aLabel, String bLabel, Runnable aAction, Runnable bAction) { + Platform.runLater(() -> { + ButtonType buttonA = new ButtonType(aLabel, ButtonData.LEFT); + ButtonType buttonB = new ButtonType(bLabel, ButtonData.RIGHT); + + Alert confirm = new Alert(Alert.AlertType.CONFIRMATION, message, buttonA, buttonB); + confirm.setTitle(title); + + Optional response = confirm.showAndWait(); + response.ifPresent(b -> { + if (b.getButtonData() == ButtonData.LEFT && aAction != null) { + Platform.runLater(aAction); + } else if (b.getButtonData() == ButtonData.RIGHT && bAction != null) { + Platform.runLater(bAction); + } + }); + }); + } + public static class RankingComparator implements Comparator { String match; @@ -298,113 +282,30 @@ public class Utility { return null; } - public static void printStackTrace() { - System.out.println("CURRENT STACK TRACE:"); - for (StackTraceElement s : Thread.currentThread().getStackTrace()) { - System.out.println(s.getClassName() + "." + s.getMethodName() + " (line " + s.getLineNumber() + ") " + (s.isNativeMethod() ? "NATIVE" : "")); - } - System.out.println("END OF STACK TRACE"); - } - - public static int parseHexInt(Object s) { - if (s == null) { - return -1; - } - if (s instanceof Integer) { - return (Integer) s; - } - String val = String.valueOf(s).trim(); - int base = 10; - if (val.startsWith("$")) { - base = 16; - val = val.contains(" ") ? val.substring(1, val.indexOf(' ')) : val.substring(1); - } else if (val.startsWith("0x")) { - base = 16; - val = val.contains(" ") ? val.substring(2, val.indexOf(' ')) : val.substring(2); - } - try { - return Integer.parseInt(val, base); - } catch (NumberFormatException ex) { - gripe("This isn't a valid number: " + val + ". If you put a $ in front of that then I'll know you meant it to be a hex number."); - throw ex; - } - } - public static void gripe(final String message) { + gripe(message, false, null); + } + + public static void gripe(final String message, boolean wait, Runnable andThen) { Platform.runLater(() -> { Alert errorAlert = new Alert(Alert.AlertType.ERROR); errorAlert.setContentText(message); errorAlert.setTitle("Error"); - errorAlert.show(); + if (wait) { + errorAlert.showAndWait(); + if (andThen != null) { + andThen.run(); + } + } else { + errorAlert.show(); + } }); } - public static Object findChild(Object object, String fieldName) { - if (object instanceof Map) { - Map map = (Map) object; - for (Object key : map.keySet()) { - if (key.toString().equalsIgnoreCase(fieldName)) { - return map.get(key); - } - } - return null; - } - try { - Field f = object.getClass().getField(fieldName); - return f.get(object); - } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException ex) { - for (Method m : object.getClass().getMethods()) { - if (m.getName().equalsIgnoreCase("get" + fieldName) && m.getParameterTypes().length == 0) { - try { - return m.invoke(object, new Object[0]); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex1) { - } - } - } - } - return null; - } - - public static Object setChild(Object object, String fieldName, String value, boolean hex) { - if (object instanceof Map) { - Map map = (Map) object; - for (Object key : map.entrySet()) { - if (key.toString().equalsIgnoreCase(fieldName)) { - map.put(key, value); - return null; - } - } - return null; - } - Field f; - try { - f = object.getClass().getField(fieldName); - } catch (NoSuchFieldException ex) { - System.out.println("Object type " + object.getClass().getName() + " has no field named " + fieldName); - Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex); - return null; - } catch (SecurityException ex) { - Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex); - return null; - } - Object useValue = deserializeString(value, f.getType(), hex); - try { - f.set(object, useValue); - return useValue; - } catch (IllegalArgumentException | IllegalAccessException ex) { - for (Method m : object.getClass().getMethods()) { - if (m.getName().equalsIgnoreCase("set" + fieldName) && m.getParameterTypes().length == 0) { - try { - m.invoke(object, useValue); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex1) { - } - } - } - } - return useValue; - } + @SuppressWarnings("all") static Map> enumCache = new HashMap<>(); + @SuppressWarnings("all") public static Object findClosestEnumConstant(String value, Class type) { Map enumConstants = enumCache.get(type); if (enumConstants == null) { @@ -423,38 +324,43 @@ public class Utility { return enumConstants.get(key); } + @SuppressWarnings("all") public static Object deserializeString(String value, Class type, boolean hex) { int radix = hex ? 16 : 10; if (type.equals(Integer.TYPE) || type == Integer.class) { value = value.replaceAll(hex ? "[^0-9\\-A-Fa-f]" : "[^0-9\\-]", ""); try { - return Integer.parseInt(value, radix); + return Integer.valueOf(value, radix); } catch (NumberFormatException ex) { return null; } } else if (type.equals(Short.TYPE) || type == Short.class) { value = value.replaceAll(hex ? "[^0-9\\-\\.A-Fa-f]" : "[^0-9\\-\\.]", ""); try { - return Short.parseShort(value, radix); + return Short.valueOf(value, radix); } catch (NumberFormatException ex) { return null; } } else if (type.equals(Long.TYPE) || type == Long.class) { value = value.replaceAll(hex ? "[^0-9\\-\\.A-Fa-f]" : "[^0-9\\-\\.]", ""); try { - return Long.parseLong(value, radix); + return Long.valueOf(value, radix); } catch (NumberFormatException ex) { return null; } } else if (type.equals(Byte.TYPE) || type == Byte.class) { try { value = value.replaceAll(hex ? "[^0-9\\-A-Fa-f]" : "[^0-9\\-]", ""); - return Byte.parseByte(value, radix); + return Byte.valueOf(value, radix); } catch (NumberFormatException ex) { return null; } } else if (type.equals(Boolean.TYPE) || type == Boolean.class) { return Boolean.valueOf(value); + } else if (type.equals(Float.TYPE) || type == Float.class) { + return Float.parseFloat(value); + } else if (type.equals(Double.TYPE) || type == Double.class) { + return Double.parseDouble(value); } else if (type == File.class) { return new File(String.valueOf(value)); } else if (type.isEnum()) { @@ -464,59 +370,15 @@ public class Utility { return null; } - public static Object getProperty(Object object, String path) { - String[] paths = path.split("\\."); - for (String path1 : paths) { - object = findChild(object, path1); - if (object == null) { - return null; - } - } - return object; - } - - public static Object setProperty(Object object, String path, String value, boolean hex) { - String[] paths = path.split("\\."); - for (int i = 0; i < paths.length - 1; i++) { - object = findChild(object, paths[i]); - if (object == null) { - return null; - } - } - return setChild(object, paths[paths.length - 1], value, hex); - } - - static Map allActions = null; - - public static Map getAllInvokableActions() { - if (allActions == null) { - allActions = new HashMap<>(); - Configuration.BASE.getTreeAsStream().forEach((Configuration.ConfigNode node) -> { - for (Method m : node.subject.getClass().getMethods()) { - if (m.isAnnotationPresent(InvokableAction.class)) { - allActions.put(m.getAnnotation(InvokableAction.class), () -> { - try { - m.invoke(node.subject); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { - Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex); - } - }); - } - } - }); - } - return allActions; - } - - public static Runnable getNamedInvokableAction(String action) { - Map actions = getAllInvokableActions(); - List actionsList = new ArrayList(actions.keySet()); - actionsList.sort((a,b) -> Integer.compare(getActionNameMatch(action, a), getActionNameMatch(action, b))); + public static Function getNamedInvokableAction(String action) { + InvokableActionRegistry registry = InvokableActionRegistry.getInstance(); + List actionsList = new ArrayList<>(registry.getAllStaticActions()); + actionsList.sort((a, b) -> Integer.compare(getActionNameMatch(action, a), getActionNameMatch(action, b))); // for (InvokableAction a : actionsList) { // String actionName = a.alternatives() == null ? a.name() : (a.name() + ";" + a.alternatives()); // System.out.println("Score for " + action + " evaluating " + a.name() + ": " + getActionNameMatch(action, a)); // } - return actions.get(actionsList.get(0)); + return registry.getStaticFunction(actionsList.get(0).name()); } private static int getActionNameMatch(String str, InvokableAction action) { @@ -528,4 +390,19 @@ public class Utility { } return nameMatch; } + + public static enum OS {Windows, Linux, Mac, Unknown} + public static OS getOS() { + String osName = System.getProperty("os.name").toLowerCase(); + if (osName.contains("windows")) { + return OS.Windows; + } else if (osName.contains("linux")) { + return OS.Linux; + } else if (osName.contains("mac")) { + return OS.Mac; + } else { + System.out.println("Unknown %s".formatted(osName)); + return OS.Unknown; + } + } } diff --git a/src/main/java/jace/core/Video.java b/src/main/java/jace/core/Video.java index 695bdae..1d1ff61 100644 --- a/src/main/java/jace/core/Video.java +++ b/src/main/java/jace/core/Video.java @@ -1,27 +1,25 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; import jace.Emulator; -import jace.state.Stateful; import jace.config.ConfigurableField; import jace.config.InvokableAction; +import jace.state.Stateful; import javafx.scene.image.Image; import javafx.scene.image.WritableImage; @@ -34,7 +32,7 @@ import javafx.scene.image.WritableImage; * @author Brendan Robert (BLuRry) brendan.robert@gmail.com */ @Stateful -public abstract class Video extends Device { +public abstract class Video extends TimedDevice { @Stateful WritableImage video; @@ -59,20 +57,15 @@ public abstract class Video extends Device { static final public int APPLE_SCREEN_LINES = 192; static final public int HBLANK = CYCLES_PER_LINE - APPLE_CYCLES_PER_LINE; static final public int VBLANK = (TOTAL_LINES - APPLE_SCREEN_LINES) * CYCLES_PER_LINE; - static public int[] textOffset; - static public int[] hiresOffset; - static public int[] textRowLookup; - static public int[] hiresRowLookup; - private boolean screenDirty; - private boolean lineDirty; + static final public int[] textOffset = new int[192]; + static final public int[] hiresOffset = new int[192]; + static final public int[] textRowLookup = new int[0x0400]; + static final public int[] hiresRowLookup = new int[0x02000]; + private boolean screenDirty = true; + private boolean lineDirty = true; private boolean isVblank = false; - static VideoWriter[][] writerCheck = new VideoWriter[40][192]; - static { - textOffset = new int[192]; - hiresOffset = new int[192]; - textRowLookup = new int[0x0400]; - hiresRowLookup = new int[0x02000]; + static void initLookupTables() { for (int i = 0; i < 192; i++) { textOffset[i] = calculateTextOffset(i >> 3); hiresOffset[i] = calculateHiresOffset(i); @@ -85,16 +78,15 @@ public abstract class Video extends Device { } } private int forceRedrawRowCount = 0; - Thread updateThread; /** * Creates a new instance of Video * * @param computer */ - public Video(Computer computer) { - super(computer); - suspend(); + public Video() { + super(); + initLookupTables(); video = new WritableImage(560, 192); visible = new WritableImage(560, 192); vPeriod = 0; @@ -133,10 +125,8 @@ public abstract class Video extends Device { Runnable redrawScreen = () -> { if (visible != null && video != null) { -// if (computer.getRunningProperty().get()) { - screenDirty = false; - visible.getPixelWriter().setPixels(0, 0, 560, 192, video.getPixelReader(), 0, 0); -// } + screenDirty = false; + visible.getPixelWriter().setPixels(0, 0, 560, 192, video.getPixelReader(), 0, 0); } }; @@ -160,18 +150,20 @@ public abstract class Video extends Device { @Override public void tick() { - setScannerLocation(currentWriter.getYOffset(y)); - setFloatingBus(computer.getMemory().readRaw(scannerAddress + x)); + addWaitCycles(waitsPerCycle); + if (y < APPLE_SCREEN_LINES) setScannerLocation(currentWriter.getYOffset(y)); + setFloatingBus(getMemory().readRaw(scannerAddress + x)); if (hPeriod > 0) { hPeriod--; if (hPeriod == 0) { x = -1; } } else { - if (!isVblank && x < APPLE_CYCLES_PER_LINE) { - draw(); + int xVal = x; + if (!isVblank && xVal < APPLE_CYCLES_PER_LINE && xVal >= 0) { + draw(xVal); } - if (x >= APPLE_CYCLES_PER_LINE - 1) { + if (xVal >= APPLE_CYCLES_PER_LINE - 1) { int yy = y + hblankOffsetY; if (yy < 0) { yy += APPLE_SCREEN_LINES; @@ -191,17 +183,18 @@ public abstract class Video extends Device { } hPeriod = HBLANK; y++; + getCurrentWriter().setCurrentRow(y); if (y >= APPLE_SCREEN_LINES) { if (!isVblank) { y = APPLE_SCREEN_LINES - (TOTAL_LINES - APPLE_SCREEN_LINES); isVblank = true; vblankStart(); - computer.getMotherboard().vblankStart(); + Emulator.withComputer(c->c.getMotherboard().vblankStart()); } else { y = 0; isVblank = false; vblankEnd(); - computer.getMotherboard().vblankEnd(); + Emulator.withComputer(c->c.getMotherboard().vblankEnd()); } } } @@ -231,12 +224,11 @@ public abstract class Video extends Device { @ConfigurableField(name = "Hblank Y offset", category = "Advanced", description = "Adjust which line the HBLANK starts on (0=current, 1=next, etc)") public static int hblankOffsetY = 1; - private void draw() { + private void draw(int xVal) { if (lineDirty || forceRedrawRowCount > 0 || currentWriter.isRowDirty(y)) { lineDirty = true; - currentWriter.displayByte(video, x, y, textOffset[y], hiresOffset[y]); + currentWriter.displayByte(video, xVal, y, textOffset[y], hiresOffset[y]); } - setWaitCycles(waitsPerCycle); doPostDraw(); } @@ -278,13 +270,11 @@ public abstract class Video extends Device { description = "Marks screen contents as changed, forcing full screen redraw", alternatives = "redraw", defaultKeyMapping = {"ctrl+shift+r"}) - public static final void forceRefresh() { - if (Emulator.computer != null && Emulator.computer.video != null) { - Emulator.computer.video._forceRefresh(); - } + public static void forceRefresh() { + Emulator.withVideo(v->v._forceRefresh()); } - private void _forceRefresh() { + protected void _forceRefresh() { lineDirty = true; screenDirty = true; forceRedrawRowCount = APPLE_SCREEN_LINES + 1; diff --git a/src/main/java/jace/core/VideoWriter.java b/src/main/java/jace/core/VideoWriter.java index 7213ea6..a01368a 100644 --- a/src/main/java/jace/core/VideoWriter.java +++ b/src/main/java/jace/core/VideoWriter.java @@ -1,21 +1,19 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.core; import javafx.scene.image.WritableImage; @@ -32,6 +30,11 @@ import javafx.scene.image.WritableImage; */ public abstract class VideoWriter { + int currentRow = -1; + public void setCurrentRow(int y) { + currentRow = y; + } + public abstract void displayByte(WritableImage screen, int xOffset, int y, int yTextOffset, int yGraphicsOffset); // This is used to support composite mixed-mode writers so that we can talk to the writer being used for a scanline @@ -44,12 +47,19 @@ public abstract class VideoWriter { // Very useful for knowing if we should bother drawing changes private final boolean[] dirtyFlags = new boolean[192]; + boolean updatedDuringRaster = false; public void markDirty(int y) { actualWriter().dirtyFlags[y] = true; + if (y == currentRow) { + updatedDuringRaster = true; + } } public void clearDirty(int y) { - actualWriter().dirtyFlags[y] = false; + if (!updatedDuringRaster) { + actualWriter().dirtyFlags[y] = false; + } + updatedDuringRaster = false; } public boolean isRowDirty(int y) { diff --git a/src/main/java/jace/hardware/CardAppleMouse.java b/src/main/java/jace/hardware/CardAppleMouse.java index 29f0359..5945c19 100644 --- a/src/main/java/jace/hardware/CardAppleMouse.java +++ b/src/main/java/jace/hardware/CardAppleMouse.java @@ -1,23 +1,22 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.hardware; +import jace.Emulator; import jace.EmulatorUILogic; import jace.apple2e.MOS65C02; import jace.apple2e.RAM128k; @@ -28,16 +27,16 @@ import jace.core.Computer; import jace.core.PagedMemory; import jace.core.RAMEvent; import jace.core.RAMEvent.TYPE; -import jace.state.Stateful; import jace.core.Utility; +import jace.state.Stateful; import javafx.event.EventHandler; import javafx.geometry.Bounds; +import javafx.geometry.Point2D; +import javafx.geometry.Rectangle2D; import javafx.scene.Node; import javafx.scene.control.Label; import javafx.scene.input.MouseButton; import javafx.scene.input.MouseEvent; -import javafx.geometry.Point2D; -import javafx.geometry.Rectangle2D; /** * Apple Mouse interface implementation. This is fully compatible with several @@ -74,7 +73,7 @@ public class CardAppleMouse extends Card { @Stateful public int statusByte; @Stateful - public Point2D lastMouseLocation; + public Point2D lastMouseLocation = new Point2D(0, 0); @Stateful public Rectangle2D clampWindow = new Rectangle2D(0, 0, 0x03ff, 0x03ff); // By default, update 60 times a second -- roughly every VBL period (in theory) @@ -88,8 +87,8 @@ public class CardAppleMouse extends Card { public boolean movedSinceLastTick = false; public boolean movedSinceLastRead = false; - public CardAppleMouse(Computer computer) { - super(computer); + public CardAppleMouse() { + super(false); } @Override @@ -108,8 +107,16 @@ public class CardAppleMouse extends Card { private void processMouseEvent(MouseEvent event) { if (event.getEventType() == MouseEvent.MOUSE_MOVED || event.getEventType() == MouseEvent.MOUSE_DRAGGED) { - Node source = (Node) event.getSource(); - updateLocation(event.getSceneX(), event.getSceneY(), source.getBoundsInLocal()); + double x = 0.0; + double y = 0.0; + if (event.getSource() != null && event.getSource() instanceof Node) { + // This is a bit of a hack to get the mouse position in the local coordinate system of the source (the emulator screen + Node source = (Node) event.getSource(); + Bounds bounds = source.getBoundsInLocal(); + x=event.getSceneX() / bounds.getWidth(); + y=event.getSceneY() / bounds.getHeight(); + } + updateLocation(x, y); event.consume(); } if (event.getEventType() == MouseEvent.MOUSE_PRESSED || event.getEventType() == MouseEvent.MOUSE_DRAGGED) { @@ -121,10 +128,8 @@ public class CardAppleMouse extends Card { } } - private void updateLocation(double x, double y, Bounds bounds) { - double scaledX = x / bounds.getWidth(); - double scaledY = y / bounds.getHeight(); - lastMouseLocation = new Point2D(scaledX, scaledY); + private void updateLocation(double x, double y) { + lastMouseLocation = new Point2D(x, y); movedSinceLastTick = true; movedSinceLastRead = true; } @@ -175,33 +180,15 @@ public class CardAppleMouse extends Card { if (type == RAMEvent.TYPE.EXECUTE) { // This means the CPU is calling firmware at this location switch (offset - 0x080) { - case 0: - setMouse(); - break; - case 1: - serveMouse(); - break; - case 2: - readMouse(); - break; - case 3: - clearMouse(); - break; - case 4: - posMouse(); - break; - case 5: - clampMouse(); - break; - case 6: - homeMouse(); - break; - case 7: - initMouse(); - break; - case 8: - getMouseClamp(); - break; + case 0 -> setMouse(); + case 1 -> serveMouse(); + case 2 -> readMouse(); + case 3 -> clearMouse(); + case 4 -> posMouse(); + case 5 -> clampMouse(); + case 6 -> homeMouse(); + case 7 -> initMouse(); + case 8 -> getMouseClamp(); } // Always pass back RTS e.setNewValue(0x060); @@ -229,6 +216,7 @@ public class CardAppleMouse extends Card { case 0x08: // Pascal signature byte e.setNewValue(0x001); + break; case 0x011: e.setNewValue(0x000); break; @@ -268,7 +256,7 @@ public class CardAppleMouse extends Card { } private MOS65C02 getCPU() { - return (MOS65C02) computer.getCpu(); + return (MOS65C02) Emulator.withComputer(Computer::getCpu, null); } /* @@ -359,7 +347,7 @@ public class CardAppleMouse extends Card { * //gs homes mouse to low address, but //c and //e do not */ private void clampMouse() { - RAM128k memory = (RAM128k) computer.memory; + RAM128k memory = (RAM128k) getMemory(); byte clampMinLo = memory.getMainMemory().readByte(0x0478); byte clampMaxLo = memory.getMainMemory().readByte(0x04F8); byte clampMinHi = memory.getMainMemory().readByte(0x0578); @@ -395,7 +383,9 @@ public class CardAppleMouse extends Card { * Screen holes are updated */ private void initMouse() { - mouseActive.setText("Active"); + if (mouseActive != null) { + mouseActive.setText("Active"); + } EmulatorUILogic.addIndicator(this, mouseActive, 2000); setClampWindowX(0, 0x3ff); setClampWindowY(0, 0x3ff); @@ -436,40 +426,24 @@ public class CardAppleMouse extends Card { * Described in Apple Mouse technical note #7 * Cn1A: Read mouse clamping values * Register number is stored in $478 and ranges from x47 to x4e - * Return value should be stored in $5782 + * Return value should be stored in $578 * Values should be returned in this order: * MinXH, MinYH, MinXL, MinYL, MaxXH, MaxYH, MaxXL, MaxYL */ private void getMouseClamp() { - byte reg = computer.getMemory().readRaw(0x0478); + byte reg = getMemory().readRaw(0x0478); byte val = 0; switch (reg - 0x047) { - case 0: - val = (byte) ((int) clampWindow.getMinX() >> 8); - break; - case 1: - val = (byte) ((int) clampWindow.getMinY() >> 8); - break; - case 2: - val = (byte) ((int) clampWindow.getMinX() & 255); - break; - case 3: - val = (byte) ((int) clampWindow.getMinY() & 255); - break; - case 4: - val = (byte) ((int) clampWindow.getMaxX() >> 8); - break; - case 5: - val = (byte) ((int) clampWindow.getMaxY() >> 8); - break; - case 6: - val = (byte) ((int) clampWindow.getMaxX() & 255); - break; - case 7: - val = (byte) ((int) clampWindow.getMaxY() & 255); - break; + case 0 -> val = (byte) ((int) clampWindow.getMinX() >> 8); + case 1 -> val = (byte) ((int) clampWindow.getMinY() >> 8); + case 2 -> val = (byte) ((int) clampWindow.getMinX() & 255); + case 3 -> val = (byte) ((int) clampWindow.getMinY() & 255); + case 4 -> val = (byte) ((int) clampWindow.getMaxX() >> 8); + case 5 -> val = (byte) ((int) clampWindow.getMaxY() >> 8); + case 6 -> val = (byte) ((int) clampWindow.getMaxX() & 255); + case 7 -> val = (byte) ((int) clampWindow.getMaxY() & 255); } - computer.getMemory().write(0x0578, val, false, false); + getMemory().write(0x0578, val, false, false); } /* @@ -550,7 +524,7 @@ public class CardAppleMouse extends Card { y += clampWindow.getMinY(); y = Math.min(Math.max(y, clampWindow.getMinY()), clampWindow.getMaxY()); - PagedMemory m = ((RAM128k) computer.getMemory()).getMainMemory(); + PagedMemory m = ((RAM128k) getMemory()).getMainMemory(); int s = getSlot(); /* * $0478 + slot Low byte of absolute X position diff --git a/src/main/java/jace/hardware/CardDiskII.java b/src/main/java/jace/hardware/CardDiskII.java index a7e3bd7..7f5f134 100644 --- a/src/main/java/jace/hardware/CardDiskII.java +++ b/src/main/java/jace/hardware/CardDiskII.java @@ -1,40 +1,38 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.hardware; -import jace.EmulatorUILogic; -import jace.config.ConfigurableField; -import jace.config.Name; -import jace.config.Reconfigurable; -import jace.core.Card; -import jace.core.Computer; -import jace.core.RAMEvent; -import jace.core.RAMEvent.TYPE; -import jace.core.Utility; -import jace.library.MediaConsumer; -import jace.library.MediaConsumerParent; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.logging.Level; import java.util.logging.Logger; +import jace.Emulator; +import jace.EmulatorUILogic; +import jace.config.ConfigurableField; +import jace.config.Name; +import jace.core.Card; +import jace.core.RAMEvent; +import jace.core.RAMEvent.TYPE; +import jace.core.Utility; +import jace.library.MediaConsumer; +import jace.library.MediaConsumerParent; + /** * Apple Disk ][ interface implementation. This card represents the interface * side of the Disk ][ controller interface as well as the on-board "boot0" ROM. @@ -45,11 +43,11 @@ import java.util.logging.Logger; * @author Brendan Robert (BLuRry) brendan.robert@gmail.com */ @Name("Disk ][ Controller") -public class CardDiskII extends Card implements Reconfigurable, MediaConsumerParent { +public class CardDiskII extends Card implements MediaConsumerParent { DiskIIDrive currentDrive; - DiskIIDrive drive1 = new DiskIIDrive(computer); - DiskIIDrive drive2 = new DiskIIDrive(computer); + DiskIIDrive drive1 = new DiskIIDrive(); + DiskIIDrive drive2 = new DiskIIDrive(); @ConfigurableField(category = "Disk", defaultValue = "254", name = "Default volume", description = "Value to use for disk volume number") static public int DEFAULT_VOLUME_NUMBER = 0x0FE; @ConfigurableField(category = "Disk", defaultValue = "true", name = "Speed boost", description = "If enabled, emulator will run at max speed during disk access") @@ -59,10 +57,10 @@ public class CardDiskII extends Card implements Reconfigurable, MediaConsumerPar @ConfigurableField(category = "Disk", defaultValue = "", shortName = "d2", name = "Drive 2 disk image", description = "Path of disk 2") public String disk2; - public CardDiskII(Computer computer) { - super(computer); + public CardDiskII() { + super(false); try { - loadRom("jace/data/DiskII.rom"); + loadRom("/jace/data/DiskII.rom"); } catch (IOException ex) { Logger.getLogger(CardDiskII.class.getName()).log(Level.SEVERE, null, ex); } @@ -86,18 +84,24 @@ public class CardDiskII extends Card implements Reconfigurable, MediaConsumerPar // Motherboard.cancelSpeedRequest(this); } - @SuppressWarnings("fallthrough") @Override protected void handleIOAccess(int register, RAMEvent.TYPE type, int value, RAMEvent e) { // handle Disk ][ registers switch (register) { case 0x0: + // Fall-through case 0x1: + // Fall-through case 0x2: + // Fall-through case 0x3: + // Fall-through case 0x4: + // Fall-through case 0x5: + // Fall-through case 0x6: + // Fall-through case 0x7: currentDrive.step(register); break; @@ -127,7 +131,8 @@ public class CardDiskII extends Card implements Reconfigurable, MediaConsumerPar case 0xC: // read/write latch currentDrive.write(); - e.setNewValue(currentDrive.readLatch()); + int latch = currentDrive.readLatch(); + e.setNewValue(latch); break; case 0xF: // write mode @@ -168,7 +173,10 @@ public class CardDiskII extends Card implements Reconfigurable, MediaConsumerPar } public void loadRom(String path) throws IOException { - InputStream romFile = CardDiskII.class.getClassLoader().getResourceAsStream(path); + InputStream romFile = CardDiskII.class.getResourceAsStream(path); + if (romFile == null) { + throw new IOException("Cannot find Disk ][ ROM at " + path); + } final int cxRomLength = 0x100; byte[] romData = new byte[cxRomLength]; try { @@ -209,10 +217,10 @@ public class CardDiskII extends Card implements Reconfigurable, MediaConsumerPar private void tweakTiming() { if ((drive1.isOn() && drive1.disk != null) || (drive2.isOn() && drive2.disk != null)) { if (USE_MAX_SPEED) { - computer.getMotherboard().requestSpeed(this); + Emulator.withComputer(c->c.getMotherboard().requestSpeed(this)); } } else { - computer.getMotherboard().cancelSpeedRequest(this); + Emulator.withComputer(c->c.getMotherboard().cancelSpeedRequest (this)); } } diff --git a/src/main/java/jace/hardware/CardExt80Col.java b/src/main/java/jace/hardware/CardExt80Col.java index 4712edd..24e33e5 100644 --- a/src/main/java/jace/hardware/CardExt80Col.java +++ b/src/main/java/jace/hardware/CardExt80Col.java @@ -1,25 +1,22 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.hardware; import jace.apple2e.RAM128k; -import jace.core.Computer; import jace.core.PagedMemory; import jace.state.Stateful; @@ -45,12 +42,12 @@ public class CardExt80Col extends RAM128k { public String getShortName() { return "128kb"; } - - public CardExt80Col(Computer computer) { - super(computer); - auxMemory = new PagedMemory(0xc000, PagedMemory.Type.RAM, computer); - auxLanguageCard = new PagedMemory(0x3000, PagedMemory.Type.LANGUAGE_CARD, computer); - auxLanguageCard2 = new PagedMemory(0x1000, PagedMemory.Type.LANGUAGE_CARD, computer); + + public CardExt80Col() { + super(); + auxMemory = new PagedMemory(0xc000, PagedMemory.Type.RAM); + auxLanguageCard = new PagedMemory(0x3000, PagedMemory.Type.LANGUAGE_CARD); + auxLanguageCard2 = new PagedMemory(0x1000, PagedMemory.Type.LANGUAGE_CARD); initMemoryPattern(auxMemory); } @@ -93,9 +90,4 @@ public class CardExt80Col extends RAM128k { public void attach() { // Nothing to do... } - - @Override - public void detach() { - // Nothing to do... - } } diff --git a/src/main/java/jace/hardware/CardHayesMicromodem.java b/src/main/java/jace/hardware/CardHayesMicromodem.java index c492f03..e5fbbfb 100644 --- a/src/main/java/jace/hardware/CardHayesMicromodem.java +++ b/src/main/java/jace/hardware/CardHayesMicromodem.java @@ -1,31 +1,29 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.hardware; -import jace.config.Name; -import jace.core.Computer; -import jace.core.RAMEvent; -import jace.core.RAMEvent.TYPE; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; +import jace.config.Name; +import jace.core.RAMEvent; +import jace.core.RAMEvent.TYPE; + /** * Partial Hayes Micromodem II implementation, acting more as a bridge to * provide something similar to the Super Serial support for applications which @@ -43,8 +41,8 @@ public class CardHayesMicromodem extends CardSSC { public int RING_INDICATOR_REG = 5; private boolean ringIndicator = false; - public CardHayesMicromodem(Computer computer) { - super(computer); + public CardHayesMicromodem() { + super(); ACIA_Data = 7; ACIA_Status = 6; ACIA_Control = 5; diff --git a/src/main/java/jace/hardware/CardMockingboard.java b/src/main/java/jace/hardware/CardMockingboard.java index e2f1147..701c80e 100644 --- a/src/main/java/jace/hardware/CardMockingboard.java +++ b/src/main/java/jace/hardware/CardMockingboard.java @@ -1,43 +1,38 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.hardware; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Level; +import java.util.logging.Logger; + +import jace.Emulator; import jace.config.ConfigurableField; import jace.config.Name; import jace.core.Card; -import jace.core.Computer; -import jace.core.Motherboard; import jace.core.RAMEvent; import jace.core.RAMEvent.TYPE; import jace.core.RAMListener; import jace.core.SoundMixer; +import jace.core.SoundMixer.SoundBuffer; +import jace.core.SoundMixer.SoundError; import jace.hardware.mockingboard.PSG; import jace.hardware.mockingboard.R6522; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.Condition; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.LockSupport; -import java.util.concurrent.locks.ReentrantLock; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.sound.sampled.LineUnavailableException; -import javax.sound.sampled.SourceDataLine; /** * Mockingboard-C implementation (with partial Phasor support). This uses two @@ -47,9 +42,12 @@ import javax.sound.sampled.SourceDataLine; * @author Brendan Robert (BLuRry) brendan.robert@gmail.com */ @Name("Mockingboard") -public class CardMockingboard extends Card implements Runnable { +public class CardMockingboard extends Card { // If true, emulation will cover 4 AY chips. Otherwise, only 2 AY chips + @ConfigurableField(name = "Debug", category = "Sound", description = "Enable debug output") + public static boolean DEBUG = false; + @ConfigurableField(name = "Volume", shortName = "vol", category = "Sound", description = "Mockingboard volume, 100=max, 0=silent") @@ -64,36 +62,29 @@ public class CardMockingboard extends Card implements Runnable { defaultValue = "1020484", description = "Clock rate of AY oscillators") public int CLOCK_SPEED = 1020484; - public int SAMPLE_RATE = 48000; - @ConfigurableField(name = "Buffer size", - category = "Sound", - description = "Number of samples to generate on each pass") - public int BUFFER_LENGTH = 2; // The array of configured AY chips public PSG[] chips; // The 6522 controllr chips (always 2) public R6522[] controllers; - static private int ticksBetweenPlayback = 200; - Lock timerSync = new ReentrantLock(); - Condition cpuCountReached = timerSync.newCondition(); - Condition playbackFinished = timerSync.newCondition(); @ConfigurableField(name = "Idle sample threshold", description = "Number of samples to wait before suspending sound") - private int MAX_IDLE_SAMPLES = SAMPLE_RATE; - + SoundBuffer buffer; + double ticksBetweenPlayback = 24.0; + int MAX_IDLE_TICKS = 1000000; + boolean activatedAfterReset = false; + @Override public String getDeviceName() { return "Mockingboard"; } - public CardMockingboard(Computer computer) { - super(computer); + public CardMockingboard() { + super(true); + activatedAfterReset = false; controllers = new R6522[2]; for (int i = 0; i < 2; i++) { // has to be final to be used inside of anonymous class below final int j = i; - controllers[i] = new R6522(computer) { - int controller = j; - + controllers[i] = new R6522() { @Override public void sendOutputA(int value) { chips[j].setBus(value); @@ -129,39 +120,30 @@ public class CardMockingboard extends Card implements Runnable { @Override public String getShortName() { return "timer" + j; - } - - public void doTick() { - super.doTick(); - if (controller == 0) { - doSoundTick(); - } - } + } }; + addChildDevice(controllers[i]); } } @Override public void reset() { + activatedAfterReset = false; + if (chips != null) { + for (PSG p : chips) { + p.reset(); + } + } suspend(); } RAMListener mainListener = null; - boolean heatbeatUnclocked = false; - long heartbeatReclockTime = 0L; - long unclockTime = 5000L; - - private void setUnclocked(boolean unclocked) { - heatbeatUnclocked = unclocked; - for (R6522 controller : controllers) { - controller.setUnclocked(unclocked); - } - heartbeatReclockTime = System.currentTimeMillis() + unclockTime; - } - @Override protected void handleFirmwareAccess(int register, TYPE type, int value, RAMEvent e) { - resume(); + if (chips == null) { + reconfigure(); + } + int chip = 0; for (PSG psg : chips) { if (psg.getBaseReg() == (register & 0x0f0)) { @@ -170,99 +152,101 @@ public class CardMockingboard extends Card implements Runnable { chip++; } if (chip >= 2) { - System.err.println("Could not determine which PSG to communicate to for access to regsiter + " + Integer.toHexString(register)); - e.setNewValue(computer.getVideo().getFloatingBus()); + if (DEBUG) { + System.err.println("Could not determine which PSG to communicate to for access to regsiter + " + Integer.toHexString(register)); + } + Emulator.withVideo(v->e.setNewValue(v.getFloatingBus())); return; } R6522 controller = controllers[chip & 1]; if (e.getType().isRead()) { int val = controller.readRegister(register & 0x0f); e.setNewValue(val); -// System.out.println("Read "+Integer.toHexString(register)+" == "+val); + if (DEBUG) System.out.println("Chip " + chip + " Read "+Integer.toHexString(register & 0x0f)+" == "+val); } else { controller.writeRegister(register & 0x0f, e.getNewValue()); -// System.out.println("Write "+Integer.toHexString(register)+" == "+e.getNewValue()); + if (DEBUG) System.out.println("Chip " + chip + " Write "+Integer.toHexString(register & 0x0f)+" == "+e.getNewValue()); } - } + // Any firmware access will reset the idle counter and wake up the card, this allows the timers to start running again + // Games such as "Skyfox" use the timer to detect if the card is present. + idleTicks = 0; + if (!isRunning() || isPaused()) { + activatedAfterReset = true; + // ResumeAll is important so that the 6522's can start their timers + resumeAll(); + } +} @Override protected void handleIOAccess(int register, TYPE type, int value, RAMEvent e) { // Oddly, all IO is done at the firmware address bank. It's a strange card. -// System.out.println("MB I/O Access "+type.name()+" "+register+":"+value); - e.setNewValue(computer.getVideo().getFloatingBus()); + if (DEBUG) { + System.out.println("MB I/O Access "+type.name()+" "+register+":"+value); + } + Emulator.withVideo(v->e.setNewValue(v.getFloatingBus())); } - long ticksSinceLastPlayback = 0; - + double ticksSinceLastPlayback = 0; + long idleTicks = 0; @Override public void tick() { - if (heatbeatUnclocked) { - if (System.currentTimeMillis() - heartbeatReclockTime >= unclockTime) { - setUnclocked(false); - } else { - for (R6522 c : controllers) { - if (c == null || !c.isRunning()) { - continue; - } - c.doTick(); + try { + ticksSinceLastPlayback++; + if (ticksSinceLastPlayback >= ticksBetweenPlayback) { + ticksSinceLastPlayback -= ticksBetweenPlayback; + if (playSound()) { + idleTicks = 0; + } else { + idleTicks += ticksBetweenPlayback; } } + } catch (InterruptedException | ExecutionException | SoundError | NullPointerException ex) { + Logger.getLogger(CardMockingboard.class.getName()).log(Level.SEVERE, "Mockingboard playback encountered fatal exception", ex); + suspend(); + // Do nothing, probably suspending CPU } - } - - public boolean isRunning() { - return super.isRunning() && playbackThread != null && playbackThread.isAlive(); - } - - private void doSoundTick() { - if (isRunning() && !pause) { -// buildMixerTable(); - timerSync.lock(); - try { - ticksSinceLastPlayback++; - if (ticksSinceLastPlayback >= ticksBetweenPlayback) { - cpuCountReached.signalAll(); - while (isRunning() && ticksSinceLastPlayback >= ticksBetweenPlayback) { - if (!playbackFinished.await(1, TimeUnit.SECONDS)) { -// gripe("The mockingboard playback thread has stalled. Disabling mockingboard."); - suspendSound(); - } - } - } - } catch (InterruptedException ex) { - suspend(); - // Do nothing, probably suspending CPU - } finally { - timerSync.unlock(); - } + + if (idleTicks >= MAX_IDLE_TICKS) { + suspend(); } } @Override public void reconfigure() { - boolean restart = suspend(); - initPSG(); - for (PSG chip : chips) { - chip.setRate(phasorMode ? CLOCK_SPEED * 2 : CLOCK_SPEED, SAMPLE_RATE); - chip.reset(); + if (DEBUG) { + System.out.println("Reconfiguring Mockingboard"); } + ticksBetweenPlayback = (double) CLOCK_SPEED / (double) SoundMixer.RATE; + initPSG(); + super.reconfigure(); - if (restart) { - resume(); + if (DEBUG) { + System.out.println("Reconfiguring Mockingboard completed"); } } /////////////////////////////////////////////////////////// public static int[] VolTable; - int[][] buffers; - int bufferLength = -1; - public void playSound(int[] left, int[] right) { - chips[0].update(left, true, left, false, left, false, BUFFER_LENGTH); - chips[1].update(right, true, right, false, right, false, BUFFER_LENGTH); - if (phasorMode) { - chips[2].update(left, false, left, false, left, false, BUFFER_LENGTH); - chips[3].update(right, false, right, false, right, false, BUFFER_LENGTH); + AtomicInteger left = new AtomicInteger(0); + AtomicInteger right = new AtomicInteger(0); + public boolean playSound() throws InterruptedException, ExecutionException, SoundError { + if (phasorMode && chips.length != 4) { + System.err.println("Wrong number of chips for phasor mode, correcting this"); + initPSG(); } + chips[0].update(left, true, left, false, left, false); + chips[1].update(right, true, right, false, right, false); + if (phasorMode) { + chips[2].update(left, false, left, false, left, false); + chips[3].update(right, false, right, false, right, false); + } + SoundBuffer b = buffer; + if (b == null) { + return false; + } + b.playSample((short) left.get()); + b.playSample((short) right.get()); + return (left.get() != 0 || right.get() != 0); } public void buildMixerTable() { @@ -276,7 +260,7 @@ public class CardMockingboard extends Card implements Runnable { double out = (MAX_AMPLITUDE * volume) / 100.0; // Reduce max amplitude to reflect post-mixer values so we don't have to scale volume when mixing channels out = out * 2.0 / 3.0 / numChips; - double delta = 1.15; + // double delta = 1.15; for (int i = 15; i > 0; i--) { VolTable[i] = (int) (out / Math.pow(Math.sqrt(2),(15-i))); // out /= 1.188502227; /* = 10 ^ (1.5/20) = 1.5dB */ @@ -287,179 +271,82 @@ public class CardMockingboard extends Card implements Runnable { VolTable[0] = 0; } - Thread playbackThread = null; - boolean pause = false; @Override public void resume() { - pause = false; - if (chips == null) { - initPSG(); - for (PSG psg : chips) { - psg.setRate(phasorMode ? CLOCK_SPEED * 2 : CLOCK_SPEED, SAMPLE_RATE); - psg.reset(); - } - } - if (!isRunning()) { - setUnclocked(true); - for (R6522 controller : controllers) { - controller.attach(); - controller.resume(); + if (DEBUG) { + System.out.println("Resuming Mockingboard"); + } + if (!activatedAfterReset) { + if (DEBUG) { + System.out.println("Resuming Mockingboard: not activated after reset, not resuming"); + } + // Do not re-activate until firmware access was made + return; + } + initPSG(); + if (buffer == null || !buffer.isAlive()) { + if (DEBUG) { + System.out.println("Resuming Mockingboard: creating sound buffer"); + } + try { + buffer = SoundMixer.createBuffer(true); + } catch (InterruptedException | ExecutionException | SoundError e) { + System.out.println("Error whhen trying to create sound buffer for Mockingboard: " + e.getMessage()); + e.printStackTrace(); + suspend(); } } + idleTicks = 0; super.resume(); - if (playbackThread == null || !playbackThread.isAlive()) { - playbackThread = new Thread(this, "Mockingboard sound playback"); - playbackThread.start(); + if (DEBUG) { + System.out.println("Resuming Mockingboard: resume completed"); } } @Override public boolean suspend() { - super.suspend(); - for (R6522 controller : controllers) { - controller.suspend(); - controller.detach(); + if (DEBUG) { + System.out.println("Suspending Mockingboard"); + Thread.dumpStack(); } - return suspendSound(); + + if (buffer != null) { + try { + buffer.shutdown(); + } catch (InterruptedException | ExecutionException | SoundError e) { + System.out.println("Error when trying to shutdown sound buffer for Mockingboard: " + e.getMessage()); + e.printStackTrace(); + } finally { + buffer = null; + } + } + for (R6522 c : controllers) { + c.suspend(); + } + return super.suspend(); } - public boolean suspendSound() { - if (playbackThread == null || !playbackThread.isAlive()) { - return false; - } - if (playbackThread != null) { - playbackThread.interrupt(); - try { - // Wait for thread to die - playbackThread.join(); - } catch (InterruptedException ex) { - } - } - playbackThread = null; - return true; - } - - @Override - /** - * This is the audio playback thread - */ - public void run() { - try { - SourceDataLine out = computer.mixer.getLine(this); - int[] leftBuffer = new int[BUFFER_LENGTH]; - int[] rightBuffer = new int[BUFFER_LENGTH]; - int frameSize = out.getFormat().getFrameSize(); - byte[] buffer = new byte[BUFFER_LENGTH * frameSize]; - System.out.println("Mockingboard playback started"); - int bytesPerSample = frameSize / 2; - buildMixerTable(); - ticksBetweenPlayback = (int) ((Motherboard.SPEED * BUFFER_LENGTH) / SAMPLE_RATE); - System.out.println("Ticks between playback: "+ticksBetweenPlayback); - ticksSinceLastPlayback = 0; - int zeroSamples = 0; - setRun(true); - LockSupport.parkNanos(5000); - while (isRunning() && !Thread.interrupted()) { - while (isRunning() && !computer.isRunning()) { - Thread.sleep(1000); - } - if (isRunning() && !Thread.interrupted()) { - playSound(leftBuffer, rightBuffer); - int p = 0; - for (int idx = 0; idx < BUFFER_LENGTH; idx++) { - int sampleL = leftBuffer[idx]; - int sampleR = rightBuffer[idx]; - // Convert left + right samples into buffer format - if (sampleL == 0 && sampleR == 0) { - zeroSamples++; - } else { - zeroSamples = 0; - } - for (int shift = SoundMixer.BITS - 8, index = 0; shift >= 0; shift -= 8, index++) { - buffer[p + index] = (byte) (sampleR >> shift); - buffer[p + index + bytesPerSample] = (byte) (sampleL >> shift); - } - p += frameSize; - } - try { - timerSync.lock(); - ticksSinceLastPlayback -= ticksBetweenPlayback; - } finally { - timerSync.unlock(); - } - out.write(buffer, 0, buffer.length); - if (zeroSamples >= MAX_IDLE_SAMPLES) { - zeroSamples = 0; - pause = true; - computer.getMotherboard().cancelSpeedRequest(this); - while (pause && isRunning()) { - try { - Thread.sleep(50); - timerSync.lock(); - playbackFinished.signalAll(); - } catch (InterruptedException ex) { - return; - } catch (IllegalMonitorStateException ex) { - // Do nothing - } finally { - try { - timerSync.unlock(); - } catch (IllegalMonitorStateException ex) { - // Do nothing -- this is probably caused by a suspension event - } - } - } - } - try { - timerSync.lock(); - playbackFinished.signalAll(); - while (isRunning() && ticksSinceLastPlayback < ticksBetweenPlayback) { - computer.getMotherboard().requestSpeed(this); - cpuCountReached.await(); - computer.getMotherboard().cancelSpeedRequest(this); - } - } catch (InterruptedException ex) { - // Do nothing, probably killing playback thread on purpose - } finally { - timerSync.unlock(); - } - } - } - } catch (LineUnavailableException ex) { - Logger.getLogger(CardMockingboard.class - .getName()).log(Level.SEVERE, null, ex); - } catch (InterruptedException ex) { - Logger.getLogger(CardMockingboard.class.getName()).log(Level.SEVERE, null, ex); - } finally { - computer.getMotherboard().cancelSpeedRequest(this); - System.out.println("Mockingboard playback stopped"); - computer.mixer.returnLine(this); - } - } - private void initPSG() { - if (phasorMode) { + if (phasorMode && (chips == null || chips.length < 4)) { chips = new PSG[4]; - chips[0] = new PSG(0x10, CLOCK_SPEED * 2, SAMPLE_RATE, "AY1", 8); - chips[1] = new PSG(0x80, CLOCK_SPEED * 2, SAMPLE_RATE, "AY2", 8); - chips[2] = new PSG(0x10, CLOCK_SPEED * 2, SAMPLE_RATE, "AY3", 16); - chips[3] = new PSG(0x80, CLOCK_SPEED * 2, SAMPLE_RATE, "AY4", 16); - } else { + chips[0] = new PSG(0x10, CLOCK_SPEED * 2, SoundMixer.RATE, "AY1", 8); + chips[1] = new PSG(0x80, CLOCK_SPEED * 2, SoundMixer.RATE, "AY2", 8); + chips[2] = new PSG(0x10, CLOCK_SPEED * 2, SoundMixer.RATE, "AY3", 16); + chips[3] = new PSG(0x80, CLOCK_SPEED * 2, SoundMixer.RATE, "AY4", 16); + } else if (chips == null || chips.length != 2) { chips = new PSG[2]; - chips[0] = new PSG(0, CLOCK_SPEED, SAMPLE_RATE, "AY1", 255); - chips[1] = new PSG(0x80, CLOCK_SPEED, SAMPLE_RATE, "AY2", 255); + chips[0] = new PSG(0, CLOCK_SPEED, SoundMixer.RATE, "AY1", 255); + chips[1] = new PSG(0x80, CLOCK_SPEED, SoundMixer.RATE, "AY2", 255); } + for (PSG psg : chips) { + psg.setRate(phasorMode ? CLOCK_SPEED * 2 : CLOCK_SPEED, SoundMixer.RATE); + } + buildMixerTable(); } @Override protected void handleC8FirmwareAccess(int register, TYPE type, int value, RAMEvent e) { // There is no c8 rom access to emulate } - - // This fixes freezes when resizing the window, etc. - @Override - public boolean suspendWithCPU() { - return true; - } } diff --git a/src/main/java/jace/hardware/CardRamFactor.java b/src/main/java/jace/hardware/CardRamFactor.java index c213107..adb4461 100644 --- a/src/main/java/jace/hardware/CardRamFactor.java +++ b/src/main/java/jace/hardware/CardRamFactor.java @@ -1,37 +1,36 @@ -/* - * Copyright (C) 2012 Brendan Robert (BLuRry) brendan.robert@gmail.com. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ +/** +* Copyright 2024 Brendan Robert +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +**/ + package jace.hardware; -import jace.config.ConfigurableField; -import jace.config.Name; -import jace.core.Card; -import jace.core.Computer; -import jace.core.RAMEvent; -import jace.core.RAMEvent.TYPE; -import jace.core.Utility; -import jace.state.Stateful; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; + +import jace.Emulator; +import jace.config.ConfigurableField; +import jace.config.Name; +import jace.core.Card; +import jace.core.RAMEvent; +import jace.core.RAMEvent.TYPE; +import jace.core.Utility; +import jace.state.Stateful; import javafx.scene.control.Label; /** @@ -64,11 +63,11 @@ public class CardRamFactor extends Card { return "RamFactor"; } Optional