From f41c186d887fa4b71cd3b1c9a2df9e458bd59f92 Mon Sep 17 00:00:00 2001 From: aap Date: Fri, 15 Apr 2016 01:19:00 +0200 Subject: [PATCH] memory files --- main.c | 1 + mem | 513 +-------------------------------------------------------- mem.c | 41 +++-- pdp6.h | 4 + 4 files changed, 36 insertions(+), 523 deletions(-) diff --git a/main.c b/main.c index 1af4d5c..51470ef 100644 --- a/main.c +++ b/main.c @@ -775,6 +775,7 @@ error: mbev->x, mbev->y); break; case SDL_QUIT: + dumpmem(); SDL_Quit(); return 0; } diff --git a/mem b/mem index 44b7f92..880419e 100644 --- a/mem +++ b/mem @@ -1,515 +1,4 @@ -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 +:1000 240040000005 240040777773 201040001234 diff --git a/mem.c b/mem.c index dd51d36..e00235d 100644 --- a/mem.c +++ b/mem.c @@ -1,4 +1,5 @@ #include "pdp6.h" +#include word memory[256*1024]; //hword maxmem = 256*1024; @@ -8,30 +9,48 @@ word membus0, membus1; word *hold; void -initfmem(void) +readmem(char *file, word *mem, word size) { FILE *f; - word w; + char buf[100], *s; hword a; - if(f = fopen("fmem", "r"), f == NULL) + if(f = fopen(file, "r"), f == nil) return; - for(a = 0; a < 16 && fscanf(f, "%lo", &w) != EOF; a++) - fmem[a] = w; + a = 0; + while(s = fgets(buf, 100, f)){ + while(*s){ + if(*s == ':') + a = strtol(s+1, &s, 8); + else if('0' <= *s && *s <= '7' && + a < size) + mem[a++] = strtol(s, &s, 8); + else + s++; + } + } fclose(f); } void initmem(void) { - FILE *f; - word w; + readmem("mem", memory, maxmem); + readmem("fmem", fmem, 16); +} + +void +dumpmem(void) +{ hword a; - if(f = fopen("mem", "r"), f == NULL) + FILE *f; + + if(f = fopen("memdump", "w"), f == nil) return; - for(a = 0; a < maxmem && fscanf(f, "%lo", &w) != EOF; a++) - memory[a] = w; + for(a = 0; a < 16; a++) + fprint(f, ":%02o %012llo\n", a, fmem[a]); + for(a = 0; a < maxmem; a++) + fprint(f, ":%06o %012llo\n", a, memory[a]); fclose(f); - initfmem(); } /* When a cycle is requested we acknowledge the address diff --git a/pdp6.h b/pdp6.h index 2c43ba5..eb1fe27 100644 --- a/pdp6.h +++ b/pdp6.h @@ -4,6 +4,9 @@ #include #define nelem(a) (sizeof(a)/sizeof(a[0])) +#define nil NULL +#define print printf +#define fprint fprintf typedef uint64_t word; typedef uint32_t hword; @@ -188,6 +191,7 @@ void nextpulse(Apr *apr, Pulse *p); void *aprmain(void *p); void initmem(void); +void dumpmem(void); void wakemem(void); // 7-2, 7-10 enum {