sms conversion tool
[megadrive.git] / mx / linux / sms2mx.c
CommitLineData
262a16f4 1#include <stdio.h>
2#include <string.h>
3
4#define IN_SIZE 0x8000
5static unsigned char buff[0x400000], buff_in[IN_SIZE];
6
7int main(int argc, char *argv[])
8{
9 FILE *fi, *fo;
10 int size, bsize;
11 int i, o;
12
13 if (argc != 3) {
14 fprintf(stderr, "usage:\n%s <sms ROM> <mx img>\n", argv[0]);
15 return 1;
16 }
17
18 fi = fopen(argv[1], "rb");
19 if (fi == NULL) {
20 fprintf(stderr, "can't open: %s\n", argv[1]);
21 return 1;
22 }
23
24 fo = fopen(argv[2], "wb");
25 if (fo == NULL) {
26 fprintf(stderr, "can't open: %s\n", argv[2]);
27 return 1;
28 }
29
30 fseek(fi, 0, SEEK_END);
31 size = ftell(fi);
32 fseek(fi, 0, SEEK_SET);
33
34 if (size > IN_SIZE) {
35 fprintf(stderr, "ROMs > 32k won't work\n");
36 size = IN_SIZE;
37 }
38
39 if (fread(buff_in, 1, size, fi) != size)
40 fprintf(stderr, "failed to read %s\n", argv[1]);
41
42 memset(buff, 0, sizeof(buff));
43
44 for (bsize = 1; bsize < size; bsize <<= 1)
45 ;
46
47 for (i = 0, o = 0; o < sizeof(buff); i = (i + 1) & (bsize - 1), o += 2)
48 buff[o] = buff[o+1] = buff_in[i];
49
50 if (fwrite(buff, 1, 0x400000, fo) != 0x400000)
51 fprintf(stderr, "failed to write to %s\n", argv[2]);
52 fclose(fi);
53 fclose(fo);
54
55 return 0;
56}
57