summaryrefslogtreecommitdiffstats
path: root/mmc/assemble.c
diff options
context:
space:
mode:
Diffstat (limited to 'mmc/assemble.c')
-rw-r--r--mmc/assemble.c96
1 files changed, 96 insertions, 0 deletions
diff --git a/mmc/assemble.c b/mmc/assemble.c
new file mode 100644
index 0000000..05bf769
--- /dev/null
+++ b/mmc/assemble.c
@@ -0,0 +1,96 @@
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <string.h>
+#include <strings.h>
+
+
+
+char buf[204800];
+
+int write_entry(int image,void *ptr)
+{
+off_t o=(image+1)*16;
+lseek(1,o,SEEK_SET);
+write(1,ptr,16);
+}
+
+int write_image(int image,void *ptr)
+{
+off_t o=(image*204800)+8192;
+lseek(1,o,SEEK_SET);
+write(1,ptr,204800);
+}
+
+
+int main(int argc,char *argv[])
+{
+int image=0;
+int fd,i;
+uint8_t entry[16];
+char *ptr;
+
+
+bzero(entry,sizeof(entry));
+entry[0]=0;
+entry[1]=1;
+entry[2]=2;
+entry[3]=3;
+lseek(1,0L,SEEK_SET);
+write(1,entry,16);
+
+
+for (argc--,argv++; argc;argc--,argv++)
+{
+
+bzero(buf,sizeof(buf));
+fd=open(*argv,O_RDONLY);
+read(fd,buf,sizeof(buf));
+close(fd);
+
+ptr=strstr(*argv,".ssd");
+if (ptr) *ptr='\0';
+ptr=strstr(*argv,".SSD");
+if (ptr) *ptr='\0';
+
+bzero(entry,sizeof(entry));
+strncpy(entry,*argv,12);
+
+
+entry[12]=0;
+entry[13]=0;
+entry[14]=0;
+entry[15]=0x0f;
+
+write_image(image,buf);
+write_entry(image,entry);
+
+image++;
+}
+
+bzero(buf,sizeof(buf));
+for (;image<511;++image) {
+
+bzero(entry,sizeof(entry));
+entry[15]=0xf0;
+write_image(image,buf);
+}
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+