build.sh: dialog-powered build frontend

This commit is contained in:
cr0sd 2020-05-05 10:30:10 -05:00
parent 6d2aa0f937
commit 04cc6c467c
5 changed files with 64 additions and 29 deletions

View File

@ -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`

53
build.sh Executable file
View File

@ -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

View File

@ -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)

View File

@ -25,6 +25,9 @@ $stdout_mutex=Mutex.new
# Rules
# -----------------------------
task :all => [:default] do
end
task :default => [:_65db, :_65da, :_fes, :test] do
end

View File

@ -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) ((x<y)?(x):(y))
memmove( ram->ram+offset, rom->rom, min(0x8000,rom->data_len));
#undef min
}
// Free memory allocated to ROM object