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
00058 SRAM *
00059 sram_new (int base, int size)
00060 {
00061 SRAM *sram;
00062
00063 sram = avr_new (SRAM, 1);
00064 sram_construct (sram, base, size);
00065 class_overload_destroy ((AvrClass *)sram, sram_destroy);
00066
00067 return sram;
00068 }
00069
00070 void
00071 sram_construct (SRAM *sram, int base, int size)
00072 {
00073 if (sram == NULL)
00074 avr_error ("passed null ptr");
00075
00076 sram->stor = storage_new (base, size);
00077 vdev_construct ((VDevice *)sram, sram_read, sram_write, sram_reset,
00078 vdev_def_AddAddr);
00079 }
00080
00081 void
00082 sram_destroy (void *sram)
00083 {
00084 SRAM *_sram = (SRAM *)sram;
00085
00086 if (sram == NULL)
00087 return;
00088
00089 class_unref ((AvrClass *)_sram->stor);
00090
00091 vdev_destroy (sram);
00092 }
00093
00094 int
00095 sram_get_size (SRAM *sram)
00096 {
00097 return storage_get_size (sram->stor);
00098 }
00099
00100 int
00101 sram_get_base (SRAM *sram)
00102 {
00103 return storage_get_base (sram->stor);
00104 }
00105
00106 static uint8_t
00107 sram_read (VDevice *dev, int addr)
00108 {
00109 SRAM *sram = (SRAM *)dev;
00110
00111 return storage_readb (sram->stor, addr);
00112 }
00113
00114 static void
00115 sram_write (VDevice *dev, int addr, uint8_t val)
00116 {
00117 SRAM *sram = (SRAM *)dev;
00118
00119 display_sram (addr, 1, &val);
00120
00121 storage_writeb (sram->stor, addr, val);
00122 }
00123
00124 static void
00125 sram_reset (VDevice *dev)
00126 {
00127 return;
00128 }