diff options
-rw-r--r-- | altoslib/AltosDebug.java | 4 | ||||
-rw-r--r-- | altoslib/AltosHexfile.java | 20 | ||||
-rw-r--r-- | altoslib/AltosRomconfig.java | 6 |
3 files changed, 17 insertions, 13 deletions
diff --git a/altoslib/AltosDebug.java b/altoslib/AltosDebug.java index 24a25933..a44eb12f 100644 --- a/altoslib/AltosDebug.java +++ b/altoslib/AltosDebug.java @@ -264,8 +264,8 @@ public class AltosDebug { public AltosRomconfig romconfig() throws InterruptedException { try { - byte[] bytes = read_memory(0xa0, 10); - AltosHexfile hexfile = new AltosHexfile (bytes, 0xa0); + byte[] bytes = read_memory(0x00, 0x200); + AltosHexfile hexfile = new AltosHexfile (bytes, 0x00); return new AltosRomconfig(hexfile); } catch (IOException ie) { } diff --git a/altoslib/AltosHexfile.java b/altoslib/AltosHexfile.java index 6aa98383..f2ab4bea 100644 --- a/altoslib/AltosHexfile.java +++ b/altoslib/AltosHexfile.java @@ -294,15 +294,19 @@ public class AltosHexfile { if (usb_descriptors == null) return -1; - /* Walk the descriptors looking for the device */ - a = usb_descriptors.address; - while (get_u8(a+1) != AO_USB_DESC_DEVICE) { - int delta = get_u8(a); - a += delta; - if (delta == 0 || a >= max_address) - return -1; + try { + /* Walk the descriptors looking for the device */ + a = usb_descriptors.address; + while (get_u8(a+1) != AO_USB_DESC_DEVICE) { + int delta = get_u8(a); + a += delta; + if (delta == 0 || a >= max_address) + return -1; + } + return a; + } catch (ArrayIndexOutOfBoundsException ae) { + return -1; } - return a; } public AltosUsbId find_usb_id() { diff --git a/altoslib/AltosRomconfig.java b/altoslib/AltosRomconfig.java index 1fbb4115..44a3fa60 100644 --- a/altoslib/AltosRomconfig.java +++ b/altoslib/AltosRomconfig.java @@ -35,12 +35,12 @@ public class AltosRomconfig { System.out.printf("no symbol %s\n", name); throw new AltosNoSymbol(name); } - if (hexfile.address <= symbol.address && symbol.address + len < hexfile.max_address) { + if (hexfile.address <= symbol.address && symbol.address + len <= hexfile.max_address) { System.out.printf("%s: %x\n", name, symbol.address); return symbol.address; } - System.out.printf("invalid symbol addr %x range is %x - %x\n", - symbol.address, hexfile.address, hexfile.max_address); + System.out.printf("invalid symbol addr %x len %d range is %x - %x\n", + symbol.address, len, hexfile.address, hexfile.max_address); throw new AltosNoSymbol(name); } |