From 02ab6a26b8274658e58db0e0cf733d284053281c Mon Sep 17 00:00:00 2001 From: Ivan Tatarinov Date: Wed, 14 Apr 2021 16:25:23 +0300 Subject: [PATCH] sdk: added `AddItem` tool to SDK --- modflash/AddItem.c | 68 --------------------- modflash/AddItem.exe | Bin 45084 -> 0 bytes sdk/Makefile | 4 +- sdk/README.md | 2 + sdk/bin/.gitignore | 1 + sdk/bin/AddItem.exe | Bin 0 -> 14336 bytes sdk/bin/AddItem.exe.license | 11 ++++ sdk/src/Makefile | 10 +++- sdk/src/tools/.gitignore | 2 + sdk/src/tools/AddItem.c | 114 ++++++++++++++++++++++++++++++++++++ sdk/src/tools/Makefile | 7 ++- 11 files changed, 147 insertions(+), 72 deletions(-) delete mode 100644 modflash/AddItem.c delete mode 100644 modflash/AddItem.exe create mode 100644 sdk/bin/AddItem.exe create mode 100644 sdk/bin/AddItem.exe.license create mode 100644 sdk/src/tools/AddItem.c diff --git a/modflash/AddItem.c b/modflash/AddItem.c deleted file mode 100644 index ebdb41d..0000000 --- a/modflash/AddItem.c +++ /dev/null @@ -1,68 +0,0 @@ -#include -#include -#include - -FILE *fi, *fo; -int i; -unsigned char mem[0x4004], core; -unsigned short j, k; - -int main(int argc, char *argv[]) { - if( argc==1 ) - printf("\n" - "AddItem v0.02, simulates Machine and ROM addition to the ZX-Uno flash image\n\n" - " AddItem \n\n" - " ROM or COREX, when 2<=X<=45, i.e. CORE5\n" - " Input .TAP file generate with GenRom\n" - " Number of slot from 0 to 63, only when type is ROM\n\n" - "All modifications occur in the file FLASH.ZX1\n\n"), - exit(0); - fo= fopen("FLASH.ZX1", "rb+"); - if( strstr(argv[1], "CORE")==argv[1] && strlen(argv[1])<=6 && strlen(argv[1])>=5 && argc==3 ){ - core= (strlen(argv[1])==5 ? argv[1][4] : (argv[1][4]-'0')*10+argv[1][5])-'2'; - if( core>43 ) - printf("\nCore number out of range: %d\n", core+2), - exit(-1); - fi= fopen(argv[2], "rb"); - if( !fi ) - printf("\nInput file not found: %s\n", argv[2]), - exit(-1); - fread(mem, 1, 0x58, fi); - fseek(fo, 0x7100+(core<<5), SEEK_SET); - fwrite(mem+0x34, 1, 0x20, fo); - j= mem[3]; - fseek(fo, (core>7?0x160000:0xac000)+core*0x54000, SEEK_SET); - for ( i=0; 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

jyAd>$D#KTA$Jbcwg|p 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

