summaryrefslogtreecommitdiffstats
path: root/mmc
diff options
context:
space:
mode:
authorroot <root@ka-ata-killa.ourano.james.local>2021-02-24 23:45:58 +0000
committerroot <root@ka-ata-killa.ourano.james.local>2021-02-24 23:45:58 +0000
commit1575d4f53805f177474b5bb96daebede9b2dfb73 (patch)
tree91f6819f7280088bb9344fae7dbef8c43a0a04c0 /mmc
downloadbase-1575d4f53805f177474b5bb96daebede9b2dfb73.tar.gz
base-1575d4f53805f177474b5bb96daebede9b2dfb73.tar.bz2
base-1575d4f53805f177474b5bb96daebede9b2dfb73.zip
Diffstat (limited to 'mmc')
-rw-r--r--mmc/.gitignore6
-rw-r--r--mmc/Makefile30
-rw-r--r--mmc/assemble.c96
-rw-r--r--mmc/deinterleave.c27
4 files changed, 159 insertions, 0 deletions
diff --git a/mmc/.gitignore b/mmc/.gitignore
new file mode 100644
index 0000000..33091db
--- /dev/null
+++ b/mmc/.gitignore
@@ -0,0 +1,6 @@
+*.ssd
+*.dsdi
+assemble
+deinterleave
+BEEB.MMB
+disk.img
diff --git a/mmc/Makefile b/mmc/Makefile
new file mode 100644
index 0000000..049083d
--- /dev/null
+++ b/mmc/Makefile
@@ -0,0 +1,30 @@
+DSDI=$(wildcard *.dsdi)
+DSDI_SSD=${DSDI:%.dsdi=%-1.ssd} ${DSDI:%.dsdi=%-2.ssd}
+
+SSD=$(wildcard *.ssd) $(wildcard *.SSD) ${DSDI_SSD}
+
+DISK=/dev/mmcblk0p1
+
+
+
+default: disk.img
+ mkdosfs -F 16 ${DISK}
+ mcopy -i ${DISK} disk.img ::BEEB.MMB
+ sync
+
+%-1.ssd:%.dsdi deinterleave
+ ./deinterleave $< $@ ${@:%-1.ssd=%-2.ssd}
+
+%-2.ssd:%.dsdi deinterleave
+ ./deinterleave $< ${@:%-2.ssd=%-1.ssd} $@
+
+disk.img:assemble ${SSD}
+ ./assemble ${SSD} > $@
+
+assemble:assemble.c
+deinterleave:deinterleave.c
+
+clean:
+ /bin/rm -f deinterleave assemble disk.img ${DSDI_SSD}
+
+
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);
+}
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mmc/deinterleave.c b/mmc/deinterleave.c
new file mode 100644
index 0000000..3e33d55
--- /dev/null
+++ b/mmc/deinterleave.c
@@ -0,0 +1,27 @@
+#include <stdio.h>
+
+int main(int argc,char *argv[])
+{
+ FILE *in=fopen(argv[1],"r");
+ FILE *o1=fopen(argv[2],"w");
+ FILE *o2=fopen(argv[3],"w");
+ char buf[2560];
+ unsigned track;
+
+ if (!in) return -1;
+ if (!o1) return -1;
+ if (!o2) return -1;
+
+ for (track=0;track<80;++track) {
+ fread(buf,sizeof(buf),1,in);
+ fwrite(buf,sizeof(buf),1,o1);
+ fread(buf,sizeof(buf),1,in);
+ fwrite(buf,sizeof(buf),1,o2);
+ }
+
+ fclose(o2);
+ fclose(o1);
+ fclose(in);
+
+ return 0;
+}