mirror of
https://github.com/cc65/cc65.git
synced 2025-01-15 22:30:04 +00:00
First import
git-svn-id: svn://svn.cc65.org/cc65/trunk@1209 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
7d11fa012c
commit
febf56a10b
3
src/sim65/.cvsignore
Normal file
3
src/sim65/.cvsignore
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.depend
|
||||||
|
sim65
|
||||||
|
.kdbgrc.sim65
|
2999
src/sim65/cpucore.c
Normal file
2999
src/sim65/cpucore.c
Normal file
File diff suppressed because it is too large
Load Diff
71
src/sim65/cpucore.h
Normal file
71
src/sim65/cpucore.h
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/*****************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* cpucore.h */
|
||||||
|
/* */
|
||||||
|
/* CPU core for the 6502 simulator */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* (C) 2002 Ullrich von Bassewitz */
|
||||||
|
/* Wacholderweg 14 */
|
||||||
|
/* D-70597 Stuttgart */
|
||||||
|
/* EMail: uz@cc65.org */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
|
/* warranty. In no event will the authors be held liable for any damages */
|
||||||
|
/* arising from the use of this software. */
|
||||||
|
/* */
|
||||||
|
/* Permission is granted to anyone to use this software for any purpose, */
|
||||||
|
/* including commercial applications, and to alter it and redistribute it */
|
||||||
|
/* freely, subject to the following restrictions: */
|
||||||
|
/* */
|
||||||
|
/* 1. The origin of this software must not be misrepresented; you must not */
|
||||||
|
/* claim that you wrote the original software. If you use this software */
|
||||||
|
/* in a product, an acknowledgment in the product documentation would be */
|
||||||
|
/* appreciated but is not required. */
|
||||||
|
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||||||
|
/* be misrepresented as being the original software. */
|
||||||
|
/* 3. This notice may not be removed or altered from any source */
|
||||||
|
/* distribution. */
|
||||||
|
/* */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef CPUCORE_H
|
||||||
|
#define CPUCORE_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Data */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Registers */
|
||||||
|
extern unsigned char AC; /* Accumulator */
|
||||||
|
extern unsigned char XR; /* X register */
|
||||||
|
extern unsigned char YR; /* Y register */
|
||||||
|
extern unsigned char SR; /* Status register */
|
||||||
|
extern unsigned char SP; /* Stackpointer */
|
||||||
|
extern unsigned PC; /* Program counter */
|
||||||
|
|
||||||
|
/* Status register bits */
|
||||||
|
#define CF 0x01 /* Carry flag */
|
||||||
|
#define ZF 0x02 /* Zero flag */
|
||||||
|
#define IF 0x04 /* Interrupt flag */
|
||||||
|
#define DF 0x08 /* Decimal flag */
|
||||||
|
#define BF 0x10 /* Break flag */
|
||||||
|
#define OF 0x40 /* Overflow flag */
|
||||||
|
#define SF 0x80 /* Sign flag */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* End of cpucore.h */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
50
src/sim65/cputype.c
Normal file
50
src/sim65/cputype.c
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/*****************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* cputype.h */
|
||||||
|
/* */
|
||||||
|
/* CPU type definitions */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* (C) 2002 Ullrich von Bassewitz */
|
||||||
|
/* Wacholderweg 14 */
|
||||||
|
/* D-70597 Stuttgart */
|
||||||
|
/* EMail: uz@musoftware.de */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
|
/* warranty. In no event will the authors be held liable for any damages */
|
||||||
|
/* arising from the use of this software. */
|
||||||
|
/* */
|
||||||
|
/* Permission is granted to anyone to use this software for any purpose, */
|
||||||
|
/* including commercial applications, and to alter it and redistribute it */
|
||||||
|
/* freely, subject to the following restrictions: */
|
||||||
|
/* */
|
||||||
|
/* 1. The origin of this software must not be misrepresented; you must not */
|
||||||
|
/* claim that you wrote the original software. If you use this software */
|
||||||
|
/* in a product, an acknowledgment in the product documentation would be */
|
||||||
|
/* appreciated but is not required. */
|
||||||
|
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||||||
|
/* be misrepresented as being the original software. */
|
||||||
|
/* 3. This notice may not be removed or altered from any source */
|
||||||
|
/* distribution. */
|
||||||
|
/* */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "cputype.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Data */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Current CPU */
|
||||||
|
CPUType CPU = CPU_6502;
|
||||||
|
|
||||||
|
|
||||||
|
|
64
src/sim65/cputype.h
Normal file
64
src/sim65/cputype.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/*****************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* cputype.h */
|
||||||
|
/* */
|
||||||
|
/* CPU type definitions */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* (C) 2002 Ullrich von Bassewitz */
|
||||||
|
/* Wacholderweg 14 */
|
||||||
|
/* D-70597 Stuttgart */
|
||||||
|
/* EMail: uz@musoftware.de */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
|
/* warranty. In no event will the authors be held liable for any damages */
|
||||||
|
/* arising from the use of this software. */
|
||||||
|
/* */
|
||||||
|
/* Permission is granted to anyone to use this software for any purpose, */
|
||||||
|
/* including commercial applications, and to alter it and redistribute it */
|
||||||
|
/* freely, subject to the following restrictions: */
|
||||||
|
/* */
|
||||||
|
/* 1. The origin of this software must not be misrepresented; you must not */
|
||||||
|
/* claim that you wrote the original software. If you use this software */
|
||||||
|
/* in a product, an acknowledgment in the product documentation would be */
|
||||||
|
/* appreciated but is not required. */
|
||||||
|
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||||||
|
/* be misrepresented as being the original software. */
|
||||||
|
/* 3. This notice may not be removed or altered from any source */
|
||||||
|
/* distribution. */
|
||||||
|
/* */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef CPUTYPE_H
|
||||||
|
#define CPUTYPE_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Data */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Supported CPUs */
|
||||||
|
typedef enum CPUType {
|
||||||
|
CPU_6502,
|
||||||
|
CPU_65C02
|
||||||
|
} CPUType;
|
||||||
|
|
||||||
|
/* Current CPU */
|
||||||
|
extern CPUType CPU;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* End of cputype.h */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
49
src/sim65/global.c
Normal file
49
src/sim65/global.c
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/*****************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* global.c */
|
||||||
|
/* */
|
||||||
|
/* Global variables for the sim65 6502 simulator */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* (C) 2002 Ullrich von Bassewitz */
|
||||||
|
/* Wacholderweg 14 */
|
||||||
|
/* D-70597 Stuttgart */
|
||||||
|
/* EMail: uz@cc65.org */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
|
/* warranty. In no event will the authors be held liable for any damages */
|
||||||
|
/* arising from the use of this software. */
|
||||||
|
/* */
|
||||||
|
/* Permission is granted to anyone to use this software for any purpose, */
|
||||||
|
/* including commercial applications, and to alter it and redistribute it */
|
||||||
|
/* freely, subject to the following restrictions: */
|
||||||
|
/* */
|
||||||
|
/* 1. The origin of this software must not be misrepresented; you must not */
|
||||||
|
/* claim that you wrote the original software. If you use this software */
|
||||||
|
/* in a product, an acknowledgment in the product documentation would be */
|
||||||
|
/* appreciated but is not required. */
|
||||||
|
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||||||
|
/* be misrepresented as being the original software. */
|
||||||
|
/* 3. This notice may not be removed or altered from any source */
|
||||||
|
/* distribution. */
|
||||||
|
/* */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "global.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Data */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
unsigned char Debug = 0; /* Debug mode */
|
||||||
|
|
||||||
|
|
||||||
|
|
57
src/sim65/global.h
Normal file
57
src/sim65/global.h
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/*****************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* global.h */
|
||||||
|
/* */
|
||||||
|
/* Global variables for the sim65 6502 simulator */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* (C) 2002 Ullrich von Bassewitz */
|
||||||
|
/* Wacholderweg 14 */
|
||||||
|
/* D-70597 Stuttgart */
|
||||||
|
/* EMail: uz@cc65.org */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
|
/* warranty. In no event will the authors be held liable for any damages */
|
||||||
|
/* arising from the use of this software. */
|
||||||
|
/* */
|
||||||
|
/* Permission is granted to anyone to use this software for any purpose, */
|
||||||
|
/* including commercial applications, and to alter it and redistribute it */
|
||||||
|
/* freely, subject to the following restrictions: */
|
||||||
|
/* */
|
||||||
|
/* 1. The origin of this software must not be misrepresented; you must not */
|
||||||
|
/* claim that you wrote the original software. If you use this software */
|
||||||
|
/* in a product, an acknowledgment in the product documentation would be */
|
||||||
|
/* appreciated but is not required. */
|
||||||
|
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||||||
|
/* be misrepresented as being the original software. */
|
||||||
|
/* 3. This notice may not be removed or altered from any source */
|
||||||
|
/* distribution. */
|
||||||
|
/* */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef GLOBAL_H
|
||||||
|
#define GLOBAL_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Data */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
extern unsigned char Debug; /* Debug mode */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* End of global.h */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
211
src/sim65/main.c
Normal file
211
src/sim65/main.c
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
/*****************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* main.c */
|
||||||
|
/* */
|
||||||
|
/* sim65 main program */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* (C) 2002 Ullrich von Bassewitz */
|
||||||
|
/* Wacholderweg 14 */
|
||||||
|
/* D-70597 Stuttgart */
|
||||||
|
/* EMail: uz@cc65.org */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
|
/* warranty. In no event will the authors be held liable for any damages */
|
||||||
|
/* arising from the use of this software. */
|
||||||
|
/* */
|
||||||
|
/* Permission is granted to anyone to use this software for any purpose, */
|
||||||
|
/* including commercial applications, and to alter it and redistribute it */
|
||||||
|
/* freely, subject to the following restrictions: */
|
||||||
|
/* */
|
||||||
|
/* 1. The origin of this software must not be misrepresented; you must not */
|
||||||
|
/* claim that you wrote the original software. If you use this software */
|
||||||
|
/* in a product, an acknowledgment in the product documentation would be */
|
||||||
|
/* appreciated but is not required. */
|
||||||
|
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||||||
|
/* be misrepresented as being the original software. */
|
||||||
|
/* 3. This notice may not be removed or altered from any source */
|
||||||
|
/* distribution. */
|
||||||
|
/* */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
/* common */
|
||||||
|
#include "abend.h"
|
||||||
|
#include "cmdline.h"
|
||||||
|
#include "print.h"
|
||||||
|
#include "version.h"
|
||||||
|
|
||||||
|
/* sim65 */
|
||||||
|
#include "cputype.h"
|
||||||
|
#include "global.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Code */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void Usage (void)
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"Usage: %s [options] file\n"
|
||||||
|
"Short options:\n"
|
||||||
|
" -V\t\t\tPrint the simulator version number\n"
|
||||||
|
" -d\t\t\tDebug mode\n"
|
||||||
|
" -h\t\t\tHelp (this text)\n"
|
||||||
|
" -v\t\t\tIncrease verbosity\n"
|
||||||
|
"\n"
|
||||||
|
"Long options:\n"
|
||||||
|
" --cpu type\t\tSet cpu type\n"
|
||||||
|
" --debug\t\tDebug mode\n"
|
||||||
|
" --help\t\tHelp (this text)\n"
|
||||||
|
" --verbose\t\tIncrease verbosity\n"
|
||||||
|
" --version\t\tPrint the simulator version number\n",
|
||||||
|
ProgName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void OptCPU (const char* Opt, const char* Arg)
|
||||||
|
/* Handle the --cpu option */
|
||||||
|
{
|
||||||
|
if (strcmp (Arg, "6502") == 0) {
|
||||||
|
CPU = CPU_6502;
|
||||||
|
} else if (strcmp (Arg, "65C02") == 0) {
|
||||||
|
CPU = CPU_65C02;
|
||||||
|
} else {
|
||||||
|
AbEnd ("Invalid argument for %s: `%s'", Opt, Arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void OptDebug (const char* Opt attribute ((unused)),
|
||||||
|
const char* Arg attribute ((unused)))
|
||||||
|
/* Simulator debug mode */
|
||||||
|
{
|
||||||
|
Debug = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void OptHelp (const char* Opt attribute ((unused)),
|
||||||
|
const char* Arg attribute ((unused)))
|
||||||
|
/* Print usage information and exit */
|
||||||
|
{
|
||||||
|
Usage ();
|
||||||
|
exit (EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void OptVerbose (const char* Opt attribute ((unused)),
|
||||||
|
const char* Arg attribute ((unused)))
|
||||||
|
/* Increase verbosity */
|
||||||
|
{
|
||||||
|
++Verbosity;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void OptVersion (const char* Opt attribute ((unused)),
|
||||||
|
const char* Arg attribute ((unused)))
|
||||||
|
/* Print the assembler version */
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"cc65 V%u.%u.%u\n",
|
||||||
|
VER_MAJOR, VER_MINOR, VER_PATCH);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main (int argc, char* argv[])
|
||||||
|
{
|
||||||
|
/* Program long options */
|
||||||
|
static const LongOpt OptTab[] = {
|
||||||
|
{ "--cpu", 1, OptCPU },
|
||||||
|
{ "--debug", 0, OptDebug },
|
||||||
|
{ "--help", 0, OptHelp },
|
||||||
|
{ "--verbose", 0, OptVerbose },
|
||||||
|
{ "--version", 0, OptVersion },
|
||||||
|
};
|
||||||
|
|
||||||
|
unsigned I;
|
||||||
|
|
||||||
|
/* Initialize the output file name */
|
||||||
|
const char* InputFile = 0;
|
||||||
|
|
||||||
|
/* Initialize the cmdline module */
|
||||||
|
InitCmdLine (&argc, &argv, "sim65");
|
||||||
|
|
||||||
|
/* Parse the command line */
|
||||||
|
I = 1;
|
||||||
|
while (I < ArgCount) {
|
||||||
|
|
||||||
|
/* Get the argument */
|
||||||
|
const char* Arg = ArgVec[I];
|
||||||
|
|
||||||
|
/* Check for an option */
|
||||||
|
if (Arg [0] == '-') {
|
||||||
|
|
||||||
|
switch (Arg [1]) {
|
||||||
|
|
||||||
|
case '-':
|
||||||
|
LongOption (&I, OptTab, sizeof(OptTab)/sizeof(OptTab[0]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'd':
|
||||||
|
OptDebug (Arg, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'h':
|
||||||
|
case '?':
|
||||||
|
OptHelp (Arg, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'v':
|
||||||
|
OptVerbose (Arg, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'V':
|
||||||
|
OptVersion (Arg, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
UnknownOption (Arg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (InputFile) {
|
||||||
|
fprintf (stderr, "additional file specs ignored\n");
|
||||||
|
} else {
|
||||||
|
InputFile = Arg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Next argument */
|
||||||
|
++I;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Did we have a file spec on the command line? */
|
||||||
|
if (InputFile == 0) {
|
||||||
|
AbEnd ("No input files");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return an apropriate exit code */
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
52
src/sim65/make/gcc.mak
Normal file
52
src/sim65/make/gcc.mak
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#
|
||||||
|
# gcc Makefile for sim65
|
||||||
|
#
|
||||||
|
|
||||||
|
# Library dir
|
||||||
|
COMMON = ../common
|
||||||
|
|
||||||
|
CFLAGS = -g -O2 -Wall -W -I$(COMMON)
|
||||||
|
CC = gcc
|
||||||
|
EBIND = emxbind
|
||||||
|
LDFLAGS =
|
||||||
|
|
||||||
|
OBJS = cpucore.o \
|
||||||
|
cputype.o \
|
||||||
|
global.o \
|
||||||
|
main.o \
|
||||||
|
memory.o
|
||||||
|
|
||||||
|
LIBS = $(COMMON)/common.a
|
||||||
|
|
||||||
|
EXECS = sim65
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
ifeq (.depend,$(wildcard .depend))
|
||||||
|
all : $(EXECS)
|
||||||
|
include .depend
|
||||||
|
else
|
||||||
|
all: depend
|
||||||
|
@$(MAKE) -f make/gcc.mak all
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sim65: $(OBJS) $(LIBS)
|
||||||
|
$(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS)
|
||||||
|
@if [ $(OS2_SHELL) ] ; then $(EBIND) $@ ; fi
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *~ core *.lst
|
||||||
|
|
||||||
|
zap: clean
|
||||||
|
rm -f *.o $(EXECS) .depend
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Make the dependencies
|
||||||
|
|
||||||
|
.PHONY: depend dep
|
||||||
|
depend dep: $(OBJS:.o=.c)
|
||||||
|
@echo "Creating dependency information"
|
||||||
|
$(CC) -I$(COMMON) -MM $^ > .depend
|
||||||
|
|
||||||
|
|
93
src/sim65/memory.c
Normal file
93
src/sim65/memory.c
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
/*****************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* memory.h */
|
||||||
|
/* */
|
||||||
|
/* Memory subsystem for the 6502 simulator */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* (C) 2002 Ullrich von Bassewitz */
|
||||||
|
/* Wacholderweg 14 */
|
||||||
|
/* D-70597 Stuttgart */
|
||||||
|
/* EMail: uz@cc65.org */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
|
/* warranty. In no event will the authors be held liable for any damages */
|
||||||
|
/* arising from the use of this software. */
|
||||||
|
/* */
|
||||||
|
/* Permission is granted to anyone to use this software for any purpose, */
|
||||||
|
/* including commercial applications, and to alter it and redistribute it */
|
||||||
|
/* freely, subject to the following restrictions: */
|
||||||
|
/* */
|
||||||
|
/* 1. The origin of this software must not be misrepresented; you must not */
|
||||||
|
/* claim that you wrote the original software. If you use this software */
|
||||||
|
/* in a product, an acknowledgment in the product documentation would be */
|
||||||
|
/* appreciated but is not required. */
|
||||||
|
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||||||
|
/* be misrepresented as being the original software. */
|
||||||
|
/* 3. This notice may not be removed or altered from any source */
|
||||||
|
/* distribution. */
|
||||||
|
/* */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* sim65 */
|
||||||
|
#include "memory.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Data */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static unsigned char RAM[0x10000];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Code */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void WriteMem (unsigned Addr, unsigned char Val)
|
||||||
|
/* Write a byte to a memory location */
|
||||||
|
{
|
||||||
|
RAM[Addr] = Val;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
unsigned char ReadMem (unsigned Addr)
|
||||||
|
/* Read a byte from a memory location */
|
||||||
|
{
|
||||||
|
return RAM[Addr];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
unsigned ReadMemW (unsigned Addr)
|
||||||
|
/* Read a word from a memory location */
|
||||||
|
{
|
||||||
|
unsigned W = ReadMem (Addr++);
|
||||||
|
return (W | (ReadMem (Addr) << 8));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
unsigned ReadZeroPageW (unsigned char Addr)
|
||||||
|
/* Read a word from the zero page. This function differs from ReadMemW in that
|
||||||
|
* the read will always be in the zero page, even in case of an address
|
||||||
|
* overflow.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
unsigned W = ReadMem (Addr++);
|
||||||
|
return (W | (ReadMem (Addr) << 8));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
75
src/sim65/memory.h
Normal file
75
src/sim65/memory.h
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
/*****************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* memory.h */
|
||||||
|
/* */
|
||||||
|
/* Memory subsystem for the 6502 simulator */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* (C) 2002 Ullrich von Bassewitz */
|
||||||
|
/* Wacholderweg 14 */
|
||||||
|
/* D-70597 Stuttgart */
|
||||||
|
/* EMail: uz@cc65.org */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
|
/* warranty. In no event will the authors be held liable for any damages */
|
||||||
|
/* arising from the use of this software. */
|
||||||
|
/* */
|
||||||
|
/* Permission is granted to anyone to use this software for any purpose, */
|
||||||
|
/* including commercial applications, and to alter it and redistribute it */
|
||||||
|
/* freely, subject to the following restrictions: */
|
||||||
|
/* */
|
||||||
|
/* 1. The origin of this software must not be misrepresented; you must not */
|
||||||
|
/* claim that you wrote the original software. If you use this software */
|
||||||
|
/* in a product, an acknowledgment in the product documentation would be */
|
||||||
|
/* appreciated but is not required. */
|
||||||
|
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||||||
|
/* be misrepresented as being the original software. */
|
||||||
|
/* 3. This notice may not be removed or altered from any source */
|
||||||
|
/* distribution. */
|
||||||
|
/* */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef MEMORY_H
|
||||||
|
#define MEMORY_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Data */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Code */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void WriteMem (unsigned Addr, unsigned char Val);
|
||||||
|
/* Write a byte to a memory location */
|
||||||
|
|
||||||
|
unsigned char ReadMem (unsigned Addr);
|
||||||
|
/* Read a byte from a memory location */
|
||||||
|
|
||||||
|
unsigned ReadMemW (unsigned Addr);
|
||||||
|
/* Read a word from a memory location */
|
||||||
|
|
||||||
|
unsigned ReadZeroPageW (unsigned char Addr);
|
||||||
|
/* Read a word from the zero page. This function differs from ReadMemW in that
|
||||||
|
* the read will always be in the zero page, even in case of an address
|
||||||
|
* overflow.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* End of memory.h */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user