BASIC compiler/interpreter for PIC32MX/MZ-80K
Revisión | 9d8a180b0df55b66a4dadf3f48e446005e9c5ae6 (tree) |
---|---|
Tiempo | 2019-04-15 04:37:01 |
Autor | Katsumi <kmorimatsu@sour...> |
Commiter | Katsumi |
Kenken's change for file select by protozoa.
@@ -280,7 +280,6 @@ char* fput_statement(); | ||
280 | 280 | char* fputc_statement(); |
281 | 281 | char* fremove_statement(); |
282 | 282 | char* label_statement(); |
283 | -char* exec_statement(); | |
284 | 283 | |
285 | 284 | char* function(void); |
286 | 285 | char* str_function(void); |
@@ -376,8 +375,6 @@ void stop_timer(); | ||
376 | 375 | char* usetimer_statement(); |
377 | 376 | char* timer_statement(); |
378 | 377 | char* timer_function(); |
379 | -char* coretimer_statement(); | |
380 | -char* coretimer_function(); | |
381 | 378 | char* interrupt_statement(); |
382 | 379 | |
383 | 380 | /* Error messages */ |
@@ -496,7 +493,6 @@ char* interrupt_statement(); | ||
496 | 493 | #define INTERRUPT_INKEY 3 |
497 | 494 | #define INTERRUPT_MUSIC 4 |
498 | 495 | #define INTERRUPT_WAVE 5 |
499 | -#define INTERRUPT_CORETIMER 6 | |
500 | 496 | |
501 | 497 | extern int g_interrupt_flags; |
502 | 498 | extern int g_int_vector[]; |
@@ -11,10 +11,350 @@ | ||
11 | 11 | #include "compiler.h" |
12 | 12 | #include "main.h" |
13 | 13 | |
14 | -unsigned char currentfile[13],tempfile[13]; //編集中のファイル名、一時ファイル名 | |
14 | +//配列RAM[]内にメモリ動的確保するためのポインタ | |
15 | +char *editormallocp; | |
16 | + | |
17 | +//unsigned char cwdpath[PATHNAMEMAX]; //現在のディレクトリのパス名 | |
18 | +unsigned char *cwdpath; //実体は配列RAM[]の中に確保する | |
19 | + | |
20 | +unsigned char tempfile[13]; //編集中のファイル名、一時ファイル名 | |
21 | + | |
22 | +//unsigned char filenames[MAXFILENUM][13]; //ロード時のファイル名一覧バッファ | |
23 | +unsigned char (*filenames)[13]; //実体は配列RAM[]の中に確保する | |
24 | + | |
25 | +unsigned char runfile[13]; //実行ファイル名 | |
26 | + | |
27 | +const unsigned char Message1[]="Hit Any Key\n"; | |
28 | +const unsigned char Message2[]="File System Error\n"; | |
29 | +const unsigned char Message3[]="Retry:[Enter] / Quit:[ESC]\n"; | |
30 | +const unsigned char ROOTDIR[]="\\"; | |
31 | + | |
32 | +unsigned char * editormalloc(int size){ | |
33 | +//配列RAM[]内にサイズsizeの領域を確保し、先頭アドレスを返す | |
34 | +//確保できない場合は、エラー表示し動作停止 | |
35 | + unsigned char *p; | |
36 | + if(editormallocp+size>RAM+RAMSIZE){ | |
37 | + printstr("Cannot allocate memory"); | |
38 | + while(1) asm("wait"); | |
39 | + } | |
40 | + p=editormallocp; | |
41 | + editormallocp+=size; | |
42 | + return p; | |
43 | +} | |
15 | 44 | |
16 | 45 | void wait60thsec(unsigned short n){ |
17 | 46 | // 60分のn秒ウェイト(ビデオ画面の最下行信号出力終了まで待つ) |
18 | 47 | n+=drawcount; |
19 | 48 | while(drawcount!=n) asm(WAIT); |
20 | 49 | } |
50 | +int filesystemretry(){ | |
51 | +// SDファイルシステムの再初期化確認と実施 | |
52 | +// SDファイルへの保存や読み込み時にファイルエラーが発生した場合に呼び出す | |
53 | +// 戻り値 0:初期化成功、-1:成功することなくEscapeで抜けた | |
54 | + unsigned short vk; | |
55 | + while(1){ | |
56 | + setcursorcolor(COLOR_NORMALTEXT); | |
57 | + printstr((unsigned char *)Message3); //Retry / Quit | |
58 | + while(1){ | |
59 | + inputchar(); //1文字入力待ち | |
60 | + vk=vkey & 0xff; | |
61 | + if(vk==VK_RETURN || vk==VK_SEPARATOR) break; | |
62 | + if(vk==VK_ESCAPE || vk==VK_F1) return -1; | |
63 | + } | |
64 | + //ファイルシステム初期化 | |
65 | + if(FSInit()!=FALSE) return 0; //成功 | |
66 | + //エラーの場合 | |
67 | + setcursorcolor(COLOR_ERRORTEXT); | |
68 | + printstr((unsigned char *)Message2);//File System Error | |
69 | + } | |
70 | +} | |
71 | +void printfilename(unsigned char x,unsigned char y,int f,int num_dir){ | |
72 | +// x,yの位置にファイル名またはディレクトリ名を表示 | |
73 | + | |
74 | + if(f==-2){ | |
75 | + setcursor(x,y,COLOR_ERRORTEXT); | |
76 | + printchar('<'); | |
77 | + printstr("New FILE"); | |
78 | + printchar('>'); | |
79 | + } | |
80 | + else if(f==-1){ | |
81 | + setcursor(x,y,COLOR_ERRORTEXT); | |
82 | + printchar('<'); | |
83 | + printstr("New Dir"); | |
84 | + printchar('>'); | |
85 | + } | |
86 | + else if(f<num_dir){ | |
87 | + setcursor(x,y,COLOR_DIR); | |
88 | + printchar('['); | |
89 | + printstr(filenames[f]); | |
90 | + printchar(']'); | |
91 | + } | |
92 | + else{ | |
93 | + setcursor(x,y,COLOR_NORMALTEXT); | |
94 | + printstr(filenames[f]); | |
95 | + } | |
96 | +} | |
97 | +int select_dir_file(int filenum,int num_dir, unsigned char* msg){ | |
98 | +// filenames[]配列に読み込まれたファイルまたはディレクトリを画面表示しキーボードで選択する | |
99 | +// filenum:ファイル+ディレクトリ数 | |
100 | +// num_dir:ディレクトリ数(filenames[]は先頭からnum_dir-1までがディレクトリ) | |
101 | +// msg:画面上部に表示するメッセージ | |
102 | +// 戻り値 | |
103 | +// filenames[]の選択されたファイルまたはディレクトリ番号 | |
104 | +// -1:新規ディレクトリ作成、tempfile[]にディレクトリ名 | |
105 | +// -2:新規ファイル作成、tempfile[]にファイル名 | |
106 | +// -3:ESCキーが押された | |
107 | + int top,f; | |
108 | + unsigned char *ps,*pd; | |
109 | + int x,y; | |
110 | + unsigned char vk; | |
111 | + //ファイル一覧を画面に表示 | |
112 | + cls(); | |
113 | + setcursor(0,0,COLOR_NORMALTEXT); | |
114 | + printstr(msg); | |
115 | + printstr(": "); | |
116 | + setcursorcolor(4); | |
117 | +// printstr("Select&[FIRE] / [START]\n"); | |
118 | + printstr("Select & [FIRE]\n"); | |
119 | + for(f=-2;f<filenum;f++){ | |
120 | + x=(f&1)*15+1; | |
121 | + y=(f+2)/2+1; | |
122 | + if(y>=WIDTH_Y-1) break; | |
123 | + printfilename(x,y,f,num_dir); | |
124 | + } | |
125 | + top=-2;//画面一番先頭のファイル番号 | |
126 | + f=-2;//現在選択中のファイル番号 | |
127 | + while(1){ | |
128 | + setcursor((f&1)*15,(f-top)/2+1,5); | |
129 | + printchar(0x1c);// Right Arrow | |
130 | + cursor--; | |
131 | + while(1){ | |
132 | + inputchar(); | |
133 | + vk=vkey & 0xff; | |
134 | + if(vk) break; | |
135 | + } | |
136 | + printchar(' '); | |
137 | + setcursor(0,WIDTH_Y-1,COLOR_NORMALTEXT); | |
138 | + for(x=0;x<twidth-1;x++) printchar(' '); //最下行のステータス表示を消去 | |
139 | + switch(vk){ | |
140 | + case VK_UP: | |
141 | + case VK_NUMPAD8: | |
142 | + //上矢印キー | |
143 | + if(f>=0){ | |
144 | + f-=2; | |
145 | + if(f<top){ | |
146 | + //画面最上部の場合、下にスクロールして最上部にファイル名2つ表示 | |
147 | + if(twidth==WIDTH_X1){ | |
148 | + setcursor(WIDTH_X1-1,WIDTH_Y-2,COLOR_NORMALTEXT); | |
149 | + while(cursor>=TVRAM+WIDTH_X1*2){ | |
150 | + *cursor=*(cursor-WIDTH_X1); | |
151 | + *(cursor+ATTROFFSET1)=*(cursor+ATTROFFSET1-WIDTH_X1); | |
152 | + cursor--; | |
153 | + } | |
154 | + while(cursor>=TVRAM+WIDTH_X1) *cursor--=' '; | |
155 | + } | |
156 | + else{ | |
157 | + setcursor(WIDTH_X2-1,WIDTH_Y-2,COLOR_NORMALTEXT); | |
158 | + while(cursor>=TVRAM+WIDTH_X2*2){ | |
159 | + *cursor=*(cursor-WIDTH_X2); | |
160 | + *(cursor+ATTROFFSET2)=*(cursor+ATTROFFSET2-WIDTH_X2); | |
161 | + cursor--; | |
162 | + } | |
163 | + while(cursor>=TVRAM+WIDTH_X2) *cursor--=' '; | |
164 | + } | |
165 | + top-=2; | |
166 | + printfilename(1,1,top,num_dir); | |
167 | + printfilename(16,1,top+1,num_dir); | |
168 | + } | |
169 | + } | |
170 | + break; | |
171 | + case VK_DOWN: | |
172 | + case VK_NUMPAD2: | |
173 | + //下矢印キー | |
174 | + if(((f+2)&0xfffe)<filenum){ | |
175 | + f+=2; | |
176 | + if(f>=filenum) f--; | |
177 | + if(f-top>=(WIDTH_Y-2)*2){ | |
178 | + //画面最下部の場合、上にスクロールして最下部にファイル名1つor2つ表示 | |
179 | + setcursor(0,1,COLOR_NORMALTEXT); | |
180 | + if(twidth==WIDTH_X1){ | |
181 | + while(cursor<TVRAM+WIDTH_X1*(WIDTH_Y-2)){ | |
182 | + *cursor=*(cursor+WIDTH_X1); | |
183 | + *(cursor+ATTROFFSET1)=*(cursor+ATTROFFSET1+WIDTH_X1); | |
184 | + cursor++; | |
185 | + } | |
186 | + while(cursor<TVRAM+WIDTH_X1*(WIDTH_Y-1)) *cursor++=' '; | |
187 | + } | |
188 | + else{ | |
189 | + while(cursor<TVRAM+WIDTH_X2*(WIDTH_Y-2)){ | |
190 | + *cursor=*(cursor+WIDTH_X2); | |
191 | + *(cursor+ATTROFFSET2)=*(cursor+ATTROFFSET2+WIDTH_X2); | |
192 | + cursor++; | |
193 | + } | |
194 | + while(cursor<TVRAM+WIDTH_X2*(WIDTH_Y-1)) *cursor++=' '; | |
195 | + } | |
196 | + top+=2; | |
197 | + printfilename(1,WIDTH_Y-2,f&0xfffe,num_dir); | |
198 | + if((f|1)<filenum){ | |
199 | + printfilename(16,WIDTH_Y-2,f|1,num_dir); | |
200 | + } | |
201 | + } | |
202 | + } | |
203 | + break; | |
204 | + case VK_LEFT: | |
205 | + case VK_NUMPAD4: | |
206 | + //左矢印キー | |
207 | + if(f&1) f--; | |
208 | + break; | |
209 | + case VK_RIGHT: | |
210 | + case VK_NUMPAD6: | |
211 | + //右矢印キー | |
212 | + if((f&1)==0 && f+1<filenum) f++; | |
213 | + break; | |
214 | + case VK_RETURN: //Enterキー | |
215 | + case VK_SEPARATOR: //テンキーのEnter | |
216 | + if(f==-2){ | |
217 | + //新規ファイル | |
218 | + } | |
219 | + else if(f==-1){ | |
220 | + //新規ディレクトリ | |
221 | + } | |
222 | + else{ | |
223 | + //ファイル名またはディレクトリ名をtempfileにコピー | |
224 | + ps=filenames[f]; | |
225 | + pd=tempfile; | |
226 | + while(*ps) *pd++=*ps++; | |
227 | + *pd=0; | |
228 | + return f; | |
229 | + } | |
230 | +// case VK_ESCAPE: | |
231 | +// case VK_F1: // STARTボタン | |
232 | + //ESCキー | |
233 | +// return -3; | |
234 | + } | |
235 | + } | |
236 | +} | |
237 | +int getfilelist(int *p_num_dir){ | |
238 | +// カレントディレクトリでのディレクトリ、.BAS、.TXT、.INIファイル一覧を読み込む | |
239 | +// *p_num_dir:ディレクトリ数を返す | |
240 | +// filenames[]:ファイル名およびディレクトリ名一覧 | |
241 | +// 戻り値 ファイル+ディレクトリ数 | |
242 | + | |
243 | + unsigned char *ps,*pd; | |
244 | + int filenum; | |
245 | + SearchRec sr; | |
246 | + filenum=0; | |
247 | + //ディレクトリのサーチ | |
248 | + if(FindFirst("*",ATTR_DIRECTORY,&sr)==0){ | |
249 | + do{ | |
250 | + //filenames[]にディレクトリ名の一覧を読み込み | |
251 | + ps=sr.filename; | |
252 | + pd=filenames[filenum]; | |
253 | + while(*ps!=0) *pd++=*ps++; | |
254 | + *pd=0; | |
255 | + filenum++; | |
256 | + } | |
257 | + while(!FindNext(&sr) && filenum<MAXFILENUM); | |
258 | + } | |
259 | + *p_num_dir=filenum; | |
260 | + if(filenum>=MAXFILENUM) return filenum; | |
261 | + //拡張子 BASファイルのサーチ | |
262 | + if(FindFirst("*.BAS",ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_ARCHIVE,&sr)==0){ | |
263 | + do{ | |
264 | + //filenames[]にファイル名の一覧を読み込み | |
265 | + ps=sr.filename; | |
266 | + pd=filenames[filenum]; | |
267 | + while(*ps!=0) *pd++=*ps++; | |
268 | + *pd=0; | |
269 | + filenum++; | |
270 | + } | |
271 | + while(!FindNext(&sr) && filenum<MAXFILENUM); | |
272 | + } | |
273 | + if(filenum>=MAXFILENUM) return filenum; | |
274 | + //拡張子 TXTファイルのサーチ | |
275 | + if(FindFirst("*.TXT",ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_ARCHIVE,&sr)==0){ | |
276 | + do{ | |
277 | + //filenames[]にファイル名の一覧を読み込み | |
278 | + ps=sr.filename; | |
279 | + pd=filenames[filenum]; | |
280 | + while(*ps!=0) *pd++=*ps++; | |
281 | + *pd=0; | |
282 | + filenum++; | |
283 | + } | |
284 | + while(!FindNext(&sr) && filenum<MAXFILENUM); | |
285 | + } | |
286 | + if(filenum>=MAXFILENUM) return filenum; | |
287 | + return filenum; | |
288 | +} | |
289 | +void fileselect(void){ | |
290 | +// SDカードからファイルを選択 | |
291 | +// runfile[]にファイル名を記憶 | |
292 | +// 対象ファイル拡張子 BASおよびTXT | |
293 | + int filenum,f; | |
294 | + unsigned char *ps,*pd; | |
295 | + int num_dir;//ディレクトリ数 | |
296 | + | |
297 | + //ファイルの一覧をSDカードから読み出し | |
298 | + cls(); | |
299 | + while(1){ | |
300 | + filenum=getfilelist(&num_dir); //ディレクトリ、ファイル名一覧を読み込み | |
301 | + if(filenum==0){ | |
302 | + setcursorcolor(COLOR_ERRORTEXT); | |
303 | + printstr(".BAS or .TXT File Not Found\n"); | |
304 | + printstr((unsigned char *)Message1);// Hit Any Key | |
305 | + inputchar(); //1文字入力待ち | |
306 | + continue; | |
307 | + } | |
308 | + //ファイルの選択 | |
309 | + f=select_dir_file(filenum,num_dir,"Load"); | |
310 | + if(f<num_dir){ | |
311 | + //ディレクトリ変更して、再度ファイル一覧画面へ | |
312 | + FSchdir(tempfile); | |
313 | + continue; | |
314 | + } | |
315 | + ps=filenames[f]; | |
316 | + pd=runfile; | |
317 | + while(*ps) *pd++=*ps++; | |
318 | + *pd=0; | |
319 | + return; | |
320 | + } | |
321 | +} | |
322 | +void run(int test){ | |
323 | +//KM-BASICコンパイル&実行 | |
324 | +// test 0:コンパイルと実行、0以外:コンパイルのみで終了 | |
325 | + int er2; | |
326 | + | |
327 | + cls(); | |
328 | + setcursor(0,0,COLOR_NORMALTEXT); | |
329 | +// set_width(0);//30文字モードに設定 | |
330 | + | |
331 | + // Enable Break key | |
332 | + g_disable_break=0; | |
333 | + //KM-BASIC実行 | |
334 | + er2=runbasic(runfile,test); | |
335 | + | |
336 | + stopPCG();//システムフォントに戻す | |
337 | + setcursorcolor(COLOR_NORMALTEXT); | |
338 | + printchar('\n'); | |
339 | + printstr((unsigned char *)Message1);// Hit Any Key | |
340 | + do ps2readkey(); //キーバッファが空になるまで読み出し | |
341 | + while(vkey!=0); | |
342 | + inputchar(); //1文字入力待ち | |
343 | + init_textgraph(); //パレット初期化のため画面初期化 | |
344 | + //画面モードを戻す | |
345 | +// if(widthmode==WIDTH_X1) set_width(0); | |
346 | +// else set_width(1); | |
347 | + | |
348 | +} | |
349 | +void texteditor(void){ | |
350 | + editormallocp=RAM; | |
351 | + cwdpath=editormalloc(PATHNAMEMAX); | |
352 | + filenames=(unsigned char (*)[])editormalloc(MAXFILENUM*13); | |
353 | + | |
354 | + cwdpath[0]='\\'; //カレントディレクトリをルートに設定 | |
355 | + cwdpath[1]=0; | |
356 | + while(1){ | |
357 | + fileselect(); | |
358 | + run(0); | |
359 | + } | |
360 | +} |
@@ -391,10 +391,6 @@ char* getdir_function(){ | ||
391 | 391 | return 0; |
392 | 392 | } |
393 | 393 | |
394 | -char* exec_function(){ | |
395 | - return exec_statement(); | |
396 | -} | |
397 | - | |
398 | 394 | char* float_constant(float val){ |
399 | 395 | volatile int i; |
400 | 396 | ((float*)(&i))[0]=val; |
@@ -601,8 +597,6 @@ static const void* int_func_list[]={ | ||
601 | 597 | "NEW(",new_function, |
602 | 598 | "SETDIR(",setdir_function, |
603 | 599 | "TIMER(",timer_function, |
604 | - "EXEC(",exec_function, | |
605 | - "CORETIMER(",coretimer_function, | |
606 | 600 | // Additional functions follow |
607 | 601 | ADDITIONAL_INT_FUNCTIONS |
608 | 602 | }; |
@@ -35,7 +35,44 @@ unsigned short readButton(void){ | ||
35 | 35 | LCD_CS_LO; |
36 | 36 | return k; |
37 | 37 | } |
38 | - | |
38 | +void keycheck(void){ | |
39 | +//ボタン状態読み取り | |
40 | +//keystatus :現在押されているボタンに対応するビットを1にする | |
41 | +//keystatus2:前回押されていなくて、今回押されたボタンに対応するビットを1にする | |
42 | + oldkey=keystatus; | |
43 | + keystatus=readButton(); | |
44 | + keystatus2=keystatus & ~oldkey; //ボタンから手を離したかチェック | |
45 | +} | |
39 | 46 | unsigned char ps2readkey(){ |
47 | +// ボタンで以下のPS/2キーボード用関数を擬似的に利用。戻り値は0 | |
48 | + | |
49 | +// 入力された1つのキーのキーコードをグローバル変数vkeyに格納(押されていなければ0を返す) | |
50 | +// 下位8ビット:キーコード | |
51 | +// 上位8ビット:シフト状態(押下:1)、上位から<0><CAPSLK><NUMLK><SCRLK><Win><ALT><CTRL><SHIFT> | |
52 | +// 英数・記号文字の場合、戻り値としてASCIIコード(それ以外は0を返す) | |
53 | + keycheck(); | |
54 | + vkey=0; | |
55 | + | |
56 | + if(keystatus2==KEYFIRE) vkey=VK_RETURN; | |
57 | + if(keystatus2==KEYSTART) vkey=VK_F1; | |
58 | + if(keystatus2==KEYDOWN) vkey=VK_DOWN; | |
59 | + if(keystatus2==KEYLEFT) vkey=VK_LEFT; | |
60 | + if(keystatus2==KEYRIGHT) vkey=VK_RIGHT; | |
61 | + if(keystatus2==KEYUP) vkey=VK_UP; | |
62 | + | |
40 | 63 | return 0; |
41 | -} | |
\ No newline at end of file | ||
64 | +} | |
65 | + | |
66 | +unsigned char inputchar(void){ | |
67 | +// キーボードから1キー入力待ち | |
68 | +// 戻り値 通常文字の場合ASCIIコード、その他は0、グローバル変数vkeyに仮想キーコード | |
69 | + unsigned char k; | |
70 | + unsigned short d; | |
71 | + d=drawcount; | |
72 | + while(1){ | |
73 | + while(d==drawcount) asm("wait"); //60分の1秒ウェイト | |
74 | + d=drawcount; | |
75 | + k=ps2readkey(); //キーバッファから読み込み、k:通常文字入力の場合ASCIIコード | |
76 | + if(vkey) return k; | |
77 | + } | |
78 | +} |
@@ -251,12 +251,10 @@ int main(void){ | ||
251 | 251 | |
252 | 252 | wait60thsec(60); //1秒待ち |
253 | 253 | |
254 | -/* | |
255 | 254 | // 実行中HEXファイル名がHEXFILEと一致した場合はエディタ起動 |
256 | 255 | appname=(char*)FILENAME_FLASH_ADDRESS; |
257 | 256 | s=HEXFILE; |
258 | 257 | while(*s++==*appname++) if(*s==0) texteditor(); //テキストエディター呼び出し |
259 | -*/ | |
260 | 258 | |
261 | 259 | // 実行中HEXファイル名の「.HEX」を「.BAS」に置き換えてBASファイルを実行 |
262 | 260 | appname=(char*)FILENAME_FLASH_ADDRESS; |
@@ -1741,7 +1741,6 @@ static const void* statement_list[]={ | ||
1741 | 1741 | "TIMER ",timer_statement, |
1742 | 1742 | "INTERRUPT ",interrupt_statement, |
1743 | 1743 | "IDLE",idle_statement, |
1744 | - "CORETIMER",coretimer_statement, | |
1745 | 1744 | // List of additional statements follows |
1746 | 1745 | ADDITIONAL_STATEMENTS |
1747 | 1746 | }; |
@@ -33,7 +33,6 @@ static const void* interrupt_list[]={ | ||
33 | 33 | "INKEY", (void*)INTERRUPT_INKEY, |
34 | 34 | "MUSIC", (void*)INTERRUPT_MUSIC, |
35 | 35 | "WAVE", (void*)INTERRUPT_WAVE, |
36 | - "CORETIMER",(void*)INTERRUPT_CORETIMER, | |
37 | 36 | ADDITIONAL_INTERRUPT_FUNCTIONS |
38 | 37 | }; |
39 | 38 | #define NUM_INTERRUPT_TYPES ((sizeof(interrupt_list)/sizeof(interrupt_list[0]))/2) |
@@ -70,7 +69,6 @@ void stop_timer(){ | ||
70 | 69 | IEC0bits.T1IE=0; |
71 | 70 | // Disable interrupt |
72 | 71 | IEC0bits.CS1IE=0; |
73 | - IEC0bits.CTIE=0; | |
74 | 72 | } |
75 | 73 | |
76 | 74 | /* |
@@ -159,40 +157,6 @@ char* timer_function(){ | ||
159 | 157 | } |
160 | 158 | |
161 | 159 | /* |
162 | - Coretimer implementaion | |
163 | -*/ | |
164 | - | |
165 | -#pragma interrupt CTHandler IPL2SOFT vector 0 | |
166 | -void CTHandler(void){ | |
167 | - // Clear CT interrupt flag | |
168 | - IFS0bits.CTIF=0; | |
169 | - // Raise TIMER interrupt flag | |
170 | - raise_interrupt_flag(INTERRUPT_CORETIMER); | |
171 | -} | |
172 | - | |
173 | -char* coretimer_function(){ | |
174 | - check_obj_space(1); | |
175 | - g_object[g_objpos++]=0x40024800; // mfc0 v0,Count | |
176 | - return 0; | |
177 | -} | |
178 | - | |
179 | -void lib_coretimer(){ | |
180 | - // CT interrupt: priority 2 | |
181 | - IPC0bits.CTIP=2; | |
182 | - IPC0bits.CTIS=0; | |
183 | - IEC0bits.CTIE=1; | |
184 | -} | |
185 | - | |
186 | -char* coretimer_statement(){ | |
187 | - char* err; | |
188 | - err=get_value(); | |
189 | - if (err) return err; | |
190 | - // 0x40825800: mtc0 v0,Compare | |
191 | - call_quicklib_code(lib_coretimer,0x40825800); | |
192 | - return 0; | |
193 | -} | |
194 | - | |
195 | -/* | |
196 | 160 | Interrupt interprtation |
197 | 161 | To cause interruption, use raise_interrupt_flag() macro |
198 | 162 | For example, |