• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

BASIC compiler/interpreter for PIC32MX/MZ-80K


Commit MetaInfo

Revisionf81f9d3fead459994e153f67a328ca5ad7ac1e77 (tree)
Zeit2019-05-06 08:03:24
AutorKatsumi <kmorimatsu@sour...>
CommiterKatsumi

Log Message

OBJECTSECTION in Zoea

Ändern Zusammenfassung

Diff

--- a/mips/zoea/App_32MX170F256B.ld
+++ b/mips/zoea/App_32MX170F256B.ld
@@ -104,7 +104,8 @@ _GEN_EXCPT_ADDR = _ebase_address + 0x180;
104104 *************************************************************************/
105105 MEMORY
106106 {
107- kseg0_program_mem (rx) : ORIGIN = (0x9D006000 + 0x1000 + 0x490), LENGTH = 0x40000 - (0x6000 + 0x1000 + 0x490) /* All C Files will be located here */
107+ kseg0_program_mem (rx) : ORIGIN = (0x9D006000 + 0x1000 + 0x490), LENGTH = 0x40000 - 0xD000 - (0x6000 + 0x1000 + 0x490) /* Most C Functions will be located here */
108+ kseg2_program_mem (rx) : ORIGIN = (0x9D040000 - (0xD000-4)), LENGTH = 0xD000 -4 /* Some C Functions (editor and compiler) will be located here */
108109 exception_mem : ORIGIN = 0x9D006000, LENGTH = 0x1000 /* Interrupt vector table */
109110 debug_exec_mem : ORIGIN = 0x9FC00490, LENGTH = 0x760
110111 kseg0_boot_mem : ORIGIN = 0x9D006000, LENGTH = 0x0 /* This memory region is dummy */
@@ -118,6 +119,18 @@ MEMORY
118119 configsfrs : ORIGIN = 0xBFC00BF0, LENGTH = 0x10
119120 }
120121
122+
123+/*
124+ * MachiKania specific section containing some functions for editor and compiler
125+ */
126+
127+SECTIONS
128+{
129+ .machikania_object : {
130+ KEEP(*(.machikania_object))
131+ } > kseg2_program_mem
132+}
133+
121134 /*************************************************************************
122135 * Configuration-word sections. Map the config-pragma input sections to
123136 * absolute-address output sections.
--- a/mips/zoea/compiler.c
+++ b/mips/zoea/compiler.c
@@ -163,11 +163,7 @@ char* compile_line(void){
163163 printstr(resolve_label(g_line));
164164 return ERR_MULTIPLE_LABEL;
165165 }
166-<<<<<<< HEAD
167- if (!g_nolinenum) {
168-=======
169166 if (!g_option_nolinenum) {
170->>>>>>> remotes/origin/timer
171167 check_obj_space(1);
172168 g_object[g_objpos++]=0x34160000|g_line; //ori s6,zero,xxxx;
173169 }
--- a/mips/zoea/compiler.h
+++ b/mips/zoea/compiler.h
@@ -214,11 +214,7 @@ extern int g_var_mem[ALLOC_BLOCK_NUM];
214214 extern unsigned short g_var_pointer[ALLOC_BLOCK_NUM];
215215 extern unsigned short g_var_size[ALLOC_BLOCK_NUM];
216216 extern char g_temp_area_used;
217-<<<<<<< HEAD
218-extern char g_nolinenum;
219-=======
220217 extern char g_option_nolinenum;
221->>>>>>> remotes/origin/timer
222218 extern int* g_heap_mem;
223219 extern int g_max_mem;
224220 extern char g_disable_break;
@@ -455,6 +451,9 @@ char* interrupt_statement();
455451
456452 /* Macros */
457453
454+// For object section
455+#define OBJECTSECTION __attribute__((section(".machikania_object")))
456+
458457 // Lables as 31 bit integer
459458 #define LABEL_INIT 0x0008727b
460459
--- a/mips/zoea/debug.c
+++ b/mips/zoea/debug.c
@@ -228,11 +228,6 @@ static const char initext[]=
228228 "#PRINT\n";
229229
230230 static const char bastext[]=
231-<<<<<<< HEAD
232-"REM 1\n"
233-"REM 2\n"
234-"REM 3\n"
235-=======
236231 "USECLASS CLASS1,CLASS2\n"
237232 "OPTION FASTFIELD\n"
238233 "CLS\n"
@@ -240,11 +235,8 @@ static const char bastext[]=
240235 "o.T1=123\n"
241236 "print o.T2()\n"
242237 "\n"
243->>>>>>> remotes/origin/timer
244238 "\n"
245-"CLS\n"
246239 "\n"
247-"LABEL TST:PRINT\n"
248240 "\n";
249241
250242 static const char class1text[]=
--- a/mips/zoea/editor.c
+++ b/mips/zoea/editor.c
@@ -74,7 +74,7 @@ const unsigned char Message2[]="File System Error\n";
7474 const unsigned char Message3[]="Retry:[Enter] / Quit:[ESC]\n";
7575 const unsigned char ROOTDIR[]="\\";
7676
77-unsigned char * editormalloc(int size){
77+OBJECTSECTION unsigned char * editormalloc(int size){
7878 //配列RAM[]内にサイズsizeの領域を確保し、先頭アドレスを返す
7979 //確保できない場合は、エラー表示し動作停止
8080 unsigned char *p;
@@ -93,7 +93,7 @@ void wait60thsec(unsigned short n){
9393 while(drawcount!=n) asm(WAIT);
9494 }
9595
96-unsigned int bpixtopos(_tbuf *bp,unsigned int ix){
96+OBJECTSECTION unsigned int bpixtopos(_tbuf *bp,unsigned int ix){
9797 // テキストバッファ上の位置からテキスト全体の先頭から何文字目かを返す
9898 // bp:テキストバッファポインタ
9999 // ix:bp->Bufの先頭からの文字数
@@ -108,7 +108,7 @@ unsigned int bpixtopos(_tbuf *bp,unsigned int ix){
108108 }
109109 return pos+ix;
110110 }
111-_tbuf * postobpix(int pos,unsigned short *pix){
111+OBJECTSECTION _tbuf * postobpix(int pos,unsigned short *pix){
112112 // テキスト全体の先頭からpos文字目のテキストバッファ上の位置を返す
113113 // 戻り値 テキストバッファポインタ
114114 // *pix(戻り値):戻り値テキストバッファの先頭からの位置(ポインタ渡し)
@@ -127,7 +127,7 @@ _tbuf * postobpix(int pos,unsigned short *pix){
127127 *pix=pos;
128128 return bp;
129129 }
130-_tbuf * linetobpix(int line,unsigned short *pix){
130+OBJECTSECTION _tbuf * linetobpix(int line,unsigned short *pix){
131131 // テキスト全体の先頭からline行目のテキストバッファ上の位置を返す
132132 // 戻り値 テキストバッファポインタ
133133 // *pix(戻り値):戻り値テキストバッファの先頭からの位置(ポインタ渡し)
@@ -157,7 +157,7 @@ _tbuf * linetobpix(int line,unsigned short *pix){
157157 return bp2;
158158 }
159159
160-_tbuf * newTBuf(_tbuf *prev){
160+OBJECTSECTION _tbuf * newTBuf(_tbuf *prev){
161161 // 新しいテキストバッファ1行を生成
162162 // prev:挿入先の行(prevの後ろに追加)
163163 // 戻り値 生成したバッファへのポインタ、生成できない場合NULL
@@ -180,7 +180,7 @@ _tbuf * newTBuf(_tbuf *prev){
180180 return bp;
181181 }
182182
183-_tbuf * deleteTBuf(_tbuf *bp){
183+OBJECTSECTION _tbuf * deleteTBuf(_tbuf *bp){
184184 // テキストバッファの削除
185185 // bp:削除する行のポインタ
186186 // 戻り値 削除前の次のバッファへのポインタ、ない場合NULL
@@ -226,7 +226,7 @@ UNDOBUFSIZE
226226  UNDO_CONTDEL,繰り返し数,消去文字列,開始位置,繰り返し数,UNDO_CONTDEL
227227 */
228228
229-void pushundomem(unsigned char c){
229+OBJECTSECTION void pushundomem(unsigned char c){
230230 // アンドゥ用メモリの先頭に1バイトを貯める
231231 // 空きがなくなった場合、最後尾の1命令分を無効化
232232 unsigned char *p;
@@ -267,12 +267,12 @@ void pushundomem(unsigned char c){
267267 if(undobuf_top>=undobuf+UNDOBUFSIZE) undobuf_top-=UNDOBUFSIZE;
268268 undobuf_used++;
269269 }
270-void pushundomem2(unsigned short w){
270+OBJECTSECTION void pushundomem2(unsigned short w){
271271 // アンドゥバッファに2バイト貯める、下位、上位の順
272272 pushundomem((unsigned char)w);
273273 pushundomem(w>>8);
274274 }
275-unsigned char popundomem(){
275+OBJECTSECTION unsigned char popundomem(){
276276 // アンドゥバッファから1バイト読み出し、先頭を1つ戻す
277277 // 戻り値:読み出したコード
278278 undobuf_top--;
@@ -280,7 +280,7 @@ unsigned char popundomem(){
280280 undobuf_used--;
281281 return *undobuf_top;
282282 }
283-unsigned short popundomem2(){
283+OBJECTSECTION unsigned short popundomem2(){
284284 // アンドゥバッファから2バイト読み出し
285285 // 戻り値:読み出した2バイトコード
286286 unsigned short w;
@@ -288,7 +288,7 @@ unsigned short popundomem2(){
288288 w+=popundomem();
289289 return w;
290290 }
291-void setundobuf(int com,_tbuf *bp,unsigned short ix,unsigned char c,unsigned short n){
291+OBJECTSECTION void setundobuf(int com,_tbuf *bp,unsigned short ix,unsigned char c,unsigned short n){
292292 //アンドゥバッファにデータをセットする
293293 //com:コマンド 1:1文字削除、2:1文字上書き、3:1文字挿入、4:連続削除、5:連続挿入開始
294294 //bp,ix:バッファ上の実行場所(カーソル位置)
@@ -324,7 +324,7 @@ void setundobuf(int com,_tbuf *bp,unsigned short ix,unsigned char c,unsigned sho
324324 }
325325 }
326326
327-int insertchar(_tbuf *bp,unsigned int ix,unsigned char c,int undo){
327+OBJECTSECTION int insertchar(_tbuf *bp,unsigned int ix,unsigned char c,int undo){
328328 //テキストバッファbpの先頭からixバイトの位置にcを挿入
329329 //undo 0:通常(アンドゥバッファに格納する)、1:連続挿入中、2:アンドゥ中
330330 //戻り値 成功:0、不正または容量オーバー:-1、空きがあるはずなのに失敗:1
@@ -362,7 +362,7 @@ int insertchar(_tbuf *bp,unsigned int ix,unsigned char c,int undo){
362362 return 0;
363363 }
364364
365-int overwritechar(_tbuf *bp,unsigned int ix,unsigned char c,int undo){
365+OBJECTSECTION int overwritechar(_tbuf *bp,unsigned int ix,unsigned char c,int undo){
366366 //テキストバッファbpの先頭からixバイトの位置をcで上書き
367367 //undo 0:通常(アンドゥバッファに格納する)、1:連続中、2:アンドゥ中
368368 //戻り値 成功:0、不正または容量オーバー:-1、空きがあるはずなのに失敗:1
@@ -383,7 +383,7 @@ int overwritechar(_tbuf *bp,unsigned int ix,unsigned char c,int undo){
383383 return 0;
384384 }
385385
386-void deletechar(_tbuf *bp,unsigned int ix,int undo){
386+OBJECTSECTION void deletechar(_tbuf *bp,unsigned int ix,int undo){
387387 //テキストバッファbpの先頭からixバイトの位置の1バイト削除
388388 //undo -1:通常BackSpace(アンドゥバッファに格納する)
389389 // 0:通常DELETE(アンドゥバッファに格納する)、1:連続中、2:アンドゥ中
@@ -407,7 +407,7 @@ void deletechar(_tbuf *bp,unsigned int ix,int undo){
407407 if(bp->next==NULL) return; //全体の最後の場合、何もしない
408408 deletechar(bp->next,0,undo); //次の行の先頭文字を削除
409409 }
410-int gabagecollect1(void){
410+OBJECTSECTION int gabagecollect1(void){
411411 //断片化されたテキストバッファの隙間を埋めるガベージコレクション
412412 //カーソルの前と後ろそれぞれ探索して最初の1バイト分のみ実施
413413 //戻り値 1バイトでも移動した場合:1、なかった場合:0
@@ -476,11 +476,11 @@ int gabagecollect1(void){
476476 if(bp->n == 0) deleteTBuf(bp);
477477 return f;
478478 }
479-void gabagecollect2(void){
479+OBJECTSECTION void gabagecollect2(void){
480480 // 変化がなくなるまで1バイト分のガベージコレクションを呼び出し
481481 while(gabagecollect1()) ;
482482 }
483-void inittextbuf(void){
483+OBJECTSECTION void inittextbuf(void){
484484 // テキストバッファの初期化
485485 _tbuf *bp;
486486 for(bp=TextBuffer;bp<TextBuffer+TBUFMAXLINE;bp++) bp->prev=NULL; //未使用バッファ化
@@ -492,7 +492,7 @@ void inittextbuf(void){
492492 undobuf_top=undobuf;
493493 undobuf_used=0;
494494 }
495-void redraw(){
495+OBJECTSECTION void redraw(){
496496 //画面の再描画
497497 unsigned char *vp;
498498 _tbuf *bp,*bp1,*bp2;
@@ -576,7 +576,7 @@ void redraw(){
576576 }
577577 }
578578
579-void cursor_left(void){
579+OBJECTSECTION void cursor_left(void){
580580 //カーソルを1つ前に移動
581581 //出力:下記変数を移動先の値に変更
582582 //cursorbp,cursorix バッファ上のカーソル位置
@@ -687,7 +687,7 @@ void cursor_left(void){
687687 disptopbp=bp;
688688 disptopix=ix;
689689 }
690-void cursor_right(void){
690+OBJECTSECTION void cursor_right(void){
691691 //カーソルを1つ後ろに移動
692692 //出力:下記変数を移動先の値に変更
693693 //cursorbp,cursorix バッファ上のカーソル位置
@@ -746,7 +746,7 @@ void cursor_right(void){
746746 disptopbp=bp;
747747 disptopix=ix;
748748 }
749-void cursor_up(void){
749+OBJECTSECTION void cursor_up(void){
750750 //カーソルを1つ上に移動
751751 //出力:下記変数を移動先の値に変更
752752 //cursorbp,cursorix バッファ上のカーソル位置
@@ -853,7 +853,7 @@ void cursor_up(void){
853853 disptopbp=bp;
854854 disptopix=ix;
855855 }
856-void cursor_down(void){
856+OBJECTSECTION void cursor_down(void){
857857 //カーソルを1つ下に移動
858858 //出力:下記変数を移動先の値に変更
859859 //cursorbp,cursorix バッファ上のカーソル位置
@@ -925,7 +925,7 @@ void cursor_down(void){
925925 disptopbp=bp;
926926 disptopix=ix;
927927 }
928-void cursor_home(void){
928+OBJECTSECTION void cursor_home(void){
929929 //カーソルを行先頭に移動
930930 //出力:下記変数を移動先の値に変更
931931 //cursorbp,cursorix バッファ上のカーソル位置
@@ -946,7 +946,7 @@ void cursor_home(void){
946946 }
947947 cx2=0;
948948 }
949-void cursor_end(void){
949+OBJECTSECTION void cursor_end(void){
950950 //カーソルを行末に移動
951951 //出力:下記変数を移動先の値に変更
952952 //cursorbp,cursorix バッファ上のカーソル位置
@@ -970,7 +970,7 @@ void cursor_end(void){
970970 }
971971 cx2=cx;
972972 }
973-void cursor_pageup(void){
973+OBJECTSECTION void cursor_pageup(void){
974974 //PageUpキー
975975 //最上行が最下行になるまでスクロール
976976 //出力:下記変数を移動先の値に変更
@@ -996,7 +996,7 @@ void cursor_pageup(void){
996996 //元のY座標までカーソルを下に移動、1行も動かなかった場合は最上行に留まる
997997 if(i>0) while(cy<cy_old) cursor_down();
998998 }
999-void cursor_pagedown(void){
999+OBJECTSECTION void cursor_pagedown(void){
10001000 //PageDownキー
10011001 //最下行が最上行になるまでスクロール
10021002 //出力:下記変数を移動先の値に変更
@@ -1028,7 +1028,7 @@ void cursor_pagedown(void){
10281028 //下端からさらに移動した行数分、カーソルを上に移動、1行も動かなかった場合は最下行に留まる
10291029 if(i>0) while(cy>cy_old) cursor_up();
10301030 }
1031-void cursor_top(void){
1031+OBJECTSECTION void cursor_top(void){
10321032 //カーソルをテキストバッファの先頭に移動
10331033 cursorbp=TBufstart;
10341034 cursorix=0;
@@ -1041,7 +1041,7 @@ void cursor_top(void){
10411041 line_no=1;
10421042 }
10431043
1044-int countarea(void){
1044+OBJECTSECTION int countarea(void){
10451045 //テキストバッファの指定範囲の文字数をカウント
10461046 //範囲は(cursorbp,cursorix)と(cursorbp1,cursorix1)で指定
10471047 //後ろ側の一つ前の文字までをカウント
@@ -1076,7 +1076,7 @@ int countarea(void){
10761076 }
10771077 }
10781078 }
1079-void deletearea_len(_tbuf *bp,unsigned int ix,int n,int undo){
1079+OBJECTSECTION void deletearea_len(_tbuf *bp,unsigned int ix,int n,int undo){
10801080 //テキストバッファの指定位置から複数文字削除
10811081 //bp,ix:削除開始位置
10821082 //n:削除する文字数
@@ -1115,7 +1115,7 @@ void deletearea_len(_tbuf *bp,unsigned int ix,int n,int undo){
11151115 n--;
11161116 }
11171117 }
1118-void deletearea(void){
1118+OBJECTSECTION void deletearea(void){
11191119 //テキストバッファの指定範囲を削除
11201120 //範囲は(cursorbp,cursorix)と(cursorbp1,cursorix1)で指定
11211121 //後ろ側の一つ前の文字までを削除
@@ -1150,7 +1150,7 @@ void deletearea(void){
11501150 pushundomem2(n);
11511151 pushundomem(UNDO_CONTDEL);
11521152 }
1153-void clipcopy(void){
1153+OBJECTSECTION void clipcopy(void){
11541154 // 選択範囲をクリップボードにコピー
11551155 _tbuf *bp1,*bp2;
11561156 int ix1,ix2;
@@ -1186,7 +1186,7 @@ void clipcopy(void){
11861186 }
11871187 }
11881188 }
1189-void clippaste(void){
1189+OBJECTSECTION void clippaste(void){
11901190 // クリップボードから貼り付け
11911191 int n,i;
11921192 unsigned char *p;
@@ -1206,7 +1206,7 @@ void clippaste(void){
12061206 p++;
12071207 }
12081208 }
1209-void movecursor(int pos){
1209+OBJECTSECTION void movecursor(int pos){
12101210 // カーソルを現在の位置から任意の位置に移動
12111211 // pos:移動したいテキストバッファ先頭からのバイト位置
12121212 int pos2,d;
@@ -1226,7 +1226,7 @@ void movecursor(int pos){
12261226 }
12271227 }
12281228 }
1229-void undoexec(){
1229+OBJECTSECTION void undoexec(){
12301230 //アンドゥ実行
12311231 unsigned char c,c1;
12321232 _tbuf *bp;
@@ -1286,7 +1286,7 @@ void undoexec(){
12861286 }
12871287 }
12881288
1289-void set_areamode(){
1289+OBJECTSECTION void set_areamode(){
12901290 //範囲選択モード開始時のカーソル開始位置グローバル変数設定
12911291 cursorbp1=cursorbp;
12921292 cursorix1=cursorix;
@@ -1294,7 +1294,7 @@ void set_areamode(){
12941294 cy1=cy;
12951295 line_no1=line_no;
12961296 }
1297-void save_cursor(void){
1297+OBJECTSECTION void save_cursor(void){
12981298 //カーソル関連グローバル変数を一時避難
12991299 cursorbp_t=cursorbp;
13001300 cursorix_t=cursorix;
@@ -1304,7 +1304,7 @@ void save_cursor(void){
13041304 cy_t=cy;
13051305 line_no_t=line_no;
13061306 }
1307-void restore_cursor(void){
1307+OBJECTSECTION void restore_cursor(void){
13081308 //カーソル関連グローバル変数を一時避難場所から戻す
13091309 cursorbp=cursorbp_t;
13101310 cursorix=cursorix_t;
@@ -1315,7 +1315,7 @@ void restore_cursor(void){
13151315 line_no=line_no_t;
13161316 }
13171317
1318-int filesystemretry(){
1318+OBJECTSECTION int filesystemretry(){
13191319 // SDファイルシステムの再初期化確認と実施
13201320 // SDファイルへの保存や読み込み時にファイルエラーが発生した場合に呼び出す
13211321 // 戻り値 0:初期化成功、-1:成功することなくEscapeで抜けた
@@ -1337,7 +1337,7 @@ int filesystemretry(){
13371337 }
13381338 }
13391339
1340-int sdfilecopy(char *sourcefile,char *distfile){
1340+OBJECTSECTION int sdfilecopy(char *sourcefile,char *distfile){
13411341 // SDカード上のファイルをコピー
13421342 // soucefile:コピー元ファイル名
13431343 // distfile:コピー先ファイル名
@@ -1370,7 +1370,7 @@ int sdfilecopy(char *sourcefile,char *distfile){
13701370 FSfclose(dfp);
13711371 return er;
13721372 }
1373-int savetextfile(char *filename){
1373+OBJECTSECTION int savetextfile(char *filename){
13741374 // テキストバッファをテキストファイルに書き込み
13751375 // 書き込み成功で0、失敗でエラーコード(負数)を返す
13761376 FSFILE *fp;
@@ -1414,7 +1414,7 @@ int savetextfile(char *filename){
14141414 FSfclose(fp);
14151415 return er;
14161416 }
1417-int loadtextfile(char *filename){
1417+OBJECTSECTION int loadtextfile(char *filename){
14181418 // テキストファイルをテキストバッファに読み込み
14191419 // 読み込み成功で0、失敗でエラーコード(負数)を返す
14201420 FSFILE *fp;
@@ -1463,7 +1463,7 @@ int loadtextfile(char *filename){
14631463 }
14641464 return er;
14651465 }
1466-int overwritecheck(char *fn){
1466+OBJECTSECTION int overwritecheck(char *fn){
14671467 // ファイルの上書き確認
14681468 // ファイルの存在をチェックし、存在する場合キーボードから上書き確認する
14691469 // fn:ファイル名へのポインタ
@@ -1483,7 +1483,7 @@ int overwritecheck(char *fn){
14831483 if(vk==VK_ESCAPE) return -1;
14841484 }
14851485 }
1486-void printfilename(unsigned char x,unsigned char y,int f,int num_dir){
1486+OBJECTSECTION void printfilename(unsigned char x,unsigned char y,int f,int num_dir){
14871487 // x,yの位置にファイル名またはディレクトリ名を表示
14881488
14891489 if(f==-2){
@@ -1509,7 +1509,7 @@ void printfilename(unsigned char x,unsigned char y,int f,int num_dir){
15091509 printstr(filenames[f]);
15101510 }
15111511 }
1512-int select_dir_file(int filenum,int num_dir, unsigned char* msg){
1512+OBJECTSECTION int select_dir_file(int filenum,int num_dir, unsigned char* msg){
15131513 // filenames[]配列に読み込まれたファイルまたはディレクトリを画面表示しキーボードで選択する
15141514 // filenum:ファイル+ディレクトリ数
15151515 // num_dir:ディレクトリ数(filenames[]は先頭からnum_dir-1までがディレクトリ)
@@ -1665,7 +1665,7 @@ int select_dir_file(int filenum,int num_dir, unsigned char* msg){
16651665 }
16661666 }
16671667 }
1668-int getfilelist(int *p_num_dir){
1668+OBJECTSECTION int getfilelist(int *p_num_dir){
16691669 // カレントディレクトリでのディレクトリ、.BAS、.TXT、.INIファイル一覧を読み込む
16701670 // *p_num_dir:ディレクトリ数を返す
16711671 // filenames[]:ファイル名およびディレクトリ名一覧
@@ -1729,7 +1729,7 @@ int getfilelist(int *p_num_dir){
17291729 }
17301730 return filenum;
17311731 }
1732-void save_as(int ow){
1732+OBJECTSECTION void save_as(int ow){
17331733 // 現在のテキストバッファの内容をSDカードに保存
17341734 // ow 0:名前を付けて保存  1:上書き保存
17351735 // ファイル名はグローバル変数currentfile[]
@@ -1817,7 +1817,7 @@ void save_as(int ow){
18171817 }
18181818 }
18191819
1820-void newtext(void){
1820+OBJECTSECTION void newtext(void){
18211821 // 新規テキスト作成
18221822 unsigned char vk;
18231823 if(edited && num){
@@ -1841,7 +1841,7 @@ void newtext(void){
18411841 currentfile[0]=0; //作業中ファイル名クリア
18421842 }
18431843
1844-void msra(void){
1844+OBJECTSECTION void msra(void){
18451845 // Make Self-Running Application (自己実行アプリケーションの作成)
18461846 // 最初にソースファイルを名前を付けて保存
18471847 // 次にBASICシステムのHEXファイルをソースファイル名の拡張子をHEXにした名前でコピー
@@ -1951,7 +1951,7 @@ void msra(void){
19511951 inputchar(); //1文字入力待ち
19521952 return;
19531953 }
1954-int fileload(void){
1954+OBJECTSECTION int fileload(void){
19551955 // SDカードからファイルを選択して読み込み
19561956 // currenfile[]にファイル名を記憶
19571957 // 対象ファイル拡張子 BASおよびTXT
@@ -2047,14 +2047,14 @@ int fileload(void){
20472047 }
20482048 }
20492049 }
2050-void changewidth(void){
2050+OBJECTSECTION void changewidth(void){
20512051 // 30文字モードと40文字モードの切り替え
20522052 if(twidth==WIDTH_X1) set_width(1);
20532053 else set_width(0);
20542054 cursor_top(); //カーソルをテキストバッファの先頭に設定
20552055 redraw(); //再描画
20562056 }
2057-void run(int test){
2057+OBJECTSECTION void run(int test){
20582058 //KM-BASICコンパイル&実行
20592059 // test 0:コンパイルと実行、0以外:コンパイルのみで終了
20602060 int er,er2;
@@ -2224,7 +2224,7 @@ void run(int test){
22242224 edited=edited1;
22252225 FSremove(TEMPFILENAME);
22262226 }
2227-void displaybottomline(void){
2227+OBJECTSECTION void displaybottomline(void){
22282228 //エディター画面最下行の表示
22292229 unsigned char *p;
22302230 unsigned char c;
@@ -2259,7 +2259,7 @@ void displaybottomline(void){
22592259 cursor=p; //カーソル位置戻し
22602260 cursorcolor=c;
22612261 }
2262-void normal_code_process(unsigned char k){
2262+OBJECTSECTION void normal_code_process(unsigned char k){
22632263 // 通常文字入力処理
22642264 // k:入力された文字コード
22652265 int i;
@@ -2286,7 +2286,7 @@ void normal_code_process(unsigned char k){
22862286 if(i==0) cursor_right();//画面上、バッファ上のカーソル位置を1つ後ろに移動
22872287 }
22882288 }
2289-void control_code_process(unsigned char k,unsigned char sh){
2289+OBJECTSECTION void control_code_process(unsigned char k,unsigned char sh){
22902290 // 制御文字入力処理
22912291 // k:制御文字の仮想キーコード
22922292 // sh:シフト関連キー状態
@@ -2476,7 +2476,7 @@ void control_code_process(unsigned char k,unsigned char sh){
24762476 break;
24772477 }
24782478 }
2479-void texteditor(void){
2479+OBJECTSECTION void texteditor(void){
24802480 //テキストエディター本体
24812481 unsigned char k1,k2,sh;
24822482 FSFILE *fp;
--- a/mips/zoea/envspecific.h
+++ b/mips/zoea/envspecific.h
@@ -7,6 +7,7 @@
77
88 #define CPU_CLOCK_HZ (g_use_graphic ? 53693175 : 57272720)
99 #define PERSISTENT_RAM_SIZE (1024*52)
10+#define OBJECTSECTION_ADDRESS 0x9D033000
1011
1112 int readbuttons();
1213 void scroll(int x, int y);
--- a/mips/zoea/file.c
+++ b/mips/zoea/file.c
@@ -140,12 +140,8 @@ int compile_and_link_file(char* buff,char* appname){
140140 }
141141
142142 // Option initialization(s)
143-<<<<<<< HEAD
144- g_nolinenum=0;
145-=======
146143 g_option_nolinenum=0;
147144 g_option_fastfield=0;
148->>>>>>> remotes/origin/timer
149145
150146 // Compile the file
151147 err=compile_file();
--- a/mips/zoea/function.c
+++ b/mips/zoea/function.c
@@ -12,7 +12,7 @@
1212 #include "compiler.h"
1313 #include "api.h"
1414
15-char* music_function(){
15+OBJECTSECTION char* music_function(){
1616 char* err;
1717 next_position();
1818 if (g_source[g_srcpos]==')') {
@@ -26,26 +26,26 @@ char* music_function(){
2626 return 0;
2727 }
2828
29-char* read_function(){
29+OBJECTSECTION char* read_function(){
3030 // This function is not valid in class file.
3131 if (g_compiling_class) return ERR_INVALID_CLASS;
3232 call_lib_code(LIB_READ);
3333 return 0;
3434 }
3535
36-char* cread_function(){
36+OBJECTSECTION char* cread_function(){
3737 call_lib_code(LIB_CREAD);
3838 return 0;
3939 }
4040
41-char* gosub_function(){
41+OBJECTSECTION char* gosub_function(){
4242 // Check if garbage collection has been done.
4343 // This check is required because the used temporary area would be changed
4444 // in sub routine.
4545 if (g_temp_area_used) return ERR_GOSUB_ASH;
4646 return gosub_statement();
4747 }
48-char* strncmp_function(){
48+OBJECTSECTION char* strncmp_function(){
4949 char* err;
5050 err=get_string();
5151 if (err) return err;
@@ -67,7 +67,7 @@ char* strncmp_function(){
6767 g_object[g_objpos++]=0x27BD0008; // addiu sp,sp,8
6868 return 0;
6969 }
70-char* len_function(){
70+OBJECTSECTION char* len_function(){
7171 char* err;
7272 err=get_string();
7373 if (err) return err;
@@ -81,7 +81,7 @@ char* len_function(){
8181 return 0;
8282 }
8383
84-char* asc_function(){
84+OBJECTSECTION char* asc_function(){
8585 char* err;
8686 err=get_string();
8787 if (err) return err;
@@ -90,7 +90,7 @@ char* asc_function(){
9090 return 0;
9191 }
9292
93-char* val_function(){
93+OBJECTSECTION char* val_function(){
9494 char* err;
9595 err=get_string();
9696 if (err) return err;
@@ -98,7 +98,7 @@ char* val_function(){
9898 return 0;
9999 }
100100
101-char* peek_function_sub(int bits){
101+OBJECTSECTION char* peek_function_sub(int bits){
102102 char* err;
103103 err=get_value();
104104 if (err) return err;
@@ -118,7 +118,7 @@ char* peek_function_sub(int bits){
118118 return 0;
119119 }
120120
121-char* sgn_function(){
121+OBJECTSECTION char* sgn_function(){
122122 char* err;
123123 err=get_value();
124124 if (err) return err;
@@ -132,7 +132,7 @@ char* sgn_function(){
132132 return 0;
133133 }
134134
135-char* abs_function(){
135+OBJECTSECTION char* abs_function(){
136136 char* err;
137137 err=get_value();
138138 if (err) return err;
@@ -143,7 +143,7 @@ char* abs_function(){
143143 return 0;
144144 }
145145
146-char* not_function(){
146+OBJECTSECTION char* not_function(){
147147 char* err;
148148 err=get_value();
149149 if (err) return err;
@@ -152,19 +152,19 @@ char* not_function(){
152152 return 0;
153153 }
154154
155-char* rnd_function(){
155+OBJECTSECTION char* rnd_function(){
156156 call_lib_code(LIB_RND);
157157 return 0;
158158 }
159159
160-char* chr_function(void){
160+OBJECTSECTION char* chr_function(void){
161161 char* err;
162162 err=get_value();
163163 if (err) return err;
164164 call_lib_code(LIB_CHR);
165165 return 0;
166166 }
167-char* hex_function(void){
167+OBJECTSECTION char* hex_function(void){
168168 char* err;
169169 err=get_value();
170170 if (err) return err;
@@ -191,7 +191,7 @@ char* hex_function(void){
191191 return 0;
192192 }
193193
194-char* dec_function(void){
194+OBJECTSECTION char* dec_function(void){
195195 char* err;
196196 err=get_value();
197197 if (err) return err;
@@ -199,7 +199,7 @@ char* dec_function(void){
199199 return 0;
200200 }
201201
202-char* keys_function(void){
202+OBJECTSECTION char* keys_function(void){
203203 char* err;
204204 next_position();
205205 if (g_source[g_srcpos]==')') {
@@ -213,7 +213,7 @@ char* keys_function(void){
213213 return 0;
214214 }
215215
216-char* tvram_function(void){
216+OBJECTSECTION char* tvram_function(void){
217217 char* err;
218218 int i;
219219 next_position();
@@ -235,17 +235,17 @@ char* tvram_function(void){
235235 return 0;
236236 }
237237
238-char* drawcount_function(void){
238+OBJECTSECTION char* drawcount_function(void){
239239 call_lib_code(LIB_DRAWCOUNT);
240240 return 0;
241241 }
242242
243-char* input_function(void){
243+OBJECTSECTION char* input_function(void){
244244 call_lib_code(LIB_INPUT);
245245 return 0;
246246 }
247247
248-char* inkey_function(void){
248+OBJECTSECTION char* inkey_function(void){
249249 char* err;
250250 next_position();
251251 if (g_source[g_srcpos]==')') {
@@ -259,11 +259,11 @@ char* inkey_function(void){
259259 return 0;
260260 }
261261
262-char* args_function(void){
262+OBJECTSECTION char* args_function(void){
263263 return args_function_main();
264264 }
265265
266-char* system_function(void){
266+OBJECTSECTION char* system_function(void){
267267 char* err;
268268 err=get_value();
269269 if (err) return err;
@@ -272,7 +272,7 @@ char* system_function(void){
272272 return 0;
273273 }
274274
275-char* sprintf_function(void){
275+OBJECTSECTION char* sprintf_function(void){
276276 char* err;
277277 err=get_string();
278278 if (err) return err;
@@ -292,7 +292,7 @@ char* sprintf_function(void){
292292 return 0;
293293 }
294294
295-char* floatstr_function(void){
295+OBJECTSECTION char* floatstr_function(void){
296296 char* err;
297297 err=get_float();
298298 if (err) return err;
@@ -303,7 +303,7 @@ char* floatstr_function(void){
303303 return 0;
304304 }
305305
306-char* floatsharp_function(void){
306+OBJECTSECTION char* floatsharp_function(void){
307307 char* err;
308308 err=get_value();
309309 if (err) return err;
@@ -311,7 +311,7 @@ char* floatsharp_function(void){
311311 return 0;
312312 }
313313
314-char* valsharp_function(void){
314+OBJECTSECTION char* valsharp_function(void){
315315 char* err;
316316 err=get_string();
317317 if (err) return err;
@@ -319,7 +319,7 @@ char* valsharp_function(void){
319319 return 0;
320320 }
321321
322-char* int_function(void){
322+OBJECTSECTION char* int_function(void){
323323 char* err;
324324 err=get_float();
325325 if (err) return err;
@@ -327,22 +327,22 @@ char* int_function(void){
327327 return 0;
328328 }
329329
330-char* fseek_function(){
330+OBJECTSECTION char* fseek_function(){
331331 call_lib_code(LIB_FILE | FUNC_FTELL);
332332 return 0;
333333 }
334334
335-char* flen_function(){
335+OBJECTSECTION char* flen_function(){
336336 call_lib_code(LIB_FILE | FUNC_FLEN);
337337 return 0;
338338 }
339339
340-char* fgetc_function(){
340+OBJECTSECTION char* fgetc_function(){
341341 call_lib_code(LIB_FILE | FUNC_FGETC);
342342 return 0;
343343 }
344344
345-char* finput_function(){
345+OBJECTSECTION char* finput_function(){
346346 char* err;
347347 next_position();
348348 if (g_source[g_srcpos]!=')') {
@@ -357,12 +357,12 @@ char* finput_function(){
357357 return 0;
358358 }
359359
360-char* feof_function(){
360+OBJECTSECTION char* feof_function(){
361361 call_lib_code(LIB_FILE | FUNC_FEOF);
362362 return 0;
363363 }
364364
365-char* playwave_function(){
365+OBJECTSECTION char* playwave_function(){
366366 char* err;
367367 next_position();
368368 if (g_source[g_srcpos]!=')') {
@@ -378,7 +378,7 @@ char* playwave_function(){
378378 return 0;
379379 }
380380
381-char* setdir_function(){
381+OBJECTSECTION char* setdir_function(){
382382 char* err;
383383 err=get_string();
384384 if (err) return err;
@@ -386,21 +386,21 @@ char* setdir_function(){
386386 return 0;
387387 }
388388
389-char* getdir_function(){
389+OBJECTSECTION char* getdir_function(){
390390 call_lib_code(LIB_GETDIR);
391391 return 0;
392392 }
393393
394-char* exec_function(){
394+OBJECTSECTION char* exec_function(){
395395 return exec_statement();
396396 }
397397
398-char* readkey_function(){
398+OBJECTSECTION char* readkey_function(){
399399 call_lib_code(LIB_READKEY);
400400 return 0;
401401 }
402402
403-char* float_constant(float val){
403+OBJECTSECTION char* float_constant(float val){
404404 volatile int i;
405405 ((float*)(&i))[0]=val;
406406 if (i&0xFFFF0000) {
@@ -416,7 +416,7 @@ char* float_constant(float val){
416416 return 0;
417417 }
418418
419-char* float_1param_function(enum functions func){
419+OBJECTSECTION char* float_1param_function(enum functions func){
420420 char* err;
421421 err=get_float();
422422 if (err) return err;
@@ -424,7 +424,7 @@ char* float_1param_function(enum functions func){
424424 return 0;
425425 }
426426
427-char* float_2param_function(enum functions func){
427+OBJECTSECTION char* float_2param_function(enum functions func){
428428 char* err;
429429 err=get_float();
430430 if (err) return err;
@@ -444,7 +444,7 @@ char* float_2param_function(enum functions func){
444444 return 0;
445445 }
446446
447-char* float_function(void){
447+OBJECTSECTION char* float_function(void){
448448 char* err;
449449 if (nextCodeIs("FLOAT#(")) {
450450 err=floatsharp_function();
@@ -524,7 +524,7 @@ static const void* str_func_list[]={
524524 ADDITIONAL_STR_FUNCTIONS
525525 };
526526
527-char* str_function(void){
527+OBJECTSECTION char* str_function(void){
528528 char* err;
529529 int i;
530530 char* (*f)();
@@ -549,23 +549,23 @@ char* str_function(void){
549549
550550 // Aliases follow
551551
552-char* peek_function(){
552+OBJECTSECTION char* peek_function(){
553553 return peek_function_sub(8);
554554 }
555555
556-char* peek16_function(){
556+OBJECTSECTION char* peek16_function(){
557557 return peek_function_sub(16);
558558 }
559559
560-char* peek32_function(){
560+OBJECTSECTION char* peek32_function(){
561561 return peek_function_sub(32);
562562 }
563563
564-char* gcolor_function(){
564+OBJECTSECTION char* gcolor_function(){
565565 return graphic_statement(FUNC_GCOLOR);
566566 }
567567
568-char* fopen_function(){
568+OBJECTSECTION char* fopen_function(){
569569 return fopen_statement_main(FUNC_FOPEN);
570570 }
571571
@@ -613,7 +613,7 @@ static const void* int_func_list[]={
613613 ADDITIONAL_INT_FUNCTIONS
614614 };
615615
616-char* function(void){
616+OBJECTSECTION char* function(void){
617617 char* err;
618618 int i;
619619 char* (*f)();
--- a/mips/zoea/globalvars.c
+++ b/mips/zoea/globalvars.c
@@ -12,6 +12,9 @@
1212 #include "compiler.h"
1313 #include "main.h"
1414
15+// Flag (NOP assembly) to use OBJECTSECTION for object.
16+const __attribute__((address(OBJECTSECTION_ADDRESS))) int g_objectsection=0;
17+
1518 // Contain the valus of $gp and $s6 (GPR of MIPS32)
1619 int g_gp;
1720 int g_s6;
@@ -56,11 +59,7 @@ unsigned short g_var_size[ALLOC_BLOCK_NUM];
5659 char g_temp_area_used;
5760
5861 // Flag to use option nolinenum
59-<<<<<<< HEAD
60-char g_nolinenum;
61-=======
6262 char g_option_nolinenum;
63->>>>>>> remotes/origin/timer
6463
6564 // Heap area
6665 int* g_heap_mem;
--- a/mips/zoea/help.txt
+++ b/mips/zoea/help.txt
@@ -863,7 +863,7 @@ ON GOTO分やON GOSUB文はサポートしていません。ただし、例え
863863 を扱いたい場合は、同名の変数をVAR指定しないようにして下さい。
864864
865865 <バージョン履歴>
866-・KM-1208 2019年5月公開。
866+・KM-1208 2019年?月公開。
867867  ・タイマー機能(USETIMER,TIMER, CORETIMERステートメントとTIMER(), CORETIMER()関
868868   数)を追加。
869869  ・割り込み機能(INTERRUPTステートメント)を追加。
--- a/mips/zoea/statement.c
+++ b/mips/zoea/statement.c
@@ -12,7 +12,7 @@
1212 #include "api.h"
1313 #include "compiler.h"
1414
15-char* rem_statement(){
15+OBJECTSECTION char* rem_statement(){
1616 if (g_source[g_srcpos-4]<0x20) {
1717 // This line contains only "REM" statement
1818 // Delete $s6-setting command if exists.
@@ -24,7 +24,7 @@ char* rem_statement(){
2424 return 0;
2525 }
2626
27-char* sound_statement(){
27+OBJECTSECTION char* sound_statement(){
2828 char *err;
2929 err=get_label();
3030 if (err) return err;
@@ -62,7 +62,7 @@ char* sound_statement(){
6262 call_lib_code(LIB_SOUND);
6363 return 0;
6464 }
65-char* music_statement(){
65+OBJECTSECTION char* music_statement(){
6666 char *err;
6767 err=get_string();
6868 if (err) return err;
@@ -88,7 +88,7 @@ char* music_statement(){
8888 return 0;
8989 }
9090
91-char* exec_statement(){
91+OBJECTSECTION char* exec_statement(){
9292 char *err;
9393 char b1;
9494 int i,prevpos;
@@ -123,7 +123,7 @@ char* exec_statement(){
123123 return 0;
124124 }
125125
126-char* cdata_statement(){
126+OBJECTSECTION char* cdata_statement(){
127127 // 0x00000020, 0x00000021, 0x00000022, and 0x00000023 (add/addu/sub/subu zero,zero,zero)
128128 // are the sign of data region
129129 int beginpos,prevpos;
@@ -191,7 +191,7 @@ char* cdata_statement(){
191191 return 0;
192192 }
193193
194-char* data_statement(){
194+OBJECTSECTION char* data_statement(){
195195 // 0x00000020, 0x00000021, 0x00000022, and 0x00000023 (add/addu/sub/subu zero,zero,zero)
196196 // are the sign of data region
197197 int i,prevpos;
@@ -232,12 +232,12 @@ char* data_statement(){
232232 }
233233 }
234234
235-char* clear_statement(){
235+OBJECTSECTION char* clear_statement(){
236236 call_lib_code(LIB_CLEAR);
237237 return 0;
238238 }
239239
240-char* poke_statement_sub(int bits){
240+OBJECTSECTION char* poke_statement_sub(int bits){
241241 char* err;
242242 err=get_value();
243243 if (err) return err;
@@ -266,7 +266,7 @@ char* poke_statement_sub(int bits){
266266 return 0;
267267 }
268268
269-char* dim_statement(){
269+OBJECTSECTION char* dim_statement(){
270270 char* err;
271271 char b1;
272272 int i;
@@ -309,7 +309,7 @@ char* dim_statement(){
309309 return 0;
310310 }
311311
312-char* label_statement(){
312+OBJECTSECTION char* label_statement(){
313313 char* err;
314314 char b1;
315315 b1=g_source[g_srcpos];
@@ -329,7 +329,7 @@ char* label_statement(){
329329 return 0;
330330 }
331331
332-char* restore_statement(){
332+OBJECTSECTION char* restore_statement(){
333333 char* err;
334334 // This statement is not valid in class file.
335335 if (g_compiling_class) return ERR_INVALID_CLASS;
@@ -351,7 +351,7 @@ char* restore_statement(){
351351 return 0;
352352 }
353353
354-char* gosub_statement_sub(){
354+OBJECTSECTION char* gosub_statement_sub(){
355355 char* err;
356356 err=get_label();
357357 if (err) return err;
@@ -388,7 +388,7 @@ char* gosub_statement_sub(){
388388 return 0;
389389 }
390390
391-char* gosub_statement(){
391+OBJECTSECTION char* gosub_statement(){
392392 char* err;
393393 int opos,spos,stack;
394394 // Skip label first (see below)
@@ -417,7 +417,7 @@ char* gosub_statement(){
417417 return 0;
418418 }
419419
420-char* return_statement(){
420+OBJECTSECTION char* return_statement(){
421421 char* err;
422422 char b1;
423423 next_position();
@@ -435,7 +435,7 @@ char* return_statement(){
435435 return 0;
436436 }
437437
438-char* goto_statement(){
438+OBJECTSECTION char* goto_statement(){
439439 char* err;
440440 err=get_label();
441441 if (err) return err;
@@ -458,7 +458,7 @@ char* goto_statement(){
458458 return 0;
459459 }
460460
461-char* if_statement(){
461+OBJECTSECTION char* if_statement(){
462462 char* err;
463463 int prevpos,bpos;
464464 // Get value.
@@ -537,7 +537,7 @@ char* if_statement(){
537537 return 0;
538538 }
539539
540-char* elseif_statement(void){
540+OBJECTSECTION char* elseif_statement(void){
541541 // Multiple line mode
542542 char* err;
543543 g_object[g_objpos++]=0x08160100; // breakif (see linker)
@@ -560,7 +560,7 @@ char* elseif_statement(void){
560560
561561 }
562562
563-char* else_statement(void){
563+OBJECTSECTION char* else_statement(void){
564564 // Multiple line mode
565565 g_object[g_objpos++]=0x08160100; // breakif (see linker)
566566 g_object[g_objpos++]=0x30008000; // nop (see linker)
@@ -575,7 +575,7 @@ char* else_statement(void){
575575 return 0;
576576 }
577577
578-char* endif_statement(void){
578+OBJECTSECTION char* endif_statement(void){
579579 // Multiple line mode
580580 g_object[g_objpos++]=0x30008000; // nop (see linker)
581581 g_object[g_objpos++]=0x30008000; // nop (see linker)
@@ -589,7 +589,7 @@ char* endif_statement(void){
589589 return 0;
590590 }
591591
592-char* end_statement(void){
592+OBJECTSECTION char* end_statement(void){
593593 int i;
594594 i=(int)&g_end_addr;
595595 i-=g_gp;
@@ -600,7 +600,7 @@ char* end_statement(void){
600600 return 0;
601601 }
602602
603-char* let_dim_sub(int i){
603+OBJECTSECTION char* let_dim_sub(int i){
604604 char* err;
605605 g_srcpos++;
606606 err=get_value();
@@ -626,7 +626,7 @@ char* let_dim_sub(int i){
626626 return 0;
627627 };
628628
629-char* let_statement(){
629+OBJECTSECTION char* let_statement(){
630630 char* err;
631631 char b2,b3;
632632 int i,spos,opos;
@@ -718,7 +718,7 @@ char* let_statement(){
718718 return 0;
719719 }
720720
721-char* print_statement_main(enum libs lib_printstr, enum libs lib_string){
721+OBJECTSECTION char* print_statement_main(enum libs lib_printstr, enum libs lib_string){
722722 char* err;
723723 char b1;
724724 int i;
@@ -773,21 +773,21 @@ char* print_statement_main(enum libs lib_printstr, enum libs lib_string){
773773 return 0;
774774 }
775775
776-char* break_statement(){
776+OBJECTSECTION char* break_statement(){
777777 check_obj_space(2);
778778 g_object[g_objpos++]=0x08160000; // j xxxx (See link() function)
779779 g_object[g_objpos++]=0x00000000; // nop
780780 return 0;
781781 }
782782
783-char* continue_statement(){
783+OBJECTSECTION char* continue_statement(){
784784 check_obj_space(2);
785785 g_object[g_objpos++]=0x08160008; // j xxxx (See link() function)
786786 g_object[g_objpos++]=0x00000000; // nop
787787 return 0;
788788 }
789789
790-char* for_statement(){
790+OBJECTSECTION char* for_statement(){
791791 char* err;
792792 // char b1;
793793 int i;
@@ -852,7 +852,7 @@ char* for_statement(){
852852 return 0;
853853 }
854854
855-char* next_statement(){
855+OBJECTSECTION char* next_statement(){
856856 // Return to address stored in 4($sp)
857857 // while set $v0 to 8($sp) (see for_statement)
858858 // Following assembly must be 4 words.
@@ -865,7 +865,7 @@ char* next_statement(){
865865 return 0;
866866 }
867867
868-char* do_statement(){
868+OBJECTSECTION char* do_statement(){
869869 char* err;
870870 // Usage of stack:
871871 // 4(sp): Address to return to in "DO" statement.
@@ -899,7 +899,7 @@ char* do_statement(){
899899 }
900900 }
901901
902-char* loop_statement(){
902+OBJECTSECTION char* loop_statement(){
903903 char* err;
904904 int opos;
905905 opos=g_objpos;
@@ -928,7 +928,7 @@ char* loop_statement(){
928928 return 0;
929929 }
930930
931-char* while_statement(){
931+OBJECTSECTION char* while_statement(){
932932 char* err;
933933 check_obj_space(3);
934934 g_object[g_objpos++]=0x04130001; // bgezall zero,label1:
@@ -944,7 +944,7 @@ char* while_statement(){
944944 // label2:
945945 }
946946
947-char* wend_statement(){
947+OBJECTSECTION char* wend_statement(){
948948 check_obj_space(4);
949949 g_object[g_objpos++]=0x8FBF0004; // lw ra,4(sp)
950950 g_object[g_objpos++]=0x03E00008; // jr ra
@@ -954,7 +954,7 @@ char* wend_statement(){
954954 return 0;
955955 }
956956
957-char* param4_statement(enum libs lib){
957+OBJECTSECTION char* param4_statement(enum libs lib){
958958 // lib is either LIB_PALETTE or LIB_GPALETTE
959959 // PALETTE N,R,G,B
960960 char* err;
@@ -989,7 +989,7 @@ char* param4_statement(enum libs lib){
989989 return 0;
990990 }
991991
992-char* param3_statement(enum libs lib){
992+OBJECTSECTION char* param3_statement(enum libs lib){
993993 char* err;
994994 // Get 1st parameter
995995 err=get_value();
@@ -1015,17 +1015,17 @@ char* param3_statement(enum libs lib){
10151015 return 0;
10161016 }
10171017
1018-char* bgcolor_statement(){
1018+OBJECTSECTION char* bgcolor_statement(){
10191019 // BGCOLOR R,G,B
10201020 return param3_statement(LIB_BGCOLOR);
10211021 }
10221022
1023-char* pcg_statement(){
1023+OBJECTSECTION char* pcg_statement(){
10241024 // PCG ASCII,D1,D2
10251025 return param3_statement(LIB_PCG);
10261026 }
10271027
1028-char* usepcg_statement(){
1028+OBJECTSECTION char* usepcg_statement(){
10291029 int objpos=g_objpos;
10301030 if (get_value()) {
10311031 // Getting integer failed.
@@ -1039,7 +1039,7 @@ char* usepcg_statement(){
10391039 return 0;
10401040 }
10411041
1042-char* usegraphic_statement(){
1042+OBJECTSECTION char* usegraphic_statement(){
10431043 int objpos=g_objpos;
10441044 if (get_value()) {
10451045 // Getting integer failed.
@@ -1053,17 +1053,17 @@ char* usegraphic_statement(){
10531053 return 0;
10541054 }
10551055
1056-char* cls_statement(){
1056+OBJECTSECTION char* cls_statement(){
10571057 call_lib_code(LIB_CLS);
10581058 return 0;
10591059 }
10601060
1061-char* gcls_statement(){
1061+OBJECTSECTION char* gcls_statement(){
10621062 call_lib_code(LIB_GCLS);
10631063 return 0;
10641064 }
10651065
1066-char* color_statement(){
1066+OBJECTSECTION char* color_statement(){
10671067 char* err;
10681068 err=get_value();
10691069 if (err) return err;
@@ -1071,7 +1071,7 @@ char* color_statement(){
10711071 return 0;
10721072 }
10731073
1074-char* gcolor_statement(){
1074+OBJECTSECTION char* gcolor_statement(){
10751075 char* err;
10761076 err=get_value();
10771077 if (err) return err;
@@ -1079,7 +1079,7 @@ char* gcolor_statement(){
10791079 return 0;
10801080 }
10811081
1082-char* param2_statement(enum libs lib){
1082+OBJECTSECTION char* param2_statement(enum libs lib){
10831083 char* err;
10841084 // Get 1st
10851085 err=get_value();
@@ -1098,7 +1098,7 @@ char* param2_statement(enum libs lib){
10981098 return 0;
10991099 }
11001100
1101-char* system_statement(){
1101+OBJECTSECTION char* system_statement(){
11021102 // SYSTEM X,Y
11031103 char* err;
11041104 // Get 1st
@@ -1119,17 +1119,17 @@ char* system_statement(){
11191119 return 0;
11201120 }
11211121
1122-char* cursor_statement(){
1122+OBJECTSECTION char* cursor_statement(){
11231123 // CURSOR X,Y
11241124 return param2_statement(LIB_CURSOR);
11251125 }
11261126
1127-char* scroll_statement(){
1127+OBJECTSECTION char* scroll_statement(){
11281128 // SCROLL X,Y
11291129 return param2_statement(LIB_SCROLL);
11301130 }
11311131
1132-char* drawcount_statement(){
1132+OBJECTSECTION char* drawcount_statement(){
11331133 char* err;
11341134 err=get_value();
11351135 if (err) return err;
@@ -1137,7 +1137,7 @@ char* drawcount_statement(){
11371137 return 0;
11381138 }
11391139
1140-char* wait_statement(){
1140+OBJECTSECTION char* wait_statement(){
11411141 char* err;
11421142 err=get_value();
11431143 if (err) return err;
@@ -1145,7 +1145,7 @@ char* wait_statement(){
11451145 return 0;
11461146 }
11471147
1148-char* width_statement(){
1148+OBJECTSECTION char* width_statement(){
11491149 char* err;
11501150 err=get_value();
11511151 if (err) return err;
@@ -1153,7 +1153,7 @@ char* width_statement(){
11531153 return 0;
11541154 }
11551155
1156-char* var_statement_sub(int a0, int a1){
1156+OBJECTSECTION char* var_statement_sub(int a0, int a1){
11571157 // Construct parameter-setting scripts
11581158 if (a0&0xffff0000) {
11591159 check_obj_space(1);
@@ -1184,7 +1184,7 @@ char* var_statement_sub(int a0, int a1){
11841184 return 0;
11851185 }
11861186
1187-char* var_statement(){
1187+OBJECTSECTION char* var_statement(){
11881188 char* err;
11891189 int i,j,a0,a1;
11901190 static int prevpos;
@@ -1243,7 +1243,7 @@ char* var_statement(){
12431243 }
12441244
12451245
1246-char* graphic_statement(enum functions func){
1246+OBJECTSECTION char* graphic_statement(enum functions func){
12471247 /*
12481248 PSET X1,Y1[,C]
12491249 LINE X1,Y1,X2,Y2[,C]
@@ -1376,7 +1376,7 @@ char* graphic_statement(enum functions func){
13761376 return 0;
13771377 }
13781378
1379-char* fopen_statement_main(enum functions func){
1379+OBJECTSECTION char* fopen_statement_main(enum functions func){
13801380 // func is either FUNC_FOPENST or FUNC_FOPEN
13811381 char* err;
13821382 // Get 1st
@@ -1408,7 +1408,7 @@ char* fopen_statement_main(enum functions func){
14081408 return 0;
14091409 }
14101410
1411-char* file_statement(){
1411+OBJECTSECTION char* file_statement(){
14121412 char* err;
14131413 err=get_value();
14141414 if (err) return err;
@@ -1416,7 +1416,7 @@ char* file_statement(){
14161416 return 0;
14171417 }
14181418
1419-char* fclose_statement(){
1419+OBJECTSECTION char* fclose_statement(){
14201420 char* err;
14211421 int orgpos=g_srcpos;
14221422 if (endOfStatement()) {
@@ -1445,15 +1445,15 @@ int FindNext (SearchRec * rec);
14451445
14461446 */
14471447
1448-char* fget_statement(){
1448+OBJECTSECTION char* fget_statement(){
14491449 return param2_statement(LIB_FILE | FUNC_FGET);
14501450 }
14511451
1452-char* fput_statement(){
1452+OBJECTSECTION char* fput_statement(){
14531453 return param2_statement(LIB_FILE | FUNC_FPUT);
14541454 }
14551455
1456-char* fseek_statement(){
1456+OBJECTSECTION char* fseek_statement(){
14571457 char* err;
14581458 err=get_value();
14591459 if (err) return err;
@@ -1461,7 +1461,7 @@ char* fseek_statement(){
14611461 return 0;
14621462 }
14631463
1464-char* fputc_statement(){
1464+OBJECTSECTION char* fputc_statement(){
14651465 char* err;
14661466 err=get_value();
14671467 if (err) return err;
@@ -1469,7 +1469,7 @@ char* fputc_statement(){
14691469 return 0;
14701470 }
14711471
1472-char* fremove_statement(){
1472+OBJECTSECTION char* fremove_statement(){
14731473 char* err;
14741474 err=get_string();
14751475 if (err) return err;
@@ -1477,7 +1477,7 @@ char* fremove_statement(){
14771477 return 0;
14781478 }
14791479
1480-char* usevar_statement(){
1480+OBJECTSECTION char* usevar_statement(){
14811481 char* err;
14821482 int i;
14831483 do {
@@ -1497,7 +1497,7 @@ char* usevar_statement(){
14971497 return 0;
14981498 }
14991499
1500-char* playwave_statement(){
1500+OBJECTSECTION char* playwave_statement(){
15011501 char* err;
15021502 err=get_string();
15031503 if (err) return err;
@@ -1520,7 +1520,7 @@ char* playwave_statement(){
15201520 return 0;
15211521 }
15221522
1523-char* useclass_statement(){
1523+OBJECTSECTION char* useclass_statement(){
15241524 char* err;
15251525 int i;
15261526 int* cmpdata;
@@ -1556,7 +1556,7 @@ char* useclass_statement(){
15561556 return 0;
15571557 }
15581558
1559-char* setdir_statement(){
1559+OBJECTSECTION char* setdir_statement(){
15601560 char* err;
15611561 err=get_string();
15621562 if (err) return err;
@@ -1564,13 +1564,10 @@ char* setdir_statement(){
15641564 return 0;
15651565 }
15661566
1567-char* option_statement(){
1567+OBJECTSECTION char* option_statement(){
15681568 while(1){
15691569 next_position();
15701570 if (nextCodeIs("NOLINENUM")) {
1571-<<<<<<< HEAD
1572- g_nolinenum=1;
1573-=======
15741571 g_option_nolinenum=1;
15751572 } else if (nextCodeIs("FASTFIELD")) {
15761573 g_option_fastfield=1;
@@ -1584,7 +1581,6 @@ char* option_statement(){
15841581 // End the compile of main file
15851582 return ERR_OPTION_CLASSCODE;
15861583 }
1587->>>>>>> remotes/origin/timer
15881584 } else {
15891585 return ERR_SYNTAX;
15901586 }
@@ -1598,15 +1594,12 @@ char* option_statement(){
15981594 return 0;
15991595 }
16001596
1601-<<<<<<< HEAD
1602-=======
1603-char* idle_statement(){
1597+OBJECTSECTION char* idle_statement(){
16041598 check_obj_space(2);
16051599 g_object[g_objpos++]=0x42000020; // wait
16061600 return 0;
16071601 }
16081602
1609->>>>>>> remotes/origin/timer
16101603 #ifdef __DEBUG
16111604 char* debug_statement(){
16121605 call_lib_code(LIB_DEBUG);
@@ -1616,67 +1609,67 @@ char* idle_statement(){
16161609
16171610 // Aliases follow
16181611
1619-char* poke_statement(){
1612+OBJECTSECTION char* poke_statement(){
16201613 return poke_statement_sub(8);
16211614 }
16221615
1623-char* poke16_statement(){
1616+OBJECTSECTION char* poke16_statement(){
16241617 return poke_statement_sub(16);
16251618 }
16261619
1627-char* poke32_statement(){
1620+OBJECTSECTION char* poke32_statement(){
16281621 return poke_statement_sub(32);
16291622 }
16301623
1631-char* palette_statement(){
1624+OBJECTSECTION char* palette_statement(){
16321625 return param4_statement(LIB_PALETTE);
16331626 }
16341627
1635-char* gpalette_statement(){
1628+OBJECTSECTION char* gpalette_statement(){
16361629 return param4_statement(LIB_GPALETTE);
16371630 }
16381631
1639-char* print_statement(){
1632+OBJECTSECTION char* print_statement(){
16401633 return print_statement_main(LIB_PRINTSTR,LIB_STRING);
16411634 }
16421635
1643-char* pset_statement(){
1636+OBJECTSECTION char* pset_statement(){
16441637 return graphic_statement(FUNC_PSET);
16451638 }
16461639
1647-char* line_statement(){
1640+OBJECTSECTION char* line_statement(){
16481641 return graphic_statement(FUNC_LINE);
16491642 }
16501643
1651-char* boxfill_statement(){
1644+OBJECTSECTION char* boxfill_statement(){
16521645 return graphic_statement(FUNC_BOXFILL);
16531646 }
16541647
1655-char* circle_statement(){
1648+OBJECTSECTION char* circle_statement(){
16561649 return graphic_statement(FUNC_CIRCLE);
16571650 }
16581651
1659-char* circlefill_statement(){
1652+OBJECTSECTION char* circlefill_statement(){
16601653 return graphic_statement(FUNC_CIRCLEFILL);
16611654 }
16621655
1663-char* gprint_statement(){
1656+OBJECTSECTION char* gprint_statement(){
16641657 return graphic_statement(FUNC_GPRINT);
16651658 }
16661659
1667-char* putbmp_statement(){
1660+OBJECTSECTION char* putbmp_statement(){
16681661 return graphic_statement(FUNC_PUTBMP);
16691662 }
16701663
1671-char* point_statement(){
1664+OBJECTSECTION char* point_statement(){
16721665 return graphic_statement(FUNC_POINT);
16731666 }
16741667
1675-char* fopen_statement(){
1668+OBJECTSECTION char* fopen_statement(){
16761669 return fopen_statement_main(FUNC_FOPENST);
16771670 }
16781671
1679-char* fprint_statement(){
1672+OBJECTSECTION char* fprint_statement(){
16801673 return print_statement_main(LIB_FILE | FUNC_FPRINTSTR,LIB_FILE | FUNC_FSTRING);
16811674 }
16821675
@@ -1756,19 +1749,16 @@ static const void* statement_list[]={
17561749 "STATIC ",static_statement,
17571750 "SETDIR ",setdir_statement,
17581751 "OPTION ",option_statement,
1759-<<<<<<< HEAD
1760-=======
17611752 "USETIMER ",usetimer_statement,
17621753 "TIMER ",timer_statement,
17631754 "INTERRUPT ",interrupt_statement,
17641755 "IDLE",idle_statement,
17651756 "CORETIMER",coretimer_statement,
1766->>>>>>> remotes/origin/timer
17671757 // List of additional statements follows
17681758 ADDITIONAL_STATEMENTS
17691759 };
17701760
1771-char* statement(void){
1761+OBJECTSECTION char* statement(void){
17721762 char* err;
17731763 int prevpos;
17741764 int i;
--- a/mips/zoea/varname.c
+++ b/mips/zoea/varname.c
@@ -18,120 +18,6 @@
1818 */
1919
2020 static const int reserved_var_names[]={
21-<<<<<<< HEAD
22- 0x000106b8, /*ABS*/
23- 0x0001f67c, /*ACOS*/
24- 0x0002414c, /*ARGS*/
25- 0x0001090c, /*ASC*/
26- 0x0002469f, /*ASIN*/
27- 0x00024a8f, /*ATAN*/
28- 0x002f7c1e, /*ATAN2*/
29- 0x0047c31c, /*BREAK*/
30- 0x00035869, /*CALL*/
31- 0x00575afe, /*CDATA*/
32- 0x00036c3d, /*CEIL*/
33- 0x000111af, /*CHR*/
34- 0x0cb1b682, /*CIRCLE*/
35- 0x005d1ea3, /*CLEAR*/
36- 0x00011240, /*CLS*/
37- 0x005f66cb, /*COLOR*/
38- 0x000112ac, /*COS*/
39- 0x0003a041, /*COSH*/
40- 0x00616415, /*CREAD*/
41- 0x0de593fb, /*CURSOR*/
42- 0x00040fbe, /*DATA*/
43- 0x00011644, /*DEC*/
44- 0x0fe19c42, /*DELETE*/
45- 0x000116de, /*DIM*/
46- 0x000100a8, /*DO*/
47- 0x0004fd8e, /*ELSE*/
48- 0x1434a177, /*ELSEIF*/
49- 0x00011c99, /*END*/
50- 0x0091c927, /*ENDIF*/
51- 0x00053854, /*EXEC*/
52- 0x00011e0d, /*EXP*/
53- 0x000579c8, /*FABS*/
54- 0x16e3d4be, /*FCLOSE*/
55- 0x00058fcf, /*FEOF*/
56- 0x00059895, /*FGET*/
57- 0x00a67500, /*FGETC*/
58- 0x00a7e061, /*FIELD*/
59- 0x0005a3a2, /*FILE*/
60- 0x177f0ca5, /*FINPUT*/
61- 0x0005b1df, /*FLEN*/
62- 0x00aa3445, /*FLOAT*/
63- 0x00aa363b, /*FLOOR*/
64- 0x0005b84d, /*FMOD*/
65- 0x00ac5c9f, /*FOPEN*/
66- 0x000121db, /*FOR*/
67- 0x18352839, /*FPRINT*/
68- 0x0005c865, /*FPUT*/
69- 0x00ad2e40, /*FPUTC*/
70- 0x00aefdec, /*FSEEK*/
71- 0x00063b90, /*GCLS*/
72- 0x1a808bcb, /*GCOLOR*/
73- 0x1ab733b3, /*GETDIR*/
74- 0x00c60f03, /*GOSUB*/
75- 0x0006796c, /*GOTO*/
76- 0x1bcfcc39, /*GPRINT*/
77- 0x00012a99, /*HEX*/
78- 0x00010153, /*IF*/
79- 0x00f8701a, /*INKEY*/
80- 0x00f88ba5, /*INPUT*/
81- 0x000130e9, /*INT*/
82- 0x00092084, /*KEYS*/
83- 0x013be43d, /*LABEL*/
84- 0x00013ecf, /*LEN*/
85- 0x00013ed5, /*LET*/
86- 0x0009e96a, /*LINE*/
87- 0x00014030, /*LOG*/
88- 0x0145f324, /*LOG10*/
89- 0x000a07f9, /*LOOP*/
90- 0x000abca3, /*MODF*/
91- 0x016418d4, /*MUSIC*/
92- 0x000b4321, /*NEXT*/
93- 0x000148f8, /*NEW*/
94- 0x00014a5d, /*NOT*/
95- 0x38a658d7, /*OPTION*/
96- 0x000152c0, /*PCG*/
97- 0x000cacec, /*PEEK*/
98- 0x3b1c6aea, /*PEEK16*/
99- 0x3b1c6b2e, /*PEEK32*/
100- 0x00010252, /*PI*/
101- 0x01ac8479, /*POINT*/
102- 0x000ce05e, /*POKE*/
103- 0x3c20dc0a, /*POKE16*/
104- 0x3c20dc4e, /*POKE32*/
105- 0x00015480, /*POW*/
106- 0x01aea739, /*PRINT*/
107- 0x000cf3d5, /*PSET*/
108- 0x3cb45fa4, /*PUBLIC*/
109- 0x3cc0fe21, /*PUTBMP*/
110- 0x000e18d5, /*READ*/
111- 0x00015d2e, /*REM*/
112- 0x425c9703, /*RETURN*/
113- 0x00015e69, /*RND*/
114- 0x45c26d49, /*SCROLL*/
115- 0x45f6e3b3, /*SETDIR*/
116- 0x00016287, /*SGN*/
117- 0x000162cf, /*SIN*/
118- 0x000ee52d, /*SINH*/
119- 0x01f9a429, /*SOUND*/
120- 0x000f0e49, /*SQRT*/
121- 0x47f711de, /*SYSTEM*/
122- 0x000166bf, /*TAN*/
123- 0x000f72ed, /*TANH*/
124- 0x02182fee, /*TVRAM*/
125- 0x022c2a2d, /*UNTIL*/
126- 0x4e8887d0, /*USEPCG*/
127- 0x4e88a5f3, /*USEVAR*/
128- 0x000170dd, /*VAL*/
129- 0x000170e3, /*VAR*/
130- 0x00119505, /*WAIT*/
131- 0x0011a9e9, /*WEND*/
132- 0x025aef62, /*WHILE*/
133- 0x025b8d75, /*WIDTH*/
134-=======
13521 0x0001070c, /*ABS*/
13622 0x0002099d, /*ACOS*/
13723 0x000258ac, /*ARGS*/
@@ -246,7 +132,6 @@ static const int reserved_var_names[]={
246132 0x00131519, /*WEND*/
247133 0x02a044ad, /*WHILE*/
248134 0x02a0f0f8, /*WIDTH*/
249->>>>>>> remotes/origin/timer
250135 // Additional names follow
251136 ADDITIONAL_RESERVED_VAR_NAMES
252137 };