summaryrefslogtreecommitdiff
path: root/z80.c
diff options
context:
space:
mode:
Diffstat (limited to 'z80.c')
-rw-r--r--z80.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/z80.c b/z80.c
index 64ec504..60dbca4 100644
--- a/z80.c
+++ b/z80.c
@@ -112,10 +112,11 @@ static void Z80_CheckInterrupt(Z80 *cpu)
/* ---------------------------------------- INTERFACES
*/
-Z80 *Z80Init(Z80Memory memory,
- Z80MemoryControl memcontrol,
+Z80 *Z80Init(Z80ReadMemory read_memory,
+ Z80WriteMemory write_memory,
+ Z80ReadPort read_port,
Z80WritePort write_port,
- Z80ReadPort read_port)
+ Z80ReadMemory read_disassem)
{
Z80 *cpu;
int f;
@@ -123,17 +124,18 @@ Z80 *Z80Init(Z80Memory memory,
InitTables();
- if (!memory || !memcontrol)
+ if (!read_memory || !write_memory)
return NULL;
cpu=malloc(sizeof *cpu);
if (cpu)
{
- cpu->memory=memory;
- cpu->memctrl=memcontrol;
+ cpu->mread=read_memory;
+ cpu->mwrite=write_memory;
cpu->pread=read_port;
cpu->pwrite=write_port;
+ cpu->disread=read_disassem;
for(f=0;f<eZ80_NO_CALLBACK;f++)
for(r=0;r<MAX_PER_CALLBACK;r++)
@@ -199,11 +201,13 @@ int Z80LodgeCallback(Z80 *cpu, Z80CallbackReason reason, Z80Callback callback)
int f;
for(f=0;f<MAX_PER_CALLBACK;f++)
+ {
if (!cpu->callback[reason][f])
{
cpu->callback[reason][f]=callback;
return TRUE;
}
+ }
return FALSE;
}
@@ -236,6 +240,8 @@ void Z80NMI(Z80 *cpu)
int Z80SingleStep(Z80 *cpu)
{
+ Z80Byte opcode;
+
cpu->last_cb=TRUE;
cpu->shift=0;
@@ -245,7 +251,9 @@ int Z80SingleStep(Z80 *cpu)
INC_R;
- Z80_Decode(cpu,cpu->memory[cpu->PC++]);
+ opcode=FETCH_BYTE;
+
+ Z80_Decode(cpu,opcode);
return cpu->last_cb;
}
@@ -342,7 +350,7 @@ const char *Z80Disassemble(Z80 *cpu, Z80Word *pc)
strcat(s,Z80_Dis_Printf("%-40s ;",Z80_Dis_GetArg()));
for(f=0;f<5 && opc!=npc;f++)
- strcat(s,Z80_Dis_Printf(" %.2x",(int)cpu->memory[opc++]));
+ strcat(s,Z80_Dis_Printf(" %.2x",(int)cpu->disread(cpu,opc++)));
if (opc!=npc)
for(f=1;f<3;f++)