From 4ff18c37f4eace7f7e51675d64bb3603eb0a6eee Mon Sep 17 00:00:00 2001 From: Ivan Tatarinov Date: Sun, 25 Apr 2021 14:12:04 +0300 Subject: [PATCH] sdk: added `Bit2Bin` tool --- firmware/Bit2Bin.exe | Bin 27676 -> 0 bytes sdk/bin/.gitignore | 1 + sdk/bin/Bit2Bin.exe | Bin 0 -> 15360 bytes sdk/bin/Bit2Bin.exe.license | 11 ++ {firmware => sdk/src/tools}/Bit2Bin.c | 247 +++++++++++++++----------- 5 files changed, 160 insertions(+), 99 deletions(-) delete mode 100644 firmware/Bit2Bin.exe create mode 100755 sdk/bin/Bit2Bin.exe create mode 100644 sdk/bin/Bit2Bin.exe.license rename {firmware => sdk/src/tools}/Bit2Bin.c (51%) diff --git a/firmware/Bit2Bin.exe b/firmware/Bit2Bin.exe deleted file mode 100644 index 979b3952ad65e1d1a47c33b5b1cd4c678b017c5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27676 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 literal 0 HcmV?d00001 diff --git a/sdk/bin/Bit2Bin.exe.license b/sdk/bin/Bit2Bin.exe.license new file mode 100644 index 0000000..77e1554 --- /dev/null +++ b/sdk/bin/Bit2Bin.exe.license @@ -0,0 +1,11 @@ +SPDX-FileName: Bit2Bin.exe + +SPDX-FileType: BINARY + +SPDX-FileChecksum: SHA1: f1484d968816b72f7c1a246e11a468c175e8822a + +SPDX-FileCopyrightText: Copyright (C) 2019-2021 Antonio Villena + +SPDX-License-Identifier: GPL-3.0-only + +SPDX-FileComment: Bit2Bin version 0.05 (2020-02-19) - strip .bit header and align binary to 16K. diff --git a/firmware/Bit2Bin.c b/sdk/src/tools/Bit2Bin.c similarity index 51% rename from firmware/Bit2Bin.c rename to sdk/src/tools/Bit2Bin.c index 8514c2d..e91f162 100644 --- a/firmware/Bit2Bin.c +++ b/sdk/src/tools/Bit2Bin.c @@ -1,99 +1,148 @@ -#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"); -} +/* + * Bit2Bin - strip .bit header and align binary to 16K. + * + * Copyright (C) 2019-2021 Antonio Villena + * + * 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 + * the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * SPDX-FileCopyrightText: Copyright (C) 2019-2021 Antonio Villena + * + * SPDX-License-Identifier: GPL-3.0-only + */ + +#include +#include +#include + +#include +#include +#include + +#define PROGRAM "Bit2Bin" +#define DESCRIPTION "strip .bit header and align binary to 16K." +#define VERSION "0.05 (2020-02-19)" +#define COPYRIGHT "Copyright (C) 2019-2021 Antonio Villena" +#define LICENSE \ +"This program is free software: you can redistribute it and/or modify\n" \ +"it under the terms of the GNU General Public License as published by\n" \ +"the Free Software Foundation, version 3." +#define HOMEPAGE "https://github.com/zxdos/zxuno/" + +FILE *fi, *fo; +int i, length; +unsigned char mem[0x4000]; +unsigned short j; + +void show_help() { + printf( + PROGRAM " version " VERSION " - " DESCRIPTION "\n" + COPYRIGHT "\n" + LICENSE "\n" + "Home page: " HOMEPAGE "\n" + "\n" + "Usage:\n" + " " PROGRAM " \n" + "\n" + " Input BIT file\n" + " Output BIN file\n" + "\n" + "All parameters are mandatory.\n" + ); +} + +int main(int argc, char *argv[]) { + if( argc==1 ) + show_help(), + exit(0); + if( argc!=3 ) + printf("Invalid number of parameters\n"), + exit(-1); + fi= fopen(argv[1], "rb"); + if( !fi ) + printf("Input 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("Invalid file length\n"), + exit(-1); + fo= fopen(argv[2], "wb+"); + if( !fo ) + printf("Cannot 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("Cannot 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("File `%s' successfully created\n", argv[2]); +}