# include $(topdir)/MCONFIG.embedded
coredir = $(topdir)/core
-BTARGET = geodsp1s.bin geodspms.bin mk-lba-img \
+BTARGET = geodsp1s.bin geodspms.bin \
geodsp1s.img.xz geodspms.img.xz
# lba-1s.img.xz lba-ms.img.xz
# lba-1s.img lba-ms.img
# .PRECIOUS: lba-%.img
# Higher compression levels result in larger files
-%.img.xz: %.img
- xz -k0f $<
+%.img.xz: %.bin mk-lba-img
+ ./mk-lba-img < $< | xz -0f > $@ || ( rm -f $@ ; false )
%.img.gz: %.img
- gzip -9c $< > $@
-
-%.img: %.bin lba.img
- (cp -a lba.img $@ && dd conv=notrunc if=$< of=$@) || rm -f $@
+ ./mk-lba-img < $< | gzip -9 > $@ || ( rm -f $@ ; false )
%.bin: %.asm $(coredir)/writehex.inc $(coredir)/macros.inc $(coredir)/diskboot.inc
nasm $(NASMOPT) -o $@ -l $(@:.bin=.lst) $<
mk-lba-img: mk-lba-img.c
- gcc -o $@ $<
-
-lba.img: mk-lba-img
- ./$< $@
+ gcc -g -O -o $@ $<
tidy dist:
rm -Rf *.img
clean: tidy
- rm -f *.lst *.bin *_bin.c
+ rm -f *.lst *.bin *_bin.c mk-lba-img
spotless: clean
rm -f $(BTARGET)
#define NUM_SECT (256*63+1)
#define BPS (512)
-#define SECT_INT (512 / sizeof(int))
+#define SECT_INT (BPS / sizeof(unsigned int))
typedef unsigned char uint8_t;
typedef unsigned int uint32_t;
-const char DEF_FN[] = "lba.img";
+const char DEF_FN[] = "-";
int main(int argc, char *argv[])
{
- int i, j, b[SECT_INT], rv = 0, one = 0;
+ int i, rv = 0, one = 0;
+ unsigned int lba, b[SECT_INT];
+ int len;
FILE *f;
uint8_t tt = 0;
const char *fn;
fn = DEF_FN;
}
- f = fopen(fn, "w");
+ if (!strcmp(fn, "-"))
+ f = stdout;
+ else
+ f = fopen(fn, "w");
- if (f) {
- for (i = 0; i < NUM_SECT; i++) {
- if (one) {
- b[0] = i;
- } else {
- for (j = 0; j < (512 / sizeof(int)); j++) {
- b[j] = i;
- }
- }
- fwrite(b, 512, 1, f);
+ if (!f) {
+ fprintf(stderr, "%s: %s: unable to open for writing: %s\n",
+ argv[0], fn, strerror(errno));
+ return 1;
+ }
+
+ lba = 0;
+ while ((len = fread(b, BPS, 1, stdin))) {
+ if (len < BPS)
+ memset((char *)b + len, 0, BPS - len);
+ fwrite(b, BPS, 1, f);
+ lba++;
+ }
+
+ while (lba < NUM_SECT) {
+ if (one) {
+ b[0] = lba;
+ } else {
+ for (i = 0; i < SECT_INT; i++)
+ b[i] = lba;
}
- fclose(f);
- } else {
- puts("Unable to open for writing");
- rv = 1;
+ fwrite(b, BPS, 1, f);
+ lba++;
}
+
+ if (f != stdout)
+ fclose(f);
+
return rv;
}