diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile | 18 | ||||
| -rw-r--r-- | src/exit.c | 56 | ||||
| -rw-r--r-- | src/exit.h | 39 | ||||
| -rw-r--r-- | src/zx81.c | 152 | ||||
| -rw-r--r-- | src/zx81.h | 49 | 
5 files changed, 308 insertions, 6 deletions
| 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 <stdlib.h> +#include <stdarg.h> +#include "exit.h" + +#include <SDL.h> + +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 <stdlib.h> +#include <stdio.h> +#include <string.h> +#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 */ | 
