• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Aucun tag

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

Révision18fb6aed65ab2664bc2ee430f71121755a799083 (tree)
l'heure2019-05-22 06:03:19
AuteurKatsumi <kmorimatsu@sour...>
CommiterKatsumi

Message de Log

CLIB: Enable using 5th and 6th parameters to call MachiKania functions.

Change Summary

Modification

--- a/mips/clib/clib.c
+++ b/mips/clib/clib.c
@@ -47,127 +47,172 @@ void* CLIBINIT clib_init(void*** data){
4747 return (void*)&clibdata[0];
4848 }
4949
50-// call lib_calloc_memory() function
51-void* __attribute__((section("clib_calloc"))) clib_calloc(int size, void*** g_data){
52- asm volatile("lw $v1,0($a1)"); // g_data[0]
53- asm volatile("lw $v0,4($a1)"); // g_data[1]
54- asm volatile("lw $v0,0($v0)"); // g_data[1][0]
55- asm volatile("lw $gp,0($v1)"); // g_data[0][0]
56- asm volatile("jr $v0");
57-}
58-
59-// call lib_delete() function
60-void __attribute__((section("clib_free"))) clib_free(void* addr, void*** g_data){
61- asm volatile("lw $v1,0($a1)"); // g_data[0]
62- asm volatile("lw $v0,4($a1)"); // g_data[1]
63- asm volatile("lw $v0,4($v0)"); // g_data[1][1]
64- asm volatile("lw $gp,0($v1)"); // g_data[0][0]
65- asm volatile("jr $v0");
66-}
67-
6850 // Function to get g_data in $v0
6951 void*** __attribute__((section("clib_g_data"))) clib_g_data(){ return g_data; }
7052
71-// Video functions below use following macro
72-// $v0=g_data;
73-// lw $v1,0($v0) // g_data[0]
74-// lw $v0,12($v0) // g_data[3]
75-// lw $v0,"x"($v0) // g_data[3][x/4]
76-// lw $gp,0($v1) // g_data[0][0]
77-// jalr $v0
78-#define machikania_video(x) \
79- clib_g_data();\
80- asm volatile("lw $v1,0($v0)");\
81- asm volatile("lw $v0,12($v0)");\
82- asm volatile("lw $v0,"x"($v0)");\
83- asm volatile("lw $gp,0($v1)");\
84- asm volatile("jalr $v0")
85-
86-void __attribute__((section("start_composite"))) start_composite(void)
87-{ machikania_video("0"); }
88-void __attribute__((section("stop_composite"))) stop_composite(void)
89-{ machikania_video("4"); }
90-void __attribute__((section("printchar"))) printchar(unsigned char n)
91-{ machikania_video("8"); }
92-void __attribute__((section("printstr"))) printstr(unsigned char *s)
93-{ machikania_video("12"); }
94-void __attribute__((section("printnum"))) printnum(unsigned int n)
95-{ machikania_video("16"); }
96-void __attribute__((section("printnum2"))) printnum2(unsigned int n,unsigned char e)
97-{ machikania_video("20"); }
98-void __attribute__((section("cls"))) cls(void)
99-{ machikania_video("24"); }
100-void __attribute__((section("vramscroll"))) vramscroll(void)
101-{ machikania_video("28"); }
102-void __attribute__((section("setcursorcolor"))) setcursorcolor(unsigned char c)
103-{ machikania_video("32"); }
104-void __attribute__((section("setcursor"))) setcursor(unsigned char x,unsigned char y,unsigned char c)
105-{ machikania_video("36"); }
106-void __attribute__((section("set_palette"))) set_palette(unsigned char n,unsigned char b,unsigned char r,unsigned char g)
107-{ machikania_video("40"); }
108-void __attribute__((section("set_bgcolor"))) set_bgcolor(unsigned char b,unsigned char r,unsigned char g)
109-{ machikania_video("44"); }
110-
111-// Graphic functions below use following macro
112-// $v0=g_data;
113-// lw $v1,0($v0) // g_data[0]
114-// lw $v0,16($v0) // g_data[4]
115-// lw $v0,"x"($v0) // g_data[4][x/4]
116-// lw $gp,0($v1) // g_data[0][0]
117-// jalr $v0
118-#define machikania_graphic(x) \
119- clib_g_data();\
120- asm volatile("lw $v1,0($v0)");\
121- asm volatile("lw $v0,16($v0)");\
122- asm volatile("lw $v0,"x"($v0)");\
53+/*
54+ Macros for functions.
55+ Example for calloc:
56+ asm volatile("lw $v1,0($a1)"); // g_data[0]
57+ asm volatile("lw $v0,4($a1)"); // g_data[1]
58+ asm volatile("lw $v0,0($v0)"); // g_data[1][0]
59+ asm volatile("lw $gp,0($v1)"); // g_data[0][0]
60+ asm volatile("jr $v0");
61+ Exmaple for free:
62+ asm volatile("lw $v1,0($a1)"); // g_data[0]
63+ asm volatile("lw $v0,4($a1)"); // g_data[1]
64+ asm volatile("lw $v0,4($v0)"); // g_data[1][1]
65+ asm volatile("lw $gp,0($v1)"); // g_data[0][0]
66+ asm volatile("jr $v0");
67+ Example for start_composite:
68+ asm volatile("lw $v1,0($a0)"); // g_data[0]
69+ asm volatile("lw $v0,12($a0)");// g_data[3]
70+ asm volatile("lw $v0,0($v0)"); // g_data[3][0]
71+ asm volatile("lw $gp,0($v1)"); // g_data[0][0]
72+ asm volatile("jr $v0");
73+ Example for g_printnum2
74+ asm volatile("lw $t0,24($sp)");// g_data
75+ asm volatile("lw $v1,0($t0)"); // g_data[0]
76+ asm volatile("lw $v0,12($t0)");// g_data[3]
77+ asm volatile("lw $v0,44($v0)");// g_data[3][11]
78+ asm volatile("lw $gp,0($v1)"); // g_data[0][0]
79+ asm volatile("jr $v0");
80+*/
81+
82+// The general function macro; x:"$a0","$a1" etc, y:"0","4" etc, z: "0","4" etc
83+#define machikania_function(x,y,z)\
84+ asm volatile("lw $v1,0(" x ")");\
85+ asm volatile("lw $v0," y "(" x ")");\
86+ asm volatile("lw $v0," z "($v0)");\
12387 asm volatile("lw $gp,0($v1)");\
124- asm volatile("jalr $v0")
125-
126-void __attribute__((section("g_pset"))) g_pset(int x,int y,unsigned int c)
127-{ machikania_graphic("0"); }
128-void __attribute__((section("g_putbmpmn"))) g_putbmpmn(int x,int y,char m,char n,const unsigned char bmp[])
129-{ machikania_graphic("4"); }
130-void __attribute__((section("g_clrbmpmn"))) g_clrbmpmn(int x,int y,char m,char n)
131-{ machikania_graphic("8"); }
132-void __attribute__((section("g_gline"))) g_gline(int x1,int y1,int x2,int y2,unsigned int c)
133-{ machikania_graphic("12"); }
134-void __attribute__((section("g_hline"))) g_hline(int x1,int x2,int y,unsigned int c)
135-{ machikania_graphic("16"); }
136-void __attribute__((section("g_circle"))) g_circle(int x0,int y0,unsigned int r,unsigned int c)
137-{ machikania_graphic("20"); }
138-void __attribute__((section("g_circlefill"))) g_circlefill(int x0,int y0,unsigned int r,unsigned int c)
139-{ machikania_graphic("24"); }
140-void __attribute__((section("g_boxfill"))) g_boxfill(int x1,int y1,int x2,int y2,unsigned int c)
141-{ machikania_graphic("28"); }
142-void __attribute__((section("g_putfont"))) g_putfont(int x,int y,unsigned int c,int bc,unsigned char n)
143-{ machikania_graphic("32"); }
144-void __attribute__((section("g_printstr"))) g_printstr(int x,int y,unsigned int c,int bc,unsigned char *s)
145-{ machikania_graphic("36"); }
146-void __attribute__((section("g_printnum"))) g_printnum(int x,int y,unsigned char c,int bc,unsigned int n)
147-{ machikania_graphic("40"); }
148-void __attribute__((section("g_printnum2"))) g_printnum2(int x,int y,unsigned char c,int bc,unsigned int n,unsigned char e)
149-{ machikania_graphic("44"); }
150-unsigned int __attribute__((section("g_color"))) g_color(int x,int y)
151-{ machikania_graphic("48"); }
152-
153-// Keyboard functions below use following macro
154-// $v0=g_data;
155-// lw $v1,0($v0) // g_data[0]
156-// lw $v0,20($v0) // g_data[5]
157-// lw $v0,"x"($v0) // g_data[5][x/4]
158-// lw $gp,0($v1) // g_data[0][0]
159-// jalr $v0
160-#define machikania_keyboard(x) \
161- clib_g_data();\
162- asm volatile("lw $v1,0($v0)");\
163- asm volatile("lw $v0,20($v0)");\
164- asm volatile("lw $v0,"x"($v0)");\
88+ asm volatile("jr $v0")
89+
90+// The function macro using stack; x:"16","20" etc, y:"0","4" etc, z: "0","4" etc
91+#define machikania_function_sp(x,y,z)\
92+ asm volatile("lw $t0," x "($sp)");\
93+ asm volatile("lw $v1,0($t0)");\
94+ asm volatile("lw $v0," y "($t0)");\
95+ asm volatile("lw $v0," z "($v0)");\
16596 asm volatile("lw $gp,0($v1)");\
166- asm volatile("jalr $v0")
97+ asm volatile("jr $v0")
98+
99+// call lib_calloc_memory() function
100+void* __attribute__((section("clib_calloc")))
101+clib_calloc(int size, void*** g_data)
102+{ machikania_function("$a1","4","0"); }
103+
104+// call lib_delete() function
105+void __attribute__((section("clib_free")))
106+clib_free(void* addr, void*** g_data)
107+{ machikania_function("$a1","4","4"); }
108+
109+// Video functions
110+void __attribute__((section("start_composite")))
111+clib_start_composite(void*** data)
112+{ machikania_function("$a0","12","0"); }
113+
114+void __attribute__((section("stop_composite")))
115+clib_stop_composite(void*** data)
116+{ machikania_function("$a0","12","4"); }
117+
118+void __attribute__((section("printchar")))
119+clib_printchar(unsigned char n,void*** data)
120+{ machikania_function("$a1","12","8"); }
121+
122+void __attribute__((section("printstr")))
123+clib_printstr(unsigned char *s,void*** data)
124+{ machikania_function("$a1","12","12"); }
125+
126+void __attribute__((section("printnum")))
127+clib_printnum(unsigned int n,void*** data)
128+{ machikania_function("$a1","12","16"); }
129+
130+void __attribute__((section("printnum2")))
131+clib_printnum2(unsigned int n,unsigned char e,void*** data)
132+{ machikania_function("$a2","12","20"); }
133+
134+void __attribute__((section("cls")))
135+clib_cls(void*** data)
136+{ machikania_function("$a0","12","24"); }
137+
138+void __attribute__((section("vramscroll")))
139+clib_vramscroll(void*** data)
140+{ machikania_function("$a0","12","28"); }
141+
142+void __attribute__((section("setcursorcolor")))
143+clib_setcursorcolor(unsigned char c,void*** data)
144+{ machikania_function("$a1","12","32"); }
145+
146+void __attribute__((section("setcursor")))
147+clib_setcursor(unsigned char x,unsigned char y,unsigned char c,void*** data)
148+{ machikania_function("$a3","12","36"); }
149+
150+void __attribute__((section("set_palette")))
151+clib_set_palette(unsigned char n,unsigned char b,unsigned char r,unsigned char g,void*** data)
152+{ machikania_function_sp("16","12","40"); }
153+
154+void __attribute__((section("set_bgcolor")))
155+clib_set_bgcolor(unsigned char b,unsigned char r,unsigned char g,void*** data)
156+{ machikania_function("$a3","12","44"); }
157+
158+// Graphic functions
159+void __attribute__((section("g_pset")))
160+clib_g_pset(int x,int y,unsigned int c,void*** data)
161+{ machikania_function("$a3","16","0"); }
162+
163+void __attribute__((section("g_putbmpmn")))
164+clib_g_putbmpmn(int x,int y,char m,char n,const unsigned char bmp[],void*** data)
165+{ machikania_function_sp("20","16","4"); }
166+
167+void __attribute__((section("g_clrbmpmn")))
168+clib_g_clrbmpmn(int x,int y,char m,char n,void*** data)
169+{ machikania_function_sp("16","16","8"); }
170+
171+void __attribute__((section("g_gline")))
172+clib_g_gline(int x1,int y1,int x2,int y2,unsigned int c,void*** data)
173+{ machikania_function_sp("20","16","12"); }
174+
175+void __attribute__((section("g_hline")))
176+clib_g_hline(int x1,int x2,int y,unsigned int c,void*** data)
177+{ machikania_function_sp("16","16","16"); }
178+
179+void __attribute__((section("g_circle")))
180+clib_g_circle(int x0,int y0,unsigned int r,unsigned int c,void*** data)
181+{ machikania_function_sp("16","16","20"); }
182+
183+void __attribute__((section("g_circlefill")))
184+clib_g_circlefill(int x0,int y0,unsigned int r,unsigned int c,void*** data)
185+{ machikania_function_sp("16","16","24"); }
186+
187+void __attribute__((section("g_boxfill")))
188+clib_g_boxfill(int x1,int y1,int x2,int y2,unsigned int c,void*** data)
189+{ machikania_function_sp("20","16","28"); }
190+
191+void __attribute__((section("g_putfont")))
192+clib_g_putfont(int x,int y,unsigned int c,int bc,unsigned char n,void*** data)
193+{ machikania_function_sp("20","16","32"); }
194+
195+void __attribute__((section("g_printstr")))
196+clib_g_printstr(int x,int y,unsigned int c,int bc,unsigned char *s,void*** data)
197+{ machikania_function_sp("20","16","36"); }
198+
199+void __attribute__((section("g_printnum")))
200+clib_g_printnum(int x,int y,unsigned char c,int bc,unsigned int n,void*** data)
201+{ machikania_function_sp("20","16","40"); }
202+
203+void __attribute__((section("g_printnum2")))
204+clib_g_printnum2(int x,int y,unsigned char c,int bc,unsigned int n,unsigned char e,void*** data)
205+{ machikania_function_sp("24","16","44"); }
206+
207+unsigned int __attribute__((section("g_color")))
208+clib_g_color(int x,int y,void*** data)
209+{ machikania_function("$a2","16","48"); }
167210
168-unsigned char __attribute__((section("shiftkeys"))) shiftkeys()
169-{ machikania_keyboard("0"); }
170-unsigned char __attribute__((section("ps2readkey"))) ps2readkey()
171-{ machikania_keyboard("4"); }
211+// Keyboard functions
212+unsigned char __attribute__((section("shiftkeys")))
213+clib_shiftkeys(void*** data)
214+{ machikania_function("$a0","20","0"); }
172215
173-//*/
\ No newline at end of file
216+unsigned char __attribute__((section("ps2readkey")))
217+clib_ps2readkey(void*** data)
218+{ machikania_function("$a0","20","4"); }
--- a/mips/clib/clib.h
+++ b/mips/clib/clib.h
@@ -32,7 +32,7 @@ extern void*** g_data;
3232 * The structure of g_data[] is the same as g_data_clib[] below.
3333 *
3434 const void* const g_data_clib_var[]={
35- &g_gp,// g_data[0][0],"0"
35+ 0, // will be g_gp, g_data[0][0],"0"
3636 };
3737
3838 const void* const g_data_clib_core[]={
@@ -153,81 +153,217 @@ void clib_free(void* addr, void*** g_data);
153153 * FSrename
154154 */
155155
156+
156157 /*
157158 * MachiKanika video functions
158159 */
159160
160-void start_composite(void);
161-//カラーコンポジット出力開始
162-void stop_composite(void);
163-//カラーコンポジット出力停止
164-void printchar(unsigned char n);
165-//カーソル位置にテキストコードnを1文字表示し、カーソルを1文字進める
166-void printstr(unsigned char *s);
167-//カーソル位置に文字列sを表示
168-void printnum(unsigned int n);
169-//カーソル位置に符号なし整数nを10進数表示
170-void printnum2(unsigned int n,unsigned char e);
171-//カーソル位置に符号なし整数nをe桁の10進数表示(前の空き桁部分はスペースで埋める)
172-void cls(void);
173-//テキスト画面を0でクリアし、カーソルを画面先頭に移動
174-void vramscroll(void);
175-//1行スクロール
176-void setcursorcolor(unsigned char c);
177-//カーソル位置そのままでカラー番号をcに設定
178-void setcursor(unsigned char x,unsigned char y,unsigned char c);
179-//カーソル位置とカラーを設定
180-void set_palette(unsigned char n,unsigned char b,unsigned char r,unsigned char g);
181-//テキストパレット設定
182-void set_bgcolor(unsigned char b,unsigned char r,unsigned char g);
183-//バックグランドカラー設定
161+/*
162+ void start_composite(void);
163+ //カラーコンポジット出力開始
164+*/
165+#define start_composite() clib_start_composite(g_data)
166+void clib_start_composite(void*** data);
167+
168+/*
169+ void stop_composite(void);
170+ //カラーコンポジット出力停止
171+*/
172+#define stop_composite() clib_stop_composite(g_data)
173+void clib_stop_composite(void*** data);
174+
175+/*
176+ void printchar(unsigned char n);
177+ //カーソル位置にテキストコードnを1文字表示し、カーソルを1文字進める
178+*/
179+#define printchar(a) clib_printchar(a,g_data)
180+void clib_printchar(unsigned char n,void*** data);
181+
182+/*
183+ void printstr(unsigned char *s);
184+ //カーソル位置に文字列sを表示
185+*/
186+#define printstr(a) clib_printstr(a,g_data)
187+void clib_printstr(unsigned char *s,void*** data);
188+
189+/*
190+ void printnum(unsigned int n);
191+ //カーソル位置に符号なし整数nを10進数表示
192+*/
193+#define printnum(a) clib_printnum(a,g_data)
194+void clib_printnum(unsigned int n,void*** data);
195+
196+/*
197+ void printnum2(unsigned int n,unsigned char e);
198+ //カーソル位置に符号なし整数nをe桁の10進数表示(前の空き桁部分はスペースで埋める)
199+*/
200+#define printnum2(a,b) clib_printnum2(a,b,g_data)
201+void clib_printnum2(unsigned int n,unsigned char e,void*** data);
202+
203+/*
204+ void cls(void);
205+ //テキスト画面を0でクリアし、カーソルを画面先頭に移動
206+*/
207+#define cls() clib_cls(g_data)
208+void clib_cls(void*** data);
209+
210+/*
211+ void vramscroll(void);
212+ //1行スクロール
213+*/
214+#define vramscroll() clib_vramscroll(g_data)
215+void clib_vramscroll(void*** data);
216+
217+/*
218+ void setcursorcolor(unsigned char c);
219+ //カーソル位置そのままでカラー番号をcに設定
220+*/
221+#define setcursorcolor(a) clib_setcursorcolor(a,g_data)
222+void clib_setcursorcolor(unsigned char c,void*** data);
223+
224+/*
225+ void setcursor(unsigned char x,unsigned char y,unsigned char c);
226+ //カーソル位置とカラーを設定
227+*/
228+#define setcursor(a,b,c) clib_setcursor(a,b,c,g_data)
229+void clib_setcursor(unsigned char x,unsigned char y,unsigned char c,void*** data);
230+
231+/*
232+ void set_palette(unsigned char n,unsigned char b,unsigned char r,unsigned char g);
233+ //テキストパレット設定
234+*/
235+#define set_palette(a,b,c,d) clib_set_palette(a,b,c,d,g_data)
236+void clib_set_palette(unsigned char n,unsigned char b,unsigned char r,unsigned char g,void*** data);
237+
238+/*
239+ void set_bgcolor(unsigned char b,unsigned char r,unsigned char g);
240+ //バックグランドカラー設定
241+*/
242+#define set_bgcolor(a,b,c) clib_set_bgcolor(a,b,c,g_data)
243+void clib_set_bgcolor(unsigned char b,unsigned char r,unsigned char g,void*** data);
244+
184245
185246 /*
186247 * MachiKanika graphic functions
187248 */
188249
189-void g_pset(int x,int y,unsigned int c);
190-// (x,y)の位置にカラーcで点を描画
191-void g_putbmpmn(int x,int y,char m,char n,const unsigned char bmp[]);
192-// 横m*縦nドットのキャラクターを座標x,yに表示
193-// unsigned char bmp[m*n]配列に、単純にカラー番号を並べる
194-// カラー番号が0の部分は透明色として扱う
195-void g_clrbmpmn(int x,int y,char m,char n);
196-// 縦m*横nドットのキャラクター消去
197-// カラー0で塗りつぶし
198-void g_gline(int x1,int y1,int x2,int y2,unsigned int c);
199-// (x1,y1)-(x2,y2)にカラーcで線分を描画
200-void g_hline(int x1,int x2,int y,unsigned int c);
201-// (x1,y)-(x2,y)への水平ラインを高速描画
202-void g_circle(int x0,int y0,unsigned int r,unsigned int c);
203-// (x0,y0)を中心に、半径r、カラーcの円を描画
204-void g_circlefill(int x0,int y0,unsigned int r,unsigned int c);
205-// (x0,y0)を中心に、半径r、カラーcで塗られた円を描画
206-void g_boxfill(int x1,int y1,int x2,int y2,unsigned int c);
207-// (x1,y1),(x2,y2)を対角線とするカラーcで塗られた長方形を描画
208-void g_putfont(int x,int y,unsigned int c,int bc,unsigned char n);
209-//8*8ドットのアルファベットフォント表示
210-//座標(x,y)、カラー番号c
211-//bc:バックグランドカラー、負数の場合無視
212-//n:文字番号
213-void g_printstr(int x,int y,unsigned int c,int bc,unsigned char *s);
214-//座標(x,y)からカラー番号cで文字列sを表示、bc:バックグランドカラー
215-void g_printnum(int x,int y,unsigned char c,int bc,unsigned int n);
216-//座標(x,y)にカラー番号cで数値nを表示、bc:バックグランドカラー
217-void g_printnum2(int x,int y,unsigned char c,int bc,unsigned int n,unsigned char e);
218-//座標(x,y)にカラー番号cで数値nを表示、bc:バックグランドカラー、e桁で表示
219-unsigned int g_color(int x,int y);
220-//座標(x,y)のVRAM上の現在のパレット番号を返す、画面外は0を返す
250+/*
251+ void g_pset(int x,int y,unsigned int c);
252+ // (x,y)の位置にカラーcで点を描画
253+*/
254+#define g_pset(a,b,c) clib_g_pset(a,b,c,g_data)
255+void clib_g_pset(int x,int y,unsigned int c,void*** data);
256+
257+/*
258+ void g_putbmpmn(int x,int y,char m,char n,const unsigned char bmp[]);
259+ // 横m*縦nドットのキャラクターを座標x,yに表示
260+ // unsigned char bmp[m*n]配列に、単純にカラー番号を並べる
261+ // カラー番号が0の部分は透明色として扱う
262+*/
263+#define g_putbmpmn(a,b,c,d,e) clib_g_putbmpmn(a,b,c,d,e,g_data)
264+void clib_g_putbmpmn(int x,int y,char m,char n,const unsigned char bmp[],void*** data);
265+
266+/*
267+ void g_clrbmpmn(int x,int y,char m,char n);
268+ // 縦m*横nドットのキャラクター消去
269+ // カラー0で塗りつぶし
270+*/
271+#define g_clrbmpmn(a,b,c,d) clib_g_clrbmpmn(a,b,c,d,g_data)
272+void clib_g_clrbmpmn(int x,int y,char m,char n,void*** data);
273+
274+/*
275+ void g_gline(int x1,int y1,int x2,int y2,unsigned int c);
276+ // (x1,y1)-(x2,y2)にカラーcで線分を描画
277+*/
278+#define g_gline(a,b,c,d,e) clib_g_gline(a,b,c,d,e,g_data)
279+void clib_g_gline(int x1,int y1,int x2,int y2,unsigned int c,void*** data);
280+
281+/*
282+ void g_hline(int x1,int x2,int y,unsigned int c);
283+ // (x1,y)-(x2,y)への水平ラインを高速描画
284+*/
285+#define g_hline(a,b,c,d) clib_g_hline(a,b,c,d,g_data)
286+void clib_g_hline(int x1,int x2,int y,unsigned int c,void*** data);
287+
288+/*
289+ void g_circle(int x0,int y0,unsigned int r,unsigned int c);
290+ // (x0,y0)を中心に、半径r、カラーcの円を描画
291+*/
292+#define g_circle(a,b,c,d) clib_g_circle(a,b,c,d,g_data)
293+void clib_g_circle(int x0,int y0,unsigned int r,unsigned int c,void*** data);
294+
295+/*
296+ void g_circlefill(int x0,int y0,unsigned int r,unsigned int c);
297+ // (x0,y0)を中心に、半径r、カラーcで塗られた円を描画
298+*/
299+#define g_circlefill(a,b,c,d) clib_g_circlefill(a,b,c,d,g_data)
300+void clib_g_circlefill(int x0,int y0,unsigned int r,unsigned int c,void*** data);
301+
302+/*
303+ void g_boxfill(int x1,int y1,int x2,int y2,unsigned int c);
304+ // (x1,y1),(x2,y2)を対角線とするカラーcで塗られた長方形を描画
305+*/
306+#define g_boxfill(a,b,c,d,e) clib_g_boxfill(a,b,c,d,e,g_data)
307+void clib_g_boxfill(int x1,int y1,int x2,int y2,unsigned int c,void*** data);
308+
309+/*
310+ void g_putfont(int x,int y,unsigned int c,int bc,unsigned char n);
311+ //8*8ドットのアルファベットフォント表示
312+ //座標(x,y)、カラー番号c
313+ //bc:バックグランドカラー、負数の場合無視
314+ //n:文字番号
315+*/
316+#define g_putfont(a,b,c,d,e) clib_g_putfont(a,b,c,d,e,g_data)
317+void clib_g_putfont(int x,int y,unsigned int c,int bc,unsigned char n,void*** data);
318+
319+/*
320+ void g_printstr(int x,int y,unsigned int c,int bc,unsigned char *s);
321+ //座標(x,y)からカラー番号cで文字列sを表示、bc:バックグランドカラー
322+*/
323+#define g_printstr(a,b,c,d,e) clib_g_printstr(a,b,c,d,e,g_data)
324+void clib_g_printstr(int x,int y,unsigned int c,int bc,unsigned char *s,void*** data);
325+
326+/*
327+ void g_printnum(int x,int y,unsigned char c,int bc,unsigned int n);
328+ //座標(x,y)にカラー番号cで数値nを表示、bc:バックグランドカラー
329+*/
330+#define g_printnum(a,b,c,d,e) clib_g_printnum(a,b,c,d,e,g_data)
331+void clib_g_printnum(int x,int y,unsigned char c,int bc,unsigned int n,void*** data);
332+
333+/*
334+ void g_printnum2(int x,int y,unsigned char c,int bc,unsigned int n,unsigned char e);
335+ //座標(x,y)にカラー番号cで数値nを表示、bc:バックグランドカラー、e桁で表示
336+*/
337+#define g_printnum2(a,b,c,d,e,f) clib_g_printnum2(a,b,c,d,e,f,g_data)
338+void clib_g_printnum2(int x,int y,unsigned char c,int bc,unsigned int n,unsigned char e,void*** data);
339+
340+/*
341+ unsigned int g_color(int x,int y);
342+ //座標(x,y)のVRAM上の現在のパレット番号を返す、画面外は0を返す
343+*/
344+#define g_color(a,b) clib_g_color(a,b,g_data)
345+unsigned int clib_g_color(int x,int y,void*** data);
346+
221347
222348 /*
223349 * MachiKanika keyboard functions
224350 */
225351
226-unsigned char shiftkeys();
227-// SHIFT関連キーの押下状態を返す
228-unsigned char ps2readkey();
229-// 入力された1つのキーのキーコードをグローバル変数vkeyに格納(押されていなければ0を返す)
230-// 下位8ビット:キーコード
231-// 上位8ビット:シフト状態(押下:1)、上位から<0><CAPSLK><NUMLK><SCRLK><Win><ALT><CTRL><SHIFT>
232-// 英数・記号文字の場合、戻り値としてASCIIコード(それ以外は0を返す)
352+/*
353+ unsigned char shiftkeys();
354+ // SHIFT関連キーの押下状態を返す
355+*/
356+#define shiftkeys() clib_shiftkeys(g_data)
357+unsigned char clib_shiftkeys(void*** data);
358+
359+/*
360+ unsigned char ps2readkey();
361+ // 入力された1つのキーのキーコードをグローバル変数vkeyに格納(押されていなければ0を返す)
362+ // 下位8ビット:キーコード
363+ // 上位8ビット:シフト状態(押下:1)、上位から<0><CAPSLK><NUMLK><SCRLK><Win><ALT><CTRL><SHIFT>
364+ // 英数・記号文字の場合、戻り値としてASCIIコード(それ以外は0を返す)
365+*/
366+#define ps2readkey() clib_ps2readkey(g_data)
367+unsigned char clib_ps2readkey(void*** data);
368+
233369
--- a/mips/clib/example.c
+++ b/mips/clib/example.c
@@ -15,8 +15,12 @@ void init(void){
1515
1616 // Example of functions.
1717 // Maximum number of parameter(s) is 4 for public function.
18+// Do not initialize static variables in the function.
19+// It will be always initialize with 0 value.
1820 // 関数の実装例。
1921 // パブリック関数では、引数は最大4つまで。
22+// 関数中で、スタティック変数の初期化を行なわない事。
23+// スタティック変数は、常に値0で初期化される。
2024 char* test_private(int param1){
2125 switch(param1){
2226 case 0:
--- a/mips/clib/nbproject/Makefile-genesis.properties
+++ b/mips/clib/nbproject/Makefile-genesis.properties
@@ -1,5 +1,5 @@
11 #
2-#Wed May 15 15:38:15 PDT 2019
2+#Tue May 21 13:54:07 PDT 2019
33 default.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=f2639e8ffe4e3a80ef2cdaeba61da340
44 default.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc32\\v1.42\\bin
55 configurations-xml=2f3193434ad25f263dc0e914df895fd6
--- a/mips/clib/nbproject/private/private.xml
+++ b/mips/clib/nbproject/private/private.xml
@@ -5,7 +5,7 @@
55 <group>
66 <file>file:/C:/Users/kmorimatsu/Documents/At%20Home/PIC/PIC32/PIC32MX370F512H/clib/clib.X/clib.h</file>
77 <file>file:/C:/Users/kmorimatsu/Documents/At%20Home/PIC/PIC32/PIC32MX370F512H/clib/clib.X/clib.c</file>
8- <file>file:/C:/Users/kmorimatsu/Documents/At%20Home/PIC/PIC32/PIC32MX370F512H/clib/clib.X/clib_p32MX370F512H.ld</file>
8+ <file>file:/C:/Users/kmorimatsu/Documents/At%20Home/PIC/PIC32/PIC32MX370F512H/clib/clib.X/sdfsio370f.c</file>
99 <file>file:/C:/Users/kmorimatsu/Documents/At%20Home/PIC/PIC32/PIC32MX370F512H/clib/clib.X/example.c</file>
1010 </group>
1111 </open-files>