VASYe~4pFkaBtf%^m_^>aMMcdm$O6mpvSN&i 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 diff --git a/sdk/Makefile b/sdk/Makefile index c9c1c08..2a3de07 100644 --- a/sdk/Makefile +++ b/sdk/Makefile @@ -49,6 +49,7 @@ FCUT := fcut$(EXECEXT) FPAD := fpad$(EXECEXT) FPOKE := fpoke$(EXECEXT) GENROM := GenRom$(EXECEXT) +ADDITEM := AddItem$(EXECEXT) TOOLS:=\ bin/$(SJASMPLUS) \ @@ -56,7 +57,8 @@ TOOLS:=\ bin/$(FCUT) \ bin/$(FPAD) \ bin/$(FPOKE) \ - bin/$(GENROM) + bin/$(GENROM) \ + bin/$(ADDITEM) .PHONY: all all: $(TOOLS) diff --git a/sdk/README.md b/sdk/README.md index b843685..24ed6b5 100644 --- a/sdk/README.md +++ b/sdk/README.md @@ -33,6 +33,7 @@ Command | Target `make bin/fpad` | **fpad** `make bin/fpoke` | **fpoke** `make bin/GenRom` | **GenRom** +`make bin/AddItem` | **AddItem** To build using MinGW add this parameter for `make` tool: @@ -114,6 +115,7 @@ This has the same behavior as the inclusion of `common.mk` file in a Makefile. * fpad * fpoke * GenRom +* AddItem 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. diff --git a/sdk/bin/.gitignore b/sdk/bin/.gitignore index b946794..bc459a0 100644 --- a/sdk/bin/.gitignore +++ b/sdk/bin/.gitignore @@ -8,3 +8,4 @@ fcut fpad fpoke GenRom +AddItem diff --git a/sdk/bin/AddItem.exe b/sdk/bin/AddItem.exe new file mode 100644 index 0000000000000000000000000000000000000000..1e0954c30cd1273bf323dda44370931ec894cdac GIT binary patch literal 14336 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 literal 0 HcmV?d00001 diff --git a/sdk/bin/AddItem.exe.license b/sdk/bin/AddItem.exe.license new file mode 100644 index 0000000..e45abdf --- /dev/null +++ b/sdk/bin/AddItem.exe.license @@ -0,0 +1,11 @@ +SPDX-FileName: AddItem.exe + +SPDX-FileType: BINARY + +SPDX-FileChecksum: SHA1: 4c0298aa44631d46b241f90471d36775b536d844 + +SPDX-FileCopyrightText: Copyright (C) 2019, 2021 Antonio Villena + +SPDX-License-Identifier: GPL-3.0-only + +SPDX-FileComment: AddItem version 0.02 - simulates Machine and ROM addition to the ZX-Uno flash image. diff --git a/sdk/src/Makefile b/sdk/src/Makefile index c23ad81..4aa79d9 100644 --- a/sdk/src/Makefile +++ b/sdk/src/Makefile @@ -28,6 +28,7 @@ FCUT := fcut$(EXECEXT) FPAD := fpad$(EXECEXT) FPOKE := fpoke$(EXECEXT) GENROM := GenRom$(EXECEXT) +ADDITEM := AddItem$(EXECEXT) TOOLS:= \ ../bin/$(SJASMPLUS) \ @@ -35,7 +36,8 @@ TOOLS:= \ ../bin/$(FCUT) \ ../bin/$(FPAD) \ ../bin/$(FPOKE) \ - ../bin/$(GENROM) + ../bin/$(GENROM) \ + ../bin/$(ADDITEM) .PHONY: all all: $(TOOLS) @@ -94,10 +96,14 @@ zx7b/$(ZX7B): | zx7b ../bin/$(GENROM): tools/$(GENROM) cp $< $@ +../bin/$(ADDITEM): tools/$(ADDITEM) + cp $< $@ + tools/$(FCUT) \ tools/$(FPAD) \ tools/$(FPOKE) \ -tools/$(GENROM): | tools +tools/$(GENROM) \ +tools/$(ADDITEM): | tools $(MAKE) -w -C $| endif diff --git a/sdk/src/tools/.gitignore b/sdk/src/tools/.gitignore index a088ac8..0e0a00a 100644 --- a/sdk/src/tools/.gitignore +++ b/sdk/src/tools/.gitignore @@ -10,3 +10,5 @@ fpoke fpoke.exe GenRom GenRom.exe +AddItem +AddItem.exe diff --git a/sdk/src/tools/AddItem.c b/sdk/src/tools/AddItem.c new file mode 100644 index 0000000..e0f10e5 --- /dev/null +++ b/sdk/src/tools/AddItem.c @@ -0,0 +1,114 @@ +/* + * AddItem - simulates Machine and ROM addition to the ZX-Uno flash image. + * + * 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 + +#define PROGRAM "AddItem" +#define DESCRIPTION "simulates Machine and ROM addition to the ZX-Uno flash image." +#define VERSION "0.02" +#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/" + +#define OUTPUT_FILE "FLASH.ZX1" + +FILE *fi, *fo; +int i; +unsigned char mem[0x4004], core; +unsigned short j, k; + +void show_help() { + printf( + PROGRAM " version " VERSION " - " DESCRIPTION "\n" + COPYRIGHT "\n" + LICENSE "\n" + "Home page: " HOMEPAGE "\n" + "\n" + "Usage:\n" + " " PROGRAM " \n" + "\n" + " ROM or COREX, where 2<=X<=45, i.e. CORE5\n" + " Input .TAP file generated with GenRom\n" + " Slot's number from 0 to 63, only when type is ROM\n" + "\n" + "All modifications occur in the file `" OUTPUT_FILE "'.\n" + ); +} + +int main(int argc, char *argv[]) { + if( argc==1 ) + show_help(), + exit(0); + fo= fopen(OUTPUT_FILE, "rb+"); + if( strstr(argv[1], "CORE")==argv[1] && strlen(argv[1])<=6 && strlen(argv[1])>=5 && argc==3 ){ + core= (strlen(argv[1])==5 ? argv[1][4] : (argv[1][4]-'0')*10+argv[1][5])-'2'; + if( core>43 ) + printf("\nCore number out of range: %d\n", core+2), + exit(-1); + fi= fopen(argv[2], "rb"); + if( !fi ) + printf("\nInput file not found: %s\n", argv[2]), + exit(-1); + fread(mem, 1, 0x58, fi); + fseek(fo, 0x7100+(core<<5), SEEK_SET); + fwrite(mem+0x34, 1, 0x20, fo); + j= mem[3]; + fseek(fo, (core>7?0x160000:0xac000)+core*0x54000, SEEK_SET); + for ( i=0; i