From 1575d4f53805f177474b5bb96daebede9b2dfb73 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 24 Feb 2021 23:45:58 +0000 Subject: base --- mmc/.gitignore | 6 ++++ mmc/Makefile | 30 +++++++++++++++++ mmc/assemble.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ mmc/deinterleave.c | 27 +++++++++++++++ 4 files changed, 159 insertions(+) create mode 100644 mmc/.gitignore create mode 100644 mmc/Makefile create mode 100644 mmc/assemble.c create mode 100644 mmc/deinterleave.c (limited to 'mmc') 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 +#include +#include +#include +#include +#include + + + +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 + +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; +} -- cgit v1.2.3