diff options
Diffstat (limited to 'fileIO.c')
-rw-r--r-- | fileIO.c | 49 |
1 files changed, 25 insertions, 24 deletions
@@ -1,6 +1,6 @@ /* * fileIO.c - file read and write - * Copyright (C) 2010-2021 Alberto Maccioni + * Copyright (C) 2010-2025 Alberto Maccioni * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,6 +25,7 @@ #include "progP18.h" #include "progP24.h" #include "progAVR.h" +#include "deviceRW.h" unsigned int htoi(const char *hex, int length) { @@ -40,14 +41,14 @@ unsigned int htoi(const char *hex, int length) return v; } -void Save(char* dev,char* savefile) +void Save(int devType,char* savefile) { FILE* f=fopen(savefile,"w"); if(!f) return; char str[512],str1[512]=""; int i,sum=0,count=0,ext=0,s,base; //**************** 10-16F ******************************************* - if(!strncmp(dev,"10",2)||!strncmp(dev,"12",2)||!strncmp(dev,"16",2)){ + if(devType==PIC12||devType==PIC16){ int x=0x3fff,addr; //if(!strncmp(dev,"16",2)||!strncmp(dev,"12F6",4)) x=0x3fff; fprintf(f,":020000040000FA\n"); //extended address=0 @@ -102,7 +103,7 @@ void Save(char* dev,char* savefile) fprintf(f,":00000001FF\n"); } //**************** 18F ******************************************* - else if(!strncmp(dev,"18F",3)){ + else if(devType==PIC18){ fprintf(f,":020000040000FA\n"); //extended address=0 for(i=0;i<size&&memCODE[i]==0xff;i++); //remove leading 0xFF for(;i<size;i++){ @@ -197,7 +198,7 @@ void Save(char* dev,char* savefile) fprintf(f,":00000001FF\n"); } //**************** 24F ******************************************* - else if((!strncmp(dev,"24F",3)||!strncmp(dev,"24H",3)||!strncmp(dev,"24E",3)||!strncmp(dev,"30F",3)||!strncmp(dev,"33F",3)||!strncmp(dev,"33E",3))){ + else if(devType==PIC24){ int valid; fprintf(f,":020000040000FA\n"); //extended address=0 int sum=0,count=0,s,word; @@ -269,7 +270,7 @@ void Save(char* dev,char* savefile) fprintf(f,":00000001FF\n"); } //**************** ATxxxx ******************************************* - else if(!strncmp(dev,"AT",2)){ + else if(devType==AVR){ fprintf(f,":020000040000FA\n"); //extended address=0 for(i=0;i<size&&memCODE[i]==0xff;i++); //remove leading 0xFF for(;i<size;i++){ @@ -299,8 +300,7 @@ void Save(char* dev,char* savefile) fprintf(f,":00000001FF\n"); } //**************** 24xxx / 93xxx / 25xxx / 95xxx / DSxxxx ******************************************* - else if(!strncmp(dev,"24",2)||!strncmp(dev,"93",2)||!strncmp(dev,"25",2)||!strncmp(dev,"95",2)||\ - !strncmp(dev,"DS",2)||!strncmp(dev,"11",2)){ + else if(devType==I2CEE||devType==SPIEE||devType==UWEE||devType==OWEE||devType==UNIOEE){ if(strstr(savefile,".bin")||strstr(savefile,".BIN")){ #ifdef _WIN32 //brain-damaged op. systems need this to avoid messing with some bytes @@ -340,11 +340,11 @@ void Save(char* dev,char* savefile) if(f) fclose(f); } -void SaveEE(char* dev,char* savefile){ +void SaveEE(int devType,char* savefile){ FILE* f=fopen(savefile,"w"); if(!f) return; //**************** ATMEL ******************************************* - if(!strncmp(dev,"AT",2)){ + else if(devType==AVR){ char str[512],str1[512]=""; int i,base; fprintf(f,":020000040000FA\n"); //extended address=0 @@ -374,14 +374,14 @@ void SaveEE(char* dev,char* savefile){ if(f) fclose(f); } -int Load(char*dev,char*loadfile){ +int Load(int devType,char*loadfile){ int i,input_address=0,ext_addr=0,sum,valid; char line[256]; FILE* f=fopen(loadfile,"r"); if(!f) return -1; - PrintMessage1("%s :\r\n",loadfile); + PrintMessage2("[%d] %s :\r\n",devType,loadfile); //**************** 10-16F ******************************************* - if(!strncmp(dev,"10",2)||!strncmp(dev,"12",2)||!strncmp(dev,"16",2)){ + if(devType==PIC12||devType==PIC16){ unsigned char buffer[0x20000],bufferEE[0x1000]; int sizeM=0; memset(buffer,0xFF,sizeof(buffer)); @@ -451,7 +451,7 @@ int Load(char*dev,char*loadfile){ PrintMessage("\r\n"); } //**************** 18F ******************************************* - else if(!strncmp(dev,"18F",3)){ + else if(devType==PIC18){ unsigned char buffer[0x30000],bufferEE[0x1000]; int sizeM; memset(buffer,0xFF,sizeof(buffer)); @@ -487,7 +487,7 @@ int Load(char*dev,char*loadfile){ memID[input_address+i]=htoi(line+9+i*2,2); } } - else if(ext_addr==0x30&&input_address<14){ //CONFIG: 0x300000 + else if(ext_addr==0x30&&input_address<32){ //CONFIG: 0x300000 for (i=0;i<hex_count;i++){ memCONFIG[input_address+i]=htoi(line+9+i*2,2); } @@ -521,9 +521,11 @@ int Load(char*dev,char*loadfile){ PrintMessage(strings[S_IDMem]); //"ID memory:\r\n" for(i=0;i<8;i+=2) PrintMessage4("ID%d: 0x%02X ID%d: 0x%02X\r\n",i,memID[i],i+1,memID[i+1]); PrintMessage(strings[S_ConfigMem]); //"CONFIG memory:\r\n" - for(i=0;i<7;i++){ - PrintMessage2(strings[S_ConfigWordH],i+1,memCONFIG[i*2+1]); //"CONFIG%dH: 0x%02X\t" - PrintMessage2(strings[S_ConfigWordL],i+1,memCONFIG[i*2]); //"CONFIG%dL: 0x%02X\r\n" + for(i=0;i<12;i++){ + PrintMessage2("[0x%06X] 0x%02X\r\n",0x300000+i,memCONFIG[i]); + } + for(;i<32;i++){ //only not empty locations + if(memCONFIG[i]!=0xFF) PrintMessage2("[0x%06X] 0x%02X\r\n",0x300000+i,memCONFIG[i]); } PrintMessage(strings[S_CodeMem]); //"\r\nCODE memory:\r\n" DisplayCODE18F(size); @@ -531,7 +533,7 @@ int Load(char*dev,char*loadfile){ PrintMessage("\r\n"); } //**************** 24F ******************************************* - else if(!strncmp(dev,"24F",3)||!strncmp(dev,"24H",3)||!strncmp(dev,"24E",3)||!strncmp(dev,"30F",3)||!strncmp(dev,"33F",3)||!strncmp(dev,"33E",3)){ + else if(devType==PIC24){ unsigned char *buffer,bufferEE[0x2000]; int d; buffer=(unsigned char*)malloc(0x100000); @@ -621,7 +623,7 @@ int Load(char*dev,char*loadfile){ PrintMessage("\r\n"); } //**************** ATxxxx ******************************************* - else if(!strncmp(dev,"AT",2)){ + else if(devType==AVR){ unsigned char buffer[0x30000]; memset(buffer,0xFF,sizeof(buffer)); for(;fgets(line,256,f);){ @@ -666,8 +668,7 @@ int Load(char*dev,char*loadfile){ PrintMessage("\r\n"); } //**************** 24xxx / 93xxx / 25xxx / 95xxx / DSxxxx /11xxx ******************************* - else if(!strncmp(dev,"24",2)||!strncmp(dev,"93",2)||!strncmp(dev,"25",2)||!strncmp(dev,"95",2)||\ - !strncmp(dev,"DS",2)||!strncmp(dev,"11",2)){ + else if(devType==I2CEE||devType==SPIEE||devType==UWEE||devType==OWEE||devType==UNIOEE){ if(strstr(loadfile,".bin")||strstr(loadfile,".BIN")){ #ifdef _WIN32 //brain-damaged op. systems need this to avoid messing with some bytes @@ -743,12 +744,12 @@ int Load(char*dev,char*loadfile){ return 0; } -void LoadEE(char*dev,char*loadfile){ +void LoadEE(int devType,char*loadfile){ FILE* f=fopen(loadfile,"r"); if(!f) return; int i; //**************** ATMEL ******************************************* - if(!strncmp(dev,"AT",2)){ + if(devType==AVR){ char line[256]; int input_address=0,ext_addr=0; unsigned char bufferEE[0x1000]; |