build.sh: dialog-powered build frontend
This commit is contained in:
parent
6d2aa0f937
commit
04cc6c467c
3
Rakefile
3
Rakefile
@ -10,6 +10,9 @@ $stdout_mutex=Mutex.new
|
|||||||
|
|
||||||
# Rules
|
# Rules
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
|
task :all =>[:default] do
|
||||||
|
end
|
||||||
|
|
||||||
task :default do
|
task :default do
|
||||||
thread_print'Entering directory src'
|
thread_print'Entering directory src'
|
||||||
thread_print`cd src; rake`
|
thread_print`cd src; rake`
|
||||||
|
53
build.sh
Executable file
53
build.sh
Executable 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
|
@ -53,11 +53,13 @@ int main(int argc,char**argv)
|
|||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
puts("verifying ROM");
|
||||||
// Verify ROM is loaded
|
// Verify ROM is loaded
|
||||||
if(rom->rom)
|
if(rom->rom)
|
||||||
cpu->pc=PRGROM;
|
cpu->pc=PRGROM;
|
||||||
else
|
else
|
||||||
puterr("%s: No ROM loaded\n",__func__);
|
puterr("%s: No ROM loaded\n",__func__);
|
||||||
|
puts("ROM verified");
|
||||||
|
|
||||||
// Render -----
|
// Render -----
|
||||||
while(true)
|
while(true)
|
||||||
|
@ -25,6 +25,9 @@ $stdout_mutex=Mutex.new
|
|||||||
# Rules
|
# Rules
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
|
|
||||||
|
task :all => [:default] do
|
||||||
|
end
|
||||||
|
|
||||||
task :default => [:_65db, :_65da, :_fes, :test] do
|
task :default => [:_65db, :_65da, :_fes, :test] do
|
||||||
|
|
||||||
end
|
end
|
||||||
|
32
src/rom.c
32
src/rom.c
@ -102,38 +102,12 @@ void rom_map(rom_t*rom,ram_t*ram,size_t offset)
|
|||||||
return;
|
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
|
// Copy rom data into ram memory
|
||||||
// Put NES file header parsing here <---
|
// 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
|
#define min(x,y) ((x<y)?(x):(y))
|
||||||
// a smaller 'chunk' at a time was necessary on ArchLinux to prevent
|
memmove( ram->ram+offset, rom->rom, min(0x8000,rom->data_len));
|
||||||
// SIGSEGV crashing the program
|
#undef min
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Free memory allocated to ROM object
|
// Free memory allocated to ROM object
|
||||||
|
Loading…
Reference in New Issue
Block a user