/* * Read a file into the memory of the emulated CPU. * The following file formats are supported: * * binary images with Mostek header * Intel hex */ int load_file(char *s) { char fn[LENCMD]; BYTE fileb[5]; register char *pfn = fn; int fd; while (isspace((int)*s)) s++; while (*s != ',' && *s != '\n' && *s != '\0') *pfn++ = *s++; *pfn = '\0'; if (strlen(fn) == 0) { puts("no input file given"); return(1); } if ((fd = open(fn, O_RDONLY)) == -1) { printf("can't open file %s\n", fn); return(1); } if (*s == ',') wrk_ram = mem_base() + exatoi(++s); else wrk_ram = NULL; read(fd, (char *) fileb, 5); /* read first 5 bytes of file */ if (*fileb == (BYTE) 0xff) { /* Mostek header ? */ lseek(fd, 0l, SEEK_SET); return (load_mos(fd, fn)); } else { close(fd); return (load_hex(fn)); } }
/* * Read a file into the memory of the emulated CPU. * The following file formats are supported: * * binary images with Mostek header * Intel hex */ int load_file(char *s) { char fn[LENCMD]; BYTE fileb[5]; register char *pfn = fn; // int fd; FSFILE *fd; if (!FSInit()) printf("Can't Init FS\n\r"); while (isspace((int) *s)) s++; while (*s != ',' && *s != '\n' && *s != '\0' && *s != '\r') *pfn++ = *s++; *pfn = '\0'; if (strlen(fn) == 0) { puts("no input file given"); return (1); } if ((fd = FSfopen(fn, "R")) == NULL) { printf("can't open file %s\n", fn); return (1); } if (*s == ',') wrk_ram = ram +exatoi(++s); else wrk_ram = NULL; FSfread((char *) fileb, 5, 1, fd); /* read first 5 bytes of file */ if (*fileb == (BYTE) 0xff) { /* Mostek header ? */ FSfseek(fd, 0l, 0); return (load_mos(fd, fn)); } else { close(fd); return (load_hex(fn)); } }
int trs_load_rom(char *filename) { FILE *program; int c; if((program = fopen(filename, "rb")) == NULL) { return(-1); } c = getc(program); if (c == ':') { /* Assume Intel hex format */ rewind(program); trs_rom_size = load_hex(program); fclose(program); if (trs_rom_size == -1) return(-1); else return(0); } else if (c == 1 || c == 5) { /* Assume MODELA/III file */ int res; extern Uchar *rom; /*!! fixme*/ Uchar loadmap[Z80_ADDRESS_LIMIT]; rewind(program); res = load_cmd(program, rom, loadmap, 0, NULL, -1, NULL, NULL, 1); if (res == LOAD_CMD_OK) { trs_rom_size = Z80_ADDRESS_LIMIT; while (trs_rom_size > 0) { if (loadmap[--trs_rom_size] != 0) { trs_rom_size++; break; } } fclose(program); return(0); } else { /* Guess it wasn't one */ rewind(program); c = getc(program); } } trs_rom_size = 0; while (c != EOF) { mem_write_rom(trs_rom_size++, c); c = getc(program); } return(0); }
u32 load_file(const char *fn, u8 *buf, u32 bufsize) { FILE *f = fopen(fn, "r"); if (f == 0) { return 0; } char s[100]; fgets(s, sizeof(s), f); fclose(f); u32 r = 0; int n; if (sscanf(s, ":%02x", &n) == 1 && strcspn(s, "\r\n") == 11+2*n) { r = load_hex(fn, buf, bufsize); if (r == 0) { perror(fn); exit(1); } } else { r = load_binary(fn, buf, bufsize); } return r; }