From 54370587d35dc637f31562b440d04541ec31bebb Mon Sep 17 00:00:00 2001 From: Ivan Tatarinov Date: Tue, 13 Apr 2021 12:26:12 +0300 Subject: [PATCH] + sdk: added MinGW build target + sdk: added `fcut`, `fpad`, `fpoke` tools * sdk: updated `zx7b` tool * sdk: updated `README.md` - hardware: removed old binaries of `fcut` tool * updated some .bat-scripts to use SDK * updated some copyright and licensing information --- firmware/fcut.c.url | 1 - firmware/generaflash_multi.bat | 1 + hardware/kartusho/amstrad/fcut.exe | Bin 44572 -> 0 bytes hardware/kartusho/roms/fcut.exe | Bin 44572 -> 0 bytes hardware/kartusho/snapshots/fcut.exe | Bin 44572 -> 0 bytes modflash/make.bat | 2 + sdk/Makefile | 52 +++++++-- sdk/README.md | 48 +++++++- sdk/bin/.gitignore | 7 ++ sdk/bin/fcut.exe | Bin 0 -> 13312 bytes sdk/bin/fcut.exe.license | 11 ++ sdk/bin/fpad.exe | Bin 0 -> 12800 bytes sdk/bin/fpad.exe.license | 11 ++ sdk/bin/fpoke.exe | Bin 0 -> 14848 bytes sdk/bin/fpoke.exe.license | 11 ++ sdk/bin/zx7b.exe | Bin 73274 -> 15360 bytes sdk/bin/zx7b.exe.license | 13 ++- sdk/common.mk | 18 ++- sdk/src/.gitignore | 4 + sdk/src/Makefile | 84 +++++++++++--- sdk/src/sjasmplus.mk | 45 ++++++-- sdk/src/tools/.gitignore | 10 ++ sdk/src/tools/Makefile | 46 ++++++++ sdk/src/tools/fcut.c | 96 ++++++++++++++++ sdk/src/tools/fpad.c | 74 ++++++++++++ sdk/src/tools/fpoke.c | 164 +++++++++++++++++++++++++++ sdk/src/tools/tools.url | 6 + sdk/src/zx7b/.gitignore | 4 + sdk/src/zx7b/Makefile | 25 ++-- sdk/src/zx7b/zx7b.c | 45 ++++++-- 30 files changed, 706 insertions(+), 72 deletions(-) delete mode 100644 firmware/fcut.c.url delete mode 100644 hardware/kartusho/amstrad/fcut.exe delete mode 100644 hardware/kartusho/roms/fcut.exe delete mode 100644 hardware/kartusho/snapshots/fcut.exe create mode 100644 sdk/bin/fcut.exe create mode 100644 sdk/bin/fcut.exe.license create mode 100644 sdk/bin/fpad.exe create mode 100644 sdk/bin/fpad.exe.license create mode 100644 sdk/bin/fpoke.exe create mode 100644 sdk/bin/fpoke.exe.license create mode 100644 sdk/src/tools/.gitignore create mode 100644 sdk/src/tools/Makefile create mode 100644 sdk/src/tools/fcut.c create mode 100644 sdk/src/tools/fpad.c create mode 100644 sdk/src/tools/fpoke.c create mode 100644 sdk/src/tools/tools.url diff --git a/firmware/fcut.c.url b/firmware/fcut.c.url deleted file mode 100644 index 5a813a4..0000000 --- a/firmware/fcut.c.url +++ /dev/null @@ -1 +0,0 @@ -https://sourceforge.net/p/emuscriptoria/code/HEAD/tree/desprot/fcut.c \ No newline at end of file diff --git a/firmware/generaflash_multi.bat b/firmware/generaflash_multi.bat index e627170..20b9360 100644 --- a/firmware/generaflash_multi.bat +++ b/firmware/generaflash_multi.bat @@ -1,3 +1,4 @@ +@call ..\sdk\setvars.bat set output=\Google Drive\Proyecto ZX-Uno\cores_%2\ echo define version %1 > version.asm call make.bat diff --git a/hardware/kartusho/amstrad/fcut.exe b/hardware/kartusho/amstrad/fcut.exe deleted file mode 100644 index 4a466ae42a1f33eeff9dcc284484fac666c06635..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44572 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 LJm>D42D-lhmKtP$ diff --git a/hardware/kartusho/snapshots/fcut.exe b/hardware/kartusho/snapshots/fcut.exe deleted file mode 100644 index 731602281f7b90da5b66300fc774ce8ff0728f89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44572 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 LJm>D42D-lhmKtP$ diff --git a/modflash/make.bat b/modflash/make.bat index 89304dc..18223a3 100644 --- a/modflash/make.bat +++ b/modflash/make.bat @@ -1,6 +1,8 @@ @rem SPDX-FileCopyrightText: 2019 Antonio Villena <_@antoniovillena.es> @rem @rem SPDX-FileContributor: 2021 Ivan Tatarinov +@rem +@rem SPDX-License-Identifier: GPL-3.0-only copy /Y FLASHempty.ZX1 FLASH.ZX1 call addroms.bat call addcores.bat diff --git a/sdk/Makefile b/sdk/Makefile index 3d04af9..728b8f7 100644 --- a/sdk/Makefile +++ b/sdk/Makefile @@ -3,22 +3,58 @@ # SPDX-License-Identifier: GPL-3.0-or-later # # Supported environments: -# * GNU/Linux -# * Windows NT (using MinGW/MSYS/Cygwin/WSL) +# * GNU on Linux, FreeBSD etc. +# * GNU on Windows NT (using MinGW/MSYS/Cygwin/WSL) +# +# Build: +# make [BUILD=] [FORCEBUILD=] [] +# Clean: +# make [BUILD=] [FORCECLEAN=] clean +# +# where: +# is one of: mingw32, mingw64. +# is 1 to force build, otherwise do not (default). +# is 1 to force clean, otherwise do not (default). +# is one of values of TOOLS variable (see below). +# +# Notes: +# BUILD, FORCEBUILD, FORCECLEAN variables may be set in user's environment. include common.mk -ifeq ($(OS),Windows_NT) -SJASMPLUS := sjasmplus.exe -ZX7B := zx7b.exe +ifeq ($(BUILD),mingw32) +FORCEBUILD:=1 +else ifeq ($(BUILD),mingw64) +FORCEBUILD:=1 else -SJASMPLUS := sjasmplus -ZX7B := zx7b +BUILD:= +FORCEBUILD:=0 endif +ifdef $(FORCECLEAN) +ifneq ($(FORCECLEAN),1) +FORCECLEAN:=0 +else +FORCECLEAN:=0 +endif +endif + +export BUILD +export FORCEBUILD +export FORCECLEAN + +SJASMPLUS := sjasmplus$(EXECEXT) +ZX7B := zx7b$(EXECEXT) +FCUT := fcut$(EXECEXT) +FPAD := fpad$(EXECEXT) +FPOKE := fpoke$(EXECEXT) + TOOLS:=\ bin/$(SJASMPLUS) \ - bin/$(ZX7B) + bin/$(ZX7B) \ + bin/$(FCUT) \ + bin/$(FPAD) \ + bin/$(FPOKE) .PHONY: all all: $(TOOLS) diff --git a/sdk/README.md b/sdk/README.md index 7169cfd..32c70fd 100644 --- a/sdk/README.md +++ b/sdk/README.md @@ -29,6 +29,28 @@ Command | Target `make` | all tools `make bin/sjasmplus` | **sjasmplus** `make bin/zx7b` | **zx7b** +`make bin/fcut` | **fcut** +`make bin/fpad` | **fpad** +`make bin/fpoke` | **fpoke** + +To build using MinGW add this parameter for **make** tool: + +Parameter | Target system +----|---- +`BUILD=mingw32` | Windows with i686 architecture (32-bits) +`BUILD=mingw64` | Windows with AMD64 architecture (64-bits) + +Remember to specify proper file extension (".exe") for target when building with MinGW. Example: + +```bash +make BUILD=mingw64 bin/fcut.exe bin/fpad.exe bin/fpoke.exe +``` + +Then you may use **strip** tool to strip debug information from file and thus shrink file's size: + +```bash +strip bin/fcut.exe bin/fpad.exe bin/fpoke.exe +``` ## 2.2. Clean tools @@ -38,6 +60,12 @@ To clean everything type: make clean ``` +To clean MinGW builds use appropriate `BUILD` parameter as described in [2.1](#21-build-tools). Example: + +```bash +make BUILD=mingw64 clean +``` + ## 2.3. Tools usage These tools are supposed to be used mainly in Makefiles and Bash scripts invoked from Makefiles. @@ -77,30 +105,38 @@ This has the same behavior as the inclusion of `common.mk` file in a Makefile. # 3. Using SDK in GNU environment on Windows -**NOTE**: compilation of the following tools: +**NOTE**: *by default* compilation of the following tools: * sjasmplus * zx7b +* fcut +* fpad +* fpoke -on Windows platform is disabled right now because of presence of precompiled binaries of them in repository. They are not deleted when cleaning. +on Windows platform is disabled right now because of presence of precompiled binaries of them in repository. +*By default* they are not deleted when cleaning. ## 3.1. Build tools -The building process is similar to one for GNU on Linux, FreeBSD etc. See [2.1](#21-build-tools). +The building process is similar to one for GNU on Linux, FreeBSD etc. +See [2.1](#21-build-tools) with addition that you should provide correct target name (specify file extension ".exe") and also specify parameter `FORCEBUILD=1`. ## 3.2. Clean tools -The cleaning process is similar to one for GNU on Linux, FreeBSD etc. See [2.2](#22-clean-tools). +The cleaning process is similar to one for GNU on Linux, FreeBSD etc. +See [2.2](#22-clean-tools) with addition that you should specify parameter `FORCECLEAN=1`. ## 3.3. Tools usage ### 3.3.1. In Makefiles -The usage is similar to one for GNU/Linux, FreeBSD etc. See [2.3.1](#231-in-makefiles). +The usage is similar to one for GNU on Linux, FreeBSD etc. +See [2.3.1](#231-in-makefiles). ### 3.3.2. In Bash scripts -The usage is similar to one for GNU/Linux, FreeBSD etc. See [2.3.2](#232-in-bash-scripts). +The usage is similar to one for GNU on Linux, FreeBSD etc. +See [2.3.2](#232-in-bash-scripts). # 4. Using SDK on Windows without GNU environment diff --git a/sdk/bin/.gitignore b/sdk/bin/.gitignore index 0590ff0..6d8327c 100644 --- a/sdk/bin/.gitignore +++ b/sdk/bin/.gitignore @@ -1,2 +1,9 @@ +# SPDX-FileCopyrightText: 2021 Ivan Tatarinov +# +# SPDX-License-Identifier: CC0-1.0 + sjasmplus zx7b +fcut +fpad +fpoke diff --git a/sdk/bin/fcut.exe b/sdk/bin/fcut.exe new file mode 100644 index 0000000000000000000000000000000000000000..4e8244b6c7758e10fa1cad328537339c0b79fdfe GIT binary patch literal 13312 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 literal 0 HcmV?d00001 diff --git a/sdk/bin/fpoke.exe.license b/sdk/bin/fpoke.exe.license new file mode 100644 index 0000000..10b306a --- /dev/null +++ b/sdk/bin/fpoke.exe.license @@ -0,0 +1,11 @@ +SPDX-FileName: fpoke.exe + +SPDX-FileType: BINARY + +SPDX-FileChecksum: SHA1: 59c8b1ea5221e31d7c23573591bdb4bb61878d9a + +SPDX-FileCopyrightText: Copyright (C) 2016, 2021 Antonio Villena + +SPDX-License-Identifier: GPL-3.0-only + +SPDX-FileComment: fpoke version 1.0 (11 May 2016) - tool that overwrites bytes in a file. diff --git a/sdk/bin/zx7b.exe b/sdk/bin/zx7b.exe index be47c4e44511ed9f4cb9a6865ac16fe47806b590..357f91e1303edbfffc4a43e3874fcc9fb32fa91e 100644 GIT binary patch literal 15360 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 ZJs+m2#5X9xDHvgHg+@XbzdSPae*j(N?5h9( diff --git a/sdk/bin/zx7b.exe.license b/sdk/bin/zx7b.exe.license index 88d00ee..8edec1a 100644 --- a/sdk/bin/zx7b.exe.license +++ b/sdk/bin/zx7b.exe.license @@ -2,12 +2,15 @@ SPDX-FileName: zx7b.exe SPDX-FileType: BINARY -SPDX-FileChecksum: SHA1: de47984d9d155eb89153052297caac5ffef5e720 +SPDX-FileChecksum: SHA1: 0068364b1463d8f27c29a8a183ea348af12cf456 -SPDX-LicenseConcluded: BSD-3-Clause +SPDX-FileCopyrightText: Copyright (c) 2013, 2021 Antonio Villena. All rights reserved. -SPDX-LicenseComments: The concluded license is taken from https://github.com/antoniovillena/zx7b/raw/master/zx7b.c +SPDX-FileNotice: Based on ZX7 +SPDX-FileNotice: ZX7 is Copyright (c) 2012 Einar Saukas. All rights reserved. -SPDX-FileCopyrightText: Einar Saukas/AntonioVillena, 28 Dec 2013 +SPDX-License-Identifier: BSD-3-Clause -SPDX-FileComment: ZX7 Backwards compressor v1.01 by Einar Saukas/AntonioVillena, 28 Dec 2013 +SPDX-LicenseComments: License's text equals to one from https://directory.fsf.org/wiki/License:BSD-3-Clause + +SPDX-FileComment: zx7b version 1.01 (28 Dec 2013) - backwards compressor. diff --git a/sdk/common.mk b/sdk/common.mk index ff29570..1504d52 100644 --- a/sdk/common.mk +++ b/sdk/common.mk @@ -5,8 +5,8 @@ # SPDX-License-Identifier: GPL-3.0-or-later # # Supported environments: -# * GNU/Linux -# * Windows NT (using MinGW/MSYS/Cygwin/WSL) +# * GNU on Linux, FreeBSD etc. +# * GNU on Windows NT (using MinGW/MSYS/Cygwin/WSL) ifndef ZXUNOSDK @@ -17,3 +17,17 @@ export ZXUNOSDK export PATH endif + +ifeq ($(OS),Windows_NT) +EXECEXT := .exe +else +EXECEXT := +endif + +ifeq ($(BUILD),mingw32) +CC := i686-w64-mingw32-gcc +EXECEXT := .exe +else ifeq ($(BUILD),mingw64) +CC := x86_64-w64-mingw32-gcc +EXECEXT := .exe +endif diff --git a/sdk/src/.gitignore b/sdk/src/.gitignore index e4d3c65..43b40b3 100644 --- a/sdk/src/.gitignore +++ b/sdk/src/.gitignore @@ -1 +1,5 @@ +# SPDX-FileCopyrightText: 2021 Ivan Tatarinov +# +# SPDX-License-Identifier: CC0-1.0 + sjasmplus diff --git a/sdk/src/Makefile b/sdk/src/Makefile index 62b8865..4d608ff 100644 --- a/sdk/src/Makefile +++ b/sdk/src/Makefile @@ -3,25 +3,62 @@ # SPDX-License-Identifier: GPL-3.0-or-later # # Supported environments: -# * GNU/Linux -# * Windows NT (using MinGW/MSYS/Cygwin/WSL) +# * GNU on Linux, FreeBSD etc. +# * GNU on Windows NT (using MinGW/MSYS/Cygwin/WSL) +# +# Build: +# make [BUILD=] [FORCEBUILD=] [] +# Clean: +# make [BUILD=] [FORCECLEAN=] clean +# +# where: +# is one of: mingw32, mingw64. +# is 1 to force build, otherwise do not (default). +# is 1 to force clean, otherwise do not (default). +# is one of values of TOOLS variable (see below). +# +# Notes: +# BUILD, FORCEBUILD, FORCECLEAN variables may be set in user's environment. include ../common.mk -ifeq ($(OS),Windows_NT) -SJASMPLUS := sjasmplus.exe -ZX7B := zx7b.exe -else -SJASMPLUS := sjasmplus -ZX7B := zx7b -endif +SJASMPLUS := sjasmplus$(EXECEXT) +ZX7B := zx7b$(EXECEXT) +FCUT := fcut$(EXECEXT) +FPAD := fpad$(EXECEXT) +FPOKE := fpoke$(EXECEXT) + +TOOLS:= \ + ../bin/$(SJASMPLUS) \ + ../bin/$(ZX7B) \ + ../bin/$(FCUT) \ + ../bin/$(FPAD) \ + ../bin/$(FPOKE) .PHONY: all -all: \ - ../bin/$(SJASMPLUS) \ - ../bin/$(ZX7B) +all: $(TOOLS) -ifneq ($(OS),Windows_NT) +ifeq ($(OS),Windows_NT) +ifeq ($(FORCEBUILD),1) +_DoBuild:=1 +else +_DoBuild:=0 +endif +else +_DoBuild:=1 +endif + +ifeq ($(OS),Windows_NT) +ifeq ($(FORCECLEAN),1) +_DoClean:=1 +else +_DoClean:=0 +endif +else +_DoClean:=1 +endif + +ifeq ($(_DoBuild),1) ../bin/$(SJASMPLUS): sjasmplus/build/$(SJASMPLUS) cp $< $@ @@ -42,14 +79,29 @@ sjasmplus: zx7b/$(ZX7B): | zx7b $(MAKE) -w -C $| + +../bin/$(FCUT): tools/$(FCUT) + cp $< $@ + +../bin/$(FPAD): tools/$(FPAD) + cp $< $@ + +../bin/$(FPOKE): tools/$(FPOKE) + cp $< $@ + +tools/$(FCUT) \ +tools/$(FPAD) \ +tools/$(FPOKE): | tools + $(MAKE) -w -C $| endif .PHONY: clean -ifeq ($(OS),Windows_NT) +ifneq ($(_DoClean),1) clean:; else -clean: | sjasmplus sjasmplus.mk zx7b +clean: | sjasmplus sjasmplus.mk zx7b tools $(MAKE) -w -C sjasmplus -f ../sjasmplus.mk clean $(MAKE) -w -C zx7b clean - rm -f ../bin/$(SJASMPLUS) ../bin/$(ZX7B) + $(MAKE) -w -C tools clean + rm -f $(TOOLS) endif diff --git a/sdk/src/sjasmplus.mk b/sdk/src/sjasmplus.mk index 859cc39..0fce22c 100644 --- a/sdk/src/sjasmplus.mk +++ b/sdk/src/sjasmplus.mk @@ -3,29 +3,50 @@ # SPDX-License-Identifier: GPL-3.0-or-later # # Supported environments: -# * GNU/Linux -# * Windows NT (using MinGW/MSYS/Cygwin/WSL) +# * GNU on Linux, FreeBSD etc. +# * GNU on Windows NT (using MinGW/MSYS/Cygwin/WSL) # # Build: -# make -w -C sjasmplus -f ../sjasmplus.mk +# make [BUILD=] -w -C sjasmplus -f ../sjasmplus.mk # Clean: -# make -w -C sjasmplus -f ../sjasmplus.mk clean +# make [BUILD=] -w -C sjasmplus -f ../sjasmplus.mk clean +# +# where: +# is one of: mingw32, mingw64. +# +# Notes: +# BUILD variable may be set in user's environment. -ifeq ($(OS),Windows_NT) -SJASMPLUS := sjasmplus.exe -else -SJASMPLUS := sjasmplus + +include ../../common.mk + +CMAKEFLAGS := + +ifeq ($(BUILD),mingw32) +CMAKEFLAGS += CMAKE_SYSTEM_NAME=Windows +CMAKEFLAGS += CMAKE_SYSTEM_PROCESSOR=x86 +CMAKEFLAGS += CMAKE_C_COMPILER=i686-w64-mingw32-gcc +CMAKEFLAGS += CMAKE_CXX_COMPILER=i686-w64-mingw32-g++ +CMAKEFLAGS := $(patsubst %,-D%,$(CMAKEFLAGS)) +else ifeq ($(BUILD),mingw64) +CMAKEFLAGS += CMAKE_SYSTEM_NAME=Windows +CMAKEFLAGS += CMAKE_SYSTEM_PROCESSOR=AMD64 +CMAKEFLAGS += CMAKE_C_COMPILER=x86_64-w64-mingw32-gcc +CMAKEFLAGS += CMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ +CMAKEFLAGS := $(patsubst %,-D%,$(CMAKEFLAGS)) endif +SJASMPLUS := sjasmplus$(EXECEXT) + build/$(SJASMPLUS): | build/Makefile $(MAKE) -w -C build build/Makefile: | build - cd build && cmake .. + cd build && cmake $(CMAKEFLAGS) .. build: - mkdir -p build + mkdir $@ .PHONY: clean -clean: | build/Makefile - $(MAKE) -w -C build clean +clean: + rm -rf build diff --git a/sdk/src/tools/.gitignore b/sdk/src/tools/.gitignore new file mode 100644 index 0000000..0da2f7c --- /dev/null +++ b/sdk/src/tools/.gitignore @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: 2021 Ivan Tatarinov +# +# SPDX-License-Identifier: CC0-1.0 + +fcut +fcut.exe +fpad +fpad.exe +fpoke +fpoke.exe diff --git a/sdk/src/tools/Makefile b/sdk/src/tools/Makefile new file mode 100644 index 0000000..7f4c22c --- /dev/null +++ b/sdk/src/tools/Makefile @@ -0,0 +1,46 @@ +# SPDX-FileCopyrightText: 2021 Ivan Tatarinov +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +# Supported environments: +# * GNU on Linux, FreeBSD etc. +# * GNU on Windows NT (using MinGW/MSYS/Cygwin/WSL) +# +# Build: +# make [BUILD=] [] +# Clean: +# make [BUILD=] clean +# +# where: +# is one of: mingw32, mingw64. +# is one of values for TOOLS variable (see below). +# +# Notes: +# BUILD variable may be set in user's environment. + +include ../../common.mk + +FCUT := fcut$(EXECEXT) +FPAD := fpad$(EXECEXT) +FPOKE := fpoke$(EXECEXT) + +TOOLS:=\ + $(FCUT) \ + $(FPAD) \ + $(FPOKE) + +.PHONY: all +all: $(TOOLS) + +$(FCUT): fcut.c + $(CC) $(CFLAGS) -o $@ $< + +$(FPAD): fpad.c + $(CC) $(CFLAGS) -o $@ $< + +$(FPOKE): fpoke.c + $(CC) $(CFLAGS) -o $@ $< + +.PHONY: clean +clean: + rm -f $(TOOLS) diff --git a/sdk/src/tools/fcut.c b/sdk/src/tools/fcut.c new file mode 100644 index 0000000..a0064e1 --- /dev/null +++ b/sdk/src/tools/fcut.c @@ -0,0 +1,96 @@ +/* + * fcut - a file hexadecimal cutter. + * + * Copyright (C) 2015, 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) 2015, 2021 Antonio Villena + * + * SPDX-License-Identifier: GPL-3.0-only + */ + +#include +#include + +#define PROGRAM "fcut" +#define DESCRIPTION "a file hexadecimal cutter." +#define VERSION "1.00 (20 Jun 2015)" +#define COPYRIGHT "Copyright (C) 2015, 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/" + +void show_help() { + printf( + PROGRAM " version " VERSION " - " DESCRIPTION "\n" + COPYRIGHT "\n" + LICENSE "\n" + "Home page: " HOMEPAGE "\n" + "\n" + "Usage:\n" + " " PROGRAM " \n" + "\n" + " Origin file to cut\n" + " In hexadecimal, is the start offset of the segment\n" + " In hexadecimal, is the length of the segment\n" + " Genetated output file\n" + "\n" + " negative value assumes a negative offset from the end of the file.\n" + " negative value will substract file size result to that parameter.\n" + ); +} + +int main(int argc, char* argv[]){ + unsigned char *mem= (unsigned char *) malloc (0x10000); + FILE *fi, *fo; + long start, length, size; + if( argc==1 ) + show_help(), + exit(0); + if( argc!=5 ) + 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); + fo= fopen(argv[4], "wb+"); + if( !fo ) + printf("\nCannot create output file: %s\n", argv[4]), + exit(-1); + fseek(fi, 0, SEEK_END); + size= ftell(fi); + rewind(fi); + start= strtol(argv[2], NULL, 16); + if( start<0 ) + start+= size; + length= strtol(argv[3], NULL, 16); + if( length<0 ) + length+= size; + if( start+length>size + || start>size ) + printf("\nOut of input file\n"), + exit(-1); + fseek(fi, start, SEEK_SET); + for ( size= 0; size>16; size++ ) + fread(mem, 1, 0x10000, fi), + fwrite(mem, 1, 0x10000, fo); + fread(mem, 1, length&0xffff, fi); + fwrite(mem, 1, length&0xffff, fo); + fclose(fi); + fclose(fo); + printf("\n0x%lx bytes written (%lu) at offset 0x%lx (%lu)\n", length, length, start, start); +} diff --git a/sdk/src/tools/fpad.c b/sdk/src/tools/fpad.c new file mode 100644 index 0000000..f81bbb8 --- /dev/null +++ b/sdk/src/tools/fpad.c @@ -0,0 +1,74 @@ +/* + * fpad - generate a file with padded values. + * + * Copyright (C) 2016, 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) 2016, 2021 Antonio Villena + * + * SPDX-License-Identifier: GPL-3.0-only + */ + +#include +#include +#include + +#define PROGRAM "fpad" +#define DESCRIPTION "generate a file with padded values." +#define VERSION "1.00 (24 Apr 2016)" +#define COPYRIGHT "Copyright (C) 2016, 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/" + +void show_help() { + printf( + PROGRAM " version " VERSION " - " DESCRIPTION "\n" + COPYRIGHT "\n" + LICENSE "\n" + "Home page: " HOMEPAGE "\n" + "\n" + "Usage:\n" + " " PROGRAM " \n" + "\n" + " In hexadecimal, is the length of the future file\n" + " In hexadecimal, is the value of the padding\n" + " Genetated output file\n" + ); +} + +int main(int argc, char* argv[]){ + unsigned char mem[0x10000]; + FILE *fo; + long length, size; + if( argc==1 ) + show_help(), + exit(0); + if( argc!=4 ) + printf("\nInvalid number of parameters\n"), + exit(-1); + fo= fopen(argv[3], "wb+"); + if( !fo ) + printf("\nCannot create output file: %s\n", argv[3]), + exit(-1); + memset(mem, strtol(argv[2], NULL, 16), 0x10000); + length= strtol(argv[1], NULL, 16); + for ( size= 0; size>16; size++ ) + fwrite(mem, 1, 0x10000, fo); + fwrite(mem, 1, length&0xffff, fo); + fclose(fo); + printf("\nDone\n"); +} diff --git a/sdk/src/tools/fpoke.c b/sdk/src/tools/fpoke.c new file mode 100644 index 0000000..c59326d --- /dev/null +++ b/sdk/src/tools/fpoke.c @@ -0,0 +1,164 @@ +/* + * fpoke - tool that overwrites bytes in a file. + * + * Copyright (C) 2016, 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) 2016, 2021 Antonio Villena + * + * SPDX-License-Identifier: GPL-3.0-only + */ + +#include +#include +#include + +#define PROGRAM "fpoke" +#define DESCRIPTION "tool that overwrites bytes in a file." +#define VERSION "1.0 (11 May 2016)" +#define COPYRIGHT "Copyright (C) 2016, 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/" + +#define BUFFER_LENGTH 0x60000 + +void show_help() { + printf( + PROGRAM " version " VERSION " - " DESCRIPTION "\n" + COPYRIGHT "\n" + LICENSE "\n" + "Home page: " HOMEPAGE "\n" + "\n" + "Usage:\n" + " " PROGRAM " [x] [ [x]] ..\n" + "\n" + " Origin and target file to poke\n" + " In hexadecimal, address of the first byte to poke\n" + " Number of repetitions, also in hex\n" + " Even digits in hex or single quotation string like 'hello'\n" + " file:filename Equivalent to [x] but with a file\n" + "\n" + "At least one sequence of is mandatory ( is optional). The\n" + "first char of can be g or l to indicate biG endian or Little endian,\n" + "default is little endian. Example:hello.txt 48 65 6C 6C 6F 20 57 6F 72 6C 64 21\n" + " " PROGRAM " hello.txt 2 12 48 65 12 6C 6F 20 57 6F 72 6C 64 21\n" + " " PROGRAM " hello.txt 3 1234 48 65 6C 34 12 20 57 6F 72 6C 64 21\n" + " " PROGRAM " hello.txt 4 g123456 0 l1234 34 12 6C 6C 12 34 56 6F 72 6C 64 21\n" + " " PROGRAM " hello.txt 5 3xab 48 65 6C 6C 6F AB AB AB 72 6C 64 21\n" + " " PROGRAM " hello.txt 6 'Earth' 48 65 6C 6C 6F 20 45 61 72 74 68 21\n" + " " PROGRAM " hello.txt 6 file:hi.bin\n" + ); +} + +char char2hex(char value){ + if( value<'0' || value>'f' || value<'A' && value>'9' || value<'a' && value>'F' ) + printf("\nInvalid character %c\n", value), + exit(-1); + return value>'9' ? 9+(value&7) : value-'0'; +} + +int main(int argc, char* argv[]){ + unsigned char *mem= (unsigned char *) malloc (BUFFER_LENGTH); + FILE *fi, *fi2; + char *bytes; + long start, size, rep, length, i, j, k; + if( argc==1 ) + show_help(), + exit(0); + if( argc&1 ) + 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); + size= ftell(fi); + while ( argc > 2 ){ + start= strtol(argv++[2], NULL, 16); + if( start<0 ) + start+= size; + if( bytes= strchr(argv[2], ':') ) + rep= -1, + argv++; + else if( strchr(argv[2], 'x') || strchr(argv[2], 'X') ) + rep= strtol(strtok(argv++[2], "xX"), NULL, 16), + bytes= strtok(NULL, "xX"); + else + rep= 1, + bytes= argv++[2]; + if( bytes[0]=='g' || bytes[0]=='l' || bytes[0]=='\'' ) + bytes++; + if( bytes[-1]=='\'' ) + bytes= strtok(bytes, "'"), + length= strlen(bytes); + else if( rep==-1 ){ + fi2= fopen(++bytes, "rb+"); + if( !fi2 ) + printf("\nInput file not found: %s\n", bytes), + exit(-1); + fseek(fi2, 0, SEEK_END); + length= ftell(fi2); + fseek(fi2, 0, SEEK_SET); + } + else{ + length= strlen(bytes); + if( length&1 ) + printf("\nIncorrect length %X (%s), must be even, in address %X\n", length, bytes, start), + exit(-1); + length>>= 1; + } + if( length*rep+start > size ) + printf("\nOut of file\n"), + exit(-1); + if( length>BUFFER_LENGTH ) + printf("\nOut of buffer\n"), + exit(-1); + if( rep==-1 ) + printf("hola %d %d %d\n", argc, length, fread(mem, 1, length, fi2)), + fclose(fi2); + else if( bytes[-1]=='g' ) + for ( i= 0; i < length; i++ ) + mem[i]= char2hex(bytes[i<<1|1]) | char2hex(bytes[i<<1]) << 4; + else if( bytes[-1]=='\'' ) + for ( i= 0; i < length; i++ ) + mem[i]= bytes[i]; + else + for ( i= 0; i < length; i++ ) + mem[length-i-1]= char2hex(bytes[i<<1|1]) | char2hex(bytes[i<<1]) << 4; + for ( i= 1; i < rep; i++ ) + if( i*length > BUFFER_LENGTH ) + break; + if( --i > 1 ) + for ( j= 1; j < i; j++ ) + for ( k= 0; k < length; k++ ) + mem[k+j*length]= mem[k]; + fseek(fi, start, SEEK_SET); + if( i ){ + j= rep/i; + for ( k= 0; k < j; k++ ) + fwrite(mem, 1, length*i, fi); + if( rep%i ) + fwrite(mem, 1, length*(rep%i), fi); + } + else + fwrite(mem, 1, length, fi); + argc-= 2; + } + printf("\nFile correctly modified\n"); + fclose(fi); +} diff --git a/sdk/src/tools/tools.url b/sdk/src/tools/tools.url new file mode 100644 index 0000000..82e3211 --- /dev/null +++ b/sdk/src/tools/tools.url @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: 20219 Ivan Tatarinov +# +# SPDX-License-Identifier: CC0-1.0 + +https://sourceforge.net/p/emuscriptoria/code/HEAD/tree/desprot/ +https://github.com/antoniovillena/EmuScriptoria/tree/master/desprot diff --git a/sdk/src/zx7b/.gitignore b/sdk/src/zx7b/.gitignore index f7948c5..8a1f2e9 100644 --- a/sdk/src/zx7b/.gitignore +++ b/sdk/src/zx7b/.gitignore @@ -1,2 +1,6 @@ +# SPDX-FileCopyrightText: 2021 Ivan Tatarinov +# +# SPDX-License-Identifier: CC0-1.0 + zx7b zx7b.exe diff --git a/sdk/src/zx7b/Makefile b/sdk/src/zx7b/Makefile index 9a92b79..04ece1f 100644 --- a/sdk/src/zx7b/Makefile +++ b/sdk/src/zx7b/Makefile @@ -5,27 +5,28 @@ # Supported environments: # * GNU on Linux, FreeBSD etc. # * GNU on Windows NT (using MinGW/MSYS/Cygwin/WSL) +# +# Build: +# make [BUILD=] [] +# Clean: +# make [BUILD=] clean +# +# where: +# is one of: mingw32, mingw64. +# is one of values of TOOLS variable (see below). +# +# Notes: +# BUILD variable may be set in user's environment. include ../../common.mk -ifeq ($(OS),Windows_NT) -ZX7B := zx7b.exe -else -ZX7B := zx7b -endif +ZX7B := zx7b$(EXECEXT) -ifneq ($(OS),Windows_NT) $(ZX7B): zx7b.c $(CC) $(CFLAGS) -o $@ $< zx7b.c: wget -c https://github.com/antoniovillena/zx7b/raw/master/zx7b.c -endif -.PHONY: clean -ifeq ($(OS),Windows_NT) -clean:; -else clean: rm -f $(ZX7B) -endif diff --git a/sdk/src/zx7b/zx7b.c b/sdk/src/zx7b/zx7b.c index 9a63080..3cd5d39 100644 --- a/sdk/src/zx7b/zx7b.c +++ b/sdk/src/zx7b/zx7b.c @@ -1,8 +1,10 @@ /* - * ZX7b (c) Copyright 2013 by Antonio Villena. All rights reserved. + * zx7b - backwards compressor. + * + * Copyright (c) 2013, 2021 Antonio Villena. All rights reserved. * * Based on ZX7 - * (c) Copyright 2012 by Einar Saukas. All rights reserved. + * ZX7 is Copyright (c) 2012 Einar Saukas. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -25,20 +27,30 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * SPDX-FileCopyrightText: ZX7b (c) Copyright 2013 by Antonio Villena. All rights reserved. + * SPDX-FileCopyrightText: Copyright (c) 2013, 2021 Antonio Villena. All rights reserved. * * SPDX-FileNotice: Based on ZX7 - * SPDX-FileNotice: (c) Copyright 2012 by Einar Saukas. All rights reserved. + * SPDX-FileNotice: ZX7 is Copyright (c) 2012 Einar Saukas. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause * - * SPDX-LicenseComments: License's text is equals to one from https://directory.fsf.org/wiki/License:BSD-3-Clause + * SPDX-LicenseComments: License's text equals to one from https://directory.fsf.org/wiki/License:BSD-3-Clause */ #include #include #include +#define PROGRAM "zx7b" +#define DESCRIPTION "backwards compressor." +#define VERSION "1.01 (28 Dec 2013)" +#define COPYRIGHT "Copyright (c) 2013, 2021 Antonio Villena. All rights reserved.\n" \ +"Based on ZX7 \n" \ +"ZX7 is Copyright (c) 2012 Einar Saukas. All rights reserved." +#define LICENSE \ +"Distributed under BSD 3-clause license." +#define HOMEPAGE "https://github.com/antoniovillena/zx7b/" + #define MAX_OFFSET 2176 /* range 1..2176 */ #define MAX_LEN 65536 /* range 2..65536 */ @@ -53,6 +65,23 @@ typedef struct optimal_t { int len; } Optimal; +void show_help() { + printf( + PROGRAM " version " VERSION " - " DESCRIPTION "\n" + COPYRIGHT "\n" + LICENSE "\n" + "Home page: " HOMEPAGE "\n" + "\n" + "Usage:\n" + " " PROGRAM " \n" + "\n" + " Raw input file\n" + " Compressed output file\n" + "\n" + "Example: " PROGRAM " Cobra.scr Cobra.zx7b\n" + ); +} + Optimal *optimize(unsigned char *input_data, size_t input_size); unsigned char *compress(Optimal *optimal, unsigned char *input_data, size_t input_size, size_t *output_size); @@ -70,11 +99,7 @@ int main(int argc, char *argv[]) { int i, j; if( argc==1 ) - printf("\nZX7 Backwards compressor v1.01 by Einar Saukas/AntonioVillena, 28 Dec 2013\n\n" - " zx7b \n\n" - " Raw input file\n" - " Compressed output file\n\n" - "Example: zx7b Cobra.scr Cobra.zx7b\n"), + show_help(), exit(0); if( argc!=3 ) printf("\nInvalid number of parameters\n"),