From 3e2e62d3966f4620674e51a424c7c2e734e05235 Mon Sep 17 00:00:00 2001 From: Ian C Date: Wed, 6 Sep 2006 23:35:58 +0000 Subject: Updated to use a function-based memory interface. --- z80.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'z80.c') 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;fcallback[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++) -- cgit v1.2.3