From 04cc6c467c93ce679bdaa2dd971974b6e61c3463 Mon Sep 17 00:00:00 2001 From: cr0sd Date: Tue, 5 May 2020 10:30:10 -0500 Subject: [PATCH] build.sh: dialog-powered build frontend --- Rakefile | 3 +++ build.sh | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/65db.c | 2 ++ src/Rakefile | 3 +++ src/rom.c | 32 +++---------------------------- 5 files changed, 64 insertions(+), 29 deletions(-) create mode 100755 build.sh diff --git a/Rakefile b/Rakefile index 511d71b..6a8b5d7 100644 --- a/Rakefile +++ b/Rakefile @@ -10,6 +10,9 @@ $stdout_mutex=Mutex.new # Rules # ----------------------------- +task :all =>[:default] do +end + task :default do thread_print'Entering directory src' thread_print`cd src; rake` diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..ec8302b --- /dev/null +++ b/build.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +# Build/UI options +NV=20 +NH=50 +TMPFILE=._buildconfig +NJOBS=4 +TARGET="all" +JOBSOPT="-j" + +# Check if dialog is found on system +if [ $(which dialog > /dev/null) -ne 0 ]; then + echo "$0: error: could not find dialog." +fi + +# Choose make vs. rake +dialog --title "$0" --radiolist "Choose make utility" $NV $NH 10 \ + make "" on \ + rake "" off \ + 2>$TMPFILE +MAKECMD=$(cat .dialogtmpfile) + +# Choose TARGET +dialog --title "$0" --radiolist "Choose target" $NV $NH 10 \ + all "all" on \ + clean "clean" off \ + 2>$TMPFILE +TARGET=$(cat .dialogtmpfile) + +# Choose multi-threading/jobs options +dialog --title "$0" --radiolist "Choose number of jobs/threads" $NV $NH 10 \ + 1 "1 thread (one job at a time)" off \ + 2 "2 threads" off \ + 4 "4 threads" on \ + 8 "8 threads" off \ + 2>$TMPFILE +NJOBS=$(cat .dialogtmpfile) + +# Confirm build options +dialog --title "$0" --yesno "You chose to build $TARGET with $NJOBS jobs. Is this okay?\n\nPress No to cancel build." $NV $NH +YESNO=$? +if [ $YESNO -eq 0 ]; then + if [ $MAKECMD = "rake" ]; then JOBSOPT=""; NJOBS=""; fi + dialog --prgbox "$MAKECMD $TARGET $JOBSOPT $NJOBS" $NV $NH +fi + +# Remove temporary file +rm -f $TMPFILE + +# 'Clear screen' for niceness +for x in {0..7}; do + echo "" +done diff --git a/src/65db.c b/src/65db.c index 9ababf4..44e7543 100644 --- a/src/65db.c +++ b/src/65db.c @@ -53,11 +53,13 @@ int main(int argc,char**argv) refresh(); } + puts("verifying ROM"); // Verify ROM is loaded if(rom->rom) cpu->pc=PRGROM; else puterr("%s: No ROM loaded\n",__func__); + puts("ROM verified"); // Render ----- while(true) diff --git a/src/Rakefile b/src/Rakefile index 5f02fbd..70768ff 100644 --- a/src/Rakefile +++ b/src/Rakefile @@ -25,6 +25,9 @@ $stdout_mutex=Mutex.new # Rules # ----------------------------- +task :all => [:default] do +end + task :default => [:_65db, :_65da, :_fes, :test] do end diff --git a/src/rom.c b/src/rom.c index cf70f7a..4ce2d32 100644 --- a/src/rom.c +++ b/src/rom.c @@ -102,38 +102,12 @@ void rom_map(rom_t*rom,ram_t*ram,size_t offset) return; } - // ! TODO: The memmove below needs to copy all of the data in - // ! ROM into RAM. It should stop when it reaches $FFFF or - // ! all the ROM has been copied. - // ! NOTE: Apparently we are loading from the $8000 offset of the - // ! FILE ITSELF. That's not what we want. - - uint32_t len;//=(0xffff>rom->data_len)?(0xffff-0x8000):(rom->data_len); - if(0xffff-0x8000>rom->data_len)len=0x7fff; - else if(rom->data_len>0xffff)len=0xffff; - else len=rom->data_len; - - //printf("copying %d (%04X) bytes from ROM into RAM\n", - //len,len); - //printf("data_len: %d (%04X)\n",rom->data_len,rom->data_len); - //printf("$7fff>data_len?: %s\n",(0xffff>rom->data_len)?"yes":"no"); - //memmove(ram->ram,rom->rom,len); - // Copy rom data into ram memory // Put NES file header parsing here <--- - //printw("copying %u bytes into RAM from ROM\n",rom->data_len); - // NOTE: Substitution of copying entire data_len with copying - // a smaller 'chunk' at a time was necessary on ArchLinux to prevent - // SIGSEGV crashing the program - - const size_t DATA_CHUNK=2048; - // mov RAM, ROM * 2048 - //printf("%s: rom length: '%d'\n",__func__,rom->data_len); - for(size_t len=rom->data_len;len>0;len-=(len>DATA_CHUNK)?DATA_CHUNK:len) - //printf("memmove ram, rom ($%04X/$%04X)\n",rom->data_len-len,rom->data_len), - memmove(ram->ram+offset,rom->rom,(len>DATA_CHUNK)?DATA_CHUNK:len); - //memmove(ram->ram,rom->rom,rom->data_len); + #define min(x,y) ((xram+offset, rom->rom, min(0x8000,rom->data_len)); + #undef min } // Free memory allocated to ROM object