summaryrefslogtreecommitdiffstats
path: root/fileIO.c
diff options
context:
space:
mode:
Diffstat (limited to 'fileIO.c')
-rw-r--r--fileIO.c49
1 files changed, 25 insertions, 24 deletions
diff --git a/fileIO.c b/fileIO.c
index 30da4b0..8ac79ca 100644
--- a/fileIO.c
+++ b/fileIO.c
@@ -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];