diff options
author | Ian C <ianc@noddybox.co.uk> | 2007-01-12 00:40:03 +0000 |
---|---|---|
committer | Ian C <ianc@noddybox.co.uk> | 2007-01-12 00:40:03 +0000 |
commit | ef641589bf763ea12e73abf4bf42e45ac1acd2ff (patch) | |
tree | 0afa591a9c5294a07508f6c5c56a0857adfd2285 /arm9/source/z80.c | |
parent | 50d960d99f0783799f81236d9225a6940606fe38 (diff) |
Gone back to a simpler ARM9 only build as the new dynamic libfat library means I can use that, and dswifi wouldn't work with my AP.
Diffstat (limited to 'arm9/source/z80.c')
-rw-r--r-- | arm9/source/z80.c | 331 |
1 files changed, 0 insertions, 331 deletions
diff --git a/arm9/source/z80.c b/arm9/source/z80.c deleted file mode 100644 index 36c5793..0000000 --- a/arm9/source/z80.c +++ /dev/null @@ -1,331 +0,0 @@ -/* - - z80 - Z80 Emulator - - Copyright (C) 2006 Ian Cowburn <ianc@noddybox.co.uk> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - ------------------------------------------------------------------------- - - $Id$ - - Z80 - -*/ -#include <stdlib.h> -#include <string.h> - -#include "z80.h" -#include "z80_private.h" - -static const char ident[]="$Id$"; -static const char ident_z80_header[]=Z80_H; -static const char ident_z80_private_header[]=Z80_PRIVATE_H; - -Z80Label *z80_labels=NULL; - -/* ---------------------------------------- PRIVATE FUNCTIONS -*/ -static void InitTables() -{ - static int init=FALSE; - - if (init) - return; - - init=TRUE; - - Z80_InitialiseInternals(); -} - -static void Z80_CheckInterrupt(Z80 *cpu) -{ - /* Check interrupts - */ - if (PRIV->raise) - { - if (PRIV->nmi) - { - if (PRIV->halt) - { - PRIV->halt=FALSE; - CALLBACK(eZ80_Halt,0); - cpu->PC++; - } - - TSTATE(2); - cpu->IFF1=0; - PRIV->nmi=FALSE; - PUSH(cpu->PC); - cpu->PC=0x66; - } - else if (cpu->IFF1) - { - if (PRIV->halt) - { - PRIV->halt=FALSE; - CALLBACK(eZ80_Halt,0); - cpu->PC++; - } - - TSTATE(2); - - cpu->IFF1=0; - cpu->IFF2=0; - - switch(cpu->IM) - { - default: - case 0: - INC_R; - Z80_Decode(cpu,PRIV->devbyte); - return; - break; - - case 1: - PUSH(cpu->PC); - cpu->PC=0x38; - break; - - case 2: - PUSH(cpu->PC); - cpu->PC=(Z80Word)cpu->I*256+PRIV->devbyte; - break; - } - } - - PRIV->raise=FALSE; - } -} - - -/* ---------------------------------------- INTERFACES -*/ - -#ifdef ENABLE_ARRAY_MEMORY -Z80 *Z80Init(Z80ReadPort read_port, - Z80WritePort write_port) -#else -Z80 *Z80Init(Z80ReadMemory read_memory, - Z80WriteMemory write_memory, - Z80ReadPort read_port, - Z80WritePort write_port, - Z80ReadMemory read_for_disassem) -#endif -{ - Z80 *cpu; - int f; - int r; - - InitTables(); - -#ifndef ENABLE_ARRAY_MEMORY - if (!read_memory || !write_memory) - return NULL; -#endif - - cpu=malloc(sizeof *cpu); - - if (cpu) - { - cpu->priv=malloc(sizeof *cpu->priv); - - if (cpu->priv) - { -#ifndef ENABLE_ARRAY_MEMORY - PRIV->mread=read_memory; - PRIV->mwrite=write_memory; - PRIV->disread=read_for_disassem; -#endif - PRIV->pread=read_port; - PRIV->pwrite=write_port; - - for(f=0;f<eZ80_NO_CALLBACK;f++) - for(r=0;r<MAX_PER_CALLBACK;r++) - PRIV->callback[f][r]=NULL; - - Z80Reset(cpu); - } - else - { - free(cpu); - cpu=NULL; - } - } - - return cpu; -} - - -void Z80Reset(Z80 *cpu) -{ - PRIV->cycle=0; - cpu->PC=0; - - cpu->AF.w=0xffff; - cpu->BC.w=0xffff; - cpu->DE.w=0xffff; - cpu->HL.w=0xffff; - cpu->AF_=0xffff; - cpu->BC_=0xffff; - cpu->DE_=0xffff; - cpu->HL_=0xffff; - - cpu->IX.w=0xffff; - cpu->IY.w=0xffff; - - cpu->SP=0xffff; - cpu->IFF1=0; - cpu->IFF2=0; - cpu->IM=0; - cpu->I=0; - cpu->R=0; - PRIV->halt=0; - - PRIV->raise=FALSE; - PRIV->nmi=FALSE; -} - - -Z80Val Z80Cycles(Z80 *cpu) -{ - return PRIV->cycle; -} - - -void Z80ResetCycles(Z80 *cpu, Z80Val cycles) -{ - PRIV->cycle=cycles; -} - - -int Z80LodgeCallback(Z80 *cpu, Z80CallbackReason reason, Z80Callback callback) -{ - int f; - - for(f=0;f<MAX_PER_CALLBACK;f++) - { - if (!PRIV->callback[reason][f]) - { - PRIV->callback[reason][f]=callback; - return TRUE; - } - } - - return FALSE; -} - - -void Z80RemoveCallback(Z80 *cpu, Z80CallbackReason reason, Z80Callback callback) -{ - int f; - - for(f=0;f<MAX_PER_CALLBACK;f++) - { - if (PRIV->callback[reason][f]==callback) - { - PRIV->callback[reason][f]=NULL; - } - } -} - - -void Z80Interrupt(Z80 *cpu, Z80Byte devbyte) -{ - PRIV->raise=TRUE; - PRIV->devbyte=devbyte; - PRIV->nmi=FALSE; -} - - -void Z80NMI(Z80 *cpu) -{ - PRIV->raise=TRUE; - PRIV->nmi=TRUE; -} - - -int Z80SingleStep(Z80 *cpu) -{ - Z80Byte opcode; - - PRIV->last_cb=TRUE; - PRIV->shift=0; - - Z80_CheckInterrupt(cpu); - - CALLBACK(eZ80_Instruction,PRIV->cycle); - - INC_R; - - opcode=FETCH_BYTE; - - Z80_Decode(cpu,opcode); - - return PRIV->last_cb; -} - - -void Z80Exec(Z80 *cpu) -{ - while (Z80SingleStep(cpu)); -} - - -void Z80SetLabels(Z80Label labels[]) -{ - z80_labels=labels; -} - - -const char *Z80Disassemble(Z80 *cpu, Z80Word *pc) -{ -#ifdef ENABLE_DISASSEM - Z80Byte Z80_Dis_FetchByte(Z80 *cpu, Z80Word *pc); - static char s[80]; - Z80Word opc,npc; - Z80Byte op; - int f; - - opc=*pc; - op=Z80_Dis_FetchByte(cpu,pc); - dis_opcode_z80[op](cpu,op,pc); - npc=*pc; - - strcpy(s,Z80_Dis_Printf("%-5s",Z80_Dis_GetOp())); - strcat(s,Z80_Dis_Printf("%-40s ;",Z80_Dis_GetArg())); - - for(f=0;f<5 && opc!=npc;f++) - { -#ifdef ENABLE_ARRAY_MEMORY - strcat(s,Z80_Dis_Printf(" %.2x",(int)Z80_MEMORY[opc++])); -#else - strcat(s,Z80_Dis_Printf(" %.2x",(int)PRIV->disread(cpu,opc++))); -#endif - } - - if (opc!=npc) - for(f=1;f<3;f++) - s[strlen(s)-f]='.'; - - return s; -#else - (*pc)+=4; - return "NO DISASSEMBLER"; -#endif -} - -/* END OF FILE */ |