From 3a80024643367a4514f0160a90583e00042382b2 Mon Sep 17 00:00:00 2001 From: Ian C Date: Wed, 17 Dec 2003 16:55:42 +0000 Subject: Added new files --- src/Makefile | 18 ++++--- src/exit.c | 56 ++++++++++++++++++++++ src/exit.h | 39 +++++++++++++++ src/zx81.c | 152 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/zx81.h | 49 +++++++++++++++++++ 5 files changed, 308 insertions(+), 6 deletions(-) create mode 100644 src/exit.c create mode 100644 src/exit.h create mode 100644 src/zx81.c create mode 100644 src/zx81.h diff --git a/src/Makefile b/src/Makefile index 784e345..5ebcd48 100644 --- a/src/Makefile +++ b/src/Makefile @@ -18,7 +18,7 @@ # # ------------------------------------------------------------------------- # -# $Id: Makefile,v 1.1.1.1 2003-12-17 01:36:18 ianc Exp $ +# $Id: Makefile,v 1.2 2003-12-17 16:55:42 ianc Exp $ # @@ -32,17 +32,23 @@ TARGET = ezx81 Z80LIB = z80/z80.a -SOURCE = ezx81.c +SOURCE = ezx81.c \ + zx81.c \ + exit.c -OBJECTS = ezx81.o +OBJECTS = ezx81.o \ + zx81.o \ + exit.o EMMA = emma -CFLAGS += -Iz80 +CFLAGS += -Iz80 `sdl-config --cflags` + +LIBS = $(Z80LIB) `sdl-config --libs` $(TARGET): $(OBJECTS) $(Z80LIB) - $(CC) $(CFLAGS) -o $(TARGET) $(OBJECTS) $(Z80LIB) + $(CC) $(CFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) $(EMMA): $(EMMA).o $(Z80LIB) $(CC) $(CFLAGS) -o $(EMMA) $(EMMA).o $(Z80LIB) @@ -51,7 +57,7 @@ $(Z80LIB): z80/*.[ch] cd z80; make ; cd .. clean: - rm -f $(TARGET) $(OBJECTS) core + rm -f $(TARGET) $(EMMA) $(EMMA).o $(OBJECTS) core cd z80; make clean; cd .. depend: diff --git a/src/exit.c b/src/exit.c new file mode 100644 index 0000000..3b5e12d --- /dev/null +++ b/src/exit.c @@ -0,0 +1,56 @@ +/* + + ezx81 - X11 ZX81 emulator + + Copyright (C) 2003 Ian Cowburn (ianc@noddybox.demon.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 + + ------------------------------------------------------------------------- + + Provides a common error exit point + +*/ +static const char ident[]="$Id$"; + +#include +#include +#include "exit.h" + +#include + +static const char ident_h[]=EZX81_EXIT_H; + + +/* ---------------------------------------- EXPORTED INTERFACES +*/ +void Exit(const char *format,...) +{ + va_list va; + + if (SDL_WasInit(SDL_INIT_EVERYTHING)) + { + SDL_Quit(); + } + + va_start(va,format); + vfprintf(stderr,format,va); + va_end(va); + + exit(EXIT_FAILURE); +} + + +/* END OF FILE */ diff --git a/src/exit.h b/src/exit.h new file mode 100644 index 0000000..b3a216b --- /dev/null +++ b/src/exit.h @@ -0,0 +1,39 @@ +/* + + ezx81 - X11 ZX81 emulator + + Copyright (C) 2003 Ian Cowburn (ianc@noddybox.demon.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 + + ------------------------------------------------------------------------- + + Provides a common error exit point + +*/ + +#ifndef EZX81_EXIT_H +#define EZX81_EXIT_H "$Id$" + + +/* Exit +*/ +void Exit(const char *format,...); + + +#endif + + +/* END OF FILE */ diff --git a/src/zx81.c b/src/zx81.c new file mode 100644 index 0000000..59b5960 --- /dev/null +++ b/src/zx81.c @@ -0,0 +1,152 @@ +/* + + ezx81 - X11 ZX81 emulator + + Copyright (C) 2003 Ian Cowburn (ianc@noddybox.demon.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 + + ------------------------------------------------------------------------- + + Provides the emulation for the ZX81 + +*/ +static const char ident[]="$Id$"; + +#include +#include +#include +#include "zx81.h" +#include "exit.h" + +static const char ident_h[]=EZX81_ZX81_H; + + +/* ---------------------------------------- STATICS +*/ +static const int ROMLEN=0x2000; +static const int ROM_SAVE=0x2fc; +static const int ROM_LOAD=0x347; + +static Z80Byte mem[0x10000]; + +static Z80Word RAMBOT=0; +static Z80Word RAMTOP=0; +static Z80Word RAMLEN=0; + + +/* ---------------------------------------- PRIVATE FUNCTIONS +*/ +void ULA_Video_Shifter(Z80 *z80, Z80Byte val) +{ +} + + +/* ---------------------------------------- EXPORTED INTERFACES +*/ +void ZX81_Init(void) +{ + /* TODO: Config for ROM + */ + const char rom[]="/files/emu/ROM/zx81.rom"; + FILE *fp; + Z80Word f; + + if (!(fp=fopen(rom,"rb"))) + Exit("Failed to open ZX81 ROM - %s\n",rom); + + if (fread(mem,1,ROMLEN,fp)!=ROMLEN) + { + fclose(fp); + Exit("ROM file must be %d bytes long\n",ROMLEN); + } + + /* Mirror the ROM + */ + memcpy(mem+ROMLEN,mem,ROMLEN); + + RAMBOT=0x4000; + + /* TODO: Memory size (1 or 16K) + */ + RAMLEN=0x2000; + RAMTOP=RAMBOT+RAMLEN; + + for(f=RAMBOT;f<=RAMTOP;f++) + mem[f]=0; +} + + +Z80Byte ZX81_ReadMem(Z80 *z80, Z80Word addr) +{ + /* Memory reads above 32K invoke the ULA + */ + if (addr>0x7fff) + { + Z80Byte b; + + /* B6 of R is tied to the IRQ line (only when HSYNC active?) + if ((HSYNC)&&(!(z80->R&0x40))) + z80->IRQ=TRUE; + */ + + b=mem[addr&0x7fff]; + + /* If bit 6 of the opcode is set the opcode is sent as is to the + Z80. If it's not, the byte is interretted by the ULA. + */ + if (b&0x40) + { + ULA_Video_Shifter(z80,0); + } + else + { + ULA_Video_Shifter(z80,b); + b=0; + } + + return b; + } + else + return mem[addr&0x7fff]; + +} + + +void ZX81_WriteMem(Z80 *z80, Z80Word addr, Z80Byte val) +{ + if (addr>=RAMBOT && addr<=RAMTOP) + mem[addr&0x7fff]=val; +} + + +Z80Byte ZX81_ReadPort(Z80 *z80, Z80Word port) +{ + return 0; +} + + +void ZX81_WritePort(Z80 *z80, Z80Word port, Z80Byte val) +{ +} + + +Z80Byte ZX81_ReadForDisassem(Z80 *z80, Z80Word addr) +{ + return mem[addr&0x7fff]; +} + + +/* END OF FILE */ diff --git a/src/zx81.h b/src/zx81.h new file mode 100644 index 0000000..0735230 --- /dev/null +++ b/src/zx81.h @@ -0,0 +1,49 @@ +/* + + ezx81 - X11 ZX81 emulator + + Copyright (C) 2003 Ian Cowburn (ianc@noddybox.demon.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 + + ------------------------------------------------------------------------- + + Provides the emulation for the ZX81 + +*/ + +#ifndef EZX81_ZX81_H +#define EZX81_ZX81_H "$Id$" + +#include "z80.h" + + +/* Initialise the ZX81 +*/ +void ZX81_Init(void); + +/* Interfaces for the Z80 +*/ +Z80Byte ZX81_ReadMem(Z80 *z80, Z80Word addr); +void ZX81_WriteMem(Z80 *z80, Z80Word addr, Z80Byte val); +Z80Byte ZX81_ReadPort(Z80 *z80, Z80Word port); +void ZX81_WritePort(Z80 *z80, Z80Word port, Z80Byte val); +Z80Byte ZX81_ReadForDisassem(Z80 *z80, Z80Word addr); + + +#endif + + +/* END OF FILE */ -- cgit v1.2.3