int sram_load_segment ( int seg ) { int a; char path[PATH_MAX + 1]; FILE *f = sram_open(seg, "rb", path); DEBUGPRINT("MEM: SRAM: loading SRAM segment %02Xh from file %s" NL, seg, path); if (!f) { ERROR_WINDOW("Cannot open file for loading SRAM segment %02Xh because of file I/O error: %s\nFile name was: %s", seg, ERRSTR(), path); return 1; } a = fread(memory + (seg << 14), 0x4000, 1, f); if (a != 1) ERROR_WINDOW("Cannot load SRAM segment %02Xh because of file I/O error: %s\nFile name was: %s", seg, ERRSTR(), path); fclose(f); return a != 1; }
int sram_save_segment ( int seg ) { int a; char path[PATH_MAX + 1]; FILE *f = sram_open(seg, "wb", path); DEBUGPRINT("MEM: SRAM: saving SRAM segment %02Xh to file %s" NL, seg, path); if (!f) { ERROR_WINDOW("Cannot create file for saving SRAM segment %02Xh because of file I/O error: %s\nFile name was: %s", seg, ERRSTR(), path); return 1; } a = fwrite(memory + (seg << 14), 0x4000, 1, f); if (a != 1) ERROR_WINDOW("Cannot save SRAM segment %02Xh because of file I/O error: %s\nFile name was: %s", seg, ERRSTR(), path); fclose(f); return a != 1; }
int main(int argc, char *argv[]) { off_t offset; uint16_t ored; uint16_t val; int i; int n; int stepsz; int write; int error; if (argc < 4) { fprintf(stderr, "Usage: sram <r/w> <n> <stepsz> [orv]\n"); exit(1); } if (argc == 5) ored = (int16_t)strtol(argv[4], NULL, 16); else ored = 0; n = atoi(argv[2]); stepsz = atoi(argv[3]); if (*argv[1] == 'w') { write = 1; printf("Write mode enabled \n"); } else { write = 0; printf("Read mode enabled \n"); } if ((error = sram_open())) { perror("sram_open"); exit(1); } printf("SRAM opened!\n"); sleep(1); for (i = 0; i < n; i++) { offset = i * (stepsz <<1); if (write) { val = (uint16_t)((i<<1) | ored); if ((error = sram_write(offset, &val, sizeof(val)))) { fprintf(stderr, "Error during sram_write\n"); exit(1); } } else { if ((error = sram_read(offset, &val, sizeof(val)))) { fprintf(stderr, "Error during sram_read\n"); exit(1); } printf("@%#lx: %hx\n", (unsigned long)offset, val); } sleep(1); } sleep(1); sram_close(); return 0; }