00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
#include <config.h>
00027
00028
#include <stdio.h>
00029
#include <stdlib.h>
00030
00031
#include "avrerror.h"
00032
#include "avrmalloc.h"
00033
#include "avrclass.h"
00034
#include "utils.h"
00035
#include "callback.h"
00036
#include "op_names.h"
00037
00038
#include "storage.h"
00039
#include "flash.h"
00040
00041
#include "vdevs.h"
00042
#include "memory.h"
00043
#include "stack.h"
00044
#include "register.h"
00045
#include "sram.h"
00046
#include "eeprom.h"
00047
#include "timers.h"
00048
#include "ports.h"
00049
00050
#include "avrcore.h"
00051
00052
#include "display.h"
00053
00054
static uint8_t sram_read (VDevice *dev,
int addr);
00055
static void sram_write (VDevice *dev,
int addr, uint8_t val);
00056
static void sram_reset (VDevice *dev);
00057
static char *sram_name (VDevice *dev,
int addr);
00058
00059 SRAM *
00060 sram_new (
int base,
int size)
00061 {
00062 SRAM *sram;
00063
00064 sram =
avr_new (SRAM, 1);
00065 sram_construct (sram, base, size);
00066
class_overload_destroy ((AvrClass *)sram, sram_destroy);
00067
00068
return sram;
00069 }
00070
00071
void
00072 sram_construct (SRAM *sram,
int base,
int size)
00073 {
00074
char *name =
"SRAM";
00075
00076
if (sram == NULL)
00077
avr_error (
"passed null ptr");
00078
00079 sram->stor = storage_new (base, size);
00080
vdev_construct ((VDevice *)sram, name, base, size, sram_read, sram_write,
00081 sram_reset, sram_name);
00082 }
00083
00084
void
00085 sram_destroy (
void *sram)
00086 {
00087 SRAM *_sram = (SRAM *)sram;
00088
00089
if (sram == NULL)
00090
return;
00091
00092
class_unref ((AvrClass *)_sram->stor);
00093
00094
vdev_destroy (sram);
00095 }
00096
00097
int
00098 sram_get_size (SRAM *sram)
00099 {
00100
return storage_get_size (sram->stor);
00101 }
00102
00103
int
00104 sram_get_base (SRAM *sram)
00105 {
00106
return storage_get_base (sram->stor);
00107 }
00108
00109
static uint8_t
00110 sram_read (VDevice *dev,
int addr)
00111 {
00112 SRAM *sram = (SRAM *)dev;
00113
00114
return storage_readb (sram->stor, addr);
00115 }
00116
00117
static void
00118 sram_write (VDevice *dev,
int addr, uint8_t val)
00119 {
00120 SRAM *sram = (SRAM *)dev;
00121
00122
display_sram (addr, 1, &val);
00123
00124 storage_writeb (sram->stor, addr, val);
00125 }
00126
00127
static void
00128 sram_reset (VDevice *dev)
00129 {
00130
return;
00131 }
00132
00133
static char *
00134 sram_name (VDevice *dev,
int addr)
00135 {
00136
return NULL;
00137 }