#!/bin/bash ######################################################################################################### ## ## Name: assemble_cpm.sh ## Created: August 2018 ## Author(s): Philip Smart ## Description: Sharp MZ series CPM assembly tool ## This script builds a CPM version compatible with the MZ-80A RFS system. ## ## Credits: ## Copyright: (c) 2020-23 Philip Smart ## ## History: January 2020 - Initial script written. ## February 2023 - Updated as RFS extracted into seperate repository. ## ######################################################################################################### ## This source file 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, either version 3 of the License, or ## (at your option) any later version. ## ## This source file 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 . ######################################################################################################### ROOTDIR=`pwd | sed 's/\/tools//g'` TOOLDIR=${ROOTDIR}/tools JARDIR=${ROOTDIR}/tools ASM=glass.jar BUILDROMLIST="cbios cbios_bank1 cbios_bank2 cbios_bank3 cbios_bank4 cpm22" BUILDMZFLIST="" ASMDIR=${ROOTDIR}/asm ASMTMPDIR=${ROOTDIR}/tmp INCDIR=${ROOTDIR}/asm/include ROMDIR=${ROOTDIR}/roms # Compiled or source ROM files. MZFDIR=${ROOTDIR}/MZF/Common # MZF Format source files. MZBDIR=${ROOTDIR}/MZB/Common BLOCKSIZELIST="128 256" # Go through list and build images. # for f in ${BUILDROMLIST} do echo "Assembling: $f..." # Assemble the source. echo "java -jar ${JARDIR}/${ASM} ${ASMDIR}/${f}.asm ${ASMTMPDIR}/${f}.obj ${ASMTMPDIR}/${f}.sym" java -jar ${JARDIR}/${ASM} ${ASMDIR}/${f}.asm ${ASMTMPDIR}/${f}.obj ${ASMTMPDIR}/${f}.sym -I ${INCDIR} # On successful compile, perform post actions else go onto next build. # if [ $? = 0 ] then # The object file is binary, no need to link, copy according to build group. if [[ ${BUILDROMLIST} = *"${f}"* ]]; then echo "Copy ${ASMDIR}/${f}.obj to ${ROMDIR}/${f}.rom" cp ${ASMTMPDIR}/${f}.obj ${ROMDIR}/${f}.rom fi if [[ ${BUILDMZFLIST} = *"${f}"* ]]; then # Build standard MZF files for inclusion in the SD Drive. echo "Copy ${ASMDIR}/${f}.obj to ${MZFDIR}/${f}.mzf" cp ${ASMTMPDIR}/${f}.obj ${MZFDIR}/${f}.mzf # Create sectored versions of file for inclusion into the ROM Drives. for BLOCKSIZE in ${BLOCKSIZELIST} do FILESIZE=$(stat -c%s "${ASMTMPDIR}/${f}.obj") if [ $((${FILESIZE} % ${BLOCKSIZE})) -ne 0 ]; then FILESIZE=$(( ((${FILESIZE} / ${BLOCKSIZE})+1 ) * ${BLOCKSIZE} )) fi dd if=/dev/zero ibs=1 count=${FILESIZE} 2>/dev/null | tr "\000" "\377" > "${MZBDIR}/${f}.${BLOCKSIZE}.bin" dd if="${ASMTMPDIR}/${f}.obj" of="${MZBDIR}/${f}.${BLOCKSIZE}.bin" conv=notrunc 2>/dev/null done fi fi done