/* Bochs seems to use error code 1 for execution errors.
* So we use > 1 for various errors
*/
#define NoError 0
#define ExecutionError 1
#define BadCPUInstance 2
#define MemoryBoundsError 3
#define PanicError 4
#define UnsupportedOperationError 5
#define SomethingLoggedError 6
#if !defined(ulong)
typedef unsigned long ulong;
#endif
/*
* Answer a pointer to a new Bochs IA32 CPU (an instance of C++ class bx_cpu_c)
*/
extern void *newCPU();
/*
* reset the cpu to register contents 0, protected 32-bit mode.
*/
extern int resetCPU(void *cpu);
/*
* Single-step *cpu (a bx_cpu_c instance) using memory as its memory.
* Answer 0 on success, or an integer error code if something went awry.
*/
extern int singleStepCPUInSizeMinAddrReadWrite(void *cpu, void *memory,
ulong byteSize, ulong minReadAddr, ulong minWriteAddr);
/*
* Run *cpu (a bx_cpu_c instance) using memory as its memory.
* Answer an integer error code when the processor hits some exception.
* Answer 0 when it is interrupted.
*/
extern int runCPUInSizeMinAddrReadWrite(void *cpu, void *memory,
ulong byteSize, ulong minReadAddr, ulong minWriteAddr);
/*
* Flush any icache entries from start to end
*/
extern void flushICacheFromTo(void *cpu, ulong strt, ulong nd);
/*
* force runCPUInSize to exit asap. Used by interrupts.
*/
extern void forceStopRunning(void);
/*
* The previous entry in the interruptCheckChain so forceStopRunning can chain.
*/
extern void (*prevInterruptCheckChain)();
/*
* Disassemble the instruction at address in memory, writing the output to the
* log.
*/
extern int disassembleForAtInSize(void *cpu, ulong laddr,
void *memory, ulong byteSize);
/*
* The saved error if the previous singleStepIn failed.
*/
extern int errorAcorn();
/*
* The current log (if singleStep failed with SomethingLoggedError).
*/
extern char *getlog(long *len);
|