00001
00002 #include <stdio.h>
00003 #include <smem.h>
00004
00005 #define NAME "RAM"
00006
00007 void *ram_get(char *name, long int base, long int size)
00008 {
00009 void *ram;
00010
00011
00012 smem_remove(name);
00013
00014 if ((ram = (void *)
00015 smem_create(name, (char *) base, size, SM_READ | SM_WRITE)) == NULL)
00016 {
00017 perror("can't get physical memory");
00018 return (void *) 0;
00019 }
00020
00021 return ram;
00022 }
00023
00024 void ram_free(char *name, long int base)
00025 {
00026 smem_create("", (char *) base, (long int) 0, SM_DETACH);
00027 smem_remove(name);
00028 }
00029
00030 int main(int argc, char **argv)
00031 {
00032 int value;
00033 long int addr;
00034 void *ram;
00035 static char syntax[] = "syntax: %s <addr> <value>\n";
00036
00037 if (argc != 3)
00038 {
00039 printf(syntax, argv[0]);
00040 exit(1);
00041 }
00042
00043 if (sscanf(argv[1], "%x", &addr) != 1)
00044 {
00045 printf(syntax, argv[0]);
00046 exit(1);
00047 }
00048
00049 if (sscanf(argv[2], "%x", &value) != 1)
00050 {
00051 printf(syntax, argv[0]);
00052 exit(1);
00053 }
00054
00055
00056 ram = ram_get(NAME, addr, sizeof(int));
00057
00058
00059 *((char *) ram) = value;
00060
00061 printf("wrote %X to %X\n", (int) *((char *) ram), addr);
00062
00063 ram_free(NAME, addr);
00064
00065 return 0;
00066 }