BASIC compiler/interpreter for PIC32MX/MZ-80K
Révision | 8f8f7404e4911d01d5bc31708137ce2277b5efe3 (tree) |
---|---|
l'heure | 2019-05-15 04:50:35 |
Auteur | Katsumi <kmorimatsu@sour...> |
Commiter | Katsumi |
CLIB: Call init() at beginning of execution but at compiling.
@@ -39,12 +39,13 @@ const void* const clibdata[]={ | ||
39 | 39 | * static start address at 0xA0008000. When editing this function is required, |
40 | 40 | * the size of kseg2_program_mem and address of kseg0_program_mem |
41 | 41 | * in linker script must be changed. |
42 | + * This function is called twice, for exchanging data and for calling init(). | |
42 | 43 | */ |
43 | 44 | void* CLIBINIT clib_init(void** data){ |
44 | 45 | // Store pointer to data |
45 | - g_data=data; | |
46 | + if (data) g_data=data; | |
46 | 47 | // Call user initialization routine |
47 | - init(); | |
48 | + else init(); | |
48 | 49 | // Return pointer to clibdata |
49 | 50 | return (void*)&clibdata[0]; |
50 | 51 | } |
@@ -103,8 +103,8 @@ _GEN_EXCPT_ADDR = _ebase_address + 0x180; | ||
103 | 103 | MEMORY |
104 | 104 | { |
105 | 105 | kseg1_data_mem (w!x) : ORIGIN = (0xA0008000-0x080), LENGTH = 0x080 |
106 | - kseg2_program_mem (rx) : ORIGIN = (0xA0008000) , LENGTH = 0x040 | |
107 | - kseg0_program_mem (rx) : ORIGIN = (0xA0008000+0x040), LENGTH = (0x18000-0x040) | |
106 | + kseg2_program_mem (rx) : ORIGIN = (0xA0008000) , LENGTH = 0x050 | |
107 | + kseg0_program_mem (rx) : ORIGIN = (0xA0008000+0x050), LENGTH = (0x18000-0x050) | |
108 | 108 | kseg0_boot_mem : ORIGIN = (0x9D006000+0x1000+0x490), LENGTH = 0 /* dummy */ |
109 | 109 | exception_mem : ORIGIN = 0x9D006000, LENGTH = 0x1000 |
110 | 110 | kseg1_boot_mem : ORIGIN = (0x9D006000+0x1000), LENGTH = 0x490 |
@@ -1,5 +1,5 @@ | ||
1 | 1 | # |
2 | -#Sun May 12 18:25:29 PDT 2019 | |
2 | +#Tue May 14 12:14:44 PDT 2019 | |
3 | 3 | default.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=f2639e8ffe4e3a80ef2cdaeba61da340 |
4 | 4 | default.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc32\\v1.42\\bin |
5 | 5 | configurations-xml=d396d647be909bd57511217de4e29ec7 |
@@ -195,6 +195,10 @@ char* clib_main(){ | ||
195 | 195 | } |
196 | 196 | // Initial assembly is a jump statement to jump to the the following routine. |
197 | 197 | g_object[0]=0x08000000 | ((((int)(&g_object[g_objpos]))&0x0FFFFFFF)>>2); // j xxxxxxxx |
198 | + // Insert initialization code | |
199 | + g_object[g_objpos++]=0x3C050000|((((unsigned int)(0xA0008000+adjust))>>16)&0x0000FFFF); // lui a1,xxxx | |
200 | + g_object[g_objpos++]=0x34A50000|(((unsigned int)(0xA0008000+adjust))&0x0000FFFF); // ori a1,a1,xxxx | |
201 | + call_quicklib_code(call_clib_init,ASM_ADDIU_A0_ZERO_ | 0); | |
198 | 202 | // All done |
199 | 203 | return 0; |
200 | 204 | } |
@@ -78,7 +78,7 @@ example.cを編集(必要ならばファイル名を変更)する事で、Cラ | ||
78 | 78 | Cライブラリーを作成するにあたり、以下の規約に従って下さい。 |
79 | 79 | |
80 | 80 | 1.グローバル変数・スタティック変数領域の容量は、128バイト。 |
81 | - ・50個ほどのグローバル変数・スタティック変数が使用可能。 | |
81 | + ・20個ほどのグローバル変数・スタティック変数が使用可能。 | |
82 | 82 | ・大きなメモリー領域が必要な場合は、malloc(), calloc(), free()を使用する。 |
83 | 83 | ・グローバル変数の初期化は、init()関数で行なわなければならない。 |
84 | 84 | ・スタティック変数は実行前の初期化はできない(常に0で初期化される)。 |
@@ -517,9 +517,10 @@ char* hex_construct_line(); | ||
517 | 517 | #define ASM_ADDU_A1_V0_ZERO 0x00402821 |
518 | 518 | #define ASM_ADDU_A2_V0_ZERO 0x00403021 |
519 | 519 | #define ASM_ADDU_A3_V0_ZERO 0x00403821 |
520 | -#define ASM_ORI_A0_ZERO_ 0x34040000 | |
521 | -#define ASM_LW_A0_XXXX_S8 0x8FC40000 | |
522 | -#define ASM_LW_A0_XXXX_S5 0x8EA40000 | |
520 | +#define ASM_ORI_A0_ZERO_ 0x34040000 | |
521 | +#define ASM_ADDIU_A0_ZERO_ 0x24040000 | |
522 | +#define ASM_LW_A0_XXXX_S8 0x8FC40000 | |
523 | +#define ASM_LW_A0_XXXX_S5 0x8EA40000 | |
523 | 524 | |
524 | 525 | // Interrupt macros |
525 | 526 | // 32 different type interruptions are possible |
@@ -262,35 +262,28 @@ static const char class2text[]= | ||
262 | 262 | static const char hextext[]= |
263 | 263 | ":020000040000fa\n" |
264 | 264 | ":1080000000001c3c707f9c2721e09903e0ffbd2706\n" |
265 | -":108010001c00bfaf1000bcaf1880828f000044acc2\n" | |
266 | -":108020001c80998f09f82003000000001000bc8f0d\n" | |
267 | -":108030002080828f1c00bf8f0800e0032000bd2736\n" | |
265 | +":108010001c00bfaf1000bcaf030080101880828f1f\n" | |
266 | +":1080200005000010000044ac1c80998f09f8200363\n" | |
267 | +":10803000000000001000bc8f2080828f1c00bf8fca\n" | |
268 | +":088040000800e0032000bd2749\n" | |
268 | 269 | ":020000040000fa\n" |
269 | -":107f80000000000000000080a87f00a0408000a04a\n" | |
270 | -":107f9000408100a0000001a0f08000a0048100a0aa\n" | |
271 | -":087fa000488000a00000000071\n" | |
270 | +":107f80000000000000000080a07f00a0508000a042\n" | |
271 | +":107f9000dc8000a0000001a0588000a000000000cc\n" | |
272 | 272 | ":020000040000fa\n" |
273 | -":108040000800e0030000000000001c3c287f9c2783\n" | |
274 | -":1080500021e09903040080542480828f2480828f41\n" | |
275 | -":108060000800e003188142240800e003288142242c\n" | |
276 | -":1080700000001c3c007f9c2721e09903d8ffbd270e\n" | |
277 | -":108080002400bfaf2000b1af1c00b0af1000bcafe8\n" | |
278 | -":10809000218880001880908f040004240000058e41\n" | |
279 | -":1080a0002880998f09f82003000000001000bc8f81\n" | |
280 | -":1080b000212040000000058e2c80998f09f82003b4\n" | |
281 | -":1080c000000000001000bc8f212020023080998f1a\n" | |
282 | -":1080d00009f82003000000001000bc8f2400bf8faf\n" | |
283 | -":1080e0002000b18f1c00b08f0800e0032800bd27de\n" | |
284 | -":1080f0000000a28c080040000800bc8c0800e003cf\n" | |
285 | -":10810000000000000400a28c080040000800bc8ca5\n" | |
286 | -":088110000800e003000000007c\n" | |
273 | +":108050000800e0030000000000001c3c187f9c2783\n" | |
274 | +":1080600021e09903040080542480828f2480828f31\n" | |
275 | +":108070000800e003b48042240800e003c4804224e6\n" | |
276 | +":1080800000001c3cf07e9c2721e09903e0ffbd2707\n" | |
277 | +":108090001c00bfaf1000bcaf2880998f09f82003e7\n" | |
278 | +":1080a000000000001000bc8f1c00bf8f0800e00320\n" | |
279 | +":0480b0002000bd27c8\n" | |
287 | 280 | ":020000040000fa\n" |
288 | -":1081180048656c6c6f20576f726c6421000000001a\n" | |
289 | -":108128005468697320697320612074657374000052\n" | |
290 | -":088138005445535400000000ff\n" | |
281 | +":1080b40048656c6c6f20576f726c6421000000007f\n" | |
282 | +":1080c40054686973206973206120746573740000b7\n" | |
283 | +":0880d400544553540000000064\n" | |
291 | 284 | ":020000040000fa\n" |
292 | -":108140004001000080000000508100a000000000fd\n" | |
293 | -":0c815000388100a0708000a0000000003a\n" | |
285 | +":1080dc004001000080000000ec8000a000000000c7\n" | |
286 | +":0c80ec00d48000a0808000a000000000f4\n" | |
294 | 287 | ":00000001FF\n" |
295 | 288 | ; |
296 | 289 |
@@ -837,6 +837,26 @@ DELETE x[,y[,z[, ... ]]] | ||
837 | 837 | CALL x |
838 | 838 | xで指定されたオブジェクトのメソッドを呼び出す。「CALL」は省略可。 |
839 | 839 | |
840 | +<Cライブラリー呼び出し機能> | |
841 | +Cライブラリーの使い方について、詳しくはclib.txtを参照して下さい。以下は、関連す | |
842 | +る命令と関数です。 | |
843 | + | |
844 | +USECLIB x[,y[,z[, ... ]]] | |
845 | + Cライブラリーの利用を宣言する。x,y,z等は、ライブラリー名を6文字以内の英数字 | |
846 | + で指定。 | |
847 | +CLIB xxx::yyy[,z1[,z2 ...]] | |
848 | + Cライブラリー内の関数を呼び出す。xxxはライブラリー名、yyyは関数名。z1, z2等 | |
849 | + は引数(オプション)。 | |
850 | +CLIB(xxx::yyy[,z1[,z2 ... ]]) | |
851 | + Cライブラリー内の関数を呼び出し、整数を返す。xxxはライブラリー名、yyyは関数 | |
852 | + 名。z1, z2等は引数(オプション)。xxx::yyy([z1[,z2 ... ]])と書いても同じ。 | |
853 | +CLIB$(xxx::yyy[,z1[,z2 ... ]]) | |
854 | + Cライブラリー内の関数を呼び出し、文字列を返す。xxxはライブラリー名、yyyは関 | |
855 | + 数名。z1, z2等は引数(オプション)。xxx::yyy$([z1[,z2 ... ]])と書いても同じ。 | |
856 | +CLIB#(xxx::yyy[,z1[,z2 ... ]]) | |
857 | + Cライブラリー内の関数を呼び出し、実数を返す。xxxはライブラリー名、yyyは関 | |
858 | + 数名。z1, z2等は引数(オプション)。xxx::yyy#([z1[,z2 ... ]])と書いても同じ。 | |
859 | + | |
840 | 860 | <ヒント> |
841 | 861 | MachiKania ver 1.2 以降、FOR-NEXTループ、WHILE-WENDループ、DO-LOOPループの途中で、 |
842 | 862 | RETURN文が使えるようになりました。ただし、GOTO文でループの外に飛ぶと、予期せぬ結 |
@@ -863,7 +883,10 @@ ON GOTO分やON GOSUB文はサポートしていません。ただし、例え | ||
863 | 883 | を扱いたい場合は、同名の変数をVAR指定しないようにして下さい。 |
864 | 884 | |
865 | 885 | <バージョン履歴> |
866 | -・KM-1303 2019年?月公開。 | |
886 | +・KM-1304 2019年?月公開。 | |
887 | + ・Cライブラリー呼び出し機能を追加 | |
888 | + ・特殊な状況でクラス読み込みに失敗する不具合を修正。 | |
889 | +・KM-1303 2019年5月公開。 | |
867 | 890 | ・タイマー機能(USETIMER,TIMER, CORETIMERステートメントとTIMER(), CORETIMER()関 |
868 | 891 | 数)を追加。 |
869 | 892 | ・割り込み機能(INTERRUPTステートメント)を追加。 |
@@ -74,6 +74,7 @@ file_046=. | ||
74 | 74 | file_047=. |
75 | 75 | file_048=. |
76 | 76 | file_049=. |
77 | +file_050=. | |
77 | 78 | [GENERATED_FILES] |
78 | 79 | file_000=no |
79 | 80 | file_001=no |
@@ -125,6 +126,7 @@ file_046=no | ||
125 | 126 | file_047=no |
126 | 127 | file_048=no |
127 | 128 | file_049=no |
129 | +file_050=no | |
128 | 130 | [OTHER_FILES] |
129 | 131 | file_000=no |
130 | 132 | file_001=no |
@@ -176,6 +178,7 @@ file_046=yes | ||
176 | 178 | file_047=yes |
177 | 179 | file_048=yes |
178 | 180 | file_049=yes |
181 | +file_050=yes | |
179 | 182 | [FILE_INFO] |
180 | 183 | file_000=compiler.c |
181 | 184 | file_001=debug.c |
@@ -227,6 +230,7 @@ file_046=help.txt | ||
227 | 230 | file_047=reservednames.js |
228 | 231 | file_048=class.txt |
229 | 232 | file_049=sharedfiles.js |
233 | +file_050=clib.txt | |
230 | 234 | [SUITE_INFO] |
231 | 235 | suite_guid={62D235D8-2DB2-49CD-AF24-5489A6015337} |
232 | 236 | suite_state= |