BASIC compiler/interpreter for PIC32MX/MZ-80K
リビジョン | 18fb6aed65ab2664bc2ee430f71121755a799083 (tree) |
---|---|
日時 | 2019-05-22 06:03:19 |
作者 | Katsumi <kmorimatsu@sour...> |
コミッター | Katsumi |
CLIB: Enable using 5th and 6th parameters to call MachiKania functions.
@@ -47,127 +47,172 @@ void* CLIBINIT clib_init(void*** data){ | ||
47 | 47 | return (void*)&clibdata[0]; |
48 | 48 | } |
49 | 49 | |
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 | - | |
68 | 50 | // Function to get g_data in $v0 |
69 | 51 | void*** __attribute__((section("clib_g_data"))) clib_g_data(){ return g_data; } |
70 | 52 | |
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)");\ | |
123 | 87 | 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)");\ | |
165 | 96 | 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"); } | |
167 | 210 | |
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"); } | |
172 | 215 | |
173 | -//*/ | |
\ No newline at end of file | ||
216 | +unsigned char __attribute__((section("ps2readkey"))) | |
217 | +clib_ps2readkey(void*** data) | |
218 | +{ machikania_function("$a0","20","4"); } |
@@ -32,7 +32,7 @@ extern void*** g_data; | ||
32 | 32 | * The structure of g_data[] is the same as g_data_clib[] below. |
33 | 33 | * |
34 | 34 | 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" | |
36 | 36 | }; |
37 | 37 | |
38 | 38 | const void* const g_data_clib_core[]={ |
@@ -153,81 +153,217 @@ void clib_free(void* addr, void*** g_data); | ||
153 | 153 | * FSrename |
154 | 154 | */ |
155 | 155 | |
156 | + | |
156 | 157 | /* |
157 | 158 | * MachiKanika video functions |
158 | 159 | */ |
159 | 160 | |
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 | + | |
184 | 245 | |
185 | 246 | /* |
186 | 247 | * MachiKanika graphic functions |
187 | 248 | */ |
188 | 249 | |
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 | + | |
221 | 347 | |
222 | 348 | /* |
223 | 349 | * MachiKanika keyboard functions |
224 | 350 | */ |
225 | 351 | |
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 | + | |
233 | 369 |
@@ -15,8 +15,12 @@ void init(void){ | ||
15 | 15 | |
16 | 16 | // Example of functions. |
17 | 17 | // 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. | |
18 | 20 | // 関数の実装例。 |
19 | 21 | // パブリック関数では、引数は最大4つまで。 |
22 | +// 関数中で、スタティック変数の初期化を行なわない事。 | |
23 | +// スタティック変数は、常に値0で初期化される。 | |
20 | 24 | char* test_private(int param1){ |
21 | 25 | switch(param1){ |
22 | 26 | case 0: |
@@ -1,5 +1,5 @@ | ||
1 | 1 | # |
2 | -#Wed May 15 15:38:15 PDT 2019 | |
2 | +#Tue May 21 13:54:07 PDT 2019 | |
3 | 3 | default.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=f2639e8ffe4e3a80ef2cdaeba61da340 |
4 | 4 | default.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc32\\v1.42\\bin |
5 | 5 | configurations-xml=2f3193434ad25f263dc0e914df895fd6 |
@@ -5,7 +5,7 @@ | ||
5 | 5 | <group> |
6 | 6 | <file>file:/C:/Users/kmorimatsu/Documents/At%20Home/PIC/PIC32/PIC32MX370F512H/clib/clib.X/clib.h</file> |
7 | 7 | <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> | |
9 | 9 | <file>file:/C:/Users/kmorimatsu/Documents/At%20Home/PIC/PIC32/PIC32MX370F512H/clib/clib.X/example.c</file> |
10 | 10 | </group> |
11 | 11 | </open-files> |