--- /dev/null
+\r
+#include "core.h"\r
+\r
+void decode_fat(ushort *fat, bool backup)\r
+{\r
+ int i, j = 0;\r
+ uchar *img;\r
+\r
+ if(backup) img = (uchar *)ADR_DISKIMG + 0x00001400;\r
+ else img = (uchar *)ADR_DISKIMG + 0x00000200;\r
+\r
+ for(i = 0; i < 2880; i += 2){\r
+ fat[i + 0] = (img[j + 0] | img[j + 1] << 8) & 0xfff;\r
+ fat[i + 1] = (img[j + 1] >> 4 | img[j + 2] << 4) & 0xfff;\r
+ j += 3;\r
+ }\r
+ return;\r
+}\r
+\r
+void load_file(uint finfo_no, uchar *buf)\r
+{\r
+ int i;\r
+ uchar *img;\r
+ uint size;\r
+ ushort clustno;\r
+\r
+ if(finfo_no > 224) return;\r
+\r
+ img = (uchar *)ADR_DISKIMG + 0x00003e00;\r
+ size = system.io.file.list[finfo_no].size;\r
+ clustno = system.io.file.list[finfo_no].clustno;\r
+\r
+\r
+ for(;;){\r
+ if(size <= 512){\r
+ for(i = 0; i < size; i++){\r
+ buf[i] = img[clustno * 512 + i];\r
+ }\r
+ break;\r
+ }\r
+ for(i = 0; i < 512; i++){\r
+ buf[i] = img[clustno * 512 + i];\r
+ }\r
+ size -= 512;\r
+ buf += 512;\r
+ clustno = system.io.file.fat[clustno];\r
+ \r
+ }\r
+}\r
+\r
+uint search_file(char *name)\r
+{\r
+ int i, j;\r
+ uchar s[12];\r
+\r
+ for(j = 0; j < 11; j++){\r
+ s[j] = ' ';\r
+ }\r
+ j = 0;\r
+ for(i = 0; j < 11 && name[i] != 0x00; i++){\r
+ if(name[i] == '.' && j <= 8){\r
+ j = 8;\r
+ } else{\r
+ s[j] = name[i];\r
+ if('a' <= s[j] && s[j] <= 'z'){\r
+ s[j] -= 0x20;\r
+ }\r
+ j++;\r
+ }\r
+ }\r
+ for(i = 0; i < 224; ){\r
+ if(system.io.file.list[i].name[0] == 0x00) break;\r
+ if((system.io.file.list[i].type & 0x18) == 0){\r
+ for(j = 0; j < 11; j++){\r
+ if(system.io.file.list[i].name[j] != s[j]) goto next_file;\r
+ }\r
+ break; \r
+ }\r
+next_file:\r
+ i++;\r
+ }\r
+ if(i < 224 && system.io.file.list[i].name[0] != 0x00){\r
+ return i;\r
+ } else {\r
+ return 0xFFFFFFFF;\r
+ }\r
+}\r