private int loadPtrOffset() throws ScriptException{
		int ptr = data[programPointer++]&0xFF;
		if((ptr&0x80)==0){
			switch((ptr>>5)&0x3){
			case 1:
				return register[ptr & 0x1F];
			case 2:
				return register[ptr & 0x1F]+loadPtrOffset();
			case 3:
				return register[ptr & 0x1F]*loadPtrOffset();
			default:
				throwAssertion();
			}
		}else{
			switch((ptr>>4)&0x7){
			case 0:
				return data[programPointer++];
			case 1:
				return (data[programPointer++]<<8)|(data[programPointer++]&0xFF);
			case 2:
				return (data[programPointer++]<<24)|((data[programPointer++]&0xFF)<<16)|((data[programPointer++]&0xFF)<<8)|(data[programPointer++]&0xFF);
			default:
				throwAssertion();
			}
		}
		return 0;
	}