From 1d52dd7433def7208076bb74c04eebb22bde44f5 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 22 Feb 2020 18:49:54 +0800 Subject: [PATCH] Add bin2asm for linus and update build to process font files under linix --- Source/HBIOS/Build.sh | 10 +++- Tools/Linux/bin2asm | Bin 0 -> 10224 bytes Tools/unix/bin2asm/LICENSE | 21 ++++++++ Tools/unix/bin2asm/Makefile | 20 +++++++ Tools/unix/bin2asm/README.md | 5 ++ Tools/unix/bin2asm/bin2asm.c | 100 +++++++++++++++++++++++++++++++++++ 6 files changed, 155 insertions(+), 1 deletion(-) create mode 100755 Tools/Linux/bin2asm create mode 100644 Tools/unix/bin2asm/LICENSE create mode 100755 Tools/unix/bin2asm/Makefile create mode 100644 Tools/unix/bin2asm/README.md create mode 100644 Tools/unix/bin2asm/bin2asm.c diff --git a/Source/HBIOS/Build.sh b/Source/HBIOS/Build.sh index 48f21bc4..5ca3562e 100755 --- a/Source/HBIOS/Build.sh +++ b/Source/HBIOS/Build.sh @@ -65,7 +65,15 @@ ROMSIZE .EQU $romsize EOF cp ../Forth/camel80.bin camel80.bin -cp ../Fonts/font*.asm . + +echo "Build font files ..." + +for file in $(ls -1 ../Fonts/*.bin | sort -V) ; do + font=$(basename -- "$file") + fontname="${font%.*}.asm" + echo " " $fontname + ../../Tools/Linux/bin2asm $file > ../HBIOS/$fontname +done make dbgmon.bin prefix.bin romldr.bin eastaegg.bin nascom.bin \ tastybasic.bin game.bin usrrom.bin imgpad.bin imgpad0.bin diff --git a/Tools/Linux/bin2asm b/Tools/Linux/bin2asm new file mode 100755 index 0000000000000000000000000000000000000000..674c174a4599c021ba1f8bca1d2a755983bdedd7 GIT binary patch literal 10224 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 CI6{vA literal 0 HcmV?d00001 diff --git a/Tools/unix/bin2asm/LICENSE b/Tools/unix/bin2asm/LICENSE new file mode 100644 index 00000000..b6df5b30 --- /dev/null +++ b/Tools/unix/bin2asm/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 ipatix + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Tools/unix/bin2asm/Makefile b/Tools/unix/bin2asm/Makefile new file mode 100755 index 00000000..9063175f --- /dev/null +++ b/Tools/unix/bin2asm/Makefile @@ -0,0 +1,20 @@ +CC = gcc +STRIP = strip +CFLAGS = -Werror -Wall -Wextra -Wconversion -O2 -D NDEBUG +BINARY = bin2asm + +SRC_FILES = $(wildcard *.c) +OBJ_FILES = $(SRC_FILES:.c=.o) + +all: $(BINARY) + +.PHONY: clean +clean: + rm -f $(OBJ_FILES) + +$(BINARY): $(OBJ_FILES) + $(CC) -o $@ $^ $(LIBS) + $(STRIP) -s $@ + +%.o: %.c + $(CC) -c -o $@ $< $(CFLAGS) $(IMPORT) diff --git a/Tools/unix/bin2asm/README.md b/Tools/unix/bin2asm/README.md new file mode 100644 index 00000000..cc666ba1 --- /dev/null +++ b/Tools/unix/bin2asm/README.md @@ -0,0 +1,5 @@ +# bin2asm +Converts binary files to ASM compatible assembly files + +Usage: +$ bin2asm hello.bin > hello.asm diff --git a/Tools/unix/bin2asm/bin2asm.c b/Tools/unix/bin2asm/bin2asm.c new file mode 100644 index 00000000..75b4d61d --- /dev/null +++ b/Tools/unix/bin2asm/bin2asm.c @@ -0,0 +1,100 @@ +//bin2asm from Michael Panzlaff https://github.com/ipatix/bin2asm Thanks Mike. +//Modified by Phil Summers difficultylevelhigh@gmail.com for ROMWBW + +#include +#include +#include +#include + +void die(const char msg[]) { + perror(msg); + exit(EXIT_FAILURE); +} + +int main(int argc, char *argv[]) { + for (int i = 1; i < argc; i++) { + // determine file size + FILE *input_file = fopen(argv[i], "rb"); + if (!input_file) { + fprintf(stderr, "fail %s\n", argv[i]); + die("Couldn't open input file"); + } + if (fseek(input_file, 0, SEEK_END) == -1) { + die("Error determining file size"); + } + long file_size = ftell(input_file); + if (file_size == -1) { + die("Error determining file size (2)"); + } + if (fseek(input_file, 0, SEEK_SET) == -1) { + die("Error determining file size (3)"); + } + // get file name + char *name = basename(argv[i]); + char *dot = strrchr(name, '.'); + if (dot) { + *dot = '\0'; + } + + // write lines + while (file_size > 0) { + size_t bytes_read = (file_size > 8) ? 8 : (size_t)file_size; + unsigned char data_buf[8]; + size_t actual_read = fread(data_buf, 1, bytes_read, input_file); + if (actual_read != bytes_read) { + fprintf(stderr, "Error while reading file, only %d read instead of %d\n", (int)actual_read, (int)bytes_read); + if (feof(input_file)) + fprintf(stderr, "Reached end of file\n"); + if (ferror(input_file)) + fprintf(stderr, "An unknown error occured while reading the file\n"); + perror("ERROR"); + exit(EXIT_FAILURE); + } + switch (bytes_read) { + case 1: + printf(" .db $%02X\r\n", + data_buf[0]); + break; + case 2: + printf(" .db $%02X, $%02X\r\n", + data_buf[0], data_buf[1]); + break; + case 3: + printf(" .db $%02X, $%02X, $%02X\r\n", + data_buf[0], data_buf[1], data_buf[2]); + break; + case 4: + printf(" .db $%02X, $%02X, $%02X, $%02X\r\n", + data_buf[0], data_buf[1], data_buf[2], data_buf[3]); + break; + case 5: + printf(" .db $%02X, $%02X, $%02X, $%02X, $%02X\r\n", + data_buf[0], data_buf[1], data_buf[2], data_buf[3], data_buf[4]); + break; + case 6: + printf(" .db $%02X, $%02X, $%02X, $%02X, $%02X, $%02X\r\n", + data_buf[0], data_buf[1], data_buf[2], data_buf[3], data_buf[4], data_buf[5]); + break; + case 7: + printf(" .db $%02X, $%02X, $%02X, $%02X, $%02X, $%02X, $%02X\r\n", + data_buf[0], data_buf[1], data_buf[2], data_buf[3], data_buf[4], data_buf[5], data_buf[6]); + break; + case 8: + printf(" .db $%02X, $%02X, $%02X, $%02X, $%02X, $%02X, $%02X, $%02X\r\n", + data_buf[0], data_buf[1], data_buf[2], data_buf[3], data_buf[4], data_buf[5], data_buf[6], data_buf[7]); + break; + default: + fprintf(stderr, "Invalid program state\n"); + exit(EXIT_FAILURE); + } + file_size -= (long)bytes_read; + } + + printf("\r\n"); + + if (fclose(input_file)) { + die("Error while closing file"); + } + } + return 0; +}