aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2022-02-24 21:10:24 -0800
committerKartik Agaram <vc@akkartik.com>2022-02-24 21:10:24 -0800
commitcab68a5cfce9857b650adc03364423204e27827b (patch)
tree6dd3912b1faa0d427c8b76c2590df2a271afc635
parentdbe169fc5d4b7fb979a3ac2726d5ee254a1bb71a (diff)
downloadmu-cab68a5cfce9857b650adc03364423204e27827b.tar.gz
klunky attempt to support BSD stat
Many thanks again, Wade.
-rw-r--r--README.md3
-rwxr-xr-xtranslate_emulated21
2 files changed, 17 insertions, 7 deletions
diff --git a/README.md b/README.md
index f4525f74..2ee0c8c1 100644
--- a/README.md
+++ b/README.md
@@ -103,6 +103,9 @@ For Macs and other Unix-like systems, use the (much slower) emulator:
./translate_emulated apps/ex2.mu # 2-5 minutes to emit code.img
```
+(Mac OS may require either editing `translate_emulated` or installing GNU
+coreutils. Look in the script if you get an error about `stat`.)
+
Mu programs can be written for two very different environments:
* At the top-level, Mu programs emit a bootable image that runs without an OS
diff --git a/translate_emulated b/translate_emulated
index d8da585c..b8392095 100755
--- a/translate_emulated
+++ b/translate_emulated
@@ -41,19 +41,26 @@ cat a.survey |linux/bootstrap/boots
dd if=a.bin of=code.img conv=notrunc
-if [ `stat --printf="%s" a.bin` -ge 492544 ] # 15 tracks * 63 sectors per track * 512 bytes per sector (keep this sync'd with boot.subx)
+file_size() {
+ stat --printf="%s" $*
+ # if you're on Mac OS and haven't installed GNU coreutils (coreutils on
+ # Homebrew or Macports), switch this to:
+# stat -f "%z" $*
+}
+
+if [ `file_size a.bin` -ge 492544 ] # 15 tracks * 63 sectors per track * 512 bytes per sector (keep this sync'd with boot.subx)
then
echo "a.bin won't all be loaded on boot"
exit 1
fi
-if [ `stat --printf="%s" a.bin` -ge 492544 ] # 15 tracks * 63 sectors per track * 512 bytes per sector
+if [ `file_size a.bin` -ge 492544 ] # 15 tracks * 63 sectors per track * 512 bytes per sector
then
echo "a.bin will overwrite BIOS/Video memory; you'll need to adjust boot.subx to load code to some other non-contiguous area of memory"
exit 1
fi
-if [ `stat --printf="%s" a.bin` -ge $(($FONT*512)) ]
+if [ `file_size a.bin` -ge $(($FONT*512)) ]
then
echo "a.bin will overwrite font in disk"
exit 1
@@ -61,7 +68,7 @@ fi
## Latter half of disk is for debug info
-if [ `stat --printf="%s" labels` -ge 1048576 ] # 8 reads * 256 sectors * 512 bytes per sector
+if [ `file_size labels` -ge 1048576 ] # 8 reads * 256 sectors * 512 bytes per sector
then
echo "labels won't all be loaded on abort"
exit 1
@@ -78,19 +85,19 @@ dd if=labels of=code.img seek=$DEBUG conv=notrunc
## Font data at another well-defined location
cat font.subx |sed 's,/[^ ]*,,' |linux/bootstrap/bootstrap run linux/hex > a.font
-if [ `stat --printf="%s" a.font` -ge 262144 ] # 0x200 sectors * 512 bytes per sector (keep this sync'd with boot.subx)
+if [ `file_size a.font` -ge 262144 ] # 0x200 sectors * 512 bytes per sector (keep this sync'd with boot.subx)
then
echo "font won't all be loaded on boot"
exit 1
fi
-if [ `stat --printf="%s" a.font` -ge 14680064 ] # 0x00e00000 = 0x00f00000 - 0x00100000
+if [ `file_size a.font` -ge 14680064 ] # 0x00e00000 = 0x00f00000 - 0x00100000
then
echo "font is so large it overlaps the ISA memory hole; see https://wiki.osdev.org/Memory_Map_(x86)"
exit 1
fi
-if [ `stat --printf="%s" a.font` -ge $(( ($DEBUG - $FONT) * 512 )) ]
+if [ `file_size a.font` -ge $(( ($DEBUG - $FONT) * 512 )) ]
then
echo "font will overwrite debug info in disk"
exit 1