From 12c2bed79ec6e28643521267f9ed3ae047265b77 Mon Sep 17 00:00:00 2001 From: antoniovillena <_@antoniovillena.es> Date: Sun, 25 Apr 2021 10:32:24 +0200 Subject: [PATCH] =?UTF-8?q?A=C3=B1ado=20fuentes=20Bit2Bin.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- firmware/Bit2Bin.c | 99 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 firmware/Bit2Bin.c diff --git a/firmware/Bit2Bin.c b/firmware/Bit2Bin.c new file mode 100644 index 0000000..8514c2d --- /dev/null +++ b/firmware/Bit2Bin.c @@ -0,0 +1,99 @@ +#include +#include + +FILE *fi, *fo; +int i, length; +unsigned char mem[0x4000]; +unsigned short j; + +int main(int argc, char *argv[]) { + if( argc==1 ) + printf("\n" + "Bit2Bin v0.05, strip .bit header and align binary to 16k, 2020-02-19\n\n" + " Bit2Bin \n\n" + " Input BIT file\n" + " Output BIN file\n\n" + "All params are mandatory\n\n"), + exit(0); + if( argc!=3 ) + printf("\nInvalid number of parameters\n"), + exit(-1); + fi= fopen(argv[1], "rb"); + if( !fi ) + printf("\nInput file not found: %s\n", argv[1]), + exit(-1); + fseek(fi, 0, SEEK_END); + i= ftell(fi); + fseek(fi, 0, SEEK_SET); + fread(mem, 1, 2, fi); + i-= (j= mem[1]|mem[0]<<8)+4; + fread(mem, 1, j+2, fi); + i-= (j= mem[j+1]|mem[j]<<8)+3; + fread(mem, 1, j+3, fi); + i-= (j= mem[j+1]|mem[j]<<8)+3; + fread(mem, 1, j+3, fi); + i-= (j= mem[j+1]|mem[j]<<8)+3; + fread(mem, 1, j+3, fi); + i-= (j= mem[j+1]|mem[j]<<8)+3; + fread(mem, 1, j+3, fi); + i-= (j= mem[j+1]|mem[j]<<8)+4; + fread(mem, 1, j+4, fi); + length= mem[j+3]|mem[j+2]<<8|mem[j+1]<<16|mem[j]<<24; + if( i!=length ) + printf("\nInvalid file length\n"), + exit(-1); + fo= fopen(argv[2], "wb+"); + if( !fo ) + printf("\nCannot create output file: %s\n", argv[2]), + exit(-1); + j= i>>14; + if( j>71 ){ + for ( i= 0; i<72; i++ ) + fread(mem, 1, 0x4000, fi), + fwrite(mem, 1, 0x4000, fo); + fclose(fo); + argv[2][strlen(argv[2])-5]++; + if(argv[2][strlen(argv[2])-5]==':') + if(strlen(argv[2])==9) + argv[2]= "CORE10.ZX3"; + else + argv[2][4]++, + argv[2][5]='0'; + fo= fopen(argv[2], "wb+"); + if( !fo ) + printf("\nCannot create output file: %s\n", argv[2]), + exit(-1); + for ( i= 0; i48 ) + for ( i= 0; i<71-j; i++ ) + fwrite(mem, 1, 0x4000, fo); + else if( j>28 ) + for ( i= 0; i<48-j; i++ ) + fwrite(mem, 1, 0x4000, fo); + else if( j>20 ) + for ( i= 0; i<28-j; i++ ) + fwrite(mem, 1, 0x4000, fo); + else + for ( i= 0; i<20-j; i++ ) + fwrite(mem, 1, 0x4000, fo); + } + printf("\nFile generated successfully\n"); +}