int magicdesk_snapshot_read_module(snapshot_t *s) { BYTE vmajor, vminor; snapshot_module_t *m; m = snapshot_module_open(s, SNAP_MODULE_NAME, &vmajor, &vminor); if (m == NULL) { return -1; } if ((vmajor != CART_DUMP_VER_MAJOR) || (vminor != CART_DUMP_VER_MINOR)) { snapshot_module_close(m); return -1; } if (0 || (SMR_B_INT(m, &currbank) < 0) || (SMR_BA(m, roml_banks, 0x2000 * 64) < 0)) { snapshot_module_close(m); return -1; } snapshot_module_close(m); return magicdesk_common_attach(); }
int magicdesk_snapshot_read_module(snapshot_t *s) { BYTE vmajor, vminor; snapshot_module_t *m; m = snapshot_module_open(s, SNAP_MODULE_NAME, &vmajor, &vminor); if (m == NULL) { return -1; } if ((vmajor != CART_DUMP_VER_MAJOR) || (vminor != CART_DUMP_VER_MINOR)) { snapshot_module_close(m); return -1; } if (0 || (SMR_B(m, ®val) < 0) || (SMR_BA(m, roml_banks, 0x2000 * MAXBANKS) < 0)) { snapshot_module_close(m); return -1; } snapshot_module_close(m); if (magicdesk_common_attach() == -1) { return -1; } magicdesk_io1_store(0xde00, regval); return 0; }
int magicdesk_bin_attach(const char *filename, BYTE *rawcart) { if (util_file_load(filename, rawcart, 0x20000, UTIL_FILE_LOAD_SKIP_ADDRESS) < 0) { if (util_file_load(filename, rawcart, 0x10000, UTIL_FILE_LOAD_SKIP_ADDRESS) < 0) { if (util_file_load(filename, rawcart, 0x8000, UTIL_FILE_LOAD_SKIP_ADDRESS) < 0) { return -1; } } } return magicdesk_common_attach(); }
int magicdesk_crt_attach(FILE *fd, BYTE *rawcart) { crt_chip_header_t chip; while (1) { if (crt_read_chip_header(&chip, fd)) { break; } if ((chip.bank >= MAXBANKS) || ((chip.start != 0x8000) && (chip.start != 0xa000)) || (chip.size != 0x2000)) { return -1; } if (crt_read_chip(rawcart, chip.bank << 13, &chip, fd)) { return -1; } } return magicdesk_common_attach(); }
int magicdesk_crt_attach(FILE *fd, BYTE *rawcart) { BYTE chipheader[0x10]; while (1) { if (fread(chipheader, 0x10, 1, fd) < 1) { break; } if (chipheader[0xb] >= 64 || (chipheader[0xc] != 0x80 && chipheader[0xc] != 0xa0)) { return -1; } if (fread(&rawcart[chipheader[0xb] << 13], 0x2000, 1, fd) < 1) { return -1; } } return magicdesk_common_attach(); }
int magicdesk_crt_attach(FILE *fd, uint8_t *rawcart) { crt_chip_header_t chip; int lastbank = 0; while (1) { if (crt_read_chip_header(&chip, fd)) { break; } if ((chip.bank >= MAXBANKS) || ((chip.start != 0x8000) && (chip.start != 0xa000)) || (chip.size != 0x2000)) { return -1; } if (crt_read_chip(rawcart, chip.bank << 13, &chip, fd)) { return -1; } if (chip.bank > lastbank) { lastbank = chip.bank; } } if (lastbank >= 128) { /* more than 128 banks does not work */ return -1; } else if (lastbank >= 64) { /* min 65, max 128 banks */ bankmask = 0x7f; } else if (lastbank >= 32) { /* min 33, max 64 banks */ bankmask = 0x3f; } else if (lastbank >= 16) { /* min 17, max 32 banks */ bankmask = 0x1f; } else if (lastbank >= 8) { /* min 9, max 16 banks */ bankmask = 0x0f; } else if (lastbank >= 4) { /* min 5, max 8 banks */ bankmask = 0x07; } else { /* max 4 banks */ bankmask = 0x03; } return magicdesk_common_attach(); }
int magicdesk_bin_attach(const char *filename, uint8_t *rawcart) { bankmask = 0x7f; if (util_file_load(filename, rawcart, 0x100000, UTIL_FILE_LOAD_SKIP_ADDRESS) < 0) { bankmask = 0x3f; if (util_file_load(filename, rawcart, 0x80000, UTIL_FILE_LOAD_SKIP_ADDRESS) < 0) { bankmask = 0x1f; if (util_file_load(filename, rawcart, 0x40000, UTIL_FILE_LOAD_SKIP_ADDRESS) < 0) { bankmask = 0x0f; if (util_file_load(filename, rawcart, 0x20000, UTIL_FILE_LOAD_SKIP_ADDRESS) < 0) { bankmask = 0x07; if (util_file_load(filename, rawcart, 0x10000, UTIL_FILE_LOAD_SKIP_ADDRESS) < 0) { bankmask = 0x03; if (util_file_load(filename, rawcart, 0x8000, UTIL_FILE_LOAD_SKIP_ADDRESS) < 0) { return -1; } } } } } } return magicdesk_common_attach(); }