BASIC compiler/interpreter for PIC32MX/MZ-80K
Revisão | 2c26c7ee910ece3ce4c08818952a652f3d5ba13d (tree) |
---|---|
Hora | 2019-05-22 08:01:15 |
Autor | Katsumi <kmorimatsu@sour...> |
Commiter | Katsumi |
Disable FS functions when MOS mode without SD/MMC card.
@@ -239,6 +239,7 @@ extern int g_compiling_class; | ||
239 | 239 | extern unsigned char g_num_classes; |
240 | 240 | extern char g_option_fastfield; |
241 | 241 | extern HEXLINE g_hexline; |
242 | +extern char g_fs_valid; | |
242 | 243 | extern int g_temp; |
243 | 244 | |
244 | 245 | /* Prototypes */ |
@@ -267,42 +267,35 @@ static const char hextext[]= | ||
267 | 267 | ":088040000800e0032000bd2749\n" |
268 | 268 | ":020000040000fa\n" |
269 | 269 | ":107f80000000000000000080ac7f00a0508000a036\n" |
270 | -":107f9000cc8100a0b48100a0388100a0000001a025\n" | |
271 | -":0c7fa000f08000a0588000a0000000004d\n" | |
270 | +":107f9000708100a0548100a0000001a0388100a0e1\n" | |
271 | +":0c7fa000588000a000000000000000005d\n" | |
272 | 272 | ":020000040000fa\n" |
273 | 273 | ":108050000800e0030000000000001c3c187f9c2783\n" |
274 | -":1080600021e09903e0ffbd271c00bfaf1000bcafab\n" | |
275 | -":108070000e0080542c80828f2880998f09f820036d\n" | |
276 | -":10808000000000001000bc8f2c80848fa08184240d\n" | |
277 | -":108090003080998f09f82003000000001000bc8f89\n" | |
278 | -":1080a0002c80828f02000010808142249081422423\n" | |
279 | -":1080b0001c00bf8f0800e0032000bd2700001c3c0f\n" | |
280 | -":1080c000b47e9c2721e09903e0ffbd271c00bfafd1\n" | |
281 | -":1080d0001000bcaf3480998f09f820030000000025\n" | |
282 | -":1080e0001000bc8f1c00bf8f0800e0032000bd27dc\n" | |
274 | +":1080600021e09903e0ffbd271c00bfaf1800b0afaf\n" | |
275 | +":108070001000bcaf110080542880828f1880908f30\n" | |
276 | +":108080000000048e2480998f09f82003000000006e\n" | |
277 | +":108090001000bc8f2880848f248184240000058eea\n" | |
278 | +":1080a0002c80998f09f82003000000001000bc8f7d\n" | |
279 | +":1080b0002880828f0200001004814224148142240f\n" | |
280 | +":1080c0001c00bf8f1800b08f0800e0032000bd2700\n" | |
281 | +":1080d00000001c3ca07e9c2721e09903e0ffbd2707\n" | |
282 | +":1080e0001c00bfaf1000bcaf3080998f09f820038f\n" | |
283 | +":1080f000000000001000bc8f1c00bf8f0800e003d0\n" | |
284 | +":048100002000bd2777\n" | |
283 | 285 | ":020000040000fa\n" |
284 | -":1080f00000001c3c807e9c2721e09903e0ffbd2707\n" | |
285 | -":108100001c00bfaf1000bcaf2480998f09f820037a\n" | |
286 | -":10811000000000001000bc8f0000438c0c00428c5b\n" | |
287 | -":108120000c00428c09f8400000007c8c1c00bf8fc2\n" | |
288 | -":088130000800e0032000bd2758\n" | |
286 | +":1081040048656c6c6f20576f726c6421000000002e\n" | |
287 | +":108114005468697320697320612074657374000066\n" | |
288 | +":10812400434c494220746573742e000054455354e3\n" | |
289 | +":048134000000000047\n" | |
289 | 290 | ":020000040000fa\n" |
290 | -":1081380000001c3c387e9c2721e09903e0ffbd2706\n" | |
291 | -":108148001c00bfaf1000bcaf2480998f09f8200332\n" | |
292 | -":10815800000000001000bc8f0000438c0c00428c13\n" | |
293 | -":108168001800428c09f8400000007c8c1c00bf8f6e\n" | |
294 | -":088178000800e0032000bd2710\n" | |
291 | +":108138000000a38c0c00a28c0c00428c08004000ac\n" | |
292 | +":0c81480000007c8c0800e0030000000038\n" | |
295 | 293 | ":020000040000fa\n" |
296 | -":1081800048656c6c6f20576f726c642100000000b2\n" | |
297 | -":1081900054686973206973206120746573740000ea\n" | |
298 | -":1081a000434c494220746573742e00005445535467\n" | |
299 | -":0481b00000000000cb\n" | |
294 | +":108154000000838c0c00828c1800428c08004000c4\n" | |
295 | +":0c81640000007c8c0800e003000000001c\n" | |
300 | 296 | ":020000040000fa\n" |
301 | -":1081b40000001c3cbc7d9c2721e099031880828f21\n" | |
302 | -":0881c4000800e0030000428cfa\n" | |
303 | -":020000040000fa\n" | |
304 | -":1081cc004001000080000000dc8100a000000000e5\n" | |
305 | -":0c81dc00ac8100a0bc8000a000000000ee\n" | |
297 | +":108170004001000080000000808100a0000000009d\n" | |
298 | +":0c818000308100a0d08000a000000000b2\n" | |
306 | 299 | ":00000001FF\n" |
307 | 300 | ; |
308 | 301 |
@@ -2193,7 +2193,7 @@ void run(int test){ | ||
2193 | 2193 | break; |
2194 | 2194 | } |
2195 | 2195 | // MOS: insertion |
2196 | - if (2==test) { | |
2196 | + if (2==test && !er2) { | |
2197 | 2197 | // Create HEX file as Self Running Apprication |
2198 | 2198 | msra(); |
2199 | 2199 | } |
@@ -2494,7 +2494,9 @@ void control_code_process(unsigned char k,unsigned char sh){ | ||
2494 | 2494 | break; |
2495 | 2495 | case VK_F2: //F2キー |
2496 | 2496 | if(num==0) break; |
2497 | +// MOS: modification | |
2497 | 2498 | if(sh & CHK_SHIFT) run(2); //create direct running file |
2499 | +// if(sh & CHK_SHIFT) msra(); //create direct running file | |
2498 | 2500 | else save_as(0); //ファイル名を付けて保存 |
2499 | 2501 | break; |
2500 | 2502 | case VK_F3: //F3キー |
@@ -102,6 +102,9 @@ unsigned char g_num_classes; | ||
102 | 102 | // OPTION FASTFIELD |
103 | 103 | char g_option_fastfield; |
104 | 104 | |
105 | +// Flag if file system has been initialized | |
106 | +char g_fs_valid; | |
107 | + | |
105 | 108 | // Result of reading a HEX file line |
106 | 109 | HEXLINE g_hexline; |
107 | 110 |
@@ -779,6 +779,11 @@ int lib_file(enum functions func, int a0, int a1, int v0){ | ||
779 | 779 | int i; |
780 | 780 | int buff[1]; |
781 | 781 | char* str; |
782 | + | |
783 | + // Immediately return if file system is invalid. | |
784 | + // See also "case LIB_FILE:" in _call_library(). | |
785 | + if (!g_fs_valid) return v0; | |
786 | + | |
782 | 787 | if (activefhandle) fhandle=s_fhandle[activefhandle-1]; |
783 | 788 | switch(func){ |
784 | 789 | case FUNC_FINIT: |
@@ -1011,6 +1016,7 @@ int _call_library(int a0,int a1,int v0,enum libs a3){ | ||
1011 | 1016 | scroll(g_libparams[1],v0); |
1012 | 1017 | return v0; |
1013 | 1018 | case LIB_FILE: |
1019 | + if (!g_fs_valid) err_str("File System not initialized"); | |
1014 | 1020 | return lib_file((enum functions)(a3 & FUNC_MASK),g_libparams[1],g_libparams[2],v0); |
1015 | 1021 | case LIB_KEYS: |
1016 | 1022 | return lib_keys(v0); |
@@ -212,6 +212,7 @@ int searchinittext(char *s){ | ||
212 | 212 | void readinifile(void){ |
213 | 213 | FSFILE *fp; |
214 | 214 | char inittext[9]; |
215 | + if (!g_fs_valid) return; | |
215 | 216 | |
216 | 217 | fp=FSfopen(INIFILE,"r"); |
217 | 218 | if(fp==NULL) return; |
@@ -267,7 +268,7 @@ void printhex32(unsigned int d){ | ||
267 | 268 | |
268 | 269 | int main(void){ |
269 | 270 | char *appname,*s; |
270 | - int use_editor, fs_valid; | |
271 | + int use_editor; | |
271 | 272 | |
272 | 273 | /* ポートの初期設定 */ |
273 | 274 | CNPUB = 0xFFFF; // PORTB全てプルアップ(I/O) |
@@ -326,9 +327,10 @@ int main(void){ | ||
326 | 327 | setcursorcolor(COLOR_NORMALTEXT); |
327 | 328 | printstr("Init File System..."); |
328 | 329 | // Initialize the File System |
329 | - fs_valid=FSInit(); //ファイルシステム初期化 | |
330 | - if(fs_valid==FALSE){ | |
331 | - if (use_editor) { | |
330 | + g_fs_valid=FSInit(); //ファイルシステム初期化 | |
331 | + if(g_fs_valid==FALSE){ | |
332 | + if (use_editor || !g_objpos_mos) { | |
333 | + // Editorモードの場合、及び、BASファイル読み込みモードの場合 | |
332 | 334 | //エラーの場合停止 |
333 | 335 | setcursorcolor(COLOR_ERRORTEXT); |
334 | 336 | printstr("\nFile System Error\n"); |
@@ -336,11 +338,14 @@ int main(void){ | ||
336 | 338 | printstr("And Reset\n"); |
337 | 339 | while(1) asm("wait"); |
338 | 340 | } else { |
339 | - // MOSモードの場合は、エラー表示の後、続ける | |
340 | - printstr("Failed\n"); | |
341 | + // MOSモードの場合は、あと二回、トライ | |
342 | + // エラー表示の後、続ける | |
343 | + g_fs_valid=FSInit(); | |
344 | + if(g_fs_valid==FALSE) g_fs_valid=FSInit(); | |
341 | 345 | } |
342 | 346 | } |
343 | - printstr("OK\n"); | |
347 | + if (g_fs_valid) printstr("OK\n"); | |
348 | + else printstr("Failed\n"); | |
344 | 349 | |
345 | 350 | // 音源初期化 |
346 | 351 | OC4RS=LATFbits.LATF5 ? 0xff:0x00; |
@@ -350,7 +355,7 @@ int main(void){ | ||
350 | 355 | initialvmode=VMODE_STDTEXT; // 標準テキストモード(36文字) |
351 | 356 | lockkey=2; // NumLockキーオン |
352 | 357 | keytype=0; // 日本語キーボード |
353 | - if (fs_valid) readinifile(); //INIファイル読み込み | |
358 | + readinifile(); //INIファイル読み込み | |
354 | 359 | printstr("Init PS/2..."); |
355 | 360 | wait60thsec(30); //0.5秒待ち |
356 | 361 | if(ps2init()){ //PS/2初期化 |
@@ -366,9 +371,10 @@ int main(void){ | ||
366 | 371 | // 実行中HEXファイル名がHEXFILEと一致した場合はエディタ起動 |
367 | 372 | if(use_editor) texteditor(); //テキストエディター呼び出し |
368 | 373 | |
374 | + g_disable_break=1; // Breakキー無効化 | |
375 | + // buttonmode(); //ボタン有効化 | |
369 | 376 | if (g_objpos_mos) { |
370 | 377 | // MOSからコードをコピーして実行 |
371 | - g_disable_break=1; // Breakキー無効化 | |
372 | 378 | runbasic(0,2); |
373 | 379 | } else { |
374 | 380 | // 実行中HEXファイル名の「.HEX」を「.BAS」に置き換えてBASファイルを実行 |
@@ -378,8 +384,6 @@ int main(void){ | ||
378 | 384 | appname=".BAS"; |
379 | 385 | while(*appname!=0) *s++=*appname++; |
380 | 386 | *s=0; |
381 | - // buttonmode(); //ボタン有効化 | |
382 | - g_disable_break=1; // Breakキー無効化 | |
383 | 387 | runbasic(tempfile,0); |
384 | 388 | } |
385 | 389 | while(1) asm(WAIT); |
@@ -1442,11 +1442,11 @@ char* fclose_statement(){ | ||
1442 | 1442 | |
1443 | 1443 | TODO: candidates to add: |
1444 | 1444 | |
1445 | -int FSattrib (FSFILE * file, unsigned char attributes); | |
1445 | +// int FSattrib (FSFILE * file, unsigned char attributes); | |
1446 | 1446 | int FSrename (const char * fileName, FSFILE * fo); |
1447 | 1447 | int FSmkdir (char * path); |
1448 | 1448 | int FSrmdir (char * path, unsigned char rmsubdirs); |
1449 | -int SetClockVars (unsigned int year, unsigned char month, unsigned char day, unsigned char hour, unsigned char minute, unsigned char second); | |
1449 | +// int SetClockVars (unsigned int year, unsigned char month, unsigned char day, unsigned char hour, unsigned char minute, unsigned char second); | |
1450 | 1450 | int FindFirst (const char * fileName, unsigned int attr, SearchRec * rec); |
1451 | 1451 | int FindNext (SearchRec * rec); |
1452 | 1452 |