Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
08fb65cb77 | ||
|
|
1d6f62e319 | ||
|
|
2e1cd12829 | ||
|
|
2273761222 | ||
|
|
bfc2254b9e | ||
|
|
7c25a4ac93 |
+629
-277
File diff suppressed because it is too large
Load Diff
@@ -65,16 +65,21 @@ struct VB {
|
|||||||
|
|
||||||
/* Working data */
|
/* Working data */
|
||||||
union {
|
union {
|
||||||
|
struct {
|
||||||
|
uint32_t dest;
|
||||||
|
uint64_t src;
|
||||||
|
} bs; /* Arithmetic bit strings */
|
||||||
struct {
|
struct {
|
||||||
uint32_t address;
|
uint32_t address;
|
||||||
int32_t value;
|
int32_t value;
|
||||||
} data;
|
} data; /* Data accesses */
|
||||||
} aux;
|
} aux;
|
||||||
|
|
||||||
/* Other state */
|
/* Other state */
|
||||||
uint32_t clocks; /* Master clocks to wait */
|
uint32_t clocks; /* Master clocks to wait */
|
||||||
uint16_t code[2]; /* Instruction code units */
|
uint16_t code[2]; /* Instruction code units */
|
||||||
uint16_t exception; /* Exception cause code */
|
uint16_t exception; /* Exception cause code */
|
||||||
|
int halt; /* CPU is halting */
|
||||||
uint16_t irq; /* Interrupt request lines */
|
uint16_t irq; /* Interrupt request lines */
|
||||||
int length; /* Instruction code length */
|
int length; /* Instruction code length */
|
||||||
uint32_t nextPC; /* Address of next instruction */
|
uint32_t nextPC; /* Address of next instruction */
|
||||||
@@ -86,6 +91,7 @@ struct VB {
|
|||||||
uint8_t wram[0x10000]; /* System RAM */
|
uint8_t wram[0x10000]; /* System RAM */
|
||||||
|
|
||||||
/* Application data */
|
/* Application data */
|
||||||
|
vbOnException onException; /* CPU exception */
|
||||||
vbOnExecute onExecute; /* CPU instruction execute */
|
vbOnExecute onExecute; /* CPU instruction execute */
|
||||||
vbOnFetch onFetch; /* CPU instruction fetch */
|
vbOnFetch onFetch; /* CPU instruction fetch */
|
||||||
vbOnRead onRead; /* CPU instruction read */
|
vbOnRead onRead; /* CPU instruction read */
|
||||||
@@ -185,6 +191,11 @@ VBAPI void* vbGetCartROM(VB *sim, uint32_t *size) {
|
|||||||
return sim->cart.rom;
|
return sim->cart.rom;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Retrieve the exception callback handle */
|
||||||
|
VBAPI vbOnException vbGetExceptionCallback(VB *sim) {
|
||||||
|
return sim->onException;
|
||||||
|
}
|
||||||
|
|
||||||
/* Retrieve the execute callback handle */
|
/* Retrieve the execute callback handle */
|
||||||
VBAPI vbOnExecute vbGetExecuteCallback(VB *sim) {
|
VBAPI vbOnExecute vbGetExecuteCallback(VB *sim) {
|
||||||
return sim->onExecute;
|
return sim->onExecute;
|
||||||
@@ -256,6 +267,7 @@ VBAPI VB* vbReset(VB *sim) {
|
|||||||
|
|
||||||
/* CPU (normal) */
|
/* CPU (normal) */
|
||||||
sim->cpu.exception = 0;
|
sim->cpu.exception = 0;
|
||||||
|
sim->cpu.halt = 0;
|
||||||
sim->cpu.irq = 0;
|
sim->cpu.irq = 0;
|
||||||
sim->cpu.pc = 0xFFFFFFF0;
|
sim->cpu.pc = 0xFFFFFFF0;
|
||||||
cpuSetSystemRegister(sim, VB_ECR, 0x0000FFF0, 1);
|
cpuSetSystemRegister(sim, VB_ECR, 0x0000FFF0, 1);
|
||||||
@@ -304,6 +316,13 @@ VBAPI int vbSetCartROM(VB *sim, void *rom, uint32_t size) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Specify a new exception callback handle */
|
||||||
|
VBAPI vbOnException vbSetExceptionCallback(VB *sim, vbOnException callback) {
|
||||||
|
vbOnException prev = sim->onException;
|
||||||
|
sim->onException = callback;
|
||||||
|
return prev;
|
||||||
|
}
|
||||||
|
|
||||||
/* Specify a new execute callback handle */
|
/* Specify a new execute callback handle */
|
||||||
VBAPI vbOnExecute vbSetExecuteCallback(VB *sim, vbOnExecute callback) {
|
VBAPI vbOnExecute vbSetExecuteCallback(VB *sim, vbOnExecute callback) {
|
||||||
vbOnExecute prev = sim->onExecute;
|
vbOnExecute prev = sim->onExecute;
|
||||||
|
|||||||
@@ -52,7 +52,8 @@ extern "C" {
|
|||||||
typedef struct VB VB;
|
typedef struct VB VB;
|
||||||
|
|
||||||
/* Callbacks */
|
/* Callbacks */
|
||||||
typedef int (*vbOnExecute)(VB *sim, uint32_t address, const uint16_t *code, int length);
|
typedef int (*vbOnException)(VB *sim, uint16_t *cause);
|
||||||
|
typedef int (*vbOnExecute )(VB *sim, uint32_t address, const uint16_t *code, int length);
|
||||||
typedef int (*vbOnFetch )(VB *sim, int fetch, uint32_t address, int32_t *value, uint32_t *cycles);
|
typedef int (*vbOnFetch )(VB *sim, int fetch, uint32_t address, int32_t *value, uint32_t *cycles);
|
||||||
typedef int (*vbOnRead )(VB *sim, uint32_t address, int type, int32_t *value, uint32_t *cycles);
|
typedef int (*vbOnRead )(VB *sim, uint32_t address, int type, int32_t *value, uint32_t *cycles);
|
||||||
typedef int (*vbOnWrite )(VB *sim, uint32_t address, int type, int32_t *value, uint32_t *cycles, int *cancel);
|
typedef int (*vbOnWrite )(VB *sim, uint32_t address, int type, int32_t *value, uint32_t *cycles, int *cancel);
|
||||||
@@ -67,10 +68,11 @@ VBAPI int vbEmulateEx (VB **sims, int count, uint32_t *clocks);
|
|||||||
VBAPI void* vbGetCallback (VB *sim, int id);
|
VBAPI void* vbGetCallback (VB *sim, int id);
|
||||||
VBAPI void* vbGetCartRAM (VB *sim, uint32_t *size);
|
VBAPI void* vbGetCartRAM (VB *sim, uint32_t *size);
|
||||||
VBAPI void* vbGetCartROM (VB *sim, uint32_t *size);
|
VBAPI void* vbGetCartROM (VB *sim, uint32_t *size);
|
||||||
VBAPI vbOnExecute vbGetExecuteCallback(VB *sim);
|
VBAPI vbOnException vbGetExceptionCallback(VB *sim);
|
||||||
|
VBAPI vbOnExecute vbGetExecuteCallback (VB *sim);
|
||||||
VBAPI vbOnFetch vbGetFetchCallback (VB *sim);
|
VBAPI vbOnFetch vbGetFetchCallback (VB *sim);
|
||||||
VBAPI uint32_t vbGetProgramCounter (VB *sim);
|
VBAPI uint32_t vbGetProgramCounter (VB *sim);
|
||||||
VBAPI int32_t vbGetProgramRegister(VB *sim, int index);
|
VBAPI int32_t vbGetProgramRegister (VB *sim, int index);
|
||||||
VBAPI vbOnRead vbGetReadCallback (VB *sim);
|
VBAPI vbOnRead vbGetReadCallback (VB *sim);
|
||||||
VBAPI uint32_t vbGetSystemRegister (VB *sim, int index);
|
VBAPI uint32_t vbGetSystemRegister (VB *sim, int index);
|
||||||
VBAPI void* vbGetUserData (VB *sim);
|
VBAPI void* vbGetUserData (VB *sim);
|
||||||
@@ -80,10 +82,11 @@ VBAPI int32_t vbRead (VB *sim, uint32_t address, int type);
|
|||||||
VBAPI VB* vbReset (VB *sim);
|
VBAPI VB* vbReset (VB *sim);
|
||||||
VBAPI int vbSetCartRAM (VB *sim, void *sram, uint32_t size);
|
VBAPI int vbSetCartRAM (VB *sim, void *sram, uint32_t size);
|
||||||
VBAPI int vbSetCartROM (VB *sim, void *rom, uint32_t size);
|
VBAPI int vbSetCartROM (VB *sim, void *rom, uint32_t size);
|
||||||
VBAPI vbOnExecute vbSetExecuteCallback(VB *sim, vbOnExecute callback);
|
VBAPI vbOnException vbSetExceptionCallback(VB *sim, vbOnException callback);
|
||||||
|
VBAPI vbOnExecute vbSetExecuteCallback (VB *sim, vbOnExecute callback);
|
||||||
VBAPI vbOnFetch vbSetFetchCallback (VB *sim, vbOnFetch callback);
|
VBAPI vbOnFetch vbSetFetchCallback (VB *sim, vbOnFetch callback);
|
||||||
VBAPI uint32_t vbSetProgramCounter (VB *sim, uint32_t value);
|
VBAPI uint32_t vbSetProgramCounter (VB *sim, uint32_t value);
|
||||||
VBAPI int32_t vbSetProgramRegister(VB *sim, int index, int32_t value);
|
VBAPI int32_t vbSetProgramRegister (VB *sim, int index, int32_t value);
|
||||||
VBAPI vbOnRead vbSetReadCallback (VB *sim, vbOnRead callback);
|
VBAPI vbOnRead vbSetReadCallback (VB *sim, vbOnRead callback);
|
||||||
VBAPI uint32_t vbSetSystemRegister (VB *sim, int index, uint32_t value);
|
VBAPI uint32_t vbSetSystemRegister (VB *sim, int index, uint32_t value);
|
||||||
VBAPI void* vbSetUserData (VB *sim, void *tag);
|
VBAPI void* vbSetUserData (VB *sim, void *tag);
|
||||||
|
|||||||
Reference in New Issue
Block a user