| 760 | } |
| 761 | |
| 762 | int FDSLoad(const char *name, FCEUFILE *fp) { |
| 763 | FILE *zp; |
| 764 | int x; |
| 765 | |
| 766 | // try to load FDS image first |
| 767 | FreeFDSMemory(); |
| 768 | int load_result = SubLoad(fp); |
| 769 | switch (load_result) |
| 770 | { |
| 771 | case 1: |
| 772 | FreeFDSMemory(); |
| 773 | return LOADER_INVALID_FORMAT; |
| 774 | case 2: |
| 775 | FreeFDSMemory(); |
| 776 | FCEU_PrintError("Unable to allocate memory."); |
| 777 | return LOADER_HANDLED_ERROR; |
| 778 | } |
| 779 | |
| 780 | // load FDS BIOS next |
| 781 | char *fn = strdup(FCEU_MakeFName(FCEUMKF_FDSROM, 0, 0).c_str()); |
| 782 | |
| 783 | if (!(zp = FCEUD_UTF8fopen(fn, "rb"))) { |
| 784 | FCEU_PrintError("FDS BIOS ROM image missing: %s", FCEU_MakeFName(FCEUMKF_FDSROM, 0, 0).c_str()); |
| 785 | free(fn); |
| 786 | FreeFDSMemory(); |
| 787 | return LOADER_HANDLED_ERROR; |
| 788 | } |
| 789 | free(fn); |
| 790 | |
| 791 | fseek(zp, 0L, SEEK_END); |
| 792 | if (ftell(zp) != 8192) { |
| 793 | fclose(zp); |
| 794 | FreeFDSMemory(); |
| 795 | FCEU_PrintError("FDS BIOS ROM image incompatible: %s", FCEU_MakeFName(FCEUMKF_FDSROM, 0, 0).c_str()); |
| 796 | return LOADER_HANDLED_ERROR; |
| 797 | } |
| 798 | fseek(zp, 0L, SEEK_SET); |
| 799 | |
| 800 | ResetCartMapping(); |
| 801 | |
| 802 | if(FDSBIOS) |
| 803 | free(FDSBIOS); |
| 804 | FDSBIOS = NULL; |
| 805 | if(FDSRAM) |
| 806 | free(FDSRAM); |
| 807 | FDSRAM = NULL; |
| 808 | if(CHRRAM) |
| 809 | free(CHRRAM); |
| 810 | CHRRAM = NULL; |
| 811 | |
| 812 | FDSBIOSsize = 8192; |
| 813 | FDSBIOS = (uint8*)FCEU_gmalloc(FDSBIOSsize); |
| 814 | SetupCartPRGMapping(0, FDSBIOS, FDSBIOSsize, 0); |
| 815 | |
| 816 | if (fread(FDSBIOS, 1, FDSBIOSsize, zp) != FDSBIOSsize) { |
| 817 | if(FDSBIOS) |
| 818 | free(FDSBIOS); |
| 819 | FDSBIOS = NULL; |
no test coverage detected