• R/O
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

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

Commit MetaInfo

Revision8 (tree)
Time2017-07-09 17:48:21
Authorkenkenmkiisr

Log Message

(empty log message)

Change Summary

Incremental Difference

--- branches/lib_videoout/lib_video_megalopa.c (nonexistent)
+++ branches/lib_videoout/lib_video_megalopa.c (revision 8)
@@ -0,0 +1,9969 @@
1+// liv_video_megalopa.c
2+// テキスト+グラフィックビデオ出力プログラム PIC32MX370F512H用 by K.Tanaka
3+// 出力 PORTE(RE0-4)
4+// グラフィック解像度288×216ドット
5+// 256色同時表示、1バイトで1ドットを表す
6+// テキスト解像度 36×27
7+// カラーパレット対応
8+// クロック周波数3.579545MHz×4×20/3倍
9+// 1ドットがカラーサブキャリアの5分の3周期(16クロック)
10+// 1ドットあたり4回信号出力(カラーサブキャリア1周期あたり3分の20回出力)
11+
12+
13+
14+#include "lib_video_megalopa.h"
15+#include <plib.h>
16+
17+//カラー信号出力データ
18+//
19+#define C_SYN 0
20+#define C_BLK 7
21+
22+#define C_BST1 7
23+#define C_BST2 5
24+#define C_BST3 4
25+#define C_BST4 6
26+#define C_BST5 10
27+#define C_BST6 11
28+#define C_BST7 10
29+#define C_BST8 6
30+#define C_BST9 4
31+#define C_BST10 5
32+#define C_BST11 7
33+#define C_BST12 10
34+#define C_BST13 11
35+#define C_BST14 9
36+#define C_BST15 5
37+#define C_BST16 4
38+#define C_BST17 5
39+#define C_BST18 9
40+#define C_BST19 11
41+#define C_BST20 10
42+
43+// パルス幅定数
44+#define V_NTSC 262 // 262本/画面
45+#define V_SYNC 10 // 垂直同期本数
46+#define V_PREEQ 26 // ブランキング区間上側
47+#define V_LINE Y_RES // 画像描画区間
48+#define H_NTSC 6080 // 1ラインのクロック数(約63.5→63.7μsec)(色副搬送波の228周期)
49+#define H_SYNC 449 // 水平同期幅、約4.7μsec
50+
51+#define nop() asm volatile("nop")
52+#define nop5() nop();nop();nop();nop();nop();
53+#define nop10() nop5();nop5();
54+
55+// グローバル変数定義
56+//unsigned char VRAM[X_RES*Y_RES] __attribute__ ((aligned (4))); //VRAM
57+unsigned char *GVRAM; //グラフィックVRAM開始位置のポインタ
58+unsigned char *GVRAMp; //処理中VRAMアドレス
59+unsigned char TVRAM[WIDTH_X*WIDTH_Y*2] __attribute__ ((aligned (4))); //TextVRAM
60+unsigned char *TVRAMp; //処理中TVRAMアドレス
61+unsigned char fontdata[8*256]; //固定フォント領域、初期化時にFontData[]からコピー
62+unsigned char *Fontp; //現在のフォントパターンの先頭アドレス
63+unsigned char *fontp; //処理中の行のフォントパターン先頭アドレス
64+
65+volatile unsigned short LineCount; // 処理中の行
66+volatile unsigned short drawcount; // 1画面表示終了ごとに1足す。アプリ側で0にする。
67+ // 最低1回は画面表示したことのチェックと、アプリの処理が何画面期間必要かの確認に利用。
68+volatile char drawing; // 映像区間処理中は-1、その他は0
69+unsigned char graphmode; //テキストモード時 0、テキスト&グラフィックモード時 0以外
70+
71+
72+//カラー信号波形テーブル
73+//256色分のカラーパレット
74+//20分の3周期単位で3周期分、ただし計算の都合上1色32バイトとする
75+unsigned char ClTable[32*256] __attribute__ ((aligned (4)));
76+
77+//バックグランドカラーテーブル
78+unsigned char BGClTable[20];
79+
80+/**********************
81+* Timer2 割り込み処理関数
82+***********************/
83+void __ISR(8, ipl5) T2Handler(void)
84+{
85+ asm volatile("#":::"a0");
86+ asm volatile("#":::"v0");
87+
88+ //TMR2の値でタイミングのずれを補正
89+ asm volatile("la $v0,%0"::"i"(&TMR2));
90+ asm volatile("lhu $a0,0($v0)");
91+ asm volatile("addiu $a0,$a0,-23");
92+ asm volatile("bltz $a0,label1_2");
93+ asm volatile("addiu $v0,$a0,-18");
94+ asm volatile("bgtz $v0,label1_2");
95+ asm volatile("sll $a0,$a0,2");
96+ asm volatile("la $v0,label1");
97+ asm volatile("addu $a0,$v0");
98+ asm volatile("jr $a0");
99+asm volatile("label1:");
100+ nop10();nop10();nop();nop();
101+
102+asm volatile("label1_2:");
103+ //LATE=C_SYN;
104+ asm volatile("addiu $a0,$zero,%0"::"n"(C_SYN));
105+ asm volatile("la $v0,%0"::"i"(&LATE));
106+ asm volatile("sb $a0,0($v0)");// 同期信号立ち下がり。ここを基準に全ての信号出力のタイミングを調整する
107+
108+ if(LineCount<V_SYNC){
109+ // 垂直同期期間
110+ OC5R = H_NTSC-H_SYNC-1; // 切り込みパルス幅設定
111+ OC5CON = 0x8001;
112+ }
113+ else if(graphmode){
114+ OC1R = H_SYNC-1-9; // 同期パルス幅4.7usec
115+ OC1CON = 0x8001; // タイマ2選択ワンショット
116+ if(LineCount>=V_SYNC+V_PREEQ && LineCount<V_SYNC+V_PREEQ+V_LINE){
117+ if(LineCount==V_SYNC+V_PREEQ){
118+ GVRAMp=GVRAM;
119+ TVRAMp=TVRAM;
120+ fontp=Fontp;
121+ drawing=-1; // 画像描画区間
122+ }
123+ else{
124+ GVRAMp+=X_RES;// 次の行へ(グラフィック)
125+ fontp++;// 次の行へ(フォント)
126+ if(fontp==Fontp+8){
127+ TVRAMp+=WIDTH_X;// 次の行へ(テキスト)
128+ fontp=Fontp;
129+ }
130+ }
131+ }
132+ else if(LineCount==V_SYNC+V_PREEQ+V_LINE){
133+ drawing=0;
134+ drawcount++;
135+ }
136+ }
137+ else{
138+ OC2R = H_SYNC-1-9; // 同期パルス幅4.7usec
139+ OC2CON = 0x8001; // タイマ2選択ワンショット
140+ if(LineCount>=V_SYNC+V_PREEQ && LineCount<V_SYNC+V_PREEQ+WIDTH_Y*8){
141+ if(LineCount==V_SYNC+V_PREEQ){
142+ TVRAMp=TVRAM;
143+ fontp=Fontp;
144+ drawing=-1; // 画像描画区間
145+ }
146+ else{
147+ fontp++;// 次の行へ(フォント)
148+ if(fontp==Fontp+8){
149+ TVRAMp+=WIDTH_X;// 次の行へ(テキスト)
150+ fontp=Fontp;
151+ }
152+ }
153+ }
154+ else if(LineCount==V_SYNC+V_PREEQ+WIDTH_Y*8){
155+ drawing=0;
156+ drawcount++;
157+ }
158+ }
159+ LineCount++;
160+ if(LineCount>=V_NTSC) LineCount=0;
161+ mT2ClearIntFlag(); // T2割り込みフラグクリア
162+}
163+
164+/*********************
165+* OC3割り込み処理関数 垂直同期切り込みパルス
166+*********************/
167+void __ISR(22, ipl5) OC5Handler(void)
168+{
169+ asm volatile("#":::"v0");
170+ asm volatile("#":::"v1");
171+ asm volatile("#":::"a0");
172+
173+ //TMR2の値でタイミングのずれを補正
174+ asm volatile("la $v0,%0"::"i"(&TMR2));
175+ asm volatile("lhu $a0,0($v0)");
176+ asm volatile("addiu $a0,$a0,%0"::"n"(-(H_NTSC-H_SYNC+23)));
177+ asm volatile("bltz $a0,label4_2");
178+ asm volatile("addiu $v0,$a0,-18");
179+ asm volatile("bgtz $v0,label4_2");
180+ asm volatile("sll $a0,$a0,2");
181+ asm volatile("la $v0,label4");
182+ asm volatile("addu $a0,$v0");
183+ asm volatile("jr $a0");
184+
185+asm volatile("label4:");
186+ nop10();nop10();nop();nop();
187+
188+asm volatile("label4_2:");
189+ // 同期信号のリセット
190+ // LATE=C_BLK;
191+ asm volatile("addiu $v1,$zero,%0"::"n"(C_BLK));
192+ asm volatile("la $v0,%0"::"i"(&LATE));
193+ asm volatile("sb $v1,0($v0)"); // 同期信号リセット。同期信号立ち下がりから5631サイクル
194+
195+ mOC5ClearIntFlag(); // OC3割り込みフラグクリア
196+}
197+
198+/*********************
199+* OC1割り込み処理関数 グラフィックモード 水平同期立ち上がり--カラーバースト--映像信号
200+*********************/
201+void __ISR(6, ipl5) OC1Handler(void)
202+{
203+ asm volatile("#":::"v0");
204+ asm volatile("#":::"v1");
205+ asm volatile("#":::"a0");
206+ asm volatile("#":::"a1");
207+ asm volatile("#":::"a2");
208+ asm volatile("#":::"a3");
209+ asm volatile("#":::"t0");
210+ asm volatile("#":::"t1");
211+ asm volatile("#":::"t2");
212+ asm volatile("#":::"t3");
213+ asm volatile("#":::"t4");
214+ asm volatile("#":::"t5");
215+
216+ //TMR2の値でタイミングのずれを補正
217+ asm volatile("la $v0,%0"::"i"(&TMR2));
218+ asm volatile("lhu $a0,0($v0)");
219+ asm volatile("addiu $a0,$a0,%0"::"n"(-(H_SYNC+23)));
220+ asm volatile("bltz $a0,label2_2");
221+ asm volatile("addiu $v0,$a0,-18");
222+ asm volatile("bgtz $v0,label2_2");
223+ asm volatile("sll $a0,$a0,2");
224+ asm volatile("la $v0,label2");
225+ asm volatile("addu $a0,$v0");
226+ asm volatile("jr $a0");
227+
228+asm volatile("label2:");
229+ nop10();nop10();nop();nop();
230+
231+asm volatile("label2_2:");
232+ // 同期信号のリセット
233+ // LATE=C_BLK;
234+ asm volatile("addiu $v1,$zero,%0"::"n"(C_BLK));
235+ asm volatile("la $v0,%0"::"i"(&LATE));
236+ asm volatile("sb $v1,0($v0)"); // 同期信号リセット。水平同期立ち下がりから449サイクル
237+/*
238+ asm volatile("la $v0,%0"::"i"(&TMR2));
239+ asm volatile("lhu $v1,0($v0)");
240+ asm volatile("addiu $v1,$v1,-520");
241+ asm volatile("bgtz $v1,label3");
242+
243+ */
244+ // 54クロックウェイト
245+ nop10();nop10();nop10();nop10();nop10();nop();nop();nop();nop();
246+
247+ // カラーバースト信号 9周期出力
248+ asm volatile("la $v0,%0"::"i"(&LATE));
249+ asm volatile("addiu $v1,$zero,%0"::"n"(C_BST1));
250+
251+ asm volatile("sb $v1,0($v0)"); // カラーバースト開始。水平同期立ち下がりから507サイクル
252+ asm volatile("addiu $v1,$zero,%0"::"n"(C_BST2));nop();nop();
253+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST3));nop();nop();
254+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST4));nop();nop();
255+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST5));nop();nop();
256+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST6));nop();nop();
257+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST7));nop();nop();
258+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST8));nop();nop();
259+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST9));nop();nop();
260+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST10));nop();nop();
261+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST11));nop();nop();
262+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST12));nop();nop();
263+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST13));nop();nop();
264+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST14));nop();nop();
265+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST15));nop();nop();
266+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST16));nop();nop();
267+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST17));nop();nop();
268+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST18));nop();nop();
269+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST19));nop();nop();
270+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST20));nop();nop();
271+
272+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST1));nop();nop();
273+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST2));nop();nop();
274+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST3));nop();nop();
275+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST4));nop();nop();
276+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST5));nop();nop();
277+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST6));nop();nop();
278+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST7));nop();nop();
279+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST8));nop();nop();
280+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST9));nop();nop();
281+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST10));nop();nop();
282+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST11));nop();nop();
283+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST12));nop();nop();
284+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST13));nop();nop();
285+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST14));nop();nop();
286+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST15));nop();nop();
287+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST16));nop();nop();
288+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST17));nop();nop();
289+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST18));nop();nop();
290+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST19));nop();nop();
291+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST20));nop();nop();
292+
293+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST1));nop();nop();
294+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST2));nop();nop();
295+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST3));nop();nop();
296+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST4));nop();nop();
297+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST5));nop();nop();
298+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST6));nop();nop();
299+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST7));nop();nop();
300+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST8));nop();nop();
301+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST9));nop();nop();
302+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST10));nop();nop();
303+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST11));nop();nop();
304+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST12));nop();nop();
305+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST13));nop();nop();
306+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST14));nop();nop();
307+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST15));nop();nop();
308+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST16));nop();nop();
309+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST17));nop();nop();
310+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST18));nop();nop();
311+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST19));nop();nop();
312+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST20));nop();nop();
313+
314+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST1));nop();nop();
315+ asm volatile("sb $v1,0($v0)"); // カラーバースト終了。水平同期立ち下がりから747サイクル
316+
317+
318+ // if(drawing==0) goto label3; //映像期間でなければ終了
319+ asm volatile("la $v0,%0"::"i"(&drawing));
320+ asm volatile("lb $t1,0($v0)");
321+ asm volatile("beqz $t1,label3");
322+ nop();
323+
324+ // 370クロックウェイト
325+ nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();
326+ nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();
327+ nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();
328+ nop10();nop10();nop10();nop10();nop10();nop10();nop10();
329+
330+
331+// 映像信号出力
332+
333+ // a1=ClTable;
334+ asm volatile("la $a1,%0"::"i"(ClTable));
335+ // a2=&LATE;
336+ asm volatile("la $a2,%0"::"i"(&LATE));
337+
338+ // v0=GVRAMp;
339+ asm volatile("la $t0,%0"::"i"(&GVRAMp));
340+ asm volatile("lw $v0,0($t0)");
341+
342+ // a3=TVRAMp;
343+ asm volatile("la $t0,%0"::"i"(&TVRAMp));
344+ asm volatile("lw $a3,0($t0)");
345+
346+ // t4=fontp;
347+ asm volatile("la $t0,%0"::"i"(&fontp));
348+ asm volatile("lw $t4,0($t0)");
349+
350+ asm volatile("lbu $t5,0($a3)");
351+ asm volatile("addiu $a3,$a3,1");
352+ asm volatile("sll $t5,$t5,3");
353+ asm volatile("addu $t5,$t5,$t4");
354+ asm volatile("lbu $t2,0($t5)");
355+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
356+
357+ asm volatile("lbu $v1,0($v0)");
358+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
359+ asm volatile("movn $v1,$t3,$t0");
360+ asm volatile("sll $v1,$v1,5");
361+ asm volatile("addu $v1,$v1,$a1");
362+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
363+ asm volatile("addiu $v0,$v0,1");
364+
365+//----------------------------------------------------------------------
366+ asm volatile("sb $t1,0($a2)"); //最初の映像信号出力。水平同期立下りから1147サイクル
367+ asm volatile("rotr $t1,$t1,8");
368+ asm volatile("lbu $v1,0($v0)");
369+ asm volatile("addiu $v0,$v0,1");
370+ asm volatile("sb $t1,0($a2)");
371+ asm volatile("rotr $t1,$t1,8");
372+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
373+ asm volatile("movn $v1,$t3,$t0");
374+ asm volatile("sb $t1,0($a2)");
375+ asm volatile("rotr $t1,$t1,8");
376+ asm volatile("sll $v1,$v1,5");
377+ asm volatile("addu $v1,$v1,$a1");
378+ asm volatile("sb $t1,0($a2)");
379+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
380+ asm volatile("nop");
381+ asm volatile("nop");
382+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
383+ asm volatile("rotr $t1,$t1,8");
384+ asm volatile("lbu $v1,0($v0)");
385+ asm volatile("addiu $v0,$v0,1");
386+ asm volatile("sb $t1,0($a2)");
387+ asm volatile("rotr $t1,$t1,8");
388+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
389+ asm volatile("movn $v1,$t3,$t0");
390+ asm volatile("sb $t1,0($a2)");
391+ asm volatile("rotr $t1,$t1,8");
392+ asm volatile("sll $v1,$v1,5");
393+ asm volatile("addu $v1,$v1,$a1");
394+ asm volatile("sb $t1,0($a2)");
395+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
396+ asm volatile("nop");
397+ asm volatile("nop");
398+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
399+ asm volatile("rotr $t1,$t1,8");
400+ asm volatile("lbu $v1,0($v0)");
401+ asm volatile("addiu $v0,$v0,1");
402+ asm volatile("sb $t1,0($a2)");
403+ asm volatile("rotr $t1,$t1,8");
404+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
405+ asm volatile("movn $v1,$t3,$t0");
406+ asm volatile("sb $t1,0($a2)");
407+ asm volatile("rotr $t1,$t1,8");
408+ asm volatile("sll $v1,$v1,5");
409+ asm volatile("addu $v1,$v1,$a1");
410+ asm volatile("sb $t1,0($a2)");
411+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
412+ asm volatile("nop");
413+ asm volatile("nop");
414+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
415+ asm volatile("rotr $t1,$t1,8");
416+ asm volatile("lbu $v1,0($v0)");
417+ asm volatile("addiu $v0,$v0,1");
418+ asm volatile("sb $t1,0($a2)");
419+ asm volatile("rotr $t1,$t1,8");
420+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
421+ asm volatile("movn $v1,$t3,$t0");
422+ asm volatile("sb $t1,0($a2)");
423+ asm volatile("rotr $t1,$t1,8");
424+ asm volatile("sll $v1,$v1,5");
425+ asm volatile("addu $v1,$v1,$a1");
426+ asm volatile("sb $t1,0($a2)");
427+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
428+ asm volatile("nop");
429+ asm volatile("nop");
430+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
431+ asm volatile("rotr $t1,$t1,8");
432+ asm volatile("lbu $v1,0($v0)");
433+ asm volatile("addiu $v0,$v0,1");
434+ asm volatile("sb $t1,0($a2)");
435+ asm volatile("rotr $t1,$t1,8");
436+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
437+ asm volatile("movn $v1,$t3,$t0");
438+ asm volatile("sb $t1,0($a2)");
439+ asm volatile("rotr $t1,$t1,8");
440+ asm volatile("sll $v1,$v1,5");
441+ asm volatile("addu $v1,$v1,$a1");
442+ asm volatile("sb $t1,0($a2)");
443+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
444+ asm volatile("lbu $t5,0($a3)");
445+ asm volatile("addiu $a3,$a3,1");
446+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
447+ asm volatile("rotr $t1,$t1,8");
448+ asm volatile("lbu $v1,0($v0)");
449+ asm volatile("addiu $v0,$v0,1");
450+ asm volatile("sb $t1,0($a2)");
451+ asm volatile("rotr $t1,$t1,8");
452+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
453+ asm volatile("movn $v1,$t3,$t0");
454+ asm volatile("sb $t1,0($a2)");
455+ asm volatile("rotr $t1,$t1,8");
456+ asm volatile("sll $v1,$v1,5");
457+ asm volatile("addu $v1,$v1,$a1");
458+ asm volatile("sb $t1,0($a2)");
459+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
460+ asm volatile("sll $t5,$t5,3");
461+ asm volatile("addu $t5,$t5,$t4");
462+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
463+ asm volatile("rotr $t1,$t1,8");
464+ asm volatile("lbu $v1,0($v0)");
465+ asm volatile("addiu $v0,$v0,1");
466+ asm volatile("sb $t1,0($a2)");
467+ asm volatile("rotr $t1,$t1,8");
468+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
469+ asm volatile("movn $v1,$t3,$t0");
470+ asm volatile("sb $t1,0($a2)");
471+ asm volatile("rotr $t1,$t1,8");
472+ asm volatile("sll $v1,$v1,5");
473+ asm volatile("addu $v1,$v1,$a1");
474+ asm volatile("sb $t1,0($a2)");
475+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
476+ asm volatile("lbu $t2,0($t5)");
477+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
478+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
479+ asm volatile("rotr $t1,$t1,8");
480+ asm volatile("lbu $v1,0($v0)");
481+ asm volatile("addiu $v0,$v0,1");
482+ asm volatile("sb $t1,0($a2)");
483+ asm volatile("rotr $t1,$t1,8");
484+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
485+ asm volatile("movn $v1,$t3,$t0");
486+ asm volatile("sb $t1,0($a2)");
487+ asm volatile("rotr $t1,$t1,8");
488+ asm volatile("sll $v1,$v1,5");
489+ asm volatile("addu $v1,$v1,$a1");
490+ asm volatile("sb $t1,0($a2)");
491+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
492+ asm volatile("nop");
493+ asm volatile("nop");
494+//-------------------------------------------------------------8ドット境界
495+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
496+ asm volatile("rotr $t1,$t1,8");
497+ asm volatile("lbu $v1,0($v0)");
498+ asm volatile("addiu $v0,$v0,1");
499+ asm volatile("sb $t1,0($a2)");
500+ asm volatile("rotr $t1,$t1,8");
501+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
502+ asm volatile("movn $v1,$t3,$t0");
503+ asm volatile("sb $t1,0($a2)");
504+ asm volatile("rotr $t1,$t1,8");
505+ asm volatile("sll $v1,$v1,5");
506+ asm volatile("addu $v1,$v1,$a1");
507+ asm volatile("sb $t1,0($a2)");
508+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
509+ asm volatile("nop");
510+ asm volatile("nop");
511+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
512+ asm volatile("rotr $t1,$t1,8");
513+ asm volatile("lbu $v1,0($v0)");
514+ asm volatile("addiu $v0,$v0,1");
515+ asm volatile("sb $t1,0($a2)");
516+ asm volatile("rotr $t1,$t1,8");
517+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
518+ asm volatile("movn $v1,$t3,$t0");
519+ asm volatile("sb $t1,0($a2)");
520+ asm volatile("rotr $t1,$t1,8");
521+ asm volatile("sll $v1,$v1,5");
522+ asm volatile("addu $v1,$v1,$a1");
523+ asm volatile("sb $t1,0($a2)");
524+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
525+ asm volatile("nop");
526+ asm volatile("nop");
527+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
528+ asm volatile("rotr $t1,$t1,8");
529+ asm volatile("lbu $v1,0($v0)");
530+ asm volatile("addiu $v0,$v0,1");
531+ asm volatile("sb $t1,0($a2)");
532+ asm volatile("rotr $t1,$t1,8");
533+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
534+ asm volatile("movn $v1,$t3,$t0");
535+ asm volatile("sb $t1,0($a2)");
536+ asm volatile("rotr $t1,$t1,8");
537+ asm volatile("sll $v1,$v1,5");
538+ asm volatile("addu $v1,$v1,$a1");
539+ asm volatile("sb $t1,0($a2)");
540+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
541+ asm volatile("nop");
542+ asm volatile("nop");
543+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
544+ asm volatile("rotr $t1,$t1,8");
545+ asm volatile("lbu $v1,0($v0)");
546+ asm volatile("addiu $v0,$v0,1");
547+ asm volatile("sb $t1,0($a2)");
548+ asm volatile("rotr $t1,$t1,8");
549+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
550+ asm volatile("movn $v1,$t3,$t0");
551+ asm volatile("sb $t1,0($a2)");
552+ asm volatile("rotr $t1,$t1,8");
553+ asm volatile("sll $v1,$v1,5");
554+ asm volatile("addu $v1,$v1,$a1");
555+ asm volatile("sb $t1,0($a2)");
556+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
557+ asm volatile("nop");
558+ asm volatile("nop");
559+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
560+ asm volatile("rotr $t1,$t1,8");
561+ asm volatile("lbu $v1,0($v0)");
562+ asm volatile("addiu $v0,$v0,1");
563+ asm volatile("sb $t1,0($a2)");
564+ asm volatile("rotr $t1,$t1,8");
565+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
566+ asm volatile("movn $v1,$t3,$t0");
567+ asm volatile("sb $t1,0($a2)");
568+ asm volatile("rotr $t1,$t1,8");
569+ asm volatile("sll $v1,$v1,5");
570+ asm volatile("addu $v1,$v1,$a1");
571+ asm volatile("sb $t1,0($a2)");
572+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
573+ asm volatile("lbu $t5,0($a3)");
574+ asm volatile("addiu $a3,$a3,1");
575+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
576+ asm volatile("rotr $t1,$t1,8");
577+ asm volatile("lbu $v1,0($v0)");
578+ asm volatile("addiu $v0,$v0,1");
579+ asm volatile("sb $t1,0($a2)");
580+ asm volatile("rotr $t1,$t1,8");
581+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
582+ asm volatile("movn $v1,$t3,$t0");
583+ asm volatile("sb $t1,0($a2)");
584+ asm volatile("rotr $t1,$t1,8");
585+ asm volatile("sll $v1,$v1,5");
586+ asm volatile("addu $v1,$v1,$a1");
587+ asm volatile("sb $t1,0($a2)");
588+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
589+ asm volatile("sll $t5,$t5,3");
590+ asm volatile("addu $t5,$t5,$t4");
591+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
592+ asm volatile("rotr $t1,$t1,8");
593+ asm volatile("lbu $v1,0($v0)");
594+ asm volatile("addiu $v0,$v0,1");
595+ asm volatile("sb $t1,0($a2)");
596+ asm volatile("rotr $t1,$t1,8");
597+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
598+ asm volatile("movn $v1,$t3,$t0");
599+ asm volatile("sb $t1,0($a2)");
600+ asm volatile("rotr $t1,$t1,8");
601+ asm volatile("sll $v1,$v1,5");
602+ asm volatile("addu $v1,$v1,$a1");
603+ asm volatile("sb $t1,0($a2)");
604+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
605+ asm volatile("lbu $t2,0($t5)");
606+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
607+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
608+ asm volatile("rotr $t1,$t1,8");
609+ asm volatile("lbu $v1,0($v0)");
610+ asm volatile("addiu $v0,$v0,1");
611+ asm volatile("sb $t1,0($a2)");
612+ asm volatile("rotr $t1,$t1,8");
613+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
614+ asm volatile("movn $v1,$t3,$t0");
615+ asm volatile("sb $t1,0($a2)");
616+ asm volatile("rotr $t1,$t1,8");
617+ asm volatile("sll $v1,$v1,5");
618+ asm volatile("addu $v1,$v1,$a1");
619+ asm volatile("sb $t1,0($a2)");
620+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
621+ asm volatile("nop");
622+ asm volatile("nop");
623+//-------------------------------------------------------------8ドット境界
624+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
625+ asm volatile("rotr $t1,$t1,8");
626+ asm volatile("lbu $v1,0($v0)");
627+ asm volatile("addiu $v0,$v0,1");
628+ asm volatile("sb $t1,0($a2)");
629+ asm volatile("rotr $t1,$t1,8");
630+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
631+ asm volatile("movn $v1,$t3,$t0");
632+ asm volatile("sb $t1,0($a2)");
633+ asm volatile("rotr $t1,$t1,8");
634+ asm volatile("sll $v1,$v1,5");
635+ asm volatile("addu $v1,$v1,$a1");
636+ asm volatile("sb $t1,0($a2)");
637+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
638+ asm volatile("nop");
639+ asm volatile("nop");
640+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
641+ asm volatile("rotr $t1,$t1,8");
642+ asm volatile("lbu $v1,0($v0)");
643+ asm volatile("addiu $v0,$v0,1");
644+ asm volatile("sb $t1,0($a2)");
645+ asm volatile("rotr $t1,$t1,8");
646+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
647+ asm volatile("movn $v1,$t3,$t0");
648+ asm volatile("sb $t1,0($a2)");
649+ asm volatile("rotr $t1,$t1,8");
650+ asm volatile("sll $v1,$v1,5");
651+ asm volatile("addu $v1,$v1,$a1");
652+ asm volatile("sb $t1,0($a2)");
653+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
654+ asm volatile("nop");
655+ asm volatile("nop");
656+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
657+ asm volatile("rotr $t1,$t1,8");
658+ asm volatile("lbu $v1,0($v0)");
659+ asm volatile("addiu $v0,$v0,1");
660+ asm volatile("sb $t1,0($a2)");
661+ asm volatile("rotr $t1,$t1,8");
662+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
663+ asm volatile("movn $v1,$t3,$t0");
664+ asm volatile("sb $t1,0($a2)");
665+ asm volatile("rotr $t1,$t1,8");
666+ asm volatile("sll $v1,$v1,5");
667+ asm volatile("addu $v1,$v1,$a1");
668+ asm volatile("sb $t1,0($a2)");
669+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
670+ asm volatile("nop");
671+ asm volatile("nop");
672+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
673+ asm volatile("rotr $t1,$t1,8");
674+ asm volatile("lbu $v1,0($v0)");
675+ asm volatile("addiu $v0,$v0,1");
676+ asm volatile("sb $t1,0($a2)");
677+ asm volatile("rotr $t1,$t1,8");
678+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
679+ asm volatile("movn $v1,$t3,$t0");
680+ asm volatile("sb $t1,0($a2)");
681+ asm volatile("rotr $t1,$t1,8");
682+ asm volatile("sll $v1,$v1,5");
683+ asm volatile("addu $v1,$v1,$a1");
684+ asm volatile("sb $t1,0($a2)");
685+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
686+ asm volatile("nop");
687+ asm volatile("nop");
688+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
689+ asm volatile("rotr $t1,$t1,8");
690+ asm volatile("lbu $v1,0($v0)");
691+ asm volatile("addiu $v0,$v0,1");
692+ asm volatile("sb $t1,0($a2)");
693+ asm volatile("rotr $t1,$t1,8");
694+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
695+ asm volatile("movn $v1,$t3,$t0");
696+ asm volatile("sb $t1,0($a2)");
697+ asm volatile("rotr $t1,$t1,8");
698+ asm volatile("sll $v1,$v1,5");
699+ asm volatile("addu $v1,$v1,$a1");
700+ asm volatile("sb $t1,0($a2)");
701+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
702+ asm volatile("lbu $t5,0($a3)");
703+ asm volatile("addiu $a3,$a3,1");
704+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
705+ asm volatile("rotr $t1,$t1,8");
706+ asm volatile("lbu $v1,0($v0)");
707+ asm volatile("addiu $v0,$v0,1");
708+ asm volatile("sb $t1,0($a2)");
709+ asm volatile("rotr $t1,$t1,8");
710+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
711+ asm volatile("movn $v1,$t3,$t0");
712+ asm volatile("sb $t1,0($a2)");
713+ asm volatile("rotr $t1,$t1,8");
714+ asm volatile("sll $v1,$v1,5");
715+ asm volatile("addu $v1,$v1,$a1");
716+ asm volatile("sb $t1,0($a2)");
717+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
718+ asm volatile("sll $t5,$t5,3");
719+ asm volatile("addu $t5,$t5,$t4");
720+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
721+ asm volatile("rotr $t1,$t1,8");
722+ asm volatile("lbu $v1,0($v0)");
723+ asm volatile("addiu $v0,$v0,1");
724+ asm volatile("sb $t1,0($a2)");
725+ asm volatile("rotr $t1,$t1,8");
726+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
727+ asm volatile("movn $v1,$t3,$t0");
728+ asm volatile("sb $t1,0($a2)");
729+ asm volatile("rotr $t1,$t1,8");
730+ asm volatile("sll $v1,$v1,5");
731+ asm volatile("addu $v1,$v1,$a1");
732+ asm volatile("sb $t1,0($a2)");
733+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
734+ asm volatile("lbu $t2,0($t5)");
735+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
736+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
737+ asm volatile("rotr $t1,$t1,8");
738+ asm volatile("lbu $v1,0($v0)");
739+ asm volatile("addiu $v0,$v0,1");
740+ asm volatile("sb $t1,0($a2)");
741+ asm volatile("rotr $t1,$t1,8");
742+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
743+ asm volatile("movn $v1,$t3,$t0");
744+ asm volatile("sb $t1,0($a2)");
745+ asm volatile("rotr $t1,$t1,8");
746+ asm volatile("sll $v1,$v1,5");
747+ asm volatile("addu $v1,$v1,$a1");
748+ asm volatile("sb $t1,0($a2)");
749+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
750+ asm volatile("nop");
751+ asm volatile("nop");
752+//-------------------------------------------------------------8ドット境界
753+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
754+ asm volatile("rotr $t1,$t1,8");
755+ asm volatile("lbu $v1,0($v0)");
756+ asm volatile("addiu $v0,$v0,1");
757+ asm volatile("sb $t1,0($a2)");
758+ asm volatile("rotr $t1,$t1,8");
759+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
760+ asm volatile("movn $v1,$t3,$t0");
761+ asm volatile("sb $t1,0($a2)");
762+ asm volatile("rotr $t1,$t1,8");
763+ asm volatile("sll $v1,$v1,5");
764+ asm volatile("addu $v1,$v1,$a1");
765+ asm volatile("sb $t1,0($a2)");
766+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
767+ asm volatile("nop");
768+ asm volatile("nop");
769+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
770+ asm volatile("rotr $t1,$t1,8");
771+ asm volatile("lbu $v1,0($v0)");
772+ asm volatile("addiu $v0,$v0,1");
773+ asm volatile("sb $t1,0($a2)");
774+ asm volatile("rotr $t1,$t1,8");
775+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
776+ asm volatile("movn $v1,$t3,$t0");
777+ asm volatile("sb $t1,0($a2)");
778+ asm volatile("rotr $t1,$t1,8");
779+ asm volatile("sll $v1,$v1,5");
780+ asm volatile("addu $v1,$v1,$a1");
781+ asm volatile("sb $t1,0($a2)");
782+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
783+ asm volatile("nop");
784+ asm volatile("nop");
785+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
786+ asm volatile("rotr $t1,$t1,8");
787+ asm volatile("lbu $v1,0($v0)");
788+ asm volatile("addiu $v0,$v0,1");
789+ asm volatile("sb $t1,0($a2)");
790+ asm volatile("rotr $t1,$t1,8");
791+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
792+ asm volatile("movn $v1,$t3,$t0");
793+ asm volatile("sb $t1,0($a2)");
794+ asm volatile("rotr $t1,$t1,8");
795+ asm volatile("sll $v1,$v1,5");
796+ asm volatile("addu $v1,$v1,$a1");
797+ asm volatile("sb $t1,0($a2)");
798+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
799+ asm volatile("nop");
800+ asm volatile("nop");
801+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
802+ asm volatile("rotr $t1,$t1,8");
803+ asm volatile("lbu $v1,0($v0)");
804+ asm volatile("addiu $v0,$v0,1");
805+ asm volatile("sb $t1,0($a2)");
806+ asm volatile("rotr $t1,$t1,8");
807+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
808+ asm volatile("movn $v1,$t3,$t0");
809+ asm volatile("sb $t1,0($a2)");
810+ asm volatile("rotr $t1,$t1,8");
811+ asm volatile("sll $v1,$v1,5");
812+ asm volatile("addu $v1,$v1,$a1");
813+ asm volatile("sb $t1,0($a2)");
814+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
815+ asm volatile("nop");
816+ asm volatile("nop");
817+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
818+ asm volatile("rotr $t1,$t1,8");
819+ asm volatile("lbu $v1,0($v0)");
820+ asm volatile("addiu $v0,$v0,1");
821+ asm volatile("sb $t1,0($a2)");
822+ asm volatile("rotr $t1,$t1,8");
823+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
824+ asm volatile("movn $v1,$t3,$t0");
825+ asm volatile("sb $t1,0($a2)");
826+ asm volatile("rotr $t1,$t1,8");
827+ asm volatile("sll $v1,$v1,5");
828+ asm volatile("addu $v1,$v1,$a1");
829+ asm volatile("sb $t1,0($a2)");
830+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
831+ asm volatile("lbu $t5,0($a3)");
832+ asm volatile("addiu $a3,$a3,1");
833+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
834+ asm volatile("rotr $t1,$t1,8");
835+ asm volatile("lbu $v1,0($v0)");
836+ asm volatile("addiu $v0,$v0,1");
837+ asm volatile("sb $t1,0($a2)");
838+ asm volatile("rotr $t1,$t1,8");
839+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
840+ asm volatile("movn $v1,$t3,$t0");
841+ asm volatile("sb $t1,0($a2)");
842+ asm volatile("rotr $t1,$t1,8");
843+ asm volatile("sll $v1,$v1,5");
844+ asm volatile("addu $v1,$v1,$a1");
845+ asm volatile("sb $t1,0($a2)");
846+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
847+ asm volatile("sll $t5,$t5,3");
848+ asm volatile("addu $t5,$t5,$t4");
849+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
850+ asm volatile("rotr $t1,$t1,8");
851+ asm volatile("lbu $v1,0($v0)");
852+ asm volatile("addiu $v0,$v0,1");
853+ asm volatile("sb $t1,0($a2)");
854+ asm volatile("rotr $t1,$t1,8");
855+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
856+ asm volatile("movn $v1,$t3,$t0");
857+ asm volatile("sb $t1,0($a2)");
858+ asm volatile("rotr $t1,$t1,8");
859+ asm volatile("sll $v1,$v1,5");
860+ asm volatile("addu $v1,$v1,$a1");
861+ asm volatile("sb $t1,0($a2)");
862+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
863+ asm volatile("lbu $t2,0($t5)");
864+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
865+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
866+ asm volatile("rotr $t1,$t1,8");
867+ asm volatile("lbu $v1,0($v0)");
868+ asm volatile("addiu $v0,$v0,1");
869+ asm volatile("sb $t1,0($a2)");
870+ asm volatile("rotr $t1,$t1,8");
871+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
872+ asm volatile("movn $v1,$t3,$t0");
873+ asm volatile("sb $t1,0($a2)");
874+ asm volatile("rotr $t1,$t1,8");
875+ asm volatile("sll $v1,$v1,5");
876+ asm volatile("addu $v1,$v1,$a1");
877+ asm volatile("sb $t1,0($a2)");
878+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
879+ asm volatile("nop");
880+ asm volatile("nop");
881+//-------------------------------------------------------------8ドット境界
882+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
883+ asm volatile("rotr $t1,$t1,8");
884+ asm volatile("lbu $v1,0($v0)");
885+ asm volatile("addiu $v0,$v0,1");
886+ asm volatile("sb $t1,0($a2)");
887+ asm volatile("rotr $t1,$t1,8");
888+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
889+ asm volatile("movn $v1,$t3,$t0");
890+ asm volatile("sb $t1,0($a2)");
891+ asm volatile("rotr $t1,$t1,8");
892+ asm volatile("sll $v1,$v1,5");
893+ asm volatile("addu $v1,$v1,$a1");
894+ asm volatile("sb $t1,0($a2)");
895+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
896+ asm volatile("nop");
897+ asm volatile("nop");
898+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
899+ asm volatile("rotr $t1,$t1,8");
900+ asm volatile("lbu $v1,0($v0)");
901+ asm volatile("addiu $v0,$v0,1");
902+ asm volatile("sb $t1,0($a2)");
903+ asm volatile("rotr $t1,$t1,8");
904+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
905+ asm volatile("movn $v1,$t3,$t0");
906+ asm volatile("sb $t1,0($a2)");
907+ asm volatile("rotr $t1,$t1,8");
908+ asm volatile("sll $v1,$v1,5");
909+ asm volatile("addu $v1,$v1,$a1");
910+ asm volatile("sb $t1,0($a2)");
911+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
912+ asm volatile("nop");
913+ asm volatile("nop");
914+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
915+ asm volatile("rotr $t1,$t1,8");
916+ asm volatile("lbu $v1,0($v0)");
917+ asm volatile("addiu $v0,$v0,1");
918+ asm volatile("sb $t1,0($a2)");
919+ asm volatile("rotr $t1,$t1,8");
920+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
921+ asm volatile("movn $v1,$t3,$t0");
922+ asm volatile("sb $t1,0($a2)");
923+ asm volatile("rotr $t1,$t1,8");
924+ asm volatile("sll $v1,$v1,5");
925+ asm volatile("addu $v1,$v1,$a1");
926+ asm volatile("sb $t1,0($a2)");
927+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
928+ asm volatile("nop");
929+ asm volatile("nop");
930+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
931+ asm volatile("rotr $t1,$t1,8");
932+ asm volatile("lbu $v1,0($v0)");
933+ asm volatile("addiu $v0,$v0,1");
934+ asm volatile("sb $t1,0($a2)");
935+ asm volatile("rotr $t1,$t1,8");
936+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
937+ asm volatile("movn $v1,$t3,$t0");
938+ asm volatile("sb $t1,0($a2)");
939+ asm volatile("rotr $t1,$t1,8");
940+ asm volatile("sll $v1,$v1,5");
941+ asm volatile("addu $v1,$v1,$a1");
942+ asm volatile("sb $t1,0($a2)");
943+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
944+ asm volatile("nop");
945+ asm volatile("nop");
946+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
947+ asm volatile("rotr $t1,$t1,8");
948+ asm volatile("lbu $v1,0($v0)");
949+ asm volatile("addiu $v0,$v0,1");
950+ asm volatile("sb $t1,0($a2)");
951+ asm volatile("rotr $t1,$t1,8");
952+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
953+ asm volatile("movn $v1,$t3,$t0");
954+ asm volatile("sb $t1,0($a2)");
955+ asm volatile("rotr $t1,$t1,8");
956+ asm volatile("sll $v1,$v1,5");
957+ asm volatile("addu $v1,$v1,$a1");
958+ asm volatile("sb $t1,0($a2)");
959+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
960+ asm volatile("lbu $t5,0($a3)");
961+ asm volatile("addiu $a3,$a3,1");
962+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
963+ asm volatile("rotr $t1,$t1,8");
964+ asm volatile("lbu $v1,0($v0)");
965+ asm volatile("addiu $v0,$v0,1");
966+ asm volatile("sb $t1,0($a2)");
967+ asm volatile("rotr $t1,$t1,8");
968+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
969+ asm volatile("movn $v1,$t3,$t0");
970+ asm volatile("sb $t1,0($a2)");
971+ asm volatile("rotr $t1,$t1,8");
972+ asm volatile("sll $v1,$v1,5");
973+ asm volatile("addu $v1,$v1,$a1");
974+ asm volatile("sb $t1,0($a2)");
975+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
976+ asm volatile("sll $t5,$t5,3");
977+ asm volatile("addu $t5,$t5,$t4");
978+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
979+ asm volatile("rotr $t1,$t1,8");
980+ asm volatile("lbu $v1,0($v0)");
981+ asm volatile("addiu $v0,$v0,1");
982+ asm volatile("sb $t1,0($a2)");
983+ asm volatile("rotr $t1,$t1,8");
984+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
985+ asm volatile("movn $v1,$t3,$t0");
986+ asm volatile("sb $t1,0($a2)");
987+ asm volatile("rotr $t1,$t1,8");
988+ asm volatile("sll $v1,$v1,5");
989+ asm volatile("addu $v1,$v1,$a1");
990+ asm volatile("sb $t1,0($a2)");
991+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
992+ asm volatile("lbu $t2,0($t5)");
993+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
994+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
995+ asm volatile("rotr $t1,$t1,8");
996+ asm volatile("lbu $v1,0($v0)");
997+ asm volatile("addiu $v0,$v0,1");
998+ asm volatile("sb $t1,0($a2)");
999+ asm volatile("rotr $t1,$t1,8");
1000+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1001+ asm volatile("movn $v1,$t3,$t0");
1002+ asm volatile("sb $t1,0($a2)");
1003+ asm volatile("rotr $t1,$t1,8");
1004+ asm volatile("sll $v1,$v1,5");
1005+ asm volatile("addu $v1,$v1,$a1");
1006+ asm volatile("sb $t1,0($a2)");
1007+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1008+ asm volatile("nop");
1009+ asm volatile("nop");
1010+//-------------------------------------------------------------8ドット境界
1011+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1012+ asm volatile("rotr $t1,$t1,8");
1013+ asm volatile("lbu $v1,0($v0)");
1014+ asm volatile("addiu $v0,$v0,1");
1015+ asm volatile("sb $t1,0($a2)");
1016+ asm volatile("rotr $t1,$t1,8");
1017+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1018+ asm volatile("movn $v1,$t3,$t0");
1019+ asm volatile("sb $t1,0($a2)");
1020+ asm volatile("rotr $t1,$t1,8");
1021+ asm volatile("sll $v1,$v1,5");
1022+ asm volatile("addu $v1,$v1,$a1");
1023+ asm volatile("sb $t1,0($a2)");
1024+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1025+ asm volatile("nop");
1026+ asm volatile("nop");
1027+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1028+ asm volatile("rotr $t1,$t1,8");
1029+ asm volatile("lbu $v1,0($v0)");
1030+ asm volatile("addiu $v0,$v0,1");
1031+ asm volatile("sb $t1,0($a2)");
1032+ asm volatile("rotr $t1,$t1,8");
1033+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1034+ asm volatile("movn $v1,$t3,$t0");
1035+ asm volatile("sb $t1,0($a2)");
1036+ asm volatile("rotr $t1,$t1,8");
1037+ asm volatile("sll $v1,$v1,5");
1038+ asm volatile("addu $v1,$v1,$a1");
1039+ asm volatile("sb $t1,0($a2)");
1040+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1041+ asm volatile("nop");
1042+ asm volatile("nop");
1043+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1044+ asm volatile("rotr $t1,$t1,8");
1045+ asm volatile("lbu $v1,0($v0)");
1046+ asm volatile("addiu $v0,$v0,1");
1047+ asm volatile("sb $t1,0($a2)");
1048+ asm volatile("rotr $t1,$t1,8");
1049+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1050+ asm volatile("movn $v1,$t3,$t0");
1051+ asm volatile("sb $t1,0($a2)");
1052+ asm volatile("rotr $t1,$t1,8");
1053+ asm volatile("sll $v1,$v1,5");
1054+ asm volatile("addu $v1,$v1,$a1");
1055+ asm volatile("sb $t1,0($a2)");
1056+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1057+ asm volatile("nop");
1058+ asm volatile("nop");
1059+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1060+ asm volatile("rotr $t1,$t1,8");
1061+ asm volatile("lbu $v1,0($v0)");
1062+ asm volatile("addiu $v0,$v0,1");
1063+ asm volatile("sb $t1,0($a2)");
1064+ asm volatile("rotr $t1,$t1,8");
1065+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1066+ asm volatile("movn $v1,$t3,$t0");
1067+ asm volatile("sb $t1,0($a2)");
1068+ asm volatile("rotr $t1,$t1,8");
1069+ asm volatile("sll $v1,$v1,5");
1070+ asm volatile("addu $v1,$v1,$a1");
1071+ asm volatile("sb $t1,0($a2)");
1072+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1073+ asm volatile("nop");
1074+ asm volatile("nop");
1075+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1076+ asm volatile("rotr $t1,$t1,8");
1077+ asm volatile("lbu $v1,0($v0)");
1078+ asm volatile("addiu $v0,$v0,1");
1079+ asm volatile("sb $t1,0($a2)");
1080+ asm volatile("rotr $t1,$t1,8");
1081+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1082+ asm volatile("movn $v1,$t3,$t0");
1083+ asm volatile("sb $t1,0($a2)");
1084+ asm volatile("rotr $t1,$t1,8");
1085+ asm volatile("sll $v1,$v1,5");
1086+ asm volatile("addu $v1,$v1,$a1");
1087+ asm volatile("sb $t1,0($a2)");
1088+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1089+ asm volatile("lbu $t5,0($a3)");
1090+ asm volatile("addiu $a3,$a3,1");
1091+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1092+ asm volatile("rotr $t1,$t1,8");
1093+ asm volatile("lbu $v1,0($v0)");
1094+ asm volatile("addiu $v0,$v0,1");
1095+ asm volatile("sb $t1,0($a2)");
1096+ asm volatile("rotr $t1,$t1,8");
1097+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1098+ asm volatile("movn $v1,$t3,$t0");
1099+ asm volatile("sb $t1,0($a2)");
1100+ asm volatile("rotr $t1,$t1,8");
1101+ asm volatile("sll $v1,$v1,5");
1102+ asm volatile("addu $v1,$v1,$a1");
1103+ asm volatile("sb $t1,0($a2)");
1104+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1105+ asm volatile("sll $t5,$t5,3");
1106+ asm volatile("addu $t5,$t5,$t4");
1107+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1108+ asm volatile("rotr $t1,$t1,8");
1109+ asm volatile("lbu $v1,0($v0)");
1110+ asm volatile("addiu $v0,$v0,1");
1111+ asm volatile("sb $t1,0($a2)");
1112+ asm volatile("rotr $t1,$t1,8");
1113+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1114+ asm volatile("movn $v1,$t3,$t0");
1115+ asm volatile("sb $t1,0($a2)");
1116+ asm volatile("rotr $t1,$t1,8");
1117+ asm volatile("sll $v1,$v1,5");
1118+ asm volatile("addu $v1,$v1,$a1");
1119+ asm volatile("sb $t1,0($a2)");
1120+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1121+ asm volatile("lbu $t2,0($t5)");
1122+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
1123+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1124+ asm volatile("rotr $t1,$t1,8");
1125+ asm volatile("lbu $v1,0($v0)");
1126+ asm volatile("addiu $v0,$v0,1");
1127+ asm volatile("sb $t1,0($a2)");
1128+ asm volatile("rotr $t1,$t1,8");
1129+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1130+ asm volatile("movn $v1,$t3,$t0");
1131+ asm volatile("sb $t1,0($a2)");
1132+ asm volatile("rotr $t1,$t1,8");
1133+ asm volatile("sll $v1,$v1,5");
1134+ asm volatile("addu $v1,$v1,$a1");
1135+ asm volatile("sb $t1,0($a2)");
1136+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1137+ asm volatile("nop");
1138+ asm volatile("nop");
1139+//-------------------------------------------------------------8ドット境界
1140+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1141+ asm volatile("rotr $t1,$t1,8");
1142+ asm volatile("lbu $v1,0($v0)");
1143+ asm volatile("addiu $v0,$v0,1");
1144+ asm volatile("sb $t1,0($a2)");
1145+ asm volatile("rotr $t1,$t1,8");
1146+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1147+ asm volatile("movn $v1,$t3,$t0");
1148+ asm volatile("sb $t1,0($a2)");
1149+ asm volatile("rotr $t1,$t1,8");
1150+ asm volatile("sll $v1,$v1,5");
1151+ asm volatile("addu $v1,$v1,$a1");
1152+ asm volatile("sb $t1,0($a2)");
1153+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1154+ asm volatile("nop");
1155+ asm volatile("nop");
1156+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1157+ asm volatile("rotr $t1,$t1,8");
1158+ asm volatile("lbu $v1,0($v0)");
1159+ asm volatile("addiu $v0,$v0,1");
1160+ asm volatile("sb $t1,0($a2)");
1161+ asm volatile("rotr $t1,$t1,8");
1162+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1163+ asm volatile("movn $v1,$t3,$t0");
1164+ asm volatile("sb $t1,0($a2)");
1165+ asm volatile("rotr $t1,$t1,8");
1166+ asm volatile("sll $v1,$v1,5");
1167+ asm volatile("addu $v1,$v1,$a1");
1168+ asm volatile("sb $t1,0($a2)");
1169+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1170+ asm volatile("nop");
1171+ asm volatile("nop");
1172+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1173+ asm volatile("rotr $t1,$t1,8");
1174+ asm volatile("lbu $v1,0($v0)");
1175+ asm volatile("addiu $v0,$v0,1");
1176+ asm volatile("sb $t1,0($a2)");
1177+ asm volatile("rotr $t1,$t1,8");
1178+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1179+ asm volatile("movn $v1,$t3,$t0");
1180+ asm volatile("sb $t1,0($a2)");
1181+ asm volatile("rotr $t1,$t1,8");
1182+ asm volatile("sll $v1,$v1,5");
1183+ asm volatile("addu $v1,$v1,$a1");
1184+ asm volatile("sb $t1,0($a2)");
1185+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1186+ asm volatile("nop");
1187+ asm volatile("nop");
1188+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1189+ asm volatile("rotr $t1,$t1,8");
1190+ asm volatile("lbu $v1,0($v0)");
1191+ asm volatile("addiu $v0,$v0,1");
1192+ asm volatile("sb $t1,0($a2)");
1193+ asm volatile("rotr $t1,$t1,8");
1194+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1195+ asm volatile("movn $v1,$t3,$t0");
1196+ asm volatile("sb $t1,0($a2)");
1197+ asm volatile("rotr $t1,$t1,8");
1198+ asm volatile("sll $v1,$v1,5");
1199+ asm volatile("addu $v1,$v1,$a1");
1200+ asm volatile("sb $t1,0($a2)");
1201+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1202+ asm volatile("nop");
1203+ asm volatile("nop");
1204+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1205+ asm volatile("rotr $t1,$t1,8");
1206+ asm volatile("lbu $v1,0($v0)");
1207+ asm volatile("addiu $v0,$v0,1");
1208+ asm volatile("sb $t1,0($a2)");
1209+ asm volatile("rotr $t1,$t1,8");
1210+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1211+ asm volatile("movn $v1,$t3,$t0");
1212+ asm volatile("sb $t1,0($a2)");
1213+ asm volatile("rotr $t1,$t1,8");
1214+ asm volatile("sll $v1,$v1,5");
1215+ asm volatile("addu $v1,$v1,$a1");
1216+ asm volatile("sb $t1,0($a2)");
1217+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1218+ asm volatile("lbu $t5,0($a3)");
1219+ asm volatile("addiu $a3,$a3,1");
1220+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1221+ asm volatile("rotr $t1,$t1,8");
1222+ asm volatile("lbu $v1,0($v0)");
1223+ asm volatile("addiu $v0,$v0,1");
1224+ asm volatile("sb $t1,0($a2)");
1225+ asm volatile("rotr $t1,$t1,8");
1226+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1227+ asm volatile("movn $v1,$t3,$t0");
1228+ asm volatile("sb $t1,0($a2)");
1229+ asm volatile("rotr $t1,$t1,8");
1230+ asm volatile("sll $v1,$v1,5");
1231+ asm volatile("addu $v1,$v1,$a1");
1232+ asm volatile("sb $t1,0($a2)");
1233+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1234+ asm volatile("sll $t5,$t5,3");
1235+ asm volatile("addu $t5,$t5,$t4");
1236+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1237+ asm volatile("rotr $t1,$t1,8");
1238+ asm volatile("lbu $v1,0($v0)");
1239+ asm volatile("addiu $v0,$v0,1");
1240+ asm volatile("sb $t1,0($a2)");
1241+ asm volatile("rotr $t1,$t1,8");
1242+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1243+ asm volatile("movn $v1,$t3,$t0");
1244+ asm volatile("sb $t1,0($a2)");
1245+ asm volatile("rotr $t1,$t1,8");
1246+ asm volatile("sll $v1,$v1,5");
1247+ asm volatile("addu $v1,$v1,$a1");
1248+ asm volatile("sb $t1,0($a2)");
1249+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1250+ asm volatile("lbu $t2,0($t5)");
1251+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
1252+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1253+ asm volatile("rotr $t1,$t1,8");
1254+ asm volatile("lbu $v1,0($v0)");
1255+ asm volatile("addiu $v0,$v0,1");
1256+ asm volatile("sb $t1,0($a2)");
1257+ asm volatile("rotr $t1,$t1,8");
1258+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1259+ asm volatile("movn $v1,$t3,$t0");
1260+ asm volatile("sb $t1,0($a2)");
1261+ asm volatile("rotr $t1,$t1,8");
1262+ asm volatile("sll $v1,$v1,5");
1263+ asm volatile("addu $v1,$v1,$a1");
1264+ asm volatile("sb $t1,0($a2)");
1265+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1266+ asm volatile("nop");
1267+ asm volatile("nop");
1268+//-------------------------------------------------------------8ドット境界
1269+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1270+ asm volatile("rotr $t1,$t1,8");
1271+ asm volatile("lbu $v1,0($v0)");
1272+ asm volatile("addiu $v0,$v0,1");
1273+ asm volatile("sb $t1,0($a2)");
1274+ asm volatile("rotr $t1,$t1,8");
1275+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1276+ asm volatile("movn $v1,$t3,$t0");
1277+ asm volatile("sb $t1,0($a2)");
1278+ asm volatile("rotr $t1,$t1,8");
1279+ asm volatile("sll $v1,$v1,5");
1280+ asm volatile("addu $v1,$v1,$a1");
1281+ asm volatile("sb $t1,0($a2)");
1282+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1283+ asm volatile("nop");
1284+ asm volatile("nop");
1285+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1286+ asm volatile("rotr $t1,$t1,8");
1287+ asm volatile("lbu $v1,0($v0)");
1288+ asm volatile("addiu $v0,$v0,1");
1289+ asm volatile("sb $t1,0($a2)");
1290+ asm volatile("rotr $t1,$t1,8");
1291+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1292+ asm volatile("movn $v1,$t3,$t0");
1293+ asm volatile("sb $t1,0($a2)");
1294+ asm volatile("rotr $t1,$t1,8");
1295+ asm volatile("sll $v1,$v1,5");
1296+ asm volatile("addu $v1,$v1,$a1");
1297+ asm volatile("sb $t1,0($a2)");
1298+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1299+ asm volatile("nop");
1300+ asm volatile("nop");
1301+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1302+ asm volatile("rotr $t1,$t1,8");
1303+ asm volatile("lbu $v1,0($v0)");
1304+ asm volatile("addiu $v0,$v0,1");
1305+ asm volatile("sb $t1,0($a2)");
1306+ asm volatile("rotr $t1,$t1,8");
1307+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1308+ asm volatile("movn $v1,$t3,$t0");
1309+ asm volatile("sb $t1,0($a2)");
1310+ asm volatile("rotr $t1,$t1,8");
1311+ asm volatile("sll $v1,$v1,5");
1312+ asm volatile("addu $v1,$v1,$a1");
1313+ asm volatile("sb $t1,0($a2)");
1314+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1315+ asm volatile("nop");
1316+ asm volatile("nop");
1317+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1318+ asm volatile("rotr $t1,$t1,8");
1319+ asm volatile("lbu $v1,0($v0)");
1320+ asm volatile("addiu $v0,$v0,1");
1321+ asm volatile("sb $t1,0($a2)");
1322+ asm volatile("rotr $t1,$t1,8");
1323+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1324+ asm volatile("movn $v1,$t3,$t0");
1325+ asm volatile("sb $t1,0($a2)");
1326+ asm volatile("rotr $t1,$t1,8");
1327+ asm volatile("sll $v1,$v1,5");
1328+ asm volatile("addu $v1,$v1,$a1");
1329+ asm volatile("sb $t1,0($a2)");
1330+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1331+ asm volatile("nop");
1332+ asm volatile("nop");
1333+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1334+ asm volatile("rotr $t1,$t1,8");
1335+ asm volatile("lbu $v1,0($v0)");
1336+ asm volatile("addiu $v0,$v0,1");
1337+ asm volatile("sb $t1,0($a2)");
1338+ asm volatile("rotr $t1,$t1,8");
1339+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1340+ asm volatile("movn $v1,$t3,$t0");
1341+ asm volatile("sb $t1,0($a2)");
1342+ asm volatile("rotr $t1,$t1,8");
1343+ asm volatile("sll $v1,$v1,5");
1344+ asm volatile("addu $v1,$v1,$a1");
1345+ asm volatile("sb $t1,0($a2)");
1346+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1347+ asm volatile("lbu $t5,0($a3)");
1348+ asm volatile("addiu $a3,$a3,1");
1349+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1350+ asm volatile("rotr $t1,$t1,8");
1351+ asm volatile("lbu $v1,0($v0)");
1352+ asm volatile("addiu $v0,$v0,1");
1353+ asm volatile("sb $t1,0($a2)");
1354+ asm volatile("rotr $t1,$t1,8");
1355+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1356+ asm volatile("movn $v1,$t3,$t0");
1357+ asm volatile("sb $t1,0($a2)");
1358+ asm volatile("rotr $t1,$t1,8");
1359+ asm volatile("sll $v1,$v1,5");
1360+ asm volatile("addu $v1,$v1,$a1");
1361+ asm volatile("sb $t1,0($a2)");
1362+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1363+ asm volatile("sll $t5,$t5,3");
1364+ asm volatile("addu $t5,$t5,$t4");
1365+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1366+ asm volatile("rotr $t1,$t1,8");
1367+ asm volatile("lbu $v1,0($v0)");
1368+ asm volatile("addiu $v0,$v0,1");
1369+ asm volatile("sb $t1,0($a2)");
1370+ asm volatile("rotr $t1,$t1,8");
1371+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1372+ asm volatile("movn $v1,$t3,$t0");
1373+ asm volatile("sb $t1,0($a2)");
1374+ asm volatile("rotr $t1,$t1,8");
1375+ asm volatile("sll $v1,$v1,5");
1376+ asm volatile("addu $v1,$v1,$a1");
1377+ asm volatile("sb $t1,0($a2)");
1378+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1379+ asm volatile("lbu $t2,0($t5)");
1380+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
1381+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1382+ asm volatile("rotr $t1,$t1,8");
1383+ asm volatile("lbu $v1,0($v0)");
1384+ asm volatile("addiu $v0,$v0,1");
1385+ asm volatile("sb $t1,0($a2)");
1386+ asm volatile("rotr $t1,$t1,8");
1387+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1388+ asm volatile("movn $v1,$t3,$t0");
1389+ asm volatile("sb $t1,0($a2)");
1390+ asm volatile("rotr $t1,$t1,8");
1391+ asm volatile("sll $v1,$v1,5");
1392+ asm volatile("addu $v1,$v1,$a1");
1393+ asm volatile("sb $t1,0($a2)");
1394+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1395+ asm volatile("nop");
1396+ asm volatile("nop");
1397+//-------------------------------------------------------------8ドット境界
1398+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1399+ asm volatile("rotr $t1,$t1,8");
1400+ asm volatile("lbu $v1,0($v0)");
1401+ asm volatile("addiu $v0,$v0,1");
1402+ asm volatile("sb $t1,0($a2)");
1403+ asm volatile("rotr $t1,$t1,8");
1404+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1405+ asm volatile("movn $v1,$t3,$t0");
1406+ asm volatile("sb $t1,0($a2)");
1407+ asm volatile("rotr $t1,$t1,8");
1408+ asm volatile("sll $v1,$v1,5");
1409+ asm volatile("addu $v1,$v1,$a1");
1410+ asm volatile("sb $t1,0($a2)");
1411+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1412+ asm volatile("nop");
1413+ asm volatile("nop");
1414+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1415+ asm volatile("rotr $t1,$t1,8");
1416+ asm volatile("lbu $v1,0($v0)");
1417+ asm volatile("addiu $v0,$v0,1");
1418+ asm volatile("sb $t1,0($a2)");
1419+ asm volatile("rotr $t1,$t1,8");
1420+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1421+ asm volatile("movn $v1,$t3,$t0");
1422+ asm volatile("sb $t1,0($a2)");
1423+ asm volatile("rotr $t1,$t1,8");
1424+ asm volatile("sll $v1,$v1,5");
1425+ asm volatile("addu $v1,$v1,$a1");
1426+ asm volatile("sb $t1,0($a2)");
1427+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1428+ asm volatile("nop");
1429+ asm volatile("nop");
1430+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1431+ asm volatile("rotr $t1,$t1,8");
1432+ asm volatile("lbu $v1,0($v0)");
1433+ asm volatile("addiu $v0,$v0,1");
1434+ asm volatile("sb $t1,0($a2)");
1435+ asm volatile("rotr $t1,$t1,8");
1436+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1437+ asm volatile("movn $v1,$t3,$t0");
1438+ asm volatile("sb $t1,0($a2)");
1439+ asm volatile("rotr $t1,$t1,8");
1440+ asm volatile("sll $v1,$v1,5");
1441+ asm volatile("addu $v1,$v1,$a1");
1442+ asm volatile("sb $t1,0($a2)");
1443+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1444+ asm volatile("nop");
1445+ asm volatile("nop");
1446+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1447+ asm volatile("rotr $t1,$t1,8");
1448+ asm volatile("lbu $v1,0($v0)");
1449+ asm volatile("addiu $v0,$v0,1");
1450+ asm volatile("sb $t1,0($a2)");
1451+ asm volatile("rotr $t1,$t1,8");
1452+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1453+ asm volatile("movn $v1,$t3,$t0");
1454+ asm volatile("sb $t1,0($a2)");
1455+ asm volatile("rotr $t1,$t1,8");
1456+ asm volatile("sll $v1,$v1,5");
1457+ asm volatile("addu $v1,$v1,$a1");
1458+ asm volatile("sb $t1,0($a2)");
1459+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1460+ asm volatile("nop");
1461+ asm volatile("nop");
1462+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1463+ asm volatile("rotr $t1,$t1,8");
1464+ asm volatile("lbu $v1,0($v0)");
1465+ asm volatile("addiu $v0,$v0,1");
1466+ asm volatile("sb $t1,0($a2)");
1467+ asm volatile("rotr $t1,$t1,8");
1468+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1469+ asm volatile("movn $v1,$t3,$t0");
1470+ asm volatile("sb $t1,0($a2)");
1471+ asm volatile("rotr $t1,$t1,8");
1472+ asm volatile("sll $v1,$v1,5");
1473+ asm volatile("addu $v1,$v1,$a1");
1474+ asm volatile("sb $t1,0($a2)");
1475+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1476+ asm volatile("lbu $t5,0($a3)");
1477+ asm volatile("addiu $a3,$a3,1");
1478+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1479+ asm volatile("rotr $t1,$t1,8");
1480+ asm volatile("lbu $v1,0($v0)");
1481+ asm volatile("addiu $v0,$v0,1");
1482+ asm volatile("sb $t1,0($a2)");
1483+ asm volatile("rotr $t1,$t1,8");
1484+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1485+ asm volatile("movn $v1,$t3,$t0");
1486+ asm volatile("sb $t1,0($a2)");
1487+ asm volatile("rotr $t1,$t1,8");
1488+ asm volatile("sll $v1,$v1,5");
1489+ asm volatile("addu $v1,$v1,$a1");
1490+ asm volatile("sb $t1,0($a2)");
1491+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1492+ asm volatile("sll $t5,$t5,3");
1493+ asm volatile("addu $t5,$t5,$t4");
1494+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1495+ asm volatile("rotr $t1,$t1,8");
1496+ asm volatile("lbu $v1,0($v0)");
1497+ asm volatile("addiu $v0,$v0,1");
1498+ asm volatile("sb $t1,0($a2)");
1499+ asm volatile("rotr $t1,$t1,8");
1500+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1501+ asm volatile("movn $v1,$t3,$t0");
1502+ asm volatile("sb $t1,0($a2)");
1503+ asm volatile("rotr $t1,$t1,8");
1504+ asm volatile("sll $v1,$v1,5");
1505+ asm volatile("addu $v1,$v1,$a1");
1506+ asm volatile("sb $t1,0($a2)");
1507+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1508+ asm volatile("lbu $t2,0($t5)");
1509+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
1510+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1511+ asm volatile("rotr $t1,$t1,8");
1512+ asm volatile("lbu $v1,0($v0)");
1513+ asm volatile("addiu $v0,$v0,1");
1514+ asm volatile("sb $t1,0($a2)");
1515+ asm volatile("rotr $t1,$t1,8");
1516+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1517+ asm volatile("movn $v1,$t3,$t0");
1518+ asm volatile("sb $t1,0($a2)");
1519+ asm volatile("rotr $t1,$t1,8");
1520+ asm volatile("sll $v1,$v1,5");
1521+ asm volatile("addu $v1,$v1,$a1");
1522+ asm volatile("sb $t1,0($a2)");
1523+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1524+ asm volatile("nop");
1525+ asm volatile("nop");
1526+//-------------------------------------------------------------8ドット境界
1527+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1528+ asm volatile("rotr $t1,$t1,8");
1529+ asm volatile("lbu $v1,0($v0)");
1530+ asm volatile("addiu $v0,$v0,1");
1531+ asm volatile("sb $t1,0($a2)");
1532+ asm volatile("rotr $t1,$t1,8");
1533+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1534+ asm volatile("movn $v1,$t3,$t0");
1535+ asm volatile("sb $t1,0($a2)");
1536+ asm volatile("rotr $t1,$t1,8");
1537+ asm volatile("sll $v1,$v1,5");
1538+ asm volatile("addu $v1,$v1,$a1");
1539+ asm volatile("sb $t1,0($a2)");
1540+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1541+ asm volatile("nop");
1542+ asm volatile("nop");
1543+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1544+ asm volatile("rotr $t1,$t1,8");
1545+ asm volatile("lbu $v1,0($v0)");
1546+ asm volatile("addiu $v0,$v0,1");
1547+ asm volatile("sb $t1,0($a2)");
1548+ asm volatile("rotr $t1,$t1,8");
1549+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1550+ asm volatile("movn $v1,$t3,$t0");
1551+ asm volatile("sb $t1,0($a2)");
1552+ asm volatile("rotr $t1,$t1,8");
1553+ asm volatile("sll $v1,$v1,5");
1554+ asm volatile("addu $v1,$v1,$a1");
1555+ asm volatile("sb $t1,0($a2)");
1556+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1557+ asm volatile("nop");
1558+ asm volatile("nop");
1559+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1560+ asm volatile("rotr $t1,$t1,8");
1561+ asm volatile("lbu $v1,0($v0)");
1562+ asm volatile("addiu $v0,$v0,1");
1563+ asm volatile("sb $t1,0($a2)");
1564+ asm volatile("rotr $t1,$t1,8");
1565+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1566+ asm volatile("movn $v1,$t3,$t0");
1567+ asm volatile("sb $t1,0($a2)");
1568+ asm volatile("rotr $t1,$t1,8");
1569+ asm volatile("sll $v1,$v1,5");
1570+ asm volatile("addu $v1,$v1,$a1");
1571+ asm volatile("sb $t1,0($a2)");
1572+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1573+ asm volatile("nop");
1574+ asm volatile("nop");
1575+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1576+ asm volatile("rotr $t1,$t1,8");
1577+ asm volatile("lbu $v1,0($v0)");
1578+ asm volatile("addiu $v0,$v0,1");
1579+ asm volatile("sb $t1,0($a2)");
1580+ asm volatile("rotr $t1,$t1,8");
1581+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1582+ asm volatile("movn $v1,$t3,$t0");
1583+ asm volatile("sb $t1,0($a2)");
1584+ asm volatile("rotr $t1,$t1,8");
1585+ asm volatile("sll $v1,$v1,5");
1586+ asm volatile("addu $v1,$v1,$a1");
1587+ asm volatile("sb $t1,0($a2)");
1588+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1589+ asm volatile("nop");
1590+ asm volatile("nop");
1591+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1592+ asm volatile("rotr $t1,$t1,8");
1593+ asm volatile("lbu $v1,0($v0)");
1594+ asm volatile("addiu $v0,$v0,1");
1595+ asm volatile("sb $t1,0($a2)");
1596+ asm volatile("rotr $t1,$t1,8");
1597+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1598+ asm volatile("movn $v1,$t3,$t0");
1599+ asm volatile("sb $t1,0($a2)");
1600+ asm volatile("rotr $t1,$t1,8");
1601+ asm volatile("sll $v1,$v1,5");
1602+ asm volatile("addu $v1,$v1,$a1");
1603+ asm volatile("sb $t1,0($a2)");
1604+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1605+ asm volatile("lbu $t5,0($a3)");
1606+ asm volatile("addiu $a3,$a3,1");
1607+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1608+ asm volatile("rotr $t1,$t1,8");
1609+ asm volatile("lbu $v1,0($v0)");
1610+ asm volatile("addiu $v0,$v0,1");
1611+ asm volatile("sb $t1,0($a2)");
1612+ asm volatile("rotr $t1,$t1,8");
1613+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1614+ asm volatile("movn $v1,$t3,$t0");
1615+ asm volatile("sb $t1,0($a2)");
1616+ asm volatile("rotr $t1,$t1,8");
1617+ asm volatile("sll $v1,$v1,5");
1618+ asm volatile("addu $v1,$v1,$a1");
1619+ asm volatile("sb $t1,0($a2)");
1620+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1621+ asm volatile("sll $t5,$t5,3");
1622+ asm volatile("addu $t5,$t5,$t4");
1623+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1624+ asm volatile("rotr $t1,$t1,8");
1625+ asm volatile("lbu $v1,0($v0)");
1626+ asm volatile("addiu $v0,$v0,1");
1627+ asm volatile("sb $t1,0($a2)");
1628+ asm volatile("rotr $t1,$t1,8");
1629+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1630+ asm volatile("movn $v1,$t3,$t0");
1631+ asm volatile("sb $t1,0($a2)");
1632+ asm volatile("rotr $t1,$t1,8");
1633+ asm volatile("sll $v1,$v1,5");
1634+ asm volatile("addu $v1,$v1,$a1");
1635+ asm volatile("sb $t1,0($a2)");
1636+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1637+ asm volatile("lbu $t2,0($t5)");
1638+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
1639+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1640+ asm volatile("rotr $t1,$t1,8");
1641+ asm volatile("lbu $v1,0($v0)");
1642+ asm volatile("addiu $v0,$v0,1");
1643+ asm volatile("sb $t1,0($a2)");
1644+ asm volatile("rotr $t1,$t1,8");
1645+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1646+ asm volatile("movn $v1,$t3,$t0");
1647+ asm volatile("sb $t1,0($a2)");
1648+ asm volatile("rotr $t1,$t1,8");
1649+ asm volatile("sll $v1,$v1,5");
1650+ asm volatile("addu $v1,$v1,$a1");
1651+ asm volatile("sb $t1,0($a2)");
1652+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1653+ asm volatile("nop");
1654+ asm volatile("nop");
1655+//-------------------------------------------------------------8ドット境界
1656+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1657+ asm volatile("rotr $t1,$t1,8");
1658+ asm volatile("lbu $v1,0($v0)");
1659+ asm volatile("addiu $v0,$v0,1");
1660+ asm volatile("sb $t1,0($a2)");
1661+ asm volatile("rotr $t1,$t1,8");
1662+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1663+ asm volatile("movn $v1,$t3,$t0");
1664+ asm volatile("sb $t1,0($a2)");
1665+ asm volatile("rotr $t1,$t1,8");
1666+ asm volatile("sll $v1,$v1,5");
1667+ asm volatile("addu $v1,$v1,$a1");
1668+ asm volatile("sb $t1,0($a2)");
1669+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1670+ asm volatile("nop");
1671+ asm volatile("nop");
1672+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1673+ asm volatile("rotr $t1,$t1,8");
1674+ asm volatile("lbu $v1,0($v0)");
1675+ asm volatile("addiu $v0,$v0,1");
1676+ asm volatile("sb $t1,0($a2)");
1677+ asm volatile("rotr $t1,$t1,8");
1678+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1679+ asm volatile("movn $v1,$t3,$t0");
1680+ asm volatile("sb $t1,0($a2)");
1681+ asm volatile("rotr $t1,$t1,8");
1682+ asm volatile("sll $v1,$v1,5");
1683+ asm volatile("addu $v1,$v1,$a1");
1684+ asm volatile("sb $t1,0($a2)");
1685+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1686+ asm volatile("nop");
1687+ asm volatile("nop");
1688+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1689+ asm volatile("rotr $t1,$t1,8");
1690+ asm volatile("lbu $v1,0($v0)");
1691+ asm volatile("addiu $v0,$v0,1");
1692+ asm volatile("sb $t1,0($a2)");
1693+ asm volatile("rotr $t1,$t1,8");
1694+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1695+ asm volatile("movn $v1,$t3,$t0");
1696+ asm volatile("sb $t1,0($a2)");
1697+ asm volatile("rotr $t1,$t1,8");
1698+ asm volatile("sll $v1,$v1,5");
1699+ asm volatile("addu $v1,$v1,$a1");
1700+ asm volatile("sb $t1,0($a2)");
1701+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1702+ asm volatile("nop");
1703+ asm volatile("nop");
1704+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1705+ asm volatile("rotr $t1,$t1,8");
1706+ asm volatile("lbu $v1,0($v0)");
1707+ asm volatile("addiu $v0,$v0,1");
1708+ asm volatile("sb $t1,0($a2)");
1709+ asm volatile("rotr $t1,$t1,8");
1710+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1711+ asm volatile("movn $v1,$t3,$t0");
1712+ asm volatile("sb $t1,0($a2)");
1713+ asm volatile("rotr $t1,$t1,8");
1714+ asm volatile("sll $v1,$v1,5");
1715+ asm volatile("addu $v1,$v1,$a1");
1716+ asm volatile("sb $t1,0($a2)");
1717+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1718+ asm volatile("nop");
1719+ asm volatile("nop");
1720+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1721+ asm volatile("rotr $t1,$t1,8");
1722+ asm volatile("lbu $v1,0($v0)");
1723+ asm volatile("addiu $v0,$v0,1");
1724+ asm volatile("sb $t1,0($a2)");
1725+ asm volatile("rotr $t1,$t1,8");
1726+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1727+ asm volatile("movn $v1,$t3,$t0");
1728+ asm volatile("sb $t1,0($a2)");
1729+ asm volatile("rotr $t1,$t1,8");
1730+ asm volatile("sll $v1,$v1,5");
1731+ asm volatile("addu $v1,$v1,$a1");
1732+ asm volatile("sb $t1,0($a2)");
1733+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1734+ asm volatile("lbu $t5,0($a3)");
1735+ asm volatile("addiu $a3,$a3,1");
1736+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1737+ asm volatile("rotr $t1,$t1,8");
1738+ asm volatile("lbu $v1,0($v0)");
1739+ asm volatile("addiu $v0,$v0,1");
1740+ asm volatile("sb $t1,0($a2)");
1741+ asm volatile("rotr $t1,$t1,8");
1742+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1743+ asm volatile("movn $v1,$t3,$t0");
1744+ asm volatile("sb $t1,0($a2)");
1745+ asm volatile("rotr $t1,$t1,8");
1746+ asm volatile("sll $v1,$v1,5");
1747+ asm volatile("addu $v1,$v1,$a1");
1748+ asm volatile("sb $t1,0($a2)");
1749+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1750+ asm volatile("sll $t5,$t5,3");
1751+ asm volatile("addu $t5,$t5,$t4");
1752+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1753+ asm volatile("rotr $t1,$t1,8");
1754+ asm volatile("lbu $v1,0($v0)");
1755+ asm volatile("addiu $v0,$v0,1");
1756+ asm volatile("sb $t1,0($a2)");
1757+ asm volatile("rotr $t1,$t1,8");
1758+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1759+ asm volatile("movn $v1,$t3,$t0");
1760+ asm volatile("sb $t1,0($a2)");
1761+ asm volatile("rotr $t1,$t1,8");
1762+ asm volatile("sll $v1,$v1,5");
1763+ asm volatile("addu $v1,$v1,$a1");
1764+ asm volatile("sb $t1,0($a2)");
1765+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1766+ asm volatile("lbu $t2,0($t5)");
1767+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
1768+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1769+ asm volatile("rotr $t1,$t1,8");
1770+ asm volatile("lbu $v1,0($v0)");
1771+ asm volatile("addiu $v0,$v0,1");
1772+ asm volatile("sb $t1,0($a2)");
1773+ asm volatile("rotr $t1,$t1,8");
1774+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1775+ asm volatile("movn $v1,$t3,$t0");
1776+ asm volatile("sb $t1,0($a2)");
1777+ asm volatile("rotr $t1,$t1,8");
1778+ asm volatile("sll $v1,$v1,5");
1779+ asm volatile("addu $v1,$v1,$a1");
1780+ asm volatile("sb $t1,0($a2)");
1781+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1782+ asm volatile("nop");
1783+ asm volatile("nop");
1784+//-------------------------------------------------------------8ドット境界
1785+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1786+ asm volatile("rotr $t1,$t1,8");
1787+ asm volatile("lbu $v1,0($v0)");
1788+ asm volatile("addiu $v0,$v0,1");
1789+ asm volatile("sb $t1,0($a2)");
1790+ asm volatile("rotr $t1,$t1,8");
1791+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1792+ asm volatile("movn $v1,$t3,$t0");
1793+ asm volatile("sb $t1,0($a2)");
1794+ asm volatile("rotr $t1,$t1,8");
1795+ asm volatile("sll $v1,$v1,5");
1796+ asm volatile("addu $v1,$v1,$a1");
1797+ asm volatile("sb $t1,0($a2)");
1798+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1799+ asm volatile("nop");
1800+ asm volatile("nop");
1801+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1802+ asm volatile("rotr $t1,$t1,8");
1803+ asm volatile("lbu $v1,0($v0)");
1804+ asm volatile("addiu $v0,$v0,1");
1805+ asm volatile("sb $t1,0($a2)");
1806+ asm volatile("rotr $t1,$t1,8");
1807+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1808+ asm volatile("movn $v1,$t3,$t0");
1809+ asm volatile("sb $t1,0($a2)");
1810+ asm volatile("rotr $t1,$t1,8");
1811+ asm volatile("sll $v1,$v1,5");
1812+ asm volatile("addu $v1,$v1,$a1");
1813+ asm volatile("sb $t1,0($a2)");
1814+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1815+ asm volatile("nop");
1816+ asm volatile("nop");
1817+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1818+ asm volatile("rotr $t1,$t1,8");
1819+ asm volatile("lbu $v1,0($v0)");
1820+ asm volatile("addiu $v0,$v0,1");
1821+ asm volatile("sb $t1,0($a2)");
1822+ asm volatile("rotr $t1,$t1,8");
1823+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1824+ asm volatile("movn $v1,$t3,$t0");
1825+ asm volatile("sb $t1,0($a2)");
1826+ asm volatile("rotr $t1,$t1,8");
1827+ asm volatile("sll $v1,$v1,5");
1828+ asm volatile("addu $v1,$v1,$a1");
1829+ asm volatile("sb $t1,0($a2)");
1830+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1831+ asm volatile("nop");
1832+ asm volatile("nop");
1833+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1834+ asm volatile("rotr $t1,$t1,8");
1835+ asm volatile("lbu $v1,0($v0)");
1836+ asm volatile("addiu $v0,$v0,1");
1837+ asm volatile("sb $t1,0($a2)");
1838+ asm volatile("rotr $t1,$t1,8");
1839+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1840+ asm volatile("movn $v1,$t3,$t0");
1841+ asm volatile("sb $t1,0($a2)");
1842+ asm volatile("rotr $t1,$t1,8");
1843+ asm volatile("sll $v1,$v1,5");
1844+ asm volatile("addu $v1,$v1,$a1");
1845+ asm volatile("sb $t1,0($a2)");
1846+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1847+ asm volatile("nop");
1848+ asm volatile("nop");
1849+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1850+ asm volatile("rotr $t1,$t1,8");
1851+ asm volatile("lbu $v1,0($v0)");
1852+ asm volatile("addiu $v0,$v0,1");
1853+ asm volatile("sb $t1,0($a2)");
1854+ asm volatile("rotr $t1,$t1,8");
1855+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1856+ asm volatile("movn $v1,$t3,$t0");
1857+ asm volatile("sb $t1,0($a2)");
1858+ asm volatile("rotr $t1,$t1,8");
1859+ asm volatile("sll $v1,$v1,5");
1860+ asm volatile("addu $v1,$v1,$a1");
1861+ asm volatile("sb $t1,0($a2)");
1862+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1863+ asm volatile("lbu $t5,0($a3)");
1864+ asm volatile("addiu $a3,$a3,1");
1865+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1866+ asm volatile("rotr $t1,$t1,8");
1867+ asm volatile("lbu $v1,0($v0)");
1868+ asm volatile("addiu $v0,$v0,1");
1869+ asm volatile("sb $t1,0($a2)");
1870+ asm volatile("rotr $t1,$t1,8");
1871+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1872+ asm volatile("movn $v1,$t3,$t0");
1873+ asm volatile("sb $t1,0($a2)");
1874+ asm volatile("rotr $t1,$t1,8");
1875+ asm volatile("sll $v1,$v1,5");
1876+ asm volatile("addu $v1,$v1,$a1");
1877+ asm volatile("sb $t1,0($a2)");
1878+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1879+ asm volatile("sll $t5,$t5,3");
1880+ asm volatile("addu $t5,$t5,$t4");
1881+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1882+ asm volatile("rotr $t1,$t1,8");
1883+ asm volatile("lbu $v1,0($v0)");
1884+ asm volatile("addiu $v0,$v0,1");
1885+ asm volatile("sb $t1,0($a2)");
1886+ asm volatile("rotr $t1,$t1,8");
1887+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1888+ asm volatile("movn $v1,$t3,$t0");
1889+ asm volatile("sb $t1,0($a2)");
1890+ asm volatile("rotr $t1,$t1,8");
1891+ asm volatile("sll $v1,$v1,5");
1892+ asm volatile("addu $v1,$v1,$a1");
1893+ asm volatile("sb $t1,0($a2)");
1894+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1895+ asm volatile("lbu $t2,0($t5)");
1896+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
1897+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1898+ asm volatile("rotr $t1,$t1,8");
1899+ asm volatile("lbu $v1,0($v0)");
1900+ asm volatile("addiu $v0,$v0,1");
1901+ asm volatile("sb $t1,0($a2)");
1902+ asm volatile("rotr $t1,$t1,8");
1903+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1904+ asm volatile("movn $v1,$t3,$t0");
1905+ asm volatile("sb $t1,0($a2)");
1906+ asm volatile("rotr $t1,$t1,8");
1907+ asm volatile("sll $v1,$v1,5");
1908+ asm volatile("addu $v1,$v1,$a1");
1909+ asm volatile("sb $t1,0($a2)");
1910+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1911+ asm volatile("nop");
1912+ asm volatile("nop");
1913+//-------------------------------------------------------------8ドット境界
1914+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1915+ asm volatile("rotr $t1,$t1,8");
1916+ asm volatile("lbu $v1,0($v0)");
1917+ asm volatile("addiu $v0,$v0,1");
1918+ asm volatile("sb $t1,0($a2)");
1919+ asm volatile("rotr $t1,$t1,8");
1920+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1921+ asm volatile("movn $v1,$t3,$t0");
1922+ asm volatile("sb $t1,0($a2)");
1923+ asm volatile("rotr $t1,$t1,8");
1924+ asm volatile("sll $v1,$v1,5");
1925+ asm volatile("addu $v1,$v1,$a1");
1926+ asm volatile("sb $t1,0($a2)");
1927+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1928+ asm volatile("nop");
1929+ asm volatile("nop");
1930+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1931+ asm volatile("rotr $t1,$t1,8");
1932+ asm volatile("lbu $v1,0($v0)");
1933+ asm volatile("addiu $v0,$v0,1");
1934+ asm volatile("sb $t1,0($a2)");
1935+ asm volatile("rotr $t1,$t1,8");
1936+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1937+ asm volatile("movn $v1,$t3,$t0");
1938+ asm volatile("sb $t1,0($a2)");
1939+ asm volatile("rotr $t1,$t1,8");
1940+ asm volatile("sll $v1,$v1,5");
1941+ asm volatile("addu $v1,$v1,$a1");
1942+ asm volatile("sb $t1,0($a2)");
1943+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1944+ asm volatile("nop");
1945+ asm volatile("nop");
1946+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1947+ asm volatile("rotr $t1,$t1,8");
1948+ asm volatile("lbu $v1,0($v0)");
1949+ asm volatile("addiu $v0,$v0,1");
1950+ asm volatile("sb $t1,0($a2)");
1951+ asm volatile("rotr $t1,$t1,8");
1952+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1953+ asm volatile("movn $v1,$t3,$t0");
1954+ asm volatile("sb $t1,0($a2)");
1955+ asm volatile("rotr $t1,$t1,8");
1956+ asm volatile("sll $v1,$v1,5");
1957+ asm volatile("addu $v1,$v1,$a1");
1958+ asm volatile("sb $t1,0($a2)");
1959+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1960+ asm volatile("nop");
1961+ asm volatile("nop");
1962+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1963+ asm volatile("rotr $t1,$t1,8");
1964+ asm volatile("lbu $v1,0($v0)");
1965+ asm volatile("addiu $v0,$v0,1");
1966+ asm volatile("sb $t1,0($a2)");
1967+ asm volatile("rotr $t1,$t1,8");
1968+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1969+ asm volatile("movn $v1,$t3,$t0");
1970+ asm volatile("sb $t1,0($a2)");
1971+ asm volatile("rotr $t1,$t1,8");
1972+ asm volatile("sll $v1,$v1,5");
1973+ asm volatile("addu $v1,$v1,$a1");
1974+ asm volatile("sb $t1,0($a2)");
1975+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1976+ asm volatile("nop");
1977+ asm volatile("nop");
1978+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1979+ asm volatile("rotr $t1,$t1,8");
1980+ asm volatile("lbu $v1,0($v0)");
1981+ asm volatile("addiu $v0,$v0,1");
1982+ asm volatile("sb $t1,0($a2)");
1983+ asm volatile("rotr $t1,$t1,8");
1984+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
1985+ asm volatile("movn $v1,$t3,$t0");
1986+ asm volatile("sb $t1,0($a2)");
1987+ asm volatile("rotr $t1,$t1,8");
1988+ asm volatile("sll $v1,$v1,5");
1989+ asm volatile("addu $v1,$v1,$a1");
1990+ asm volatile("sb $t1,0($a2)");
1991+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
1992+ asm volatile("lbu $t5,0($a3)");
1993+ asm volatile("addiu $a3,$a3,1");
1994+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
1995+ asm volatile("rotr $t1,$t1,8");
1996+ asm volatile("lbu $v1,0($v0)");
1997+ asm volatile("addiu $v0,$v0,1");
1998+ asm volatile("sb $t1,0($a2)");
1999+ asm volatile("rotr $t1,$t1,8");
2000+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2001+ asm volatile("movn $v1,$t3,$t0");
2002+ asm volatile("sb $t1,0($a2)");
2003+ asm volatile("rotr $t1,$t1,8");
2004+ asm volatile("sll $v1,$v1,5");
2005+ asm volatile("addu $v1,$v1,$a1");
2006+ asm volatile("sb $t1,0($a2)");
2007+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2008+ asm volatile("sll $t5,$t5,3");
2009+ asm volatile("addu $t5,$t5,$t4");
2010+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2011+ asm volatile("rotr $t1,$t1,8");
2012+ asm volatile("lbu $v1,0($v0)");
2013+ asm volatile("addiu $v0,$v0,1");
2014+ asm volatile("sb $t1,0($a2)");
2015+ asm volatile("rotr $t1,$t1,8");
2016+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2017+ asm volatile("movn $v1,$t3,$t0");
2018+ asm volatile("sb $t1,0($a2)");
2019+ asm volatile("rotr $t1,$t1,8");
2020+ asm volatile("sll $v1,$v1,5");
2021+ asm volatile("addu $v1,$v1,$a1");
2022+ asm volatile("sb $t1,0($a2)");
2023+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2024+ asm volatile("lbu $t2,0($t5)");
2025+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
2026+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2027+ asm volatile("rotr $t1,$t1,8");
2028+ asm volatile("lbu $v1,0($v0)");
2029+ asm volatile("addiu $v0,$v0,1");
2030+ asm volatile("sb $t1,0($a2)");
2031+ asm volatile("rotr $t1,$t1,8");
2032+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2033+ asm volatile("movn $v1,$t3,$t0");
2034+ asm volatile("sb $t1,0($a2)");
2035+ asm volatile("rotr $t1,$t1,8");
2036+ asm volatile("sll $v1,$v1,5");
2037+ asm volatile("addu $v1,$v1,$a1");
2038+ asm volatile("sb $t1,0($a2)");
2039+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2040+ asm volatile("nop");
2041+ asm volatile("nop");
2042+//-------------------------------------------------------------8ドット境界
2043+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2044+ asm volatile("rotr $t1,$t1,8");
2045+ asm volatile("lbu $v1,0($v0)");
2046+ asm volatile("addiu $v0,$v0,1");
2047+ asm volatile("sb $t1,0($a2)");
2048+ asm volatile("rotr $t1,$t1,8");
2049+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2050+ asm volatile("movn $v1,$t3,$t0");
2051+ asm volatile("sb $t1,0($a2)");
2052+ asm volatile("rotr $t1,$t1,8");
2053+ asm volatile("sll $v1,$v1,5");
2054+ asm volatile("addu $v1,$v1,$a1");
2055+ asm volatile("sb $t1,0($a2)");
2056+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2057+ asm volatile("nop");
2058+ asm volatile("nop");
2059+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2060+ asm volatile("rotr $t1,$t1,8");
2061+ asm volatile("lbu $v1,0($v0)");
2062+ asm volatile("addiu $v0,$v0,1");
2063+ asm volatile("sb $t1,0($a2)");
2064+ asm volatile("rotr $t1,$t1,8");
2065+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2066+ asm volatile("movn $v1,$t3,$t0");
2067+ asm volatile("sb $t1,0($a2)");
2068+ asm volatile("rotr $t1,$t1,8");
2069+ asm volatile("sll $v1,$v1,5");
2070+ asm volatile("addu $v1,$v1,$a1");
2071+ asm volatile("sb $t1,0($a2)");
2072+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2073+ asm volatile("nop");
2074+ asm volatile("nop");
2075+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2076+ asm volatile("rotr $t1,$t1,8");
2077+ asm volatile("lbu $v1,0($v0)");
2078+ asm volatile("addiu $v0,$v0,1");
2079+ asm volatile("sb $t1,0($a2)");
2080+ asm volatile("rotr $t1,$t1,8");
2081+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2082+ asm volatile("movn $v1,$t3,$t0");
2083+ asm volatile("sb $t1,0($a2)");
2084+ asm volatile("rotr $t1,$t1,8");
2085+ asm volatile("sll $v1,$v1,5");
2086+ asm volatile("addu $v1,$v1,$a1");
2087+ asm volatile("sb $t1,0($a2)");
2088+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2089+ asm volatile("nop");
2090+ asm volatile("nop");
2091+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2092+ asm volatile("rotr $t1,$t1,8");
2093+ asm volatile("lbu $v1,0($v0)");
2094+ asm volatile("addiu $v0,$v0,1");
2095+ asm volatile("sb $t1,0($a2)");
2096+ asm volatile("rotr $t1,$t1,8");
2097+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2098+ asm volatile("movn $v1,$t3,$t0");
2099+ asm volatile("sb $t1,0($a2)");
2100+ asm volatile("rotr $t1,$t1,8");
2101+ asm volatile("sll $v1,$v1,5");
2102+ asm volatile("addu $v1,$v1,$a1");
2103+ asm volatile("sb $t1,0($a2)");
2104+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2105+ asm volatile("nop");
2106+ asm volatile("nop");
2107+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2108+ asm volatile("rotr $t1,$t1,8");
2109+ asm volatile("lbu $v1,0($v0)");
2110+ asm volatile("addiu $v0,$v0,1");
2111+ asm volatile("sb $t1,0($a2)");
2112+ asm volatile("rotr $t1,$t1,8");
2113+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2114+ asm volatile("movn $v1,$t3,$t0");
2115+ asm volatile("sb $t1,0($a2)");
2116+ asm volatile("rotr $t1,$t1,8");
2117+ asm volatile("sll $v1,$v1,5");
2118+ asm volatile("addu $v1,$v1,$a1");
2119+ asm volatile("sb $t1,0($a2)");
2120+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2121+ asm volatile("lbu $t5,0($a3)");
2122+ asm volatile("addiu $a3,$a3,1");
2123+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2124+ asm volatile("rotr $t1,$t1,8");
2125+ asm volatile("lbu $v1,0($v0)");
2126+ asm volatile("addiu $v0,$v0,1");
2127+ asm volatile("sb $t1,0($a2)");
2128+ asm volatile("rotr $t1,$t1,8");
2129+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2130+ asm volatile("movn $v1,$t3,$t0");
2131+ asm volatile("sb $t1,0($a2)");
2132+ asm volatile("rotr $t1,$t1,8");
2133+ asm volatile("sll $v1,$v1,5");
2134+ asm volatile("addu $v1,$v1,$a1");
2135+ asm volatile("sb $t1,0($a2)");
2136+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2137+ asm volatile("sll $t5,$t5,3");
2138+ asm volatile("addu $t5,$t5,$t4");
2139+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2140+ asm volatile("rotr $t1,$t1,8");
2141+ asm volatile("lbu $v1,0($v0)");
2142+ asm volatile("addiu $v0,$v0,1");
2143+ asm volatile("sb $t1,0($a2)");
2144+ asm volatile("rotr $t1,$t1,8");
2145+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2146+ asm volatile("movn $v1,$t3,$t0");
2147+ asm volatile("sb $t1,0($a2)");
2148+ asm volatile("rotr $t1,$t1,8");
2149+ asm volatile("sll $v1,$v1,5");
2150+ asm volatile("addu $v1,$v1,$a1");
2151+ asm volatile("sb $t1,0($a2)");
2152+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2153+ asm volatile("lbu $t2,0($t5)");
2154+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
2155+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2156+ asm volatile("rotr $t1,$t1,8");
2157+ asm volatile("lbu $v1,0($v0)");
2158+ asm volatile("addiu $v0,$v0,1");
2159+ asm volatile("sb $t1,0($a2)");
2160+ asm volatile("rotr $t1,$t1,8");
2161+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2162+ asm volatile("movn $v1,$t3,$t0");
2163+ asm volatile("sb $t1,0($a2)");
2164+ asm volatile("rotr $t1,$t1,8");
2165+ asm volatile("sll $v1,$v1,5");
2166+ asm volatile("addu $v1,$v1,$a1");
2167+ asm volatile("sb $t1,0($a2)");
2168+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2169+ asm volatile("nop");
2170+ asm volatile("nop");
2171+//-------------------------------------------------------------8ドット境界
2172+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2173+ asm volatile("rotr $t1,$t1,8");
2174+ asm volatile("lbu $v1,0($v0)");
2175+ asm volatile("addiu $v0,$v0,1");
2176+ asm volatile("sb $t1,0($a2)");
2177+ asm volatile("rotr $t1,$t1,8");
2178+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2179+ asm volatile("movn $v1,$t3,$t0");
2180+ asm volatile("sb $t1,0($a2)");
2181+ asm volatile("rotr $t1,$t1,8");
2182+ asm volatile("sll $v1,$v1,5");
2183+ asm volatile("addu $v1,$v1,$a1");
2184+ asm volatile("sb $t1,0($a2)");
2185+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2186+ asm volatile("nop");
2187+ asm volatile("nop");
2188+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2189+ asm volatile("rotr $t1,$t1,8");
2190+ asm volatile("lbu $v1,0($v0)");
2191+ asm volatile("addiu $v0,$v0,1");
2192+ asm volatile("sb $t1,0($a2)");
2193+ asm volatile("rotr $t1,$t1,8");
2194+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2195+ asm volatile("movn $v1,$t3,$t0");
2196+ asm volatile("sb $t1,0($a2)");
2197+ asm volatile("rotr $t1,$t1,8");
2198+ asm volatile("sll $v1,$v1,5");
2199+ asm volatile("addu $v1,$v1,$a1");
2200+ asm volatile("sb $t1,0($a2)");
2201+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2202+ asm volatile("nop");
2203+ asm volatile("nop");
2204+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2205+ asm volatile("rotr $t1,$t1,8");
2206+ asm volatile("lbu $v1,0($v0)");
2207+ asm volatile("addiu $v0,$v0,1");
2208+ asm volatile("sb $t1,0($a2)");
2209+ asm volatile("rotr $t1,$t1,8");
2210+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2211+ asm volatile("movn $v1,$t3,$t0");
2212+ asm volatile("sb $t1,0($a2)");
2213+ asm volatile("rotr $t1,$t1,8");
2214+ asm volatile("sll $v1,$v1,5");
2215+ asm volatile("addu $v1,$v1,$a1");
2216+ asm volatile("sb $t1,0($a2)");
2217+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2218+ asm volatile("nop");
2219+ asm volatile("nop");
2220+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2221+ asm volatile("rotr $t1,$t1,8");
2222+ asm volatile("lbu $v1,0($v0)");
2223+ asm volatile("addiu $v0,$v0,1");
2224+ asm volatile("sb $t1,0($a2)");
2225+ asm volatile("rotr $t1,$t1,8");
2226+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2227+ asm volatile("movn $v1,$t3,$t0");
2228+ asm volatile("sb $t1,0($a2)");
2229+ asm volatile("rotr $t1,$t1,8");
2230+ asm volatile("sll $v1,$v1,5");
2231+ asm volatile("addu $v1,$v1,$a1");
2232+ asm volatile("sb $t1,0($a2)");
2233+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2234+ asm volatile("nop");
2235+ asm volatile("nop");
2236+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2237+ asm volatile("rotr $t1,$t1,8");
2238+ asm volatile("lbu $v1,0($v0)");
2239+ asm volatile("addiu $v0,$v0,1");
2240+ asm volatile("sb $t1,0($a2)");
2241+ asm volatile("rotr $t1,$t1,8");
2242+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2243+ asm volatile("movn $v1,$t3,$t0");
2244+ asm volatile("sb $t1,0($a2)");
2245+ asm volatile("rotr $t1,$t1,8");
2246+ asm volatile("sll $v1,$v1,5");
2247+ asm volatile("addu $v1,$v1,$a1");
2248+ asm volatile("sb $t1,0($a2)");
2249+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2250+ asm volatile("lbu $t5,0($a3)");
2251+ asm volatile("addiu $a3,$a3,1");
2252+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2253+ asm volatile("rotr $t1,$t1,8");
2254+ asm volatile("lbu $v1,0($v0)");
2255+ asm volatile("addiu $v0,$v0,1");
2256+ asm volatile("sb $t1,0($a2)");
2257+ asm volatile("rotr $t1,$t1,8");
2258+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2259+ asm volatile("movn $v1,$t3,$t0");
2260+ asm volatile("sb $t1,0($a2)");
2261+ asm volatile("rotr $t1,$t1,8");
2262+ asm volatile("sll $v1,$v1,5");
2263+ asm volatile("addu $v1,$v1,$a1");
2264+ asm volatile("sb $t1,0($a2)");
2265+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2266+ asm volatile("sll $t5,$t5,3");
2267+ asm volatile("addu $t5,$t5,$t4");
2268+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2269+ asm volatile("rotr $t1,$t1,8");
2270+ asm volatile("lbu $v1,0($v0)");
2271+ asm volatile("addiu $v0,$v0,1");
2272+ asm volatile("sb $t1,0($a2)");
2273+ asm volatile("rotr $t1,$t1,8");
2274+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2275+ asm volatile("movn $v1,$t3,$t0");
2276+ asm volatile("sb $t1,0($a2)");
2277+ asm volatile("rotr $t1,$t1,8");
2278+ asm volatile("sll $v1,$v1,5");
2279+ asm volatile("addu $v1,$v1,$a1");
2280+ asm volatile("sb $t1,0($a2)");
2281+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2282+ asm volatile("lbu $t2,0($t5)");
2283+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
2284+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2285+ asm volatile("rotr $t1,$t1,8");
2286+ asm volatile("lbu $v1,0($v0)");
2287+ asm volatile("addiu $v0,$v0,1");
2288+ asm volatile("sb $t1,0($a2)");
2289+ asm volatile("rotr $t1,$t1,8");
2290+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2291+ asm volatile("movn $v1,$t3,$t0");
2292+ asm volatile("sb $t1,0($a2)");
2293+ asm volatile("rotr $t1,$t1,8");
2294+ asm volatile("sll $v1,$v1,5");
2295+ asm volatile("addu $v1,$v1,$a1");
2296+ asm volatile("sb $t1,0($a2)");
2297+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2298+ asm volatile("nop");
2299+ asm volatile("nop");
2300+//-------------------------------------------------------------8ドット境界
2301+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2302+ asm volatile("rotr $t1,$t1,8");
2303+ asm volatile("lbu $v1,0($v0)");
2304+ asm volatile("addiu $v0,$v0,1");
2305+ asm volatile("sb $t1,0($a2)");
2306+ asm volatile("rotr $t1,$t1,8");
2307+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2308+ asm volatile("movn $v1,$t3,$t0");
2309+ asm volatile("sb $t1,0($a2)");
2310+ asm volatile("rotr $t1,$t1,8");
2311+ asm volatile("sll $v1,$v1,5");
2312+ asm volatile("addu $v1,$v1,$a1");
2313+ asm volatile("sb $t1,0($a2)");
2314+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2315+ asm volatile("nop");
2316+ asm volatile("nop");
2317+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2318+ asm volatile("rotr $t1,$t1,8");
2319+ asm volatile("lbu $v1,0($v0)");
2320+ asm volatile("addiu $v0,$v0,1");
2321+ asm volatile("sb $t1,0($a2)");
2322+ asm volatile("rotr $t1,$t1,8");
2323+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2324+ asm volatile("movn $v1,$t3,$t0");
2325+ asm volatile("sb $t1,0($a2)");
2326+ asm volatile("rotr $t1,$t1,8");
2327+ asm volatile("sll $v1,$v1,5");
2328+ asm volatile("addu $v1,$v1,$a1");
2329+ asm volatile("sb $t1,0($a2)");
2330+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2331+ asm volatile("nop");
2332+ asm volatile("nop");
2333+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2334+ asm volatile("rotr $t1,$t1,8");
2335+ asm volatile("lbu $v1,0($v0)");
2336+ asm volatile("addiu $v0,$v0,1");
2337+ asm volatile("sb $t1,0($a2)");
2338+ asm volatile("rotr $t1,$t1,8");
2339+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2340+ asm volatile("movn $v1,$t3,$t0");
2341+ asm volatile("sb $t1,0($a2)");
2342+ asm volatile("rotr $t1,$t1,8");
2343+ asm volatile("sll $v1,$v1,5");
2344+ asm volatile("addu $v1,$v1,$a1");
2345+ asm volatile("sb $t1,0($a2)");
2346+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2347+ asm volatile("nop");
2348+ asm volatile("nop");
2349+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2350+ asm volatile("rotr $t1,$t1,8");
2351+ asm volatile("lbu $v1,0($v0)");
2352+ asm volatile("addiu $v0,$v0,1");
2353+ asm volatile("sb $t1,0($a2)");
2354+ asm volatile("rotr $t1,$t1,8");
2355+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2356+ asm volatile("movn $v1,$t3,$t0");
2357+ asm volatile("sb $t1,0($a2)");
2358+ asm volatile("rotr $t1,$t1,8");
2359+ asm volatile("sll $v1,$v1,5");
2360+ asm volatile("addu $v1,$v1,$a1");
2361+ asm volatile("sb $t1,0($a2)");
2362+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2363+ asm volatile("nop");
2364+ asm volatile("nop");
2365+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2366+ asm volatile("rotr $t1,$t1,8");
2367+ asm volatile("lbu $v1,0($v0)");
2368+ asm volatile("addiu $v0,$v0,1");
2369+ asm volatile("sb $t1,0($a2)");
2370+ asm volatile("rotr $t1,$t1,8");
2371+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2372+ asm volatile("movn $v1,$t3,$t0");
2373+ asm volatile("sb $t1,0($a2)");
2374+ asm volatile("rotr $t1,$t1,8");
2375+ asm volatile("sll $v1,$v1,5");
2376+ asm volatile("addu $v1,$v1,$a1");
2377+ asm volatile("sb $t1,0($a2)");
2378+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2379+ asm volatile("lbu $t5,0($a3)");
2380+ asm volatile("addiu $a3,$a3,1");
2381+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2382+ asm volatile("rotr $t1,$t1,8");
2383+ asm volatile("lbu $v1,0($v0)");
2384+ asm volatile("addiu $v0,$v0,1");
2385+ asm volatile("sb $t1,0($a2)");
2386+ asm volatile("rotr $t1,$t1,8");
2387+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2388+ asm volatile("movn $v1,$t3,$t0");
2389+ asm volatile("sb $t1,0($a2)");
2390+ asm volatile("rotr $t1,$t1,8");
2391+ asm volatile("sll $v1,$v1,5");
2392+ asm volatile("addu $v1,$v1,$a1");
2393+ asm volatile("sb $t1,0($a2)");
2394+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2395+ asm volatile("sll $t5,$t5,3");
2396+ asm volatile("addu $t5,$t5,$t4");
2397+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2398+ asm volatile("rotr $t1,$t1,8");
2399+ asm volatile("lbu $v1,0($v0)");
2400+ asm volatile("addiu $v0,$v0,1");
2401+ asm volatile("sb $t1,0($a2)");
2402+ asm volatile("rotr $t1,$t1,8");
2403+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2404+ asm volatile("movn $v1,$t3,$t0");
2405+ asm volatile("sb $t1,0($a2)");
2406+ asm volatile("rotr $t1,$t1,8");
2407+ asm volatile("sll $v1,$v1,5");
2408+ asm volatile("addu $v1,$v1,$a1");
2409+ asm volatile("sb $t1,0($a2)");
2410+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2411+ asm volatile("lbu $t2,0($t5)");
2412+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
2413+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2414+ asm volatile("rotr $t1,$t1,8");
2415+ asm volatile("lbu $v1,0($v0)");
2416+ asm volatile("addiu $v0,$v0,1");
2417+ asm volatile("sb $t1,0($a2)");
2418+ asm volatile("rotr $t1,$t1,8");
2419+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2420+ asm volatile("movn $v1,$t3,$t0");
2421+ asm volatile("sb $t1,0($a2)");
2422+ asm volatile("rotr $t1,$t1,8");
2423+ asm volatile("sll $v1,$v1,5");
2424+ asm volatile("addu $v1,$v1,$a1");
2425+ asm volatile("sb $t1,0($a2)");
2426+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2427+ asm volatile("nop");
2428+ asm volatile("nop");
2429+//-------------------------------------------------------------8ドット境界
2430+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2431+ asm volatile("rotr $t1,$t1,8");
2432+ asm volatile("lbu $v1,0($v0)");
2433+ asm volatile("addiu $v0,$v0,1");
2434+ asm volatile("sb $t1,0($a2)");
2435+ asm volatile("rotr $t1,$t1,8");
2436+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2437+ asm volatile("movn $v1,$t3,$t0");
2438+ asm volatile("sb $t1,0($a2)");
2439+ asm volatile("rotr $t1,$t1,8");
2440+ asm volatile("sll $v1,$v1,5");
2441+ asm volatile("addu $v1,$v1,$a1");
2442+ asm volatile("sb $t1,0($a2)");
2443+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2444+ asm volatile("nop");
2445+ asm volatile("nop");
2446+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2447+ asm volatile("rotr $t1,$t1,8");
2448+ asm volatile("lbu $v1,0($v0)");
2449+ asm volatile("addiu $v0,$v0,1");
2450+ asm volatile("sb $t1,0($a2)");
2451+ asm volatile("rotr $t1,$t1,8");
2452+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2453+ asm volatile("movn $v1,$t3,$t0");
2454+ asm volatile("sb $t1,0($a2)");
2455+ asm volatile("rotr $t1,$t1,8");
2456+ asm volatile("sll $v1,$v1,5");
2457+ asm volatile("addu $v1,$v1,$a1");
2458+ asm volatile("sb $t1,0($a2)");
2459+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2460+ asm volatile("nop");
2461+ asm volatile("nop");
2462+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2463+ asm volatile("rotr $t1,$t1,8");
2464+ asm volatile("lbu $v1,0($v0)");
2465+ asm volatile("addiu $v0,$v0,1");
2466+ asm volatile("sb $t1,0($a2)");
2467+ asm volatile("rotr $t1,$t1,8");
2468+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2469+ asm volatile("movn $v1,$t3,$t0");
2470+ asm volatile("sb $t1,0($a2)");
2471+ asm volatile("rotr $t1,$t1,8");
2472+ asm volatile("sll $v1,$v1,5");
2473+ asm volatile("addu $v1,$v1,$a1");
2474+ asm volatile("sb $t1,0($a2)");
2475+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2476+ asm volatile("nop");
2477+ asm volatile("nop");
2478+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2479+ asm volatile("rotr $t1,$t1,8");
2480+ asm volatile("lbu $v1,0($v0)");
2481+ asm volatile("addiu $v0,$v0,1");
2482+ asm volatile("sb $t1,0($a2)");
2483+ asm volatile("rotr $t1,$t1,8");
2484+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2485+ asm volatile("movn $v1,$t3,$t0");
2486+ asm volatile("sb $t1,0($a2)");
2487+ asm volatile("rotr $t1,$t1,8");
2488+ asm volatile("sll $v1,$v1,5");
2489+ asm volatile("addu $v1,$v1,$a1");
2490+ asm volatile("sb $t1,0($a2)");
2491+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2492+ asm volatile("nop");
2493+ asm volatile("nop");
2494+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2495+ asm volatile("rotr $t1,$t1,8");
2496+ asm volatile("lbu $v1,0($v0)");
2497+ asm volatile("addiu $v0,$v0,1");
2498+ asm volatile("sb $t1,0($a2)");
2499+ asm volatile("rotr $t1,$t1,8");
2500+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2501+ asm volatile("movn $v1,$t3,$t0");
2502+ asm volatile("sb $t1,0($a2)");
2503+ asm volatile("rotr $t1,$t1,8");
2504+ asm volatile("sll $v1,$v1,5");
2505+ asm volatile("addu $v1,$v1,$a1");
2506+ asm volatile("sb $t1,0($a2)");
2507+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2508+ asm volatile("lbu $t5,0($a3)");
2509+ asm volatile("addiu $a3,$a3,1");
2510+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2511+ asm volatile("rotr $t1,$t1,8");
2512+ asm volatile("lbu $v1,0($v0)");
2513+ asm volatile("addiu $v0,$v0,1");
2514+ asm volatile("sb $t1,0($a2)");
2515+ asm volatile("rotr $t1,$t1,8");
2516+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2517+ asm volatile("movn $v1,$t3,$t0");
2518+ asm volatile("sb $t1,0($a2)");
2519+ asm volatile("rotr $t1,$t1,8");
2520+ asm volatile("sll $v1,$v1,5");
2521+ asm volatile("addu $v1,$v1,$a1");
2522+ asm volatile("sb $t1,0($a2)");
2523+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2524+ asm volatile("sll $t5,$t5,3");
2525+ asm volatile("addu $t5,$t5,$t4");
2526+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2527+ asm volatile("rotr $t1,$t1,8");
2528+ asm volatile("lbu $v1,0($v0)");
2529+ asm volatile("addiu $v0,$v0,1");
2530+ asm volatile("sb $t1,0($a2)");
2531+ asm volatile("rotr $t1,$t1,8");
2532+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2533+ asm volatile("movn $v1,$t3,$t0");
2534+ asm volatile("sb $t1,0($a2)");
2535+ asm volatile("rotr $t1,$t1,8");
2536+ asm volatile("sll $v1,$v1,5");
2537+ asm volatile("addu $v1,$v1,$a1");
2538+ asm volatile("sb $t1,0($a2)");
2539+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2540+ asm volatile("lbu $t2,0($t5)");
2541+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
2542+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2543+ asm volatile("rotr $t1,$t1,8");
2544+ asm volatile("lbu $v1,0($v0)");
2545+ asm volatile("addiu $v0,$v0,1");
2546+ asm volatile("sb $t1,0($a2)");
2547+ asm volatile("rotr $t1,$t1,8");
2548+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2549+ asm volatile("movn $v1,$t3,$t0");
2550+ asm volatile("sb $t1,0($a2)");
2551+ asm volatile("rotr $t1,$t1,8");
2552+ asm volatile("sll $v1,$v1,5");
2553+ asm volatile("addu $v1,$v1,$a1");
2554+ asm volatile("sb $t1,0($a2)");
2555+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2556+ asm volatile("nop");
2557+ asm volatile("nop");
2558+//-------------------------------------------------------------8ドット境界
2559+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2560+ asm volatile("rotr $t1,$t1,8");
2561+ asm volatile("lbu $v1,0($v0)");
2562+ asm volatile("addiu $v0,$v0,1");
2563+ asm volatile("sb $t1,0($a2)");
2564+ asm volatile("rotr $t1,$t1,8");
2565+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2566+ asm volatile("movn $v1,$t3,$t0");
2567+ asm volatile("sb $t1,0($a2)");
2568+ asm volatile("rotr $t1,$t1,8");
2569+ asm volatile("sll $v1,$v1,5");
2570+ asm volatile("addu $v1,$v1,$a1");
2571+ asm volatile("sb $t1,0($a2)");
2572+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2573+ asm volatile("nop");
2574+ asm volatile("nop");
2575+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2576+ asm volatile("rotr $t1,$t1,8");
2577+ asm volatile("lbu $v1,0($v0)");
2578+ asm volatile("addiu $v0,$v0,1");
2579+ asm volatile("sb $t1,0($a2)");
2580+ asm volatile("rotr $t1,$t1,8");
2581+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2582+ asm volatile("movn $v1,$t3,$t0");
2583+ asm volatile("sb $t1,0($a2)");
2584+ asm volatile("rotr $t1,$t1,8");
2585+ asm volatile("sll $v1,$v1,5");
2586+ asm volatile("addu $v1,$v1,$a1");
2587+ asm volatile("sb $t1,0($a2)");
2588+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2589+ asm volatile("nop");
2590+ asm volatile("nop");
2591+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2592+ asm volatile("rotr $t1,$t1,8");
2593+ asm volatile("lbu $v1,0($v0)");
2594+ asm volatile("addiu $v0,$v0,1");
2595+ asm volatile("sb $t1,0($a2)");
2596+ asm volatile("rotr $t1,$t1,8");
2597+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2598+ asm volatile("movn $v1,$t3,$t0");
2599+ asm volatile("sb $t1,0($a2)");
2600+ asm volatile("rotr $t1,$t1,8");
2601+ asm volatile("sll $v1,$v1,5");
2602+ asm volatile("addu $v1,$v1,$a1");
2603+ asm volatile("sb $t1,0($a2)");
2604+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2605+ asm volatile("nop");
2606+ asm volatile("nop");
2607+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2608+ asm volatile("rotr $t1,$t1,8");
2609+ asm volatile("lbu $v1,0($v0)");
2610+ asm volatile("addiu $v0,$v0,1");
2611+ asm volatile("sb $t1,0($a2)");
2612+ asm volatile("rotr $t1,$t1,8");
2613+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2614+ asm volatile("movn $v1,$t3,$t0");
2615+ asm volatile("sb $t1,0($a2)");
2616+ asm volatile("rotr $t1,$t1,8");
2617+ asm volatile("sll $v1,$v1,5");
2618+ asm volatile("addu $v1,$v1,$a1");
2619+ asm volatile("sb $t1,0($a2)");
2620+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2621+ asm volatile("nop");
2622+ asm volatile("nop");
2623+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2624+ asm volatile("rotr $t1,$t1,8");
2625+ asm volatile("lbu $v1,0($v0)");
2626+ asm volatile("addiu $v0,$v0,1");
2627+ asm volatile("sb $t1,0($a2)");
2628+ asm volatile("rotr $t1,$t1,8");
2629+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2630+ asm volatile("movn $v1,$t3,$t0");
2631+ asm volatile("sb $t1,0($a2)");
2632+ asm volatile("rotr $t1,$t1,8");
2633+ asm volatile("sll $v1,$v1,5");
2634+ asm volatile("addu $v1,$v1,$a1");
2635+ asm volatile("sb $t1,0($a2)");
2636+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2637+ asm volatile("lbu $t5,0($a3)");
2638+ asm volatile("addiu $a3,$a3,1");
2639+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2640+ asm volatile("rotr $t1,$t1,8");
2641+ asm volatile("lbu $v1,0($v0)");
2642+ asm volatile("addiu $v0,$v0,1");
2643+ asm volatile("sb $t1,0($a2)");
2644+ asm volatile("rotr $t1,$t1,8");
2645+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2646+ asm volatile("movn $v1,$t3,$t0");
2647+ asm volatile("sb $t1,0($a2)");
2648+ asm volatile("rotr $t1,$t1,8");
2649+ asm volatile("sll $v1,$v1,5");
2650+ asm volatile("addu $v1,$v1,$a1");
2651+ asm volatile("sb $t1,0($a2)");
2652+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2653+ asm volatile("sll $t5,$t5,3");
2654+ asm volatile("addu $t5,$t5,$t4");
2655+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2656+ asm volatile("rotr $t1,$t1,8");
2657+ asm volatile("lbu $v1,0($v0)");
2658+ asm volatile("addiu $v0,$v0,1");
2659+ asm volatile("sb $t1,0($a2)");
2660+ asm volatile("rotr $t1,$t1,8");
2661+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2662+ asm volatile("movn $v1,$t3,$t0");
2663+ asm volatile("sb $t1,0($a2)");
2664+ asm volatile("rotr $t1,$t1,8");
2665+ asm volatile("sll $v1,$v1,5");
2666+ asm volatile("addu $v1,$v1,$a1");
2667+ asm volatile("sb $t1,0($a2)");
2668+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2669+ asm volatile("lbu $t2,0($t5)");
2670+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
2671+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2672+ asm volatile("rotr $t1,$t1,8");
2673+ asm volatile("lbu $v1,0($v0)");
2674+ asm volatile("addiu $v0,$v0,1");
2675+ asm volatile("sb $t1,0($a2)");
2676+ asm volatile("rotr $t1,$t1,8");
2677+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2678+ asm volatile("movn $v1,$t3,$t0");
2679+ asm volatile("sb $t1,0($a2)");
2680+ asm volatile("rotr $t1,$t1,8");
2681+ asm volatile("sll $v1,$v1,5");
2682+ asm volatile("addu $v1,$v1,$a1");
2683+ asm volatile("sb $t1,0($a2)");
2684+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2685+ asm volatile("nop");
2686+ asm volatile("nop");
2687+//-------------------------------------------------------------8ドット境界
2688+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2689+ asm volatile("rotr $t1,$t1,8");
2690+ asm volatile("lbu $v1,0($v0)");
2691+ asm volatile("addiu $v0,$v0,1");
2692+ asm volatile("sb $t1,0($a2)");
2693+ asm volatile("rotr $t1,$t1,8");
2694+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2695+ asm volatile("movn $v1,$t3,$t0");
2696+ asm volatile("sb $t1,0($a2)");
2697+ asm volatile("rotr $t1,$t1,8");
2698+ asm volatile("sll $v1,$v1,5");
2699+ asm volatile("addu $v1,$v1,$a1");
2700+ asm volatile("sb $t1,0($a2)");
2701+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2702+ asm volatile("nop");
2703+ asm volatile("nop");
2704+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2705+ asm volatile("rotr $t1,$t1,8");
2706+ asm volatile("lbu $v1,0($v0)");
2707+ asm volatile("addiu $v0,$v0,1");
2708+ asm volatile("sb $t1,0($a2)");
2709+ asm volatile("rotr $t1,$t1,8");
2710+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2711+ asm volatile("movn $v1,$t3,$t0");
2712+ asm volatile("sb $t1,0($a2)");
2713+ asm volatile("rotr $t1,$t1,8");
2714+ asm volatile("sll $v1,$v1,5");
2715+ asm volatile("addu $v1,$v1,$a1");
2716+ asm volatile("sb $t1,0($a2)");
2717+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2718+ asm volatile("nop");
2719+ asm volatile("nop");
2720+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2721+ asm volatile("rotr $t1,$t1,8");
2722+ asm volatile("lbu $v1,0($v0)");
2723+ asm volatile("addiu $v0,$v0,1");
2724+ asm volatile("sb $t1,0($a2)");
2725+ asm volatile("rotr $t1,$t1,8");
2726+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2727+ asm volatile("movn $v1,$t3,$t0");
2728+ asm volatile("sb $t1,0($a2)");
2729+ asm volatile("rotr $t1,$t1,8");
2730+ asm volatile("sll $v1,$v1,5");
2731+ asm volatile("addu $v1,$v1,$a1");
2732+ asm volatile("sb $t1,0($a2)");
2733+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2734+ asm volatile("nop");
2735+ asm volatile("nop");
2736+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2737+ asm volatile("rotr $t1,$t1,8");
2738+ asm volatile("lbu $v1,0($v0)");
2739+ asm volatile("addiu $v0,$v0,1");
2740+ asm volatile("sb $t1,0($a2)");
2741+ asm volatile("rotr $t1,$t1,8");
2742+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2743+ asm volatile("movn $v1,$t3,$t0");
2744+ asm volatile("sb $t1,0($a2)");
2745+ asm volatile("rotr $t1,$t1,8");
2746+ asm volatile("sll $v1,$v1,5");
2747+ asm volatile("addu $v1,$v1,$a1");
2748+ asm volatile("sb $t1,0($a2)");
2749+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2750+ asm volatile("nop");
2751+ asm volatile("nop");
2752+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2753+ asm volatile("rotr $t1,$t1,8");
2754+ asm volatile("lbu $v1,0($v0)");
2755+ asm volatile("addiu $v0,$v0,1");
2756+ asm volatile("sb $t1,0($a2)");
2757+ asm volatile("rotr $t1,$t1,8");
2758+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2759+ asm volatile("movn $v1,$t3,$t0");
2760+ asm volatile("sb $t1,0($a2)");
2761+ asm volatile("rotr $t1,$t1,8");
2762+ asm volatile("sll $v1,$v1,5");
2763+ asm volatile("addu $v1,$v1,$a1");
2764+ asm volatile("sb $t1,0($a2)");
2765+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2766+ asm volatile("lbu $t5,0($a3)");
2767+ asm volatile("addiu $a3,$a3,1");
2768+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2769+ asm volatile("rotr $t1,$t1,8");
2770+ asm volatile("lbu $v1,0($v0)");
2771+ asm volatile("addiu $v0,$v0,1");
2772+ asm volatile("sb $t1,0($a2)");
2773+ asm volatile("rotr $t1,$t1,8");
2774+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2775+ asm volatile("movn $v1,$t3,$t0");
2776+ asm volatile("sb $t1,0($a2)");
2777+ asm volatile("rotr $t1,$t1,8");
2778+ asm volatile("sll $v1,$v1,5");
2779+ asm volatile("addu $v1,$v1,$a1");
2780+ asm volatile("sb $t1,0($a2)");
2781+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2782+ asm volatile("sll $t5,$t5,3");
2783+ asm volatile("addu $t5,$t5,$t4");
2784+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2785+ asm volatile("rotr $t1,$t1,8");
2786+ asm volatile("lbu $v1,0($v0)");
2787+ asm volatile("addiu $v0,$v0,1");
2788+ asm volatile("sb $t1,0($a2)");
2789+ asm volatile("rotr $t1,$t1,8");
2790+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2791+ asm volatile("movn $v1,$t3,$t0");
2792+ asm volatile("sb $t1,0($a2)");
2793+ asm volatile("rotr $t1,$t1,8");
2794+ asm volatile("sll $v1,$v1,5");
2795+ asm volatile("addu $v1,$v1,$a1");
2796+ asm volatile("sb $t1,0($a2)");
2797+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2798+ asm volatile("lbu $t2,0($t5)");
2799+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
2800+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2801+ asm volatile("rotr $t1,$t1,8");
2802+ asm volatile("lbu $v1,0($v0)");
2803+ asm volatile("addiu $v0,$v0,1");
2804+ asm volatile("sb $t1,0($a2)");
2805+ asm volatile("rotr $t1,$t1,8");
2806+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2807+ asm volatile("movn $v1,$t3,$t0");
2808+ asm volatile("sb $t1,0($a2)");
2809+ asm volatile("rotr $t1,$t1,8");
2810+ asm volatile("sll $v1,$v1,5");
2811+ asm volatile("addu $v1,$v1,$a1");
2812+ asm volatile("sb $t1,0($a2)");
2813+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2814+ asm volatile("nop");
2815+ asm volatile("nop");
2816+//-------------------------------------------------------------8ドット境界
2817+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2818+ asm volatile("rotr $t1,$t1,8");
2819+ asm volatile("lbu $v1,0($v0)");
2820+ asm volatile("addiu $v0,$v0,1");
2821+ asm volatile("sb $t1,0($a2)");
2822+ asm volatile("rotr $t1,$t1,8");
2823+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2824+ asm volatile("movn $v1,$t3,$t0");
2825+ asm volatile("sb $t1,0($a2)");
2826+ asm volatile("rotr $t1,$t1,8");
2827+ asm volatile("sll $v1,$v1,5");
2828+ asm volatile("addu $v1,$v1,$a1");
2829+ asm volatile("sb $t1,0($a2)");
2830+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2831+ asm volatile("nop");
2832+ asm volatile("nop");
2833+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2834+ asm volatile("rotr $t1,$t1,8");
2835+ asm volatile("lbu $v1,0($v0)");
2836+ asm volatile("addiu $v0,$v0,1");
2837+ asm volatile("sb $t1,0($a2)");
2838+ asm volatile("rotr $t1,$t1,8");
2839+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2840+ asm volatile("movn $v1,$t3,$t0");
2841+ asm volatile("sb $t1,0($a2)");
2842+ asm volatile("rotr $t1,$t1,8");
2843+ asm volatile("sll $v1,$v1,5");
2844+ asm volatile("addu $v1,$v1,$a1");
2845+ asm volatile("sb $t1,0($a2)");
2846+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2847+ asm volatile("nop");
2848+ asm volatile("nop");
2849+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2850+ asm volatile("rotr $t1,$t1,8");
2851+ asm volatile("lbu $v1,0($v0)");
2852+ asm volatile("addiu $v0,$v0,1");
2853+ asm volatile("sb $t1,0($a2)");
2854+ asm volatile("rotr $t1,$t1,8");
2855+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2856+ asm volatile("movn $v1,$t3,$t0");
2857+ asm volatile("sb $t1,0($a2)");
2858+ asm volatile("rotr $t1,$t1,8");
2859+ asm volatile("sll $v1,$v1,5");
2860+ asm volatile("addu $v1,$v1,$a1");
2861+ asm volatile("sb $t1,0($a2)");
2862+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2863+ asm volatile("nop");
2864+ asm volatile("nop");
2865+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2866+ asm volatile("rotr $t1,$t1,8");
2867+ asm volatile("lbu $v1,0($v0)");
2868+ asm volatile("addiu $v0,$v0,1");
2869+ asm volatile("sb $t1,0($a2)");
2870+ asm volatile("rotr $t1,$t1,8");
2871+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2872+ asm volatile("movn $v1,$t3,$t0");
2873+ asm volatile("sb $t1,0($a2)");
2874+ asm volatile("rotr $t1,$t1,8");
2875+ asm volatile("sll $v1,$v1,5");
2876+ asm volatile("addu $v1,$v1,$a1");
2877+ asm volatile("sb $t1,0($a2)");
2878+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2879+ asm volatile("nop");
2880+ asm volatile("nop");
2881+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2882+ asm volatile("rotr $t1,$t1,8");
2883+ asm volatile("lbu $v1,0($v0)");
2884+ asm volatile("addiu $v0,$v0,1");
2885+ asm volatile("sb $t1,0($a2)");
2886+ asm volatile("rotr $t1,$t1,8");
2887+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2888+ asm volatile("movn $v1,$t3,$t0");
2889+ asm volatile("sb $t1,0($a2)");
2890+ asm volatile("rotr $t1,$t1,8");
2891+ asm volatile("sll $v1,$v1,5");
2892+ asm volatile("addu $v1,$v1,$a1");
2893+ asm volatile("sb $t1,0($a2)");
2894+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2895+ asm volatile("lbu $t5,0($a3)");
2896+ asm volatile("addiu $a3,$a3,1");
2897+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2898+ asm volatile("rotr $t1,$t1,8");
2899+ asm volatile("lbu $v1,0($v0)");
2900+ asm volatile("addiu $v0,$v0,1");
2901+ asm volatile("sb $t1,0($a2)");
2902+ asm volatile("rotr $t1,$t1,8");
2903+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2904+ asm volatile("movn $v1,$t3,$t0");
2905+ asm volatile("sb $t1,0($a2)");
2906+ asm volatile("rotr $t1,$t1,8");
2907+ asm volatile("sll $v1,$v1,5");
2908+ asm volatile("addu $v1,$v1,$a1");
2909+ asm volatile("sb $t1,0($a2)");
2910+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2911+ asm volatile("sll $t5,$t5,3");
2912+ asm volatile("addu $t5,$t5,$t4");
2913+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2914+ asm volatile("rotr $t1,$t1,8");
2915+ asm volatile("lbu $v1,0($v0)");
2916+ asm volatile("addiu $v0,$v0,1");
2917+ asm volatile("sb $t1,0($a2)");
2918+ asm volatile("rotr $t1,$t1,8");
2919+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2920+ asm volatile("movn $v1,$t3,$t0");
2921+ asm volatile("sb $t1,0($a2)");
2922+ asm volatile("rotr $t1,$t1,8");
2923+ asm volatile("sll $v1,$v1,5");
2924+ asm volatile("addu $v1,$v1,$a1");
2925+ asm volatile("sb $t1,0($a2)");
2926+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2927+ asm volatile("lbu $t2,0($t5)");
2928+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
2929+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2930+ asm volatile("rotr $t1,$t1,8");
2931+ asm volatile("lbu $v1,0($v0)");
2932+ asm volatile("addiu $v0,$v0,1");
2933+ asm volatile("sb $t1,0($a2)");
2934+ asm volatile("rotr $t1,$t1,8");
2935+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2936+ asm volatile("movn $v1,$t3,$t0");
2937+ asm volatile("sb $t1,0($a2)");
2938+ asm volatile("rotr $t1,$t1,8");
2939+ asm volatile("sll $v1,$v1,5");
2940+ asm volatile("addu $v1,$v1,$a1");
2941+ asm volatile("sb $t1,0($a2)");
2942+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2943+ asm volatile("nop");
2944+ asm volatile("nop");
2945+//-------------------------------------------------------------8ドット境界
2946+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2947+ asm volatile("rotr $t1,$t1,8");
2948+ asm volatile("lbu $v1,0($v0)");
2949+ asm volatile("addiu $v0,$v0,1");
2950+ asm volatile("sb $t1,0($a2)");
2951+ asm volatile("rotr $t1,$t1,8");
2952+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2953+ asm volatile("movn $v1,$t3,$t0");
2954+ asm volatile("sb $t1,0($a2)");
2955+ asm volatile("rotr $t1,$t1,8");
2956+ asm volatile("sll $v1,$v1,5");
2957+ asm volatile("addu $v1,$v1,$a1");
2958+ asm volatile("sb $t1,0($a2)");
2959+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2960+ asm volatile("nop");
2961+ asm volatile("nop");
2962+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2963+ asm volatile("rotr $t1,$t1,8");
2964+ asm volatile("lbu $v1,0($v0)");
2965+ asm volatile("addiu $v0,$v0,1");
2966+ asm volatile("sb $t1,0($a2)");
2967+ asm volatile("rotr $t1,$t1,8");
2968+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2969+ asm volatile("movn $v1,$t3,$t0");
2970+ asm volatile("sb $t1,0($a2)");
2971+ asm volatile("rotr $t1,$t1,8");
2972+ asm volatile("sll $v1,$v1,5");
2973+ asm volatile("addu $v1,$v1,$a1");
2974+ asm volatile("sb $t1,0($a2)");
2975+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2976+ asm volatile("nop");
2977+ asm volatile("nop");
2978+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2979+ asm volatile("rotr $t1,$t1,8");
2980+ asm volatile("lbu $v1,0($v0)");
2981+ asm volatile("addiu $v0,$v0,1");
2982+ asm volatile("sb $t1,0($a2)");
2983+ asm volatile("rotr $t1,$t1,8");
2984+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
2985+ asm volatile("movn $v1,$t3,$t0");
2986+ asm volatile("sb $t1,0($a2)");
2987+ asm volatile("rotr $t1,$t1,8");
2988+ asm volatile("sll $v1,$v1,5");
2989+ asm volatile("addu $v1,$v1,$a1");
2990+ asm volatile("sb $t1,0($a2)");
2991+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
2992+ asm volatile("nop");
2993+ asm volatile("nop");
2994+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
2995+ asm volatile("rotr $t1,$t1,8");
2996+ asm volatile("lbu $v1,0($v0)");
2997+ asm volatile("addiu $v0,$v0,1");
2998+ asm volatile("sb $t1,0($a2)");
2999+ asm volatile("rotr $t1,$t1,8");
3000+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3001+ asm volatile("movn $v1,$t3,$t0");
3002+ asm volatile("sb $t1,0($a2)");
3003+ asm volatile("rotr $t1,$t1,8");
3004+ asm volatile("sll $v1,$v1,5");
3005+ asm volatile("addu $v1,$v1,$a1");
3006+ asm volatile("sb $t1,0($a2)");
3007+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3008+ asm volatile("nop");
3009+ asm volatile("nop");
3010+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3011+ asm volatile("rotr $t1,$t1,8");
3012+ asm volatile("lbu $v1,0($v0)");
3013+ asm volatile("addiu $v0,$v0,1");
3014+ asm volatile("sb $t1,0($a2)");
3015+ asm volatile("rotr $t1,$t1,8");
3016+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3017+ asm volatile("movn $v1,$t3,$t0");
3018+ asm volatile("sb $t1,0($a2)");
3019+ asm volatile("rotr $t1,$t1,8");
3020+ asm volatile("sll $v1,$v1,5");
3021+ asm volatile("addu $v1,$v1,$a1");
3022+ asm volatile("sb $t1,0($a2)");
3023+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3024+ asm volatile("lbu $t5,0($a3)");
3025+ asm volatile("addiu $a3,$a3,1");
3026+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3027+ asm volatile("rotr $t1,$t1,8");
3028+ asm volatile("lbu $v1,0($v0)");
3029+ asm volatile("addiu $v0,$v0,1");
3030+ asm volatile("sb $t1,0($a2)");
3031+ asm volatile("rotr $t1,$t1,8");
3032+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3033+ asm volatile("movn $v1,$t3,$t0");
3034+ asm volatile("sb $t1,0($a2)");
3035+ asm volatile("rotr $t1,$t1,8");
3036+ asm volatile("sll $v1,$v1,5");
3037+ asm volatile("addu $v1,$v1,$a1");
3038+ asm volatile("sb $t1,0($a2)");
3039+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3040+ asm volatile("sll $t5,$t5,3");
3041+ asm volatile("addu $t5,$t5,$t4");
3042+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3043+ asm volatile("rotr $t1,$t1,8");
3044+ asm volatile("lbu $v1,0($v0)");
3045+ asm volatile("addiu $v0,$v0,1");
3046+ asm volatile("sb $t1,0($a2)");
3047+ asm volatile("rotr $t1,$t1,8");
3048+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3049+ asm volatile("movn $v1,$t3,$t0");
3050+ asm volatile("sb $t1,0($a2)");
3051+ asm volatile("rotr $t1,$t1,8");
3052+ asm volatile("sll $v1,$v1,5");
3053+ asm volatile("addu $v1,$v1,$a1");
3054+ asm volatile("sb $t1,0($a2)");
3055+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3056+ asm volatile("lbu $t2,0($t5)");
3057+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
3058+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3059+ asm volatile("rotr $t1,$t1,8");
3060+ asm volatile("lbu $v1,0($v0)");
3061+ asm volatile("addiu $v0,$v0,1");
3062+ asm volatile("sb $t1,0($a2)");
3063+ asm volatile("rotr $t1,$t1,8");
3064+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3065+ asm volatile("movn $v1,$t3,$t0");
3066+ asm volatile("sb $t1,0($a2)");
3067+ asm volatile("rotr $t1,$t1,8");
3068+ asm volatile("sll $v1,$v1,5");
3069+ asm volatile("addu $v1,$v1,$a1");
3070+ asm volatile("sb $t1,0($a2)");
3071+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3072+ asm volatile("nop");
3073+ asm volatile("nop");
3074+//-------------------------------------------------------------8ドット境界
3075+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3076+ asm volatile("rotr $t1,$t1,8");
3077+ asm volatile("lbu $v1,0($v0)");
3078+ asm volatile("addiu $v0,$v0,1");
3079+ asm volatile("sb $t1,0($a2)");
3080+ asm volatile("rotr $t1,$t1,8");
3081+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3082+ asm volatile("movn $v1,$t3,$t0");
3083+ asm volatile("sb $t1,0($a2)");
3084+ asm volatile("rotr $t1,$t1,8");
3085+ asm volatile("sll $v1,$v1,5");
3086+ asm volatile("addu $v1,$v1,$a1");
3087+ asm volatile("sb $t1,0($a2)");
3088+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3089+ asm volatile("nop");
3090+ asm volatile("nop");
3091+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3092+ asm volatile("rotr $t1,$t1,8");
3093+ asm volatile("lbu $v1,0($v0)");
3094+ asm volatile("addiu $v0,$v0,1");
3095+ asm volatile("sb $t1,0($a2)");
3096+ asm volatile("rotr $t1,$t1,8");
3097+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3098+ asm volatile("movn $v1,$t3,$t0");
3099+ asm volatile("sb $t1,0($a2)");
3100+ asm volatile("rotr $t1,$t1,8");
3101+ asm volatile("sll $v1,$v1,5");
3102+ asm volatile("addu $v1,$v1,$a1");
3103+ asm volatile("sb $t1,0($a2)");
3104+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3105+ asm volatile("nop");
3106+ asm volatile("nop");
3107+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3108+ asm volatile("rotr $t1,$t1,8");
3109+ asm volatile("lbu $v1,0($v0)");
3110+ asm volatile("addiu $v0,$v0,1");
3111+ asm volatile("sb $t1,0($a2)");
3112+ asm volatile("rotr $t1,$t1,8");
3113+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3114+ asm volatile("movn $v1,$t3,$t0");
3115+ asm volatile("sb $t1,0($a2)");
3116+ asm volatile("rotr $t1,$t1,8");
3117+ asm volatile("sll $v1,$v1,5");
3118+ asm volatile("addu $v1,$v1,$a1");
3119+ asm volatile("sb $t1,0($a2)");
3120+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3121+ asm volatile("nop");
3122+ asm volatile("nop");
3123+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3124+ asm volatile("rotr $t1,$t1,8");
3125+ asm volatile("lbu $v1,0($v0)");
3126+ asm volatile("addiu $v0,$v0,1");
3127+ asm volatile("sb $t1,0($a2)");
3128+ asm volatile("rotr $t1,$t1,8");
3129+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3130+ asm volatile("movn $v1,$t3,$t0");
3131+ asm volatile("sb $t1,0($a2)");
3132+ asm volatile("rotr $t1,$t1,8");
3133+ asm volatile("sll $v1,$v1,5");
3134+ asm volatile("addu $v1,$v1,$a1");
3135+ asm volatile("sb $t1,0($a2)");
3136+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3137+ asm volatile("nop");
3138+ asm volatile("nop");
3139+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3140+ asm volatile("rotr $t1,$t1,8");
3141+ asm volatile("lbu $v1,0($v0)");
3142+ asm volatile("addiu $v0,$v0,1");
3143+ asm volatile("sb $t1,0($a2)");
3144+ asm volatile("rotr $t1,$t1,8");
3145+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3146+ asm volatile("movn $v1,$t3,$t0");
3147+ asm volatile("sb $t1,0($a2)");
3148+ asm volatile("rotr $t1,$t1,8");
3149+ asm volatile("sll $v1,$v1,5");
3150+ asm volatile("addu $v1,$v1,$a1");
3151+ asm volatile("sb $t1,0($a2)");
3152+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3153+ asm volatile("lbu $t5,0($a3)");
3154+ asm volatile("addiu $a3,$a3,1");
3155+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3156+ asm volatile("rotr $t1,$t1,8");
3157+ asm volatile("lbu $v1,0($v0)");
3158+ asm volatile("addiu $v0,$v0,1");
3159+ asm volatile("sb $t1,0($a2)");
3160+ asm volatile("rotr $t1,$t1,8");
3161+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3162+ asm volatile("movn $v1,$t3,$t0");
3163+ asm volatile("sb $t1,0($a2)");
3164+ asm volatile("rotr $t1,$t1,8");
3165+ asm volatile("sll $v1,$v1,5");
3166+ asm volatile("addu $v1,$v1,$a1");
3167+ asm volatile("sb $t1,0($a2)");
3168+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3169+ asm volatile("sll $t5,$t5,3");
3170+ asm volatile("addu $t5,$t5,$t4");
3171+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3172+ asm volatile("rotr $t1,$t1,8");
3173+ asm volatile("lbu $v1,0($v0)");
3174+ asm volatile("addiu $v0,$v0,1");
3175+ asm volatile("sb $t1,0($a2)");
3176+ asm volatile("rotr $t1,$t1,8");
3177+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3178+ asm volatile("movn $v1,$t3,$t0");
3179+ asm volatile("sb $t1,0($a2)");
3180+ asm volatile("rotr $t1,$t1,8");
3181+ asm volatile("sll $v1,$v1,5");
3182+ asm volatile("addu $v1,$v1,$a1");
3183+ asm volatile("sb $t1,0($a2)");
3184+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3185+ asm volatile("lbu $t2,0($t5)");
3186+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
3187+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3188+ asm volatile("rotr $t1,$t1,8");
3189+ asm volatile("lbu $v1,0($v0)");
3190+ asm volatile("addiu $v0,$v0,1");
3191+ asm volatile("sb $t1,0($a2)");
3192+ asm volatile("rotr $t1,$t1,8");
3193+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3194+ asm volatile("movn $v1,$t3,$t0");
3195+ asm volatile("sb $t1,0($a2)");
3196+ asm volatile("rotr $t1,$t1,8");
3197+ asm volatile("sll $v1,$v1,5");
3198+ asm volatile("addu $v1,$v1,$a1");
3199+ asm volatile("sb $t1,0($a2)");
3200+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3201+ asm volatile("nop");
3202+ asm volatile("nop");
3203+//-------------------------------------------------------------8ドット境界
3204+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3205+ asm volatile("rotr $t1,$t1,8");
3206+ asm volatile("lbu $v1,0($v0)");
3207+ asm volatile("addiu $v0,$v0,1");
3208+ asm volatile("sb $t1,0($a2)");
3209+ asm volatile("rotr $t1,$t1,8");
3210+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3211+ asm volatile("movn $v1,$t3,$t0");
3212+ asm volatile("sb $t1,0($a2)");
3213+ asm volatile("rotr $t1,$t1,8");
3214+ asm volatile("sll $v1,$v1,5");
3215+ asm volatile("addu $v1,$v1,$a1");
3216+ asm volatile("sb $t1,0($a2)");
3217+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3218+ asm volatile("nop");
3219+ asm volatile("nop");
3220+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3221+ asm volatile("rotr $t1,$t1,8");
3222+ asm volatile("lbu $v1,0($v0)");
3223+ asm volatile("addiu $v0,$v0,1");
3224+ asm volatile("sb $t1,0($a2)");
3225+ asm volatile("rotr $t1,$t1,8");
3226+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3227+ asm volatile("movn $v1,$t3,$t0");
3228+ asm volatile("sb $t1,0($a2)");
3229+ asm volatile("rotr $t1,$t1,8");
3230+ asm volatile("sll $v1,$v1,5");
3231+ asm volatile("addu $v1,$v1,$a1");
3232+ asm volatile("sb $t1,0($a2)");
3233+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3234+ asm volatile("nop");
3235+ asm volatile("nop");
3236+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3237+ asm volatile("rotr $t1,$t1,8");
3238+ asm volatile("lbu $v1,0($v0)");
3239+ asm volatile("addiu $v0,$v0,1");
3240+ asm volatile("sb $t1,0($a2)");
3241+ asm volatile("rotr $t1,$t1,8");
3242+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3243+ asm volatile("movn $v1,$t3,$t0");
3244+ asm volatile("sb $t1,0($a2)");
3245+ asm volatile("rotr $t1,$t1,8");
3246+ asm volatile("sll $v1,$v1,5");
3247+ asm volatile("addu $v1,$v1,$a1");
3248+ asm volatile("sb $t1,0($a2)");
3249+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3250+ asm volatile("nop");
3251+ asm volatile("nop");
3252+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3253+ asm volatile("rotr $t1,$t1,8");
3254+ asm volatile("lbu $v1,0($v0)");
3255+ asm volatile("addiu $v0,$v0,1");
3256+ asm volatile("sb $t1,0($a2)");
3257+ asm volatile("rotr $t1,$t1,8");
3258+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3259+ asm volatile("movn $v1,$t3,$t0");
3260+ asm volatile("sb $t1,0($a2)");
3261+ asm volatile("rotr $t1,$t1,8");
3262+ asm volatile("sll $v1,$v1,5");
3263+ asm volatile("addu $v1,$v1,$a1");
3264+ asm volatile("sb $t1,0($a2)");
3265+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3266+ asm volatile("nop");
3267+ asm volatile("nop");
3268+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3269+ asm volatile("rotr $t1,$t1,8");
3270+ asm volatile("lbu $v1,0($v0)");
3271+ asm volatile("addiu $v0,$v0,1");
3272+ asm volatile("sb $t1,0($a2)");
3273+ asm volatile("rotr $t1,$t1,8");
3274+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3275+ asm volatile("movn $v1,$t3,$t0");
3276+ asm volatile("sb $t1,0($a2)");
3277+ asm volatile("rotr $t1,$t1,8");
3278+ asm volatile("sll $v1,$v1,5");
3279+ asm volatile("addu $v1,$v1,$a1");
3280+ asm volatile("sb $t1,0($a2)");
3281+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3282+ asm volatile("lbu $t5,0($a3)");
3283+ asm volatile("addiu $a3,$a3,1");
3284+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3285+ asm volatile("rotr $t1,$t1,8");
3286+ asm volatile("lbu $v1,0($v0)");
3287+ asm volatile("addiu $v0,$v0,1");
3288+ asm volatile("sb $t1,0($a2)");
3289+ asm volatile("rotr $t1,$t1,8");
3290+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3291+ asm volatile("movn $v1,$t3,$t0");
3292+ asm volatile("sb $t1,0($a2)");
3293+ asm volatile("rotr $t1,$t1,8");
3294+ asm volatile("sll $v1,$v1,5");
3295+ asm volatile("addu $v1,$v1,$a1");
3296+ asm volatile("sb $t1,0($a2)");
3297+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3298+ asm volatile("sll $t5,$t5,3");
3299+ asm volatile("addu $t5,$t5,$t4");
3300+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3301+ asm volatile("rotr $t1,$t1,8");
3302+ asm volatile("lbu $v1,0($v0)");
3303+ asm volatile("addiu $v0,$v0,1");
3304+ asm volatile("sb $t1,0($a2)");
3305+ asm volatile("rotr $t1,$t1,8");
3306+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3307+ asm volatile("movn $v1,$t3,$t0");
3308+ asm volatile("sb $t1,0($a2)");
3309+ asm volatile("rotr $t1,$t1,8");
3310+ asm volatile("sll $v1,$v1,5");
3311+ asm volatile("addu $v1,$v1,$a1");
3312+ asm volatile("sb $t1,0($a2)");
3313+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3314+ asm volatile("lbu $t2,0($t5)");
3315+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
3316+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3317+ asm volatile("rotr $t1,$t1,8");
3318+ asm volatile("lbu $v1,0($v0)");
3319+ asm volatile("addiu $v0,$v0,1");
3320+ asm volatile("sb $t1,0($a2)");
3321+ asm volatile("rotr $t1,$t1,8");
3322+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3323+ asm volatile("movn $v1,$t3,$t0");
3324+ asm volatile("sb $t1,0($a2)");
3325+ asm volatile("rotr $t1,$t1,8");
3326+ asm volatile("sll $v1,$v1,5");
3327+ asm volatile("addu $v1,$v1,$a1");
3328+ asm volatile("sb $t1,0($a2)");
3329+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3330+ asm volatile("nop");
3331+ asm volatile("nop");
3332+//-------------------------------------------------------------8ドット境界
3333+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3334+ asm volatile("rotr $t1,$t1,8");
3335+ asm volatile("lbu $v1,0($v0)");
3336+ asm volatile("addiu $v0,$v0,1");
3337+ asm volatile("sb $t1,0($a2)");
3338+ asm volatile("rotr $t1,$t1,8");
3339+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3340+ asm volatile("movn $v1,$t3,$t0");
3341+ asm volatile("sb $t1,0($a2)");
3342+ asm volatile("rotr $t1,$t1,8");
3343+ asm volatile("sll $v1,$v1,5");
3344+ asm volatile("addu $v1,$v1,$a1");
3345+ asm volatile("sb $t1,0($a2)");
3346+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3347+ asm volatile("nop");
3348+ asm volatile("nop");
3349+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3350+ asm volatile("rotr $t1,$t1,8");
3351+ asm volatile("lbu $v1,0($v0)");
3352+ asm volatile("addiu $v0,$v0,1");
3353+ asm volatile("sb $t1,0($a2)");
3354+ asm volatile("rotr $t1,$t1,8");
3355+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3356+ asm volatile("movn $v1,$t3,$t0");
3357+ asm volatile("sb $t1,0($a2)");
3358+ asm volatile("rotr $t1,$t1,8");
3359+ asm volatile("sll $v1,$v1,5");
3360+ asm volatile("addu $v1,$v1,$a1");
3361+ asm volatile("sb $t1,0($a2)");
3362+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3363+ asm volatile("nop");
3364+ asm volatile("nop");
3365+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3366+ asm volatile("rotr $t1,$t1,8");
3367+ asm volatile("lbu $v1,0($v0)");
3368+ asm volatile("addiu $v0,$v0,1");
3369+ asm volatile("sb $t1,0($a2)");
3370+ asm volatile("rotr $t1,$t1,8");
3371+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3372+ asm volatile("movn $v1,$t3,$t0");
3373+ asm volatile("sb $t1,0($a2)");
3374+ asm volatile("rotr $t1,$t1,8");
3375+ asm volatile("sll $v1,$v1,5");
3376+ asm volatile("addu $v1,$v1,$a1");
3377+ asm volatile("sb $t1,0($a2)");
3378+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3379+ asm volatile("nop");
3380+ asm volatile("nop");
3381+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3382+ asm volatile("rotr $t1,$t1,8");
3383+ asm volatile("lbu $v1,0($v0)");
3384+ asm volatile("addiu $v0,$v0,1");
3385+ asm volatile("sb $t1,0($a2)");
3386+ asm volatile("rotr $t1,$t1,8");
3387+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3388+ asm volatile("movn $v1,$t3,$t0");
3389+ asm volatile("sb $t1,0($a2)");
3390+ asm volatile("rotr $t1,$t1,8");
3391+ asm volatile("sll $v1,$v1,5");
3392+ asm volatile("addu $v1,$v1,$a1");
3393+ asm volatile("sb $t1,0($a2)");
3394+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3395+ asm volatile("nop");
3396+ asm volatile("nop");
3397+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3398+ asm volatile("rotr $t1,$t1,8");
3399+ asm volatile("lbu $v1,0($v0)");
3400+ asm volatile("addiu $v0,$v0,1");
3401+ asm volatile("sb $t1,0($a2)");
3402+ asm volatile("rotr $t1,$t1,8");
3403+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3404+ asm volatile("movn $v1,$t3,$t0");
3405+ asm volatile("sb $t1,0($a2)");
3406+ asm volatile("rotr $t1,$t1,8");
3407+ asm volatile("sll $v1,$v1,5");
3408+ asm volatile("addu $v1,$v1,$a1");
3409+ asm volatile("sb $t1,0($a2)");
3410+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3411+ asm volatile("lbu $t5,0($a3)");
3412+ asm volatile("addiu $a3,$a3,1");
3413+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3414+ asm volatile("rotr $t1,$t1,8");
3415+ asm volatile("lbu $v1,0($v0)");
3416+ asm volatile("addiu $v0,$v0,1");
3417+ asm volatile("sb $t1,0($a2)");
3418+ asm volatile("rotr $t1,$t1,8");
3419+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3420+ asm volatile("movn $v1,$t3,$t0");
3421+ asm volatile("sb $t1,0($a2)");
3422+ asm volatile("rotr $t1,$t1,8");
3423+ asm volatile("sll $v1,$v1,5");
3424+ asm volatile("addu $v1,$v1,$a1");
3425+ asm volatile("sb $t1,0($a2)");
3426+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3427+ asm volatile("sll $t5,$t5,3");
3428+ asm volatile("addu $t5,$t5,$t4");
3429+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3430+ asm volatile("rotr $t1,$t1,8");
3431+ asm volatile("lbu $v1,0($v0)");
3432+ asm volatile("addiu $v0,$v0,1");
3433+ asm volatile("sb $t1,0($a2)");
3434+ asm volatile("rotr $t1,$t1,8");
3435+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3436+ asm volatile("movn $v1,$t3,$t0");
3437+ asm volatile("sb $t1,0($a2)");
3438+ asm volatile("rotr $t1,$t1,8");
3439+ asm volatile("sll $v1,$v1,5");
3440+ asm volatile("addu $v1,$v1,$a1");
3441+ asm volatile("sb $t1,0($a2)");
3442+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3443+ asm volatile("lbu $t2,0($t5)");
3444+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
3445+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3446+ asm volatile("rotr $t1,$t1,8");
3447+ asm volatile("lbu $v1,0($v0)");
3448+ asm volatile("addiu $v0,$v0,1");
3449+ asm volatile("sb $t1,0($a2)");
3450+ asm volatile("rotr $t1,$t1,8");
3451+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3452+ asm volatile("movn $v1,$t3,$t0");
3453+ asm volatile("sb $t1,0($a2)");
3454+ asm volatile("rotr $t1,$t1,8");
3455+ asm volatile("sll $v1,$v1,5");
3456+ asm volatile("addu $v1,$v1,$a1");
3457+ asm volatile("sb $t1,0($a2)");
3458+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3459+ asm volatile("nop");
3460+ asm volatile("nop");
3461+//-------------------------------------------------------------8ドット境界
3462+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3463+ asm volatile("rotr $t1,$t1,8");
3464+ asm volatile("lbu $v1,0($v0)");
3465+ asm volatile("addiu $v0,$v0,1");
3466+ asm volatile("sb $t1,0($a2)");
3467+ asm volatile("rotr $t1,$t1,8");
3468+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3469+ asm volatile("movn $v1,$t3,$t0");
3470+ asm volatile("sb $t1,0($a2)");
3471+ asm volatile("rotr $t1,$t1,8");
3472+ asm volatile("sll $v1,$v1,5");
3473+ asm volatile("addu $v1,$v1,$a1");
3474+ asm volatile("sb $t1,0($a2)");
3475+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3476+ asm volatile("nop");
3477+ asm volatile("nop");
3478+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3479+ asm volatile("rotr $t1,$t1,8");
3480+ asm volatile("lbu $v1,0($v0)");
3481+ asm volatile("addiu $v0,$v0,1");
3482+ asm volatile("sb $t1,0($a2)");
3483+ asm volatile("rotr $t1,$t1,8");
3484+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3485+ asm volatile("movn $v1,$t3,$t0");
3486+ asm volatile("sb $t1,0($a2)");
3487+ asm volatile("rotr $t1,$t1,8");
3488+ asm volatile("sll $v1,$v1,5");
3489+ asm volatile("addu $v1,$v1,$a1");
3490+ asm volatile("sb $t1,0($a2)");
3491+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3492+ asm volatile("nop");
3493+ asm volatile("nop");
3494+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3495+ asm volatile("rotr $t1,$t1,8");
3496+ asm volatile("lbu $v1,0($v0)");
3497+ asm volatile("addiu $v0,$v0,1");
3498+ asm volatile("sb $t1,0($a2)");
3499+ asm volatile("rotr $t1,$t1,8");
3500+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3501+ asm volatile("movn $v1,$t3,$t0");
3502+ asm volatile("sb $t1,0($a2)");
3503+ asm volatile("rotr $t1,$t1,8");
3504+ asm volatile("sll $v1,$v1,5");
3505+ asm volatile("addu $v1,$v1,$a1");
3506+ asm volatile("sb $t1,0($a2)");
3507+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3508+ asm volatile("nop");
3509+ asm volatile("nop");
3510+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3511+ asm volatile("rotr $t1,$t1,8");
3512+ asm volatile("lbu $v1,0($v0)");
3513+ asm volatile("addiu $v0,$v0,1");
3514+ asm volatile("sb $t1,0($a2)");
3515+ asm volatile("rotr $t1,$t1,8");
3516+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3517+ asm volatile("movn $v1,$t3,$t0");
3518+ asm volatile("sb $t1,0($a2)");
3519+ asm volatile("rotr $t1,$t1,8");
3520+ asm volatile("sll $v1,$v1,5");
3521+ asm volatile("addu $v1,$v1,$a1");
3522+ asm volatile("sb $t1,0($a2)");
3523+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3524+ asm volatile("nop");
3525+ asm volatile("nop");
3526+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3527+ asm volatile("rotr $t1,$t1,8");
3528+ asm volatile("lbu $v1,0($v0)");
3529+ asm volatile("addiu $v0,$v0,1");
3530+ asm volatile("sb $t1,0($a2)");
3531+ asm volatile("rotr $t1,$t1,8");
3532+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3533+ asm volatile("movn $v1,$t3,$t0");
3534+ asm volatile("sb $t1,0($a2)");
3535+ asm volatile("rotr $t1,$t1,8");
3536+ asm volatile("sll $v1,$v1,5");
3537+ asm volatile("addu $v1,$v1,$a1");
3538+ asm volatile("sb $t1,0($a2)");
3539+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3540+ asm volatile("lbu $t5,0($a3)");
3541+ asm volatile("addiu $a3,$a3,1");
3542+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3543+ asm volatile("rotr $t1,$t1,8");
3544+ asm volatile("lbu $v1,0($v0)");
3545+ asm volatile("addiu $v0,$v0,1");
3546+ asm volatile("sb $t1,0($a2)");
3547+ asm volatile("rotr $t1,$t1,8");
3548+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3549+ asm volatile("movn $v1,$t3,$t0");
3550+ asm volatile("sb $t1,0($a2)");
3551+ asm volatile("rotr $t1,$t1,8");
3552+ asm volatile("sll $v1,$v1,5");
3553+ asm volatile("addu $v1,$v1,$a1");
3554+ asm volatile("sb $t1,0($a2)");
3555+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3556+ asm volatile("sll $t5,$t5,3");
3557+ asm volatile("addu $t5,$t5,$t4");
3558+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3559+ asm volatile("rotr $t1,$t1,8");
3560+ asm volatile("lbu $v1,0($v0)");
3561+ asm volatile("addiu $v0,$v0,1");
3562+ asm volatile("sb $t1,0($a2)");
3563+ asm volatile("rotr $t1,$t1,8");
3564+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3565+ asm volatile("movn $v1,$t3,$t0");
3566+ asm volatile("sb $t1,0($a2)");
3567+ asm volatile("rotr $t1,$t1,8");
3568+ asm volatile("sll $v1,$v1,5");
3569+ asm volatile("addu $v1,$v1,$a1");
3570+ asm volatile("sb $t1,0($a2)");
3571+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3572+ asm volatile("lbu $t2,0($t5)");
3573+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
3574+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3575+ asm volatile("rotr $t1,$t1,8");
3576+ asm volatile("lbu $v1,0($v0)");
3577+ asm volatile("addiu $v0,$v0,1");
3578+ asm volatile("sb $t1,0($a2)");
3579+ asm volatile("rotr $t1,$t1,8");
3580+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3581+ asm volatile("movn $v1,$t3,$t0");
3582+ asm volatile("sb $t1,0($a2)");
3583+ asm volatile("rotr $t1,$t1,8");
3584+ asm volatile("sll $v1,$v1,5");
3585+ asm volatile("addu $v1,$v1,$a1");
3586+ asm volatile("sb $t1,0($a2)");
3587+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3588+ asm volatile("nop");
3589+ asm volatile("nop");
3590+//-------------------------------------------------------------8ドット境界
3591+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3592+ asm volatile("rotr $t1,$t1,8");
3593+ asm volatile("lbu $v1,0($v0)");
3594+ asm volatile("addiu $v0,$v0,1");
3595+ asm volatile("sb $t1,0($a2)");
3596+ asm volatile("rotr $t1,$t1,8");
3597+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3598+ asm volatile("movn $v1,$t3,$t0");
3599+ asm volatile("sb $t1,0($a2)");
3600+ asm volatile("rotr $t1,$t1,8");
3601+ asm volatile("sll $v1,$v1,5");
3602+ asm volatile("addu $v1,$v1,$a1");
3603+ asm volatile("sb $t1,0($a2)");
3604+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3605+ asm volatile("nop");
3606+ asm volatile("nop");
3607+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3608+ asm volatile("rotr $t1,$t1,8");
3609+ asm volatile("lbu $v1,0($v0)");
3610+ asm volatile("addiu $v0,$v0,1");
3611+ asm volatile("sb $t1,0($a2)");
3612+ asm volatile("rotr $t1,$t1,8");
3613+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3614+ asm volatile("movn $v1,$t3,$t0");
3615+ asm volatile("sb $t1,0($a2)");
3616+ asm volatile("rotr $t1,$t1,8");
3617+ asm volatile("sll $v1,$v1,5");
3618+ asm volatile("addu $v1,$v1,$a1");
3619+ asm volatile("sb $t1,0($a2)");
3620+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3621+ asm volatile("nop");
3622+ asm volatile("nop");
3623+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3624+ asm volatile("rotr $t1,$t1,8");
3625+ asm volatile("lbu $v1,0($v0)");
3626+ asm volatile("addiu $v0,$v0,1");
3627+ asm volatile("sb $t1,0($a2)");
3628+ asm volatile("rotr $t1,$t1,8");
3629+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3630+ asm volatile("movn $v1,$t3,$t0");
3631+ asm volatile("sb $t1,0($a2)");
3632+ asm volatile("rotr $t1,$t1,8");
3633+ asm volatile("sll $v1,$v1,5");
3634+ asm volatile("addu $v1,$v1,$a1");
3635+ asm volatile("sb $t1,0($a2)");
3636+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3637+ asm volatile("nop");
3638+ asm volatile("nop");
3639+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3640+ asm volatile("rotr $t1,$t1,8");
3641+ asm volatile("lbu $v1,0($v0)");
3642+ asm volatile("addiu $v0,$v0,1");
3643+ asm volatile("sb $t1,0($a2)");
3644+ asm volatile("rotr $t1,$t1,8");
3645+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3646+ asm volatile("movn $v1,$t3,$t0");
3647+ asm volatile("sb $t1,0($a2)");
3648+ asm volatile("rotr $t1,$t1,8");
3649+ asm volatile("sll $v1,$v1,5");
3650+ asm volatile("addu $v1,$v1,$a1");
3651+ asm volatile("sb $t1,0($a2)");
3652+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3653+ asm volatile("nop");
3654+ asm volatile("nop");
3655+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3656+ asm volatile("rotr $t1,$t1,8");
3657+ asm volatile("lbu $v1,0($v0)");
3658+ asm volatile("addiu $v0,$v0,1");
3659+ asm volatile("sb $t1,0($a2)");
3660+ asm volatile("rotr $t1,$t1,8");
3661+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3662+ asm volatile("movn $v1,$t3,$t0");
3663+ asm volatile("sb $t1,0($a2)");
3664+ asm volatile("rotr $t1,$t1,8");
3665+ asm volatile("sll $v1,$v1,5");
3666+ asm volatile("addu $v1,$v1,$a1");
3667+ asm volatile("sb $t1,0($a2)");
3668+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3669+ asm volatile("lbu $t5,0($a3)");
3670+ asm volatile("addiu $a3,$a3,1");
3671+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3672+ asm volatile("rotr $t1,$t1,8");
3673+ asm volatile("lbu $v1,0($v0)");
3674+ asm volatile("addiu $v0,$v0,1");
3675+ asm volatile("sb $t1,0($a2)");
3676+ asm volatile("rotr $t1,$t1,8");
3677+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3678+ asm volatile("movn $v1,$t3,$t0");
3679+ asm volatile("sb $t1,0($a2)");
3680+ asm volatile("rotr $t1,$t1,8");
3681+ asm volatile("sll $v1,$v1,5");
3682+ asm volatile("addu $v1,$v1,$a1");
3683+ asm volatile("sb $t1,0($a2)");
3684+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3685+ asm volatile("sll $t5,$t5,3");
3686+ asm volatile("addu $t5,$t5,$t4");
3687+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3688+ asm volatile("rotr $t1,$t1,8");
3689+ asm volatile("lbu $v1,0($v0)");
3690+ asm volatile("addiu $v0,$v0,1");
3691+ asm volatile("sb $t1,0($a2)");
3692+ asm volatile("rotr $t1,$t1,8");
3693+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3694+ asm volatile("movn $v1,$t3,$t0");
3695+ asm volatile("sb $t1,0($a2)");
3696+ asm volatile("rotr $t1,$t1,8");
3697+ asm volatile("sll $v1,$v1,5");
3698+ asm volatile("addu $v1,$v1,$a1");
3699+ asm volatile("sb $t1,0($a2)");
3700+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3701+ asm volatile("lbu $t2,0($t5)");
3702+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
3703+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3704+ asm volatile("rotr $t1,$t1,8");
3705+ asm volatile("lbu $v1,0($v0)");
3706+ asm volatile("addiu $v0,$v0,1");
3707+ asm volatile("sb $t1,0($a2)");
3708+ asm volatile("rotr $t1,$t1,8");
3709+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3710+ asm volatile("movn $v1,$t3,$t0");
3711+ asm volatile("sb $t1,0($a2)");
3712+ asm volatile("rotr $t1,$t1,8");
3713+ asm volatile("sll $v1,$v1,5");
3714+ asm volatile("addu $v1,$v1,$a1");
3715+ asm volatile("sb $t1,0($a2)");
3716+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3717+ asm volatile("nop");
3718+ asm volatile("nop");
3719+//-------------------------------------------------------------8ドット境界
3720+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3721+ asm volatile("rotr $t1,$t1,8");
3722+ asm volatile("lbu $v1,0($v0)");
3723+ asm volatile("addiu $v0,$v0,1");
3724+ asm volatile("sb $t1,0($a2)");
3725+ asm volatile("rotr $t1,$t1,8");
3726+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3727+ asm volatile("movn $v1,$t3,$t0");
3728+ asm volatile("sb $t1,0($a2)");
3729+ asm volatile("rotr $t1,$t1,8");
3730+ asm volatile("sll $v1,$v1,5");
3731+ asm volatile("addu $v1,$v1,$a1");
3732+ asm volatile("sb $t1,0($a2)");
3733+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3734+ asm volatile("nop");
3735+ asm volatile("nop");
3736+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3737+ asm volatile("rotr $t1,$t1,8");
3738+ asm volatile("lbu $v1,0($v0)");
3739+ asm volatile("addiu $v0,$v0,1");
3740+ asm volatile("sb $t1,0($a2)");
3741+ asm volatile("rotr $t1,$t1,8");
3742+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3743+ asm volatile("movn $v1,$t3,$t0");
3744+ asm volatile("sb $t1,0($a2)");
3745+ asm volatile("rotr $t1,$t1,8");
3746+ asm volatile("sll $v1,$v1,5");
3747+ asm volatile("addu $v1,$v1,$a1");
3748+ asm volatile("sb $t1,0($a2)");
3749+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3750+ asm volatile("nop");
3751+ asm volatile("nop");
3752+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3753+ asm volatile("rotr $t1,$t1,8");
3754+ asm volatile("lbu $v1,0($v0)");
3755+ asm volatile("addiu $v0,$v0,1");
3756+ asm volatile("sb $t1,0($a2)");
3757+ asm volatile("rotr $t1,$t1,8");
3758+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3759+ asm volatile("movn $v1,$t3,$t0");
3760+ asm volatile("sb $t1,0($a2)");
3761+ asm volatile("rotr $t1,$t1,8");
3762+ asm volatile("sll $v1,$v1,5");
3763+ asm volatile("addu $v1,$v1,$a1");
3764+ asm volatile("sb $t1,0($a2)");
3765+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3766+ asm volatile("nop");
3767+ asm volatile("nop");
3768+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3769+ asm volatile("rotr $t1,$t1,8");
3770+ asm volatile("lbu $v1,0($v0)");
3771+ asm volatile("addiu $v0,$v0,1");
3772+ asm volatile("sb $t1,0($a2)");
3773+ asm volatile("rotr $t1,$t1,8");
3774+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3775+ asm volatile("movn $v1,$t3,$t0");
3776+ asm volatile("sb $t1,0($a2)");
3777+ asm volatile("rotr $t1,$t1,8");
3778+ asm volatile("sll $v1,$v1,5");
3779+ asm volatile("addu $v1,$v1,$a1");
3780+ asm volatile("sb $t1,0($a2)");
3781+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3782+ asm volatile("nop");
3783+ asm volatile("nop");
3784+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3785+ asm volatile("rotr $t1,$t1,8");
3786+ asm volatile("lbu $v1,0($v0)");
3787+ asm volatile("addiu $v0,$v0,1");
3788+ asm volatile("sb $t1,0($a2)");
3789+ asm volatile("rotr $t1,$t1,8");
3790+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3791+ asm volatile("movn $v1,$t3,$t0");
3792+ asm volatile("sb $t1,0($a2)");
3793+ asm volatile("rotr $t1,$t1,8");
3794+ asm volatile("sll $v1,$v1,5");
3795+ asm volatile("addu $v1,$v1,$a1");
3796+ asm volatile("sb $t1,0($a2)");
3797+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3798+ asm volatile("lbu $t5,0($a3)");
3799+ asm volatile("addiu $a3,$a3,1");
3800+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3801+ asm volatile("rotr $t1,$t1,8");
3802+ asm volatile("lbu $v1,0($v0)");
3803+ asm volatile("addiu $v0,$v0,1");
3804+ asm volatile("sb $t1,0($a2)");
3805+ asm volatile("rotr $t1,$t1,8");
3806+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3807+ asm volatile("movn $v1,$t3,$t0");
3808+ asm volatile("sb $t1,0($a2)");
3809+ asm volatile("rotr $t1,$t1,8");
3810+ asm volatile("sll $v1,$v1,5");
3811+ asm volatile("addu $v1,$v1,$a1");
3812+ asm volatile("sb $t1,0($a2)");
3813+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3814+ asm volatile("sll $t5,$t5,3");
3815+ asm volatile("addu $t5,$t5,$t4");
3816+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3817+ asm volatile("rotr $t1,$t1,8");
3818+ asm volatile("lbu $v1,0($v0)");
3819+ asm volatile("addiu $v0,$v0,1");
3820+ asm volatile("sb $t1,0($a2)");
3821+ asm volatile("rotr $t1,$t1,8");
3822+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3823+ asm volatile("movn $v1,$t3,$t0");
3824+ asm volatile("sb $t1,0($a2)");
3825+ asm volatile("rotr $t1,$t1,8");
3826+ asm volatile("sll $v1,$v1,5");
3827+ asm volatile("addu $v1,$v1,$a1");
3828+ asm volatile("sb $t1,0($a2)");
3829+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3830+ asm volatile("lbu $t2,0($t5)");
3831+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
3832+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3833+ asm volatile("rotr $t1,$t1,8");
3834+ asm volatile("lbu $v1,0($v0)");
3835+ asm volatile("addiu $v0,$v0,1");
3836+ asm volatile("sb $t1,0($a2)");
3837+ asm volatile("rotr $t1,$t1,8");
3838+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3839+ asm volatile("movn $v1,$t3,$t0");
3840+ asm volatile("sb $t1,0($a2)");
3841+ asm volatile("rotr $t1,$t1,8");
3842+ asm volatile("sll $v1,$v1,5");
3843+ asm volatile("addu $v1,$v1,$a1");
3844+ asm volatile("sb $t1,0($a2)");
3845+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3846+ asm volatile("nop");
3847+ asm volatile("nop");
3848+//-------------------------------------------------------------8ドット境界
3849+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3850+ asm volatile("rotr $t1,$t1,8");
3851+ asm volatile("lbu $v1,0($v0)");
3852+ asm volatile("addiu $v0,$v0,1");
3853+ asm volatile("sb $t1,0($a2)");
3854+ asm volatile("rotr $t1,$t1,8");
3855+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3856+ asm volatile("movn $v1,$t3,$t0");
3857+ asm volatile("sb $t1,0($a2)");
3858+ asm volatile("rotr $t1,$t1,8");
3859+ asm volatile("sll $v1,$v1,5");
3860+ asm volatile("addu $v1,$v1,$a1");
3861+ asm volatile("sb $t1,0($a2)");
3862+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3863+ asm volatile("nop");
3864+ asm volatile("nop");
3865+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3866+ asm volatile("rotr $t1,$t1,8");
3867+ asm volatile("lbu $v1,0($v0)");
3868+ asm volatile("addiu $v0,$v0,1");
3869+ asm volatile("sb $t1,0($a2)");
3870+ asm volatile("rotr $t1,$t1,8");
3871+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3872+ asm volatile("movn $v1,$t3,$t0");
3873+ asm volatile("sb $t1,0($a2)");
3874+ asm volatile("rotr $t1,$t1,8");
3875+ asm volatile("sll $v1,$v1,5");
3876+ asm volatile("addu $v1,$v1,$a1");
3877+ asm volatile("sb $t1,0($a2)");
3878+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3879+ asm volatile("nop");
3880+ asm volatile("nop");
3881+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3882+ asm volatile("rotr $t1,$t1,8");
3883+ asm volatile("lbu $v1,0($v0)");
3884+ asm volatile("addiu $v0,$v0,1");
3885+ asm volatile("sb $t1,0($a2)");
3886+ asm volatile("rotr $t1,$t1,8");
3887+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3888+ asm volatile("movn $v1,$t3,$t0");
3889+ asm volatile("sb $t1,0($a2)");
3890+ asm volatile("rotr $t1,$t1,8");
3891+ asm volatile("sll $v1,$v1,5");
3892+ asm volatile("addu $v1,$v1,$a1");
3893+ asm volatile("sb $t1,0($a2)");
3894+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3895+ asm volatile("nop");
3896+ asm volatile("nop");
3897+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3898+ asm volatile("rotr $t1,$t1,8");
3899+ asm volatile("lbu $v1,0($v0)");
3900+ asm volatile("addiu $v0,$v0,1");
3901+ asm volatile("sb $t1,0($a2)");
3902+ asm volatile("rotr $t1,$t1,8");
3903+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3904+ asm volatile("movn $v1,$t3,$t0");
3905+ asm volatile("sb $t1,0($a2)");
3906+ asm volatile("rotr $t1,$t1,8");
3907+ asm volatile("sll $v1,$v1,5");
3908+ asm volatile("addu $v1,$v1,$a1");
3909+ asm volatile("sb $t1,0($a2)");
3910+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3911+ asm volatile("nop");
3912+ asm volatile("nop");
3913+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3914+ asm volatile("rotr $t1,$t1,8");
3915+ asm volatile("lbu $v1,0($v0)");
3916+ asm volatile("addiu $v0,$v0,1");
3917+ asm volatile("sb $t1,0($a2)");
3918+ asm volatile("rotr $t1,$t1,8");
3919+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3920+ asm volatile("movn $v1,$t3,$t0");
3921+ asm volatile("sb $t1,0($a2)");
3922+ asm volatile("rotr $t1,$t1,8");
3923+ asm volatile("sll $v1,$v1,5");
3924+ asm volatile("addu $v1,$v1,$a1");
3925+ asm volatile("sb $t1,0($a2)");
3926+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3927+ asm volatile("lbu $t5,0($a3)");
3928+ asm volatile("addiu $a3,$a3,1");
3929+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3930+ asm volatile("rotr $t1,$t1,8");
3931+ asm volatile("lbu $v1,0($v0)");
3932+ asm volatile("addiu $v0,$v0,1");
3933+ asm volatile("sb $t1,0($a2)");
3934+ asm volatile("rotr $t1,$t1,8");
3935+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3936+ asm volatile("movn $v1,$t3,$t0");
3937+ asm volatile("sb $t1,0($a2)");
3938+ asm volatile("rotr $t1,$t1,8");
3939+ asm volatile("sll $v1,$v1,5");
3940+ asm volatile("addu $v1,$v1,$a1");
3941+ asm volatile("sb $t1,0($a2)");
3942+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3943+ asm volatile("sll $t5,$t5,3");
3944+ asm volatile("addu $t5,$t5,$t4");
3945+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3946+ asm volatile("rotr $t1,$t1,8");
3947+ asm volatile("lbu $v1,0($v0)");
3948+ asm volatile("addiu $v0,$v0,1");
3949+ asm volatile("sb $t1,0($a2)");
3950+ asm volatile("rotr $t1,$t1,8");
3951+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3952+ asm volatile("movn $v1,$t3,$t0");
3953+ asm volatile("sb $t1,0($a2)");
3954+ asm volatile("rotr $t1,$t1,8");
3955+ asm volatile("sll $v1,$v1,5");
3956+ asm volatile("addu $v1,$v1,$a1");
3957+ asm volatile("sb $t1,0($a2)");
3958+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3959+ asm volatile("lbu $t2,0($t5)");
3960+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
3961+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3962+ asm volatile("rotr $t1,$t1,8");
3963+ asm volatile("lbu $v1,0($v0)");
3964+ asm volatile("addiu $v0,$v0,1");
3965+ asm volatile("sb $t1,0($a2)");
3966+ asm volatile("rotr $t1,$t1,8");
3967+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3968+ asm volatile("movn $v1,$t3,$t0");
3969+ asm volatile("sb $t1,0($a2)");
3970+ asm volatile("rotr $t1,$t1,8");
3971+ asm volatile("sll $v1,$v1,5");
3972+ asm volatile("addu $v1,$v1,$a1");
3973+ asm volatile("sb $t1,0($a2)");
3974+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3975+ asm volatile("nop");
3976+ asm volatile("nop");
3977+//-------------------------------------------------------------8ドット境界
3978+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3979+ asm volatile("rotr $t1,$t1,8");
3980+ asm volatile("lbu $v1,0($v0)");
3981+ asm volatile("addiu $v0,$v0,1");
3982+ asm volatile("sb $t1,0($a2)");
3983+ asm volatile("rotr $t1,$t1,8");
3984+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
3985+ asm volatile("movn $v1,$t3,$t0");
3986+ asm volatile("sb $t1,0($a2)");
3987+ asm volatile("rotr $t1,$t1,8");
3988+ asm volatile("sll $v1,$v1,5");
3989+ asm volatile("addu $v1,$v1,$a1");
3990+ asm volatile("sb $t1,0($a2)");
3991+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
3992+ asm volatile("nop");
3993+ asm volatile("nop");
3994+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
3995+ asm volatile("rotr $t1,$t1,8");
3996+ asm volatile("lbu $v1,0($v0)");
3997+ asm volatile("addiu $v0,$v0,1");
3998+ asm volatile("sb $t1,0($a2)");
3999+ asm volatile("rotr $t1,$t1,8");
4000+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4001+ asm volatile("movn $v1,$t3,$t0");
4002+ asm volatile("sb $t1,0($a2)");
4003+ asm volatile("rotr $t1,$t1,8");
4004+ asm volatile("sll $v1,$v1,5");
4005+ asm volatile("addu $v1,$v1,$a1");
4006+ asm volatile("sb $t1,0($a2)");
4007+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4008+ asm volatile("nop");
4009+ asm volatile("nop");
4010+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4011+ asm volatile("rotr $t1,$t1,8");
4012+ asm volatile("lbu $v1,0($v0)");
4013+ asm volatile("addiu $v0,$v0,1");
4014+ asm volatile("sb $t1,0($a2)");
4015+ asm volatile("rotr $t1,$t1,8");
4016+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4017+ asm volatile("movn $v1,$t3,$t0");
4018+ asm volatile("sb $t1,0($a2)");
4019+ asm volatile("rotr $t1,$t1,8");
4020+ asm volatile("sll $v1,$v1,5");
4021+ asm volatile("addu $v1,$v1,$a1");
4022+ asm volatile("sb $t1,0($a2)");
4023+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4024+ asm volatile("nop");
4025+ asm volatile("nop");
4026+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4027+ asm volatile("rotr $t1,$t1,8");
4028+ asm volatile("lbu $v1,0($v0)");
4029+ asm volatile("addiu $v0,$v0,1");
4030+ asm volatile("sb $t1,0($a2)");
4031+ asm volatile("rotr $t1,$t1,8");
4032+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4033+ asm volatile("movn $v1,$t3,$t0");
4034+ asm volatile("sb $t1,0($a2)");
4035+ asm volatile("rotr $t1,$t1,8");
4036+ asm volatile("sll $v1,$v1,5");
4037+ asm volatile("addu $v1,$v1,$a1");
4038+ asm volatile("sb $t1,0($a2)");
4039+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4040+ asm volatile("nop");
4041+ asm volatile("nop");
4042+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4043+ asm volatile("rotr $t1,$t1,8");
4044+ asm volatile("lbu $v1,0($v0)");
4045+ asm volatile("addiu $v0,$v0,1");
4046+ asm volatile("sb $t1,0($a2)");
4047+ asm volatile("rotr $t1,$t1,8");
4048+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4049+ asm volatile("movn $v1,$t3,$t0");
4050+ asm volatile("sb $t1,0($a2)");
4051+ asm volatile("rotr $t1,$t1,8");
4052+ asm volatile("sll $v1,$v1,5");
4053+ asm volatile("addu $v1,$v1,$a1");
4054+ asm volatile("sb $t1,0($a2)");
4055+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4056+ asm volatile("lbu $t5,0($a3)");
4057+ asm volatile("addiu $a3,$a3,1");
4058+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4059+ asm volatile("rotr $t1,$t1,8");
4060+ asm volatile("lbu $v1,0($v0)");
4061+ asm volatile("addiu $v0,$v0,1");
4062+ asm volatile("sb $t1,0($a2)");
4063+ asm volatile("rotr $t1,$t1,8");
4064+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4065+ asm volatile("movn $v1,$t3,$t0");
4066+ asm volatile("sb $t1,0($a2)");
4067+ asm volatile("rotr $t1,$t1,8");
4068+ asm volatile("sll $v1,$v1,5");
4069+ asm volatile("addu $v1,$v1,$a1");
4070+ asm volatile("sb $t1,0($a2)");
4071+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4072+ asm volatile("sll $t5,$t5,3");
4073+ asm volatile("addu $t5,$t5,$t4");
4074+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4075+ asm volatile("rotr $t1,$t1,8");
4076+ asm volatile("lbu $v1,0($v0)");
4077+ asm volatile("addiu $v0,$v0,1");
4078+ asm volatile("sb $t1,0($a2)");
4079+ asm volatile("rotr $t1,$t1,8");
4080+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4081+ asm volatile("movn $v1,$t3,$t0");
4082+ asm volatile("sb $t1,0($a2)");
4083+ asm volatile("rotr $t1,$t1,8");
4084+ asm volatile("sll $v1,$v1,5");
4085+ asm volatile("addu $v1,$v1,$a1");
4086+ asm volatile("sb $t1,0($a2)");
4087+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4088+ asm volatile("lbu $t2,0($t5)");
4089+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
4090+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4091+ asm volatile("rotr $t1,$t1,8");
4092+ asm volatile("lbu $v1,0($v0)");
4093+ asm volatile("addiu $v0,$v0,1");
4094+ asm volatile("sb $t1,0($a2)");
4095+ asm volatile("rotr $t1,$t1,8");
4096+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4097+ asm volatile("movn $v1,$t3,$t0");
4098+ asm volatile("sb $t1,0($a2)");
4099+ asm volatile("rotr $t1,$t1,8");
4100+ asm volatile("sll $v1,$v1,5");
4101+ asm volatile("addu $v1,$v1,$a1");
4102+ asm volatile("sb $t1,0($a2)");
4103+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4104+ asm volatile("nop");
4105+ asm volatile("nop");
4106+//-------------------------------------------------------------8ドット境界
4107+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4108+ asm volatile("rotr $t1,$t1,8");
4109+ asm volatile("lbu $v1,0($v0)");
4110+ asm volatile("addiu $v0,$v0,1");
4111+ asm volatile("sb $t1,0($a2)");
4112+ asm volatile("rotr $t1,$t1,8");
4113+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4114+ asm volatile("movn $v1,$t3,$t0");
4115+ asm volatile("sb $t1,0($a2)");
4116+ asm volatile("rotr $t1,$t1,8");
4117+ asm volatile("sll $v1,$v1,5");
4118+ asm volatile("addu $v1,$v1,$a1");
4119+ asm volatile("sb $t1,0($a2)");
4120+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4121+ asm volatile("nop");
4122+ asm volatile("nop");
4123+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4124+ asm volatile("rotr $t1,$t1,8");
4125+ asm volatile("lbu $v1,0($v0)");
4126+ asm volatile("addiu $v0,$v0,1");
4127+ asm volatile("sb $t1,0($a2)");
4128+ asm volatile("rotr $t1,$t1,8");
4129+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4130+ asm volatile("movn $v1,$t3,$t0");
4131+ asm volatile("sb $t1,0($a2)");
4132+ asm volatile("rotr $t1,$t1,8");
4133+ asm volatile("sll $v1,$v1,5");
4134+ asm volatile("addu $v1,$v1,$a1");
4135+ asm volatile("sb $t1,0($a2)");
4136+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4137+ asm volatile("nop");
4138+ asm volatile("nop");
4139+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4140+ asm volatile("rotr $t1,$t1,8");
4141+ asm volatile("lbu $v1,0($v0)");
4142+ asm volatile("addiu $v0,$v0,1");
4143+ asm volatile("sb $t1,0($a2)");
4144+ asm volatile("rotr $t1,$t1,8");
4145+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4146+ asm volatile("movn $v1,$t3,$t0");
4147+ asm volatile("sb $t1,0($a2)");
4148+ asm volatile("rotr $t1,$t1,8");
4149+ asm volatile("sll $v1,$v1,5");
4150+ asm volatile("addu $v1,$v1,$a1");
4151+ asm volatile("sb $t1,0($a2)");
4152+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4153+ asm volatile("nop");
4154+ asm volatile("nop");
4155+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4156+ asm volatile("rotr $t1,$t1,8");
4157+ asm volatile("lbu $v1,0($v0)");
4158+ asm volatile("addiu $v0,$v0,1");
4159+ asm volatile("sb $t1,0($a2)");
4160+ asm volatile("rotr $t1,$t1,8");
4161+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4162+ asm volatile("movn $v1,$t3,$t0");
4163+ asm volatile("sb $t1,0($a2)");
4164+ asm volatile("rotr $t1,$t1,8");
4165+ asm volatile("sll $v1,$v1,5");
4166+ asm volatile("addu $v1,$v1,$a1");
4167+ asm volatile("sb $t1,0($a2)");
4168+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4169+ asm volatile("nop");
4170+ asm volatile("nop");
4171+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4172+ asm volatile("rotr $t1,$t1,8");
4173+ asm volatile("lbu $v1,0($v0)");
4174+ asm volatile("addiu $v0,$v0,1");
4175+ asm volatile("sb $t1,0($a2)");
4176+ asm volatile("rotr $t1,$t1,8");
4177+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4178+ asm volatile("movn $v1,$t3,$t0");
4179+ asm volatile("sb $t1,0($a2)");
4180+ asm volatile("rotr $t1,$t1,8");
4181+ asm volatile("sll $v1,$v1,5");
4182+ asm volatile("addu $v1,$v1,$a1");
4183+ asm volatile("sb $t1,0($a2)");
4184+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4185+ asm volatile("lbu $t5,0($a3)");
4186+ asm volatile("addiu $a3,$a3,1");
4187+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4188+ asm volatile("rotr $t1,$t1,8");
4189+ asm volatile("lbu $v1,0($v0)");
4190+ asm volatile("addiu $v0,$v0,1");
4191+ asm volatile("sb $t1,0($a2)");
4192+ asm volatile("rotr $t1,$t1,8");
4193+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4194+ asm volatile("movn $v1,$t3,$t0");
4195+ asm volatile("sb $t1,0($a2)");
4196+ asm volatile("rotr $t1,$t1,8");
4197+ asm volatile("sll $v1,$v1,5");
4198+ asm volatile("addu $v1,$v1,$a1");
4199+ asm volatile("sb $t1,0($a2)");
4200+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4201+ asm volatile("sll $t5,$t5,3");
4202+ asm volatile("addu $t5,$t5,$t4");
4203+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4204+ asm volatile("rotr $t1,$t1,8");
4205+ asm volatile("lbu $v1,0($v0)");
4206+ asm volatile("addiu $v0,$v0,1");
4207+ asm volatile("sb $t1,0($a2)");
4208+ asm volatile("rotr $t1,$t1,8");
4209+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4210+ asm volatile("movn $v1,$t3,$t0");
4211+ asm volatile("sb $t1,0($a2)");
4212+ asm volatile("rotr $t1,$t1,8");
4213+ asm volatile("sll $v1,$v1,5");
4214+ asm volatile("addu $v1,$v1,$a1");
4215+ asm volatile("sb $t1,0($a2)");
4216+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4217+ asm volatile("lbu $t2,0($t5)");
4218+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
4219+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4220+ asm volatile("rotr $t1,$t1,8");
4221+ asm volatile("lbu $v1,0($v0)");
4222+ asm volatile("addiu $v0,$v0,1");
4223+ asm volatile("sb $t1,0($a2)");
4224+ asm volatile("rotr $t1,$t1,8");
4225+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4226+ asm volatile("movn $v1,$t3,$t0");
4227+ asm volatile("sb $t1,0($a2)");
4228+ asm volatile("rotr $t1,$t1,8");
4229+ asm volatile("sll $v1,$v1,5");
4230+ asm volatile("addu $v1,$v1,$a1");
4231+ asm volatile("sb $t1,0($a2)");
4232+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4233+ asm volatile("nop");
4234+ asm volatile("nop");
4235+//-------------------------------------------------------------8ドット境界
4236+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4237+ asm volatile("rotr $t1,$t1,8");
4238+ asm volatile("lbu $v1,0($v0)");
4239+ asm volatile("addiu $v0,$v0,1");
4240+ asm volatile("sb $t1,0($a2)");
4241+ asm volatile("rotr $t1,$t1,8");
4242+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4243+ asm volatile("movn $v1,$t3,$t0");
4244+ asm volatile("sb $t1,0($a2)");
4245+ asm volatile("rotr $t1,$t1,8");
4246+ asm volatile("sll $v1,$v1,5");
4247+ asm volatile("addu $v1,$v1,$a1");
4248+ asm volatile("sb $t1,0($a2)");
4249+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4250+ asm volatile("nop");
4251+ asm volatile("nop");
4252+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4253+ asm volatile("rotr $t1,$t1,8");
4254+ asm volatile("lbu $v1,0($v0)");
4255+ asm volatile("addiu $v0,$v0,1");
4256+ asm volatile("sb $t1,0($a2)");
4257+ asm volatile("rotr $t1,$t1,8");
4258+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4259+ asm volatile("movn $v1,$t3,$t0");
4260+ asm volatile("sb $t1,0($a2)");
4261+ asm volatile("rotr $t1,$t1,8");
4262+ asm volatile("sll $v1,$v1,5");
4263+ asm volatile("addu $v1,$v1,$a1");
4264+ asm volatile("sb $t1,0($a2)");
4265+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4266+ asm volatile("nop");
4267+ asm volatile("nop");
4268+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4269+ asm volatile("rotr $t1,$t1,8");
4270+ asm volatile("lbu $v1,0($v0)");
4271+ asm volatile("addiu $v0,$v0,1");
4272+ asm volatile("sb $t1,0($a2)");
4273+ asm volatile("rotr $t1,$t1,8");
4274+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4275+ asm volatile("movn $v1,$t3,$t0");
4276+ asm volatile("sb $t1,0($a2)");
4277+ asm volatile("rotr $t1,$t1,8");
4278+ asm volatile("sll $v1,$v1,5");
4279+ asm volatile("addu $v1,$v1,$a1");
4280+ asm volatile("sb $t1,0($a2)");
4281+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4282+ asm volatile("nop");
4283+ asm volatile("nop");
4284+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4285+ asm volatile("rotr $t1,$t1,8");
4286+ asm volatile("lbu $v1,0($v0)");
4287+ asm volatile("addiu $v0,$v0,1");
4288+ asm volatile("sb $t1,0($a2)");
4289+ asm volatile("rotr $t1,$t1,8");
4290+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4291+ asm volatile("movn $v1,$t3,$t0");
4292+ asm volatile("sb $t1,0($a2)");
4293+ asm volatile("rotr $t1,$t1,8");
4294+ asm volatile("sll $v1,$v1,5");
4295+ asm volatile("addu $v1,$v1,$a1");
4296+ asm volatile("sb $t1,0($a2)");
4297+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4298+ asm volatile("nop");
4299+ asm volatile("nop");
4300+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4301+ asm volatile("rotr $t1,$t1,8");
4302+ asm volatile("lbu $v1,0($v0)");
4303+ asm volatile("addiu $v0,$v0,1");
4304+ asm volatile("sb $t1,0($a2)");
4305+ asm volatile("rotr $t1,$t1,8");
4306+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4307+ asm volatile("movn $v1,$t3,$t0");
4308+ asm volatile("sb $t1,0($a2)");
4309+ asm volatile("rotr $t1,$t1,8");
4310+ asm volatile("sll $v1,$v1,5");
4311+ asm volatile("addu $v1,$v1,$a1");
4312+ asm volatile("sb $t1,0($a2)");
4313+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4314+ asm volatile("lbu $t5,0($a3)");
4315+ asm volatile("addiu $a3,$a3,1");
4316+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4317+ asm volatile("rotr $t1,$t1,8");
4318+ asm volatile("lbu $v1,0($v0)");
4319+ asm volatile("addiu $v0,$v0,1");
4320+ asm volatile("sb $t1,0($a2)");
4321+ asm volatile("rotr $t1,$t1,8");
4322+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4323+ asm volatile("movn $v1,$t3,$t0");
4324+ asm volatile("sb $t1,0($a2)");
4325+ asm volatile("rotr $t1,$t1,8");
4326+ asm volatile("sll $v1,$v1,5");
4327+ asm volatile("addu $v1,$v1,$a1");
4328+ asm volatile("sb $t1,0($a2)");
4329+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4330+ asm volatile("sll $t5,$t5,3");
4331+ asm volatile("addu $t5,$t5,$t4");
4332+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4333+ asm volatile("rotr $t1,$t1,8");
4334+ asm volatile("lbu $v1,0($v0)");
4335+ asm volatile("addiu $v0,$v0,1");
4336+ asm volatile("sb $t1,0($a2)");
4337+ asm volatile("rotr $t1,$t1,8");
4338+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4339+ asm volatile("movn $v1,$t3,$t0");
4340+ asm volatile("sb $t1,0($a2)");
4341+ asm volatile("rotr $t1,$t1,8");
4342+ asm volatile("sll $v1,$v1,5");
4343+ asm volatile("addu $v1,$v1,$a1");
4344+ asm volatile("sb $t1,0($a2)");
4345+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4346+ asm volatile("lbu $t2,0($t5)");
4347+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
4348+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4349+ asm volatile("rotr $t1,$t1,8");
4350+ asm volatile("lbu $v1,0($v0)");
4351+ asm volatile("addiu $v0,$v0,1");
4352+ asm volatile("sb $t1,0($a2)");
4353+ asm volatile("rotr $t1,$t1,8");
4354+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4355+ asm volatile("movn $v1,$t3,$t0");
4356+ asm volatile("sb $t1,0($a2)");
4357+ asm volatile("rotr $t1,$t1,8");
4358+ asm volatile("sll $v1,$v1,5");
4359+ asm volatile("addu $v1,$v1,$a1");
4360+ asm volatile("sb $t1,0($a2)");
4361+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4362+ asm volatile("nop");
4363+ asm volatile("nop");
4364+//-------------------------------------------------------------8ドット境界
4365+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4366+ asm volatile("rotr $t1,$t1,8");
4367+ asm volatile("lbu $v1,0($v0)");
4368+ asm volatile("addiu $v0,$v0,1");
4369+ asm volatile("sb $t1,0($a2)");
4370+ asm volatile("rotr $t1,$t1,8");
4371+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4372+ asm volatile("movn $v1,$t3,$t0");
4373+ asm volatile("sb $t1,0($a2)");
4374+ asm volatile("rotr $t1,$t1,8");
4375+ asm volatile("sll $v1,$v1,5");
4376+ asm volatile("addu $v1,$v1,$a1");
4377+ asm volatile("sb $t1,0($a2)");
4378+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4379+ asm volatile("nop");
4380+ asm volatile("nop");
4381+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4382+ asm volatile("rotr $t1,$t1,8");
4383+ asm volatile("lbu $v1,0($v0)");
4384+ asm volatile("addiu $v0,$v0,1");
4385+ asm volatile("sb $t1,0($a2)");
4386+ asm volatile("rotr $t1,$t1,8");
4387+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4388+ asm volatile("movn $v1,$t3,$t0");
4389+ asm volatile("sb $t1,0($a2)");
4390+ asm volatile("rotr $t1,$t1,8");
4391+ asm volatile("sll $v1,$v1,5");
4392+ asm volatile("addu $v1,$v1,$a1");
4393+ asm volatile("sb $t1,0($a2)");
4394+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4395+ asm volatile("nop");
4396+ asm volatile("nop");
4397+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4398+ asm volatile("rotr $t1,$t1,8");
4399+ asm volatile("lbu $v1,0($v0)");
4400+ asm volatile("addiu $v0,$v0,1");
4401+ asm volatile("sb $t1,0($a2)");
4402+ asm volatile("rotr $t1,$t1,8");
4403+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4404+ asm volatile("movn $v1,$t3,$t0");
4405+ asm volatile("sb $t1,0($a2)");
4406+ asm volatile("rotr $t1,$t1,8");
4407+ asm volatile("sll $v1,$v1,5");
4408+ asm volatile("addu $v1,$v1,$a1");
4409+ asm volatile("sb $t1,0($a2)");
4410+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4411+ asm volatile("nop");
4412+ asm volatile("nop");
4413+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4414+ asm volatile("rotr $t1,$t1,8");
4415+ asm volatile("lbu $v1,0($v0)");
4416+ asm volatile("addiu $v0,$v0,1");
4417+ asm volatile("sb $t1,0($a2)");
4418+ asm volatile("rotr $t1,$t1,8");
4419+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4420+ asm volatile("movn $v1,$t3,$t0");
4421+ asm volatile("sb $t1,0($a2)");
4422+ asm volatile("rotr $t1,$t1,8");
4423+ asm volatile("sll $v1,$v1,5");
4424+ asm volatile("addu $v1,$v1,$a1");
4425+ asm volatile("sb $t1,0($a2)");
4426+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4427+ asm volatile("nop");
4428+ asm volatile("nop");
4429+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4430+ asm volatile("rotr $t1,$t1,8");
4431+ asm volatile("lbu $v1,0($v0)");
4432+ asm volatile("addiu $v0,$v0,1");
4433+ asm volatile("sb $t1,0($a2)");
4434+ asm volatile("rotr $t1,$t1,8");
4435+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4436+ asm volatile("movn $v1,$t3,$t0");
4437+ asm volatile("sb $t1,0($a2)");
4438+ asm volatile("rotr $t1,$t1,8");
4439+ asm volatile("sll $v1,$v1,5");
4440+ asm volatile("addu $v1,$v1,$a1");
4441+ asm volatile("sb $t1,0($a2)");
4442+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4443+ asm volatile("lbu $t5,0($a3)");
4444+ asm volatile("addiu $a3,$a3,1");
4445+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4446+ asm volatile("rotr $t1,$t1,8");
4447+ asm volatile("lbu $v1,0($v0)");
4448+ asm volatile("addiu $v0,$v0,1");
4449+ asm volatile("sb $t1,0($a2)");
4450+ asm volatile("rotr $t1,$t1,8");
4451+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4452+ asm volatile("movn $v1,$t3,$t0");
4453+ asm volatile("sb $t1,0($a2)");
4454+ asm volatile("rotr $t1,$t1,8");
4455+ asm volatile("sll $v1,$v1,5");
4456+ asm volatile("addu $v1,$v1,$a1");
4457+ asm volatile("sb $t1,0($a2)");
4458+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4459+ asm volatile("sll $t5,$t5,3");
4460+ asm volatile("addu $t5,$t5,$t4");
4461+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4462+ asm volatile("rotr $t1,$t1,8");
4463+ asm volatile("lbu $v1,0($v0)");
4464+ asm volatile("addiu $v0,$v0,1");
4465+ asm volatile("sb $t1,0($a2)");
4466+ asm volatile("rotr $t1,$t1,8");
4467+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4468+ asm volatile("movn $v1,$t3,$t0");
4469+ asm volatile("sb $t1,0($a2)");
4470+ asm volatile("rotr $t1,$t1,8");
4471+ asm volatile("sll $v1,$v1,5");
4472+ asm volatile("addu $v1,$v1,$a1");
4473+ asm volatile("sb $t1,0($a2)");
4474+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4475+ asm volatile("lbu $t2,0($t5)");
4476+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
4477+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4478+ asm volatile("rotr $t1,$t1,8");
4479+ asm volatile("lbu $v1,0($v0)");
4480+ asm volatile("addiu $v0,$v0,1");
4481+ asm volatile("sb $t1,0($a2)");
4482+ asm volatile("rotr $t1,$t1,8");
4483+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4484+ asm volatile("movn $v1,$t3,$t0");
4485+ asm volatile("sb $t1,0($a2)");
4486+ asm volatile("rotr $t1,$t1,8");
4487+ asm volatile("sll $v1,$v1,5");
4488+ asm volatile("addu $v1,$v1,$a1");
4489+ asm volatile("sb $t1,0($a2)");
4490+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4491+ asm volatile("nop");
4492+ asm volatile("nop");
4493+//-------------------------------------------------------------8ドット境界
4494+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4495+ asm volatile("rotr $t1,$t1,8");
4496+ asm volatile("lbu $v1,0($v0)");
4497+ asm volatile("addiu $v0,$v0,1");
4498+ asm volatile("sb $t1,0($a2)");
4499+ asm volatile("rotr $t1,$t1,8");
4500+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4501+ asm volatile("movn $v1,$t3,$t0");
4502+ asm volatile("sb $t1,0($a2)");
4503+ asm volatile("rotr $t1,$t1,8");
4504+ asm volatile("sll $v1,$v1,5");
4505+ asm volatile("addu $v1,$v1,$a1");
4506+ asm volatile("sb $t1,0($a2)");
4507+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4508+ asm volatile("nop");
4509+ asm volatile("nop");
4510+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4511+ asm volatile("rotr $t1,$t1,8");
4512+ asm volatile("lbu $v1,0($v0)");
4513+ asm volatile("addiu $v0,$v0,1");
4514+ asm volatile("sb $t1,0($a2)");
4515+ asm volatile("rotr $t1,$t1,8");
4516+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4517+ asm volatile("movn $v1,$t3,$t0");
4518+ asm volatile("sb $t1,0($a2)");
4519+ asm volatile("rotr $t1,$t1,8");
4520+ asm volatile("sll $v1,$v1,5");
4521+ asm volatile("addu $v1,$v1,$a1");
4522+ asm volatile("sb $t1,0($a2)");
4523+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4524+ asm volatile("nop");
4525+ asm volatile("nop");
4526+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4527+ asm volatile("rotr $t1,$t1,8");
4528+ asm volatile("lbu $v1,0($v0)");
4529+ asm volatile("addiu $v0,$v0,1");
4530+ asm volatile("sb $t1,0($a2)");
4531+ asm volatile("rotr $t1,$t1,8");
4532+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4533+ asm volatile("movn $v1,$t3,$t0");
4534+ asm volatile("sb $t1,0($a2)");
4535+ asm volatile("rotr $t1,$t1,8");
4536+ asm volatile("sll $v1,$v1,5");
4537+ asm volatile("addu $v1,$v1,$a1");
4538+ asm volatile("sb $t1,0($a2)");
4539+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4540+ asm volatile("nop");
4541+ asm volatile("nop");
4542+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4543+ asm volatile("rotr $t1,$t1,8");
4544+ asm volatile("lbu $v1,0($v0)");
4545+ asm volatile("addiu $v0,$v0,1");
4546+ asm volatile("sb $t1,0($a2)");
4547+ asm volatile("rotr $t1,$t1,8");
4548+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4549+ asm volatile("movn $v1,$t3,$t0");
4550+ asm volatile("sb $t1,0($a2)");
4551+ asm volatile("rotr $t1,$t1,8");
4552+ asm volatile("sll $v1,$v1,5");
4553+ asm volatile("addu $v1,$v1,$a1");
4554+ asm volatile("sb $t1,0($a2)");
4555+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4556+ asm volatile("nop");
4557+ asm volatile("nop");
4558+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4559+ asm volatile("rotr $t1,$t1,8");
4560+ asm volatile("lbu $v1,0($v0)");
4561+ asm volatile("addiu $v0,$v0,1");
4562+ asm volatile("sb $t1,0($a2)");
4563+ asm volatile("rotr $t1,$t1,8");
4564+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4565+ asm volatile("movn $v1,$t3,$t0");
4566+ asm volatile("sb $t1,0($a2)");
4567+ asm volatile("rotr $t1,$t1,8");
4568+ asm volatile("sll $v1,$v1,5");
4569+ asm volatile("addu $v1,$v1,$a1");
4570+ asm volatile("sb $t1,0($a2)");
4571+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4572+ asm volatile("lbu $t5,0($a3)");
4573+ asm volatile("addiu $a3,$a3,1");
4574+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4575+ asm volatile("rotr $t1,$t1,8");
4576+ asm volatile("lbu $v1,0($v0)");
4577+ asm volatile("addiu $v0,$v0,1");
4578+ asm volatile("sb $t1,0($a2)");
4579+ asm volatile("rotr $t1,$t1,8");
4580+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4581+ asm volatile("movn $v1,$t3,$t0");
4582+ asm volatile("sb $t1,0($a2)");
4583+ asm volatile("rotr $t1,$t1,8");
4584+ asm volatile("sll $v1,$v1,5");
4585+ asm volatile("addu $v1,$v1,$a1");
4586+ asm volatile("sb $t1,0($a2)");
4587+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4588+ asm volatile("sll $t5,$t5,3");
4589+ asm volatile("addu $t5,$t5,$t4");
4590+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4591+ asm volatile("rotr $t1,$t1,8");
4592+ asm volatile("lbu $v1,0($v0)");
4593+ asm volatile("addiu $v0,$v0,1");
4594+ asm volatile("sb $t1,0($a2)");
4595+ asm volatile("rotr $t1,$t1,8");
4596+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4597+ asm volatile("movn $v1,$t3,$t0");
4598+ asm volatile("sb $t1,0($a2)");
4599+ asm volatile("rotr $t1,$t1,8");
4600+ asm volatile("sll $v1,$v1,5");
4601+ asm volatile("addu $v1,$v1,$a1");
4602+ asm volatile("sb $t1,0($a2)");
4603+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4604+ asm volatile("lbu $t2,0($t5)");
4605+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
4606+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4607+ asm volatile("rotr $t1,$t1,8");
4608+ asm volatile("lbu $v1,0($v0)");
4609+ asm volatile("addiu $v0,$v0,1");
4610+ asm volatile("sb $t1,0($a2)");
4611+ asm volatile("rotr $t1,$t1,8");
4612+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4613+ asm volatile("movn $v1,$t3,$t0");
4614+ asm volatile("sb $t1,0($a2)");
4615+ asm volatile("rotr $t1,$t1,8");
4616+ asm volatile("sll $v1,$v1,5");
4617+ asm volatile("addu $v1,$v1,$a1");
4618+ asm volatile("sb $t1,0($a2)");
4619+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4620+ asm volatile("nop");
4621+ asm volatile("nop");
4622+//-------------------------------------------------------------8ドット境界
4623+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4624+ asm volatile("rotr $t1,$t1,8");
4625+ asm volatile("lbu $v1,0($v0)");
4626+ asm volatile("addiu $v0,$v0,1");
4627+ asm volatile("sb $t1,0($a2)");
4628+ asm volatile("rotr $t1,$t1,8");
4629+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4630+ asm volatile("movn $v1,$t3,$t0");
4631+ asm volatile("sb $t1,0($a2)");
4632+ asm volatile("rotr $t1,$t1,8");
4633+ asm volatile("sll $v1,$v1,5");
4634+ asm volatile("addu $v1,$v1,$a1");
4635+ asm volatile("sb $t1,0($a2)");
4636+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4637+ asm volatile("nop");
4638+ asm volatile("nop");
4639+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4640+ asm volatile("rotr $t1,$t1,8");
4641+ asm volatile("lbu $v1,0($v0)");
4642+ asm volatile("addiu $v0,$v0,1");
4643+ asm volatile("sb $t1,0($a2)");
4644+ asm volatile("rotr $t1,$t1,8");
4645+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4646+ asm volatile("movn $v1,$t3,$t0");
4647+ asm volatile("sb $t1,0($a2)");
4648+ asm volatile("rotr $t1,$t1,8");
4649+ asm volatile("sll $v1,$v1,5");
4650+ asm volatile("addu $v1,$v1,$a1");
4651+ asm volatile("sb $t1,0($a2)");
4652+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4653+ asm volatile("nop");
4654+ asm volatile("nop");
4655+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4656+ asm volatile("rotr $t1,$t1,8");
4657+ asm volatile("lbu $v1,0($v0)");
4658+ asm volatile("addiu $v0,$v0,1");
4659+ asm volatile("sb $t1,0($a2)");
4660+ asm volatile("rotr $t1,$t1,8");
4661+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4662+ asm volatile("movn $v1,$t3,$t0");
4663+ asm volatile("sb $t1,0($a2)");
4664+ asm volatile("rotr $t1,$t1,8");
4665+ asm volatile("sll $v1,$v1,5");
4666+ asm volatile("addu $v1,$v1,$a1");
4667+ asm volatile("sb $t1,0($a2)");
4668+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4669+ asm volatile("nop");
4670+ asm volatile("nop");
4671+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4672+ asm volatile("rotr $t1,$t1,8");
4673+ asm volatile("lbu $v1,0($v0)");
4674+ asm volatile("addiu $v0,$v0,1");
4675+ asm volatile("sb $t1,0($a2)");
4676+ asm volatile("rotr $t1,$t1,8");
4677+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4678+ asm volatile("movn $v1,$t3,$t0");
4679+ asm volatile("sb $t1,0($a2)");
4680+ asm volatile("rotr $t1,$t1,8");
4681+ asm volatile("sll $v1,$v1,5");
4682+ asm volatile("addu $v1,$v1,$a1");
4683+ asm volatile("sb $t1,0($a2)");
4684+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4685+ asm volatile("nop");
4686+ asm volatile("nop");
4687+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4688+ asm volatile("rotr $t1,$t1,8");
4689+ asm volatile("lbu $v1,0($v0)");
4690+ asm volatile("addiu $v0,$v0,1");
4691+ asm volatile("sb $t1,0($a2)");
4692+ asm volatile("rotr $t1,$t1,8");
4693+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4694+ asm volatile("movn $v1,$t3,$t0");
4695+ asm volatile("sb $t1,0($a2)");
4696+ asm volatile("rotr $t1,$t1,8");
4697+ asm volatile("sll $v1,$v1,5");
4698+ asm volatile("addu $v1,$v1,$a1");
4699+ asm volatile("sb $t1,0($a2)");
4700+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4701+ asm volatile("lbu $t5,0($a3)");
4702+ asm volatile("addiu $a3,$a3,1");
4703+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4704+ asm volatile("rotr $t1,$t1,8");
4705+ asm volatile("lbu $v1,0($v0)");
4706+ asm volatile("addiu $v0,$v0,1");
4707+ asm volatile("sb $t1,0($a2)");
4708+ asm volatile("rotr $t1,$t1,8");
4709+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4710+ asm volatile("movn $v1,$t3,$t0");
4711+ asm volatile("sb $t1,0($a2)");
4712+ asm volatile("rotr $t1,$t1,8");
4713+ asm volatile("sll $v1,$v1,5");
4714+ asm volatile("addu $v1,$v1,$a1");
4715+ asm volatile("sb $t1,0($a2)");
4716+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4717+ asm volatile("sll $t5,$t5,3");
4718+ asm volatile("addu $t5,$t5,$t4");
4719+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4720+ asm volatile("rotr $t1,$t1,8");
4721+ asm volatile("lbu $v1,0($v0)");
4722+ asm volatile("addiu $v0,$v0,1");
4723+ asm volatile("sb $t1,0($a2)");
4724+ asm volatile("rotr $t1,$t1,8");
4725+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4726+ asm volatile("movn $v1,$t3,$t0");
4727+ asm volatile("sb $t1,0($a2)");
4728+ asm volatile("rotr $t1,$t1,8");
4729+ asm volatile("sll $v1,$v1,5");
4730+ asm volatile("addu $v1,$v1,$a1");
4731+ asm volatile("sb $t1,0($a2)");
4732+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4733+ asm volatile("lbu $t2,0($t5)");
4734+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
4735+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4736+ asm volatile("rotr $t1,$t1,8");
4737+ asm volatile("lbu $v1,0($v0)");
4738+ asm volatile("addiu $v0,$v0,1");
4739+ asm volatile("sb $t1,0($a2)");
4740+ asm volatile("rotr $t1,$t1,8");
4741+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4742+ asm volatile("movn $v1,$t3,$t0");
4743+ asm volatile("sb $t1,0($a2)");
4744+ asm volatile("rotr $t1,$t1,8");
4745+ asm volatile("sll $v1,$v1,5");
4746+ asm volatile("addu $v1,$v1,$a1");
4747+ asm volatile("sb $t1,0($a2)");
4748+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4749+ asm volatile("nop");
4750+ asm volatile("nop");
4751+//-------------------------------------------------------------8ドット境界
4752+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4753+ asm volatile("rotr $t1,$t1,8");
4754+ asm volatile("lbu $v1,0($v0)");
4755+ asm volatile("addiu $v0,$v0,1");
4756+ asm volatile("sb $t1,0($a2)");
4757+ asm volatile("rotr $t1,$t1,8");
4758+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4759+ asm volatile("movn $v1,$t3,$t0");
4760+ asm volatile("sb $t1,0($a2)");
4761+ asm volatile("rotr $t1,$t1,8");
4762+ asm volatile("sll $v1,$v1,5");
4763+ asm volatile("addu $v1,$v1,$a1");
4764+ asm volatile("sb $t1,0($a2)");
4765+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4766+ asm volatile("nop");
4767+ asm volatile("nop");
4768+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4769+ asm volatile("rotr $t1,$t1,8");
4770+ asm volatile("lbu $v1,0($v0)");
4771+ asm volatile("addiu $v0,$v0,1");
4772+ asm volatile("sb $t1,0($a2)");
4773+ asm volatile("rotr $t1,$t1,8");
4774+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4775+ asm volatile("movn $v1,$t3,$t0");
4776+ asm volatile("sb $t1,0($a2)");
4777+ asm volatile("rotr $t1,$t1,8");
4778+ asm volatile("sll $v1,$v1,5");
4779+ asm volatile("addu $v1,$v1,$a1");
4780+ asm volatile("sb $t1,0($a2)");
4781+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4782+ asm volatile("nop");
4783+ asm volatile("nop");
4784+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4785+ asm volatile("rotr $t1,$t1,8");
4786+ asm volatile("lbu $v1,0($v0)");
4787+ asm volatile("addiu $v0,$v0,1");
4788+ asm volatile("sb $t1,0($a2)");
4789+ asm volatile("rotr $t1,$t1,8");
4790+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4791+ asm volatile("movn $v1,$t3,$t0");
4792+ asm volatile("sb $t1,0($a2)");
4793+ asm volatile("rotr $t1,$t1,8");
4794+ asm volatile("sll $v1,$v1,5");
4795+ asm volatile("addu $v1,$v1,$a1");
4796+ asm volatile("sb $t1,0($a2)");
4797+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4798+ asm volatile("nop");
4799+ asm volatile("nop");
4800+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4801+ asm volatile("rotr $t1,$t1,8");
4802+ asm volatile("lbu $v1,0($v0)");
4803+ asm volatile("addiu $v0,$v0,1");
4804+ asm volatile("sb $t1,0($a2)");
4805+ asm volatile("rotr $t1,$t1,8");
4806+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4807+ asm volatile("movn $v1,$t3,$t0");
4808+ asm volatile("sb $t1,0($a2)");
4809+ asm volatile("rotr $t1,$t1,8");
4810+ asm volatile("sll $v1,$v1,5");
4811+ asm volatile("addu $v1,$v1,$a1");
4812+ asm volatile("sb $t1,0($a2)");
4813+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4814+ asm volatile("nop");
4815+ asm volatile("nop");
4816+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4817+ asm volatile("rotr $t1,$t1,8");
4818+ asm volatile("lbu $v1,0($v0)");
4819+ asm volatile("addiu $v0,$v0,1");
4820+ asm volatile("sb $t1,0($a2)");
4821+ asm volatile("rotr $t1,$t1,8");
4822+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4823+ asm volatile("movn $v1,$t3,$t0");
4824+ asm volatile("sb $t1,0($a2)");
4825+ asm volatile("rotr $t1,$t1,8");
4826+ asm volatile("sll $v1,$v1,5");
4827+ asm volatile("addu $v1,$v1,$a1");
4828+ asm volatile("sb $t1,0($a2)");
4829+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4830+ asm volatile("lbu $t5,0($a3)");
4831+ asm volatile("addiu $a3,$a3,1");
4832+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4833+ asm volatile("rotr $t1,$t1,8");
4834+ asm volatile("lbu $v1,0($v0)");
4835+ asm volatile("addiu $v0,$v0,1");
4836+ asm volatile("sb $t1,0($a2)");
4837+ asm volatile("rotr $t1,$t1,8");
4838+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4839+ asm volatile("movn $v1,$t3,$t0");
4840+ asm volatile("sb $t1,0($a2)");
4841+ asm volatile("rotr $t1,$t1,8");
4842+ asm volatile("sll $v1,$v1,5");
4843+ asm volatile("addu $v1,$v1,$a1");
4844+ asm volatile("sb $t1,0($a2)");
4845+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4846+ asm volatile("sll $t5,$t5,3");
4847+ asm volatile("addu $t5,$t5,$t4");
4848+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4849+ asm volatile("rotr $t1,$t1,8");
4850+ asm volatile("lbu $v1,0($v0)");
4851+ asm volatile("addiu $v0,$v0,1");
4852+ asm volatile("sb $t1,0($a2)");
4853+ asm volatile("rotr $t1,$t1,8");
4854+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4855+ asm volatile("movn $v1,$t3,$t0");
4856+ asm volatile("sb $t1,0($a2)");
4857+ asm volatile("rotr $t1,$t1,8");
4858+ asm volatile("sll $v1,$v1,5");
4859+ asm volatile("addu $v1,$v1,$a1");
4860+ asm volatile("sb $t1,0($a2)");
4861+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4862+ asm volatile("lbu $t2,0($t5)");
4863+ asm volatile("lbu $t3,%0($a3)"::"n"(ATTROFFSET-1));
4864+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4865+ asm volatile("rotr $t1,$t1,8");
4866+ asm volatile("lbu $v1,0($v0)");
4867+ asm volatile("addiu $v0,$v0,1");
4868+ asm volatile("sb $t1,0($a2)");
4869+ asm volatile("rotr $t1,$t1,8");
4870+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4871+ asm volatile("movn $v1,$t3,$t0");
4872+ asm volatile("sb $t1,0($a2)");
4873+ asm volatile("rotr $t1,$t1,8");
4874+ asm volatile("sll $v1,$v1,5");
4875+ asm volatile("addu $v1,$v1,$a1");
4876+ asm volatile("sb $t1,0($a2)");
4877+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4878+ asm volatile("nop");
4879+ asm volatile("nop");
4880+//-------------------------------------------------------------8ドット境界
4881+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4882+ asm volatile("rotr $t1,$t1,8");
4883+ asm volatile("lbu $v1,0($v0)");
4884+ asm volatile("addiu $v0,$v0,1");
4885+ asm volatile("sb $t1,0($a2)");
4886+ asm volatile("rotr $t1,$t1,8");
4887+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4888+ asm volatile("movn $v1,$t3,$t0");
4889+ asm volatile("sb $t1,0($a2)");
4890+ asm volatile("rotr $t1,$t1,8");
4891+ asm volatile("sll $v1,$v1,5");
4892+ asm volatile("addu $v1,$v1,$a1");
4893+ asm volatile("sb $t1,0($a2)");
4894+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4895+ asm volatile("nop");
4896+ asm volatile("nop");
4897+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4898+ asm volatile("rotr $t1,$t1,8");
4899+ asm volatile("lbu $v1,0($v0)");
4900+ asm volatile("addiu $v0,$v0,1");
4901+ asm volatile("sb $t1,0($a2)");
4902+ asm volatile("rotr $t1,$t1,8");
4903+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4904+ asm volatile("movn $v1,$t3,$t0");
4905+ asm volatile("sb $t1,0($a2)");
4906+ asm volatile("rotr $t1,$t1,8");
4907+ asm volatile("sll $v1,$v1,5");
4908+ asm volatile("addu $v1,$v1,$a1");
4909+ asm volatile("sb $t1,0($a2)");
4910+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4911+ asm volatile("nop");
4912+ asm volatile("nop");
4913+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4914+ asm volatile("rotr $t1,$t1,8");
4915+ asm volatile("lbu $v1,0($v0)");
4916+ asm volatile("addiu $v0,$v0,1");
4917+ asm volatile("sb $t1,0($a2)");
4918+ asm volatile("rotr $t1,$t1,8");
4919+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4920+ asm volatile("movn $v1,$t3,$t0");
4921+ asm volatile("sb $t1,0($a2)");
4922+ asm volatile("rotr $t1,$t1,8");
4923+ asm volatile("sll $v1,$v1,5");
4924+ asm volatile("addu $v1,$v1,$a1");
4925+ asm volatile("sb $t1,0($a2)");
4926+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4927+ asm volatile("nop");
4928+ asm volatile("nop");
4929+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4930+ asm volatile("rotr $t1,$t1,8");
4931+ asm volatile("lbu $v1,0($v0)");
4932+ asm volatile("addiu $v0,$v0,1");
4933+ asm volatile("sb $t1,0($a2)");
4934+ asm volatile("rotr $t1,$t1,8");
4935+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4936+ asm volatile("movn $v1,$t3,$t0");
4937+ asm volatile("sb $t1,0($a2)");
4938+ asm volatile("rotr $t1,$t1,8");
4939+ asm volatile("sll $v1,$v1,5");
4940+ asm volatile("addu $v1,$v1,$a1");
4941+ asm volatile("sb $t1,0($a2)");
4942+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4943+ asm volatile("nop");
4944+ asm volatile("nop");
4945+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4946+ asm volatile("rotr $t1,$t1,8");
4947+ asm volatile("lbu $v1,0($v0)");
4948+ asm volatile("addiu $v0,$v0,1");
4949+ asm volatile("sb $t1,0($a2)");
4950+ asm volatile("rotr $t1,$t1,8");
4951+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4952+ asm volatile("movn $v1,$t3,$t0");
4953+ asm volatile("sb $t1,0($a2)");
4954+ asm volatile("rotr $t1,$t1,8");
4955+ asm volatile("sll $v1,$v1,5");
4956+ asm volatile("addu $v1,$v1,$a1");
4957+ asm volatile("sb $t1,0($a2)");
4958+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4959+ asm volatile("nop");
4960+ asm volatile("nop");
4961+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4962+ asm volatile("rotr $t1,$t1,8");
4963+ asm volatile("lbu $v1,0($v0)");
4964+ asm volatile("addiu $v0,$v0,1");
4965+ asm volatile("sb $t1,0($a2)");
4966+ asm volatile("rotr $t1,$t1,8");
4967+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4968+ asm volatile("movn $v1,$t3,$t0");
4969+ asm volatile("sb $t1,0($a2)");
4970+ asm volatile("rotr $t1,$t1,8");
4971+ asm volatile("sll $v1,$v1,5");
4972+ asm volatile("addu $v1,$v1,$a1");
4973+ asm volatile("sb $t1,0($a2)");
4974+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4975+ asm volatile("nop");
4976+ asm volatile("nop");
4977+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4978+ asm volatile("rotr $t1,$t1,8");
4979+ asm volatile("lbu $v1,0($v0)");
4980+ asm volatile("addiu $v0,$v0,1");
4981+ asm volatile("sb $t1,0($a2)");
4982+ asm volatile("rotr $t1,$t1,8");
4983+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
4984+ asm volatile("movn $v1,$t3,$t0");
4985+ asm volatile("sb $t1,0($a2)");
4986+ asm volatile("rotr $t1,$t1,8");
4987+ asm volatile("sll $v1,$v1,5");
4988+ asm volatile("addu $v1,$v1,$a1");
4989+ asm volatile("sb $t1,0($a2)");
4990+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
4991+ asm volatile("nop");
4992+ asm volatile("nop");
4993+ asm volatile("sb $t1,0($a2)"); //ドット最初の出力
4994+ asm volatile("rotr $t1,$t1,8");
4995+ asm volatile("nop");
4996+ asm volatile("nop");
4997+ asm volatile("sb $t1,0($a2)");
4998+ asm volatile("rotr $t1,$t1,8");
4999+ asm volatile("nop");
5000+ asm volatile("nop");
5001+ asm volatile("sb $t1,0($a2)");
5002+ asm volatile("rotr $t1,$t1,8");
5003+ asm volatile("nop");
5004+ asm volatile("nop");
5005+ asm volatile("sb $t1,0($a2)");
5006+//----------------------------------------------------------------------
5007+
5008+ nop();nop();
5009+
5010+ // LATE=C_BLK;
5011+ asm volatile("addiu $t1,$zero,%0"::"n"(C_BLK));
5012+ asm volatile("sb $t1,0($a2)");
5013+
5014+asm volatile("label3:");
5015+ mOC1ClearIntFlag(); // OC1割り込みフラグクリア
5016+}
5017+/*********************
5018+* OC2割り込み処理関数 テキストモード 水平同期立ち上がり--カラーバースト--映像信号
5019+*********************/
5020+void __ISR(10, ipl5) OC2Handler(void)
5021+{
5022+ asm volatile("#":::"v0");
5023+ asm volatile("#":::"v1");
5024+ asm volatile("#":::"a0");
5025+ asm volatile("#":::"a1");
5026+ asm volatile("#":::"a2");
5027+ asm volatile("#":::"a3");
5028+ asm volatile("#":::"t0");
5029+ asm volatile("#":::"t1");
5030+ asm volatile("#":::"t2");
5031+ asm volatile("#":::"t3");
5032+ asm volatile("#":::"t4");
5033+ asm volatile("#":::"t5");
5034+
5035+ //TMR2の値でタイミングのずれを補正
5036+ asm volatile("la $v0,%0"::"i"(&TMR2));
5037+ asm volatile("lhu $a0,0($v0)");
5038+ asm volatile("addiu $a0,$a0,%0"::"n"(-(H_SYNC+23)));
5039+ asm volatile("bltz $a0,label6_2");
5040+ asm volatile("addiu $v0,$a0,-18");
5041+ asm volatile("bgtz $v0,label6_2");
5042+ asm volatile("sll $a0,$a0,2");
5043+ asm volatile("la $v0,label6");
5044+ asm volatile("addu $a0,$v0");
5045+ asm volatile("jr $a0");
5046+
5047+asm volatile("label6:");
5048+ nop10();nop10();nop();nop();
5049+
5050+asm volatile("label6_2:");
5051+ // 同期信号のリセット
5052+ // LATE=C_BLK;
5053+ asm volatile("addiu $v1,$zero,%0"::"n"(C_BLK));
5054+ asm volatile("la $v0,%0"::"i"(&LATE));
5055+ asm volatile("sb $v1,0($v0)"); // 同期信号リセット。水平同期立ち下がりから449サイクル
5056+/*
5057+ asm volatile("la $v0,%0"::"i"(&TMR2));
5058+ asm volatile("lhu $v1,0($v0)");
5059+ asm volatile("addiu $v1,$v1,-520");
5060+ asm volatile("bgtz $v1,label3");
5061+
5062+ */
5063+ // 54クロックウェイト
5064+ nop10();nop10();nop10();nop10();nop10();nop();nop();nop();nop();
5065+
5066+ // カラーバースト信号 9周期出力
5067+ asm volatile("la $v0,%0"::"i"(&LATE));
5068+ asm volatile("addiu $v1,$zero,%0"::"n"(C_BST1));
5069+
5070+ asm volatile("sb $v1,0($v0)"); // カラーバースト開始。水平同期立ち下がりから507サイクル
5071+ asm volatile("addiu $v1,$zero,%0"::"n"(C_BST2));nop();nop();
5072+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST3));nop();nop();
5073+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST4));nop();nop();
5074+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST5));nop();nop();
5075+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST6));nop();nop();
5076+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST7));nop();nop();
5077+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST8));nop();nop();
5078+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST9));nop();nop();
5079+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST10));nop();nop();
5080+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST11));nop();nop();
5081+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST12));nop();nop();
5082+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST13));nop();nop();
5083+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST14));nop();nop();
5084+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST15));nop();nop();
5085+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST16));nop();nop();
5086+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST17));nop();nop();
5087+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST18));nop();nop();
5088+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST19));nop();nop();
5089+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST20));nop();nop();
5090+
5091+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST1));nop();nop();
5092+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST2));nop();nop();
5093+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST3));nop();nop();
5094+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST4));nop();nop();
5095+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST5));nop();nop();
5096+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST6));nop();nop();
5097+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST7));nop();nop();
5098+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST8));nop();nop();
5099+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST9));nop();nop();
5100+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST10));nop();nop();
5101+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST11));nop();nop();
5102+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST12));nop();nop();
5103+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST13));nop();nop();
5104+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST14));nop();nop();
5105+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST15));nop();nop();
5106+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST16));nop();nop();
5107+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST17));nop();nop();
5108+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST18));nop();nop();
5109+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST19));nop();nop();
5110+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST20));nop();nop();
5111+
5112+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST1));nop();nop();
5113+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST2));nop();nop();
5114+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST3));nop();nop();
5115+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST4));nop();nop();
5116+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST5));nop();nop();
5117+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST6));nop();nop();
5118+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST7));nop();nop();
5119+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST8));nop();nop();
5120+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST9));nop();nop();
5121+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST10));nop();nop();
5122+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST11));nop();nop();
5123+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST12));nop();nop();
5124+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST13));nop();nop();
5125+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST14));nop();nop();
5126+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST15));nop();nop();
5127+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST16));nop();nop();
5128+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST17));nop();nop();
5129+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST18));nop();nop();
5130+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST19));nop();nop();
5131+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST20));nop();nop();
5132+
5133+ asm volatile("sb $v1,0($v0)");asm volatile("addiu $v1,$zero,%0"::"n"(C_BST1));nop();nop();
5134+ asm volatile("sb $v1,0($v0)"); // カラーバースト終了。水平同期立ち下がりから747サイクル
5135+
5136+
5137+ // if(drawing==0) goto label5; //映像期間でなければ終了
5138+ asm volatile("la $v0,%0"::"i"(&drawing));
5139+ asm volatile("lb $t1,0($v0)");
5140+ asm volatile("beqz $t1,label5");
5141+ nop();
5142+
5143+ // 371クロックウェイト
5144+ nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();
5145+ nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();
5146+ nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop10();
5147+ nop10();nop10();nop10();nop10();nop10();nop10();nop10();nop();
5148+
5149+// 映像信号出力
5150+ // a1=ClTable;
5151+ asm volatile("la $a1,%0"::"i"(ClTable));
5152+
5153+ // a2=&LATE;
5154+ asm volatile("la $a2,%0"::"i"(&LATE));
5155+
5156+ // a0=TVRAMp;
5157+ asm volatile("la $t0,%0"::"i"(&TVRAMp));
5158+ asm volatile("lw $a0,0($t0)");
5159+
5160+ // t4=fontp;
5161+ asm volatile("la $t0,%0"::"i"(&fontp));
5162+ asm volatile("lw $t4,0($t0)");
5163+
5164+ // a3=BGClTable
5165+ asm volatile("la $a3,%0"::"i"(BGClTable));
5166+
5167+ // t2=*(fontp+(*TVRAMp*8));
5168+ // t3=&ClTable[*(TVRAMp+ATTROFFSET)*32];
5169+ asm volatile("lbu $t5,0($a0)");
5170+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
5171+ asm volatile("sll $t5,$t5,3");
5172+ asm volatile("addu $t5,$t5,$t4");
5173+ asm volatile("lbu $t2,0($t5)");
5174+ asm volatile("sll $t3,$t3,5");
5175+ asm volatile("addu $t3,$t3,$a1");
5176+
5177+ asm volatile("addu $v1,$zero,$a3");
5178+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5179+ asm volatile("movn $v1,$t3,$t0");
5180+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5181+ asm volatile("addiu $a0,$a0,1");
5182+
5183+ asm volatile("sb $t1,0($a2)"); //最初の映像信号出力。水平同期立下りから1147サイクル
5184+ asm volatile("rotr $t1,$t1,8");
5185+ asm volatile("addu $v1,$zero,$a3");
5186+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5187+ asm volatile("sb $t1,0($a2)");
5188+ asm volatile("rotr $t1,$t1,8");
5189+ asm volatile("movn $v1,$t3,$t0");
5190+asm volatile("nop");
5191+ asm volatile("sb $t1,0($a2)");
5192+ asm volatile("rotr $t1,$t1,8");
5193+asm volatile("nop");
5194+asm volatile("nop");
5195+ asm volatile("sb $t1,0($a2)");
5196+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5197+asm volatile("nop");
5198+asm volatile("nop");
5199+ asm volatile("sb $t1,0($a2)");
5200+ asm volatile("rotr $t1,$t1,8");
5201+ asm volatile("addu $v1,$zero,$a3");
5202+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5203+ asm volatile("sb $t1,0($a2)");
5204+ asm volatile("rotr $t1,$t1,8");
5205+ asm volatile("movn $v1,$t3,$t0");
5206+asm volatile("nop");
5207+ asm volatile("sb $t1,0($a2)");
5208+ asm volatile("rotr $t1,$t1,8");
5209+asm volatile("nop");
5210+asm volatile("nop");
5211+ asm volatile("sb $t1,0($a2)");
5212+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5213+asm volatile("nop");
5214+asm volatile("nop");
5215+ asm volatile("sb $t1,0($a2)");
5216+ asm volatile("rotr $t1,$t1,8");
5217+ asm volatile("addu $v1,$zero,$a3");
5218+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5219+ asm volatile("sb $t1,0($a2)");
5220+ asm volatile("rotr $t1,$t1,8");
5221+ asm volatile("movn $v1,$t3,$t0");
5222+asm volatile("nop");
5223+ asm volatile("sb $t1,0($a2)");
5224+ asm volatile("rotr $t1,$t1,8");
5225+asm volatile("nop");
5226+asm volatile("nop");
5227+ asm volatile("sb $t1,0($a2)");
5228+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5229+asm volatile("nop");
5230+asm volatile("nop");
5231+ asm volatile("sb $t1,0($a2)");
5232+ asm volatile("rotr $t1,$t1,8");
5233+ asm volatile("addu $v1,$zero,$a3");
5234+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5235+ asm volatile("sb $t1,0($a2)");
5236+ asm volatile("rotr $t1,$t1,8");
5237+ asm volatile("movn $v1,$t3,$t0");
5238+asm volatile("nop");
5239+ asm volatile("sb $t1,0($a2)");
5240+ asm volatile("rotr $t1,$t1,8");
5241+asm volatile("nop");
5242+asm volatile("nop");
5243+ asm volatile("sb $t1,0($a2)");
5244+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5245+asm volatile("nop");
5246+asm volatile("nop");
5247+ asm volatile("sb $t1,0($a2)");
5248+ asm volatile("rotr $t1,$t1,8");
5249+ asm volatile("addu $v1,$zero,$a3");
5250+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5251+ asm volatile("sb $t1,0($a2)");
5252+ asm volatile("rotr $t1,$t1,8");
5253+ asm volatile("movn $v1,$t3,$t0");
5254+asm volatile("nop");
5255+ asm volatile("sb $t1,0($a2)");
5256+ asm volatile("rotr $t1,$t1,8");
5257+asm volatile("nop");
5258+asm volatile("nop");
5259+ asm volatile("sb $t1,0($a2)");
5260+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5261+asm volatile("nop");
5262+asm volatile("nop");
5263+ asm volatile("sb $t1,0($a2)");
5264+ asm volatile("rotr $t1,$t1,8");
5265+ asm volatile("addu $v1,$zero,$a3");
5266+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5267+ asm volatile("sb $t1,0($a2)");
5268+ asm volatile("rotr $t1,$t1,8");
5269+ asm volatile("movn $v1,$t3,$t0");
5270+asm volatile("nop");
5271+ asm volatile("sb $t1,0($a2)");
5272+ asm volatile("rotr $t1,$t1,8");
5273+asm volatile("nop");
5274+ asm volatile("lbu $t5,0($a0)");
5275+ asm volatile("sb $t1,0($a2)");
5276+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5277+ asm volatile("sll $t5,$t5,3");
5278+ asm volatile("addu $t5,$t5,$t4");
5279+ asm volatile("sb $t1,0($a2)");
5280+ asm volatile("rotr $t1,$t1,8");
5281+ asm volatile("addu $v1,$zero,$a3");
5282+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5283+ asm volatile("sb $t1,0($a2)");
5284+ asm volatile("rotr $t1,$t1,8");
5285+ asm volatile("movn $v1,$t3,$t0");
5286+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
5287+ asm volatile("sb $t1,0($a2)");
5288+ asm volatile("rotr $t1,$t1,8");
5289+ asm volatile("lbu $t2,0($t5)");
5290+asm volatile("nop");
5291+ asm volatile("sb $t1,0($a2)");
5292+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5293+ asm volatile("sll $t3,$t3,5");
5294+ asm volatile("addu $t3,$t3,$a1");
5295+ asm volatile("sb $t1,0($a2)");
5296+ asm volatile("rotr $t1,$t1,8");
5297+ asm volatile("addu $v1,$zero,$a3");
5298+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5299+ asm volatile("sb $t1,0($a2)");
5300+ asm volatile("rotr $t1,$t1,8");
5301+ asm volatile("movn $v1,$t3,$t0");
5302+ asm volatile("addiu $a0,$a0,1");
5303+ asm volatile("sb $t1,0($a2)");
5304+ asm volatile("rotr $t1,$t1,8");
5305+asm volatile("nop");
5306+asm volatile("nop");
5307+ asm volatile("sb $t1,0($a2)");
5308+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5309+asm volatile("nop");
5310+asm volatile("nop");
5311+ asm volatile("sb $t1,0($a2)");
5312+ asm volatile("rotr $t1,$t1,8");
5313+ asm volatile("addu $v1,$zero,$a3");
5314+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5315+ asm volatile("sb $t1,0($a2)");
5316+ asm volatile("rotr $t1,$t1,8");
5317+ asm volatile("movn $v1,$t3,$t0");
5318+asm volatile("nop");
5319+ asm volatile("sb $t1,0($a2)");
5320+ asm volatile("rotr $t1,$t1,8");
5321+asm volatile("nop");
5322+asm volatile("nop");
5323+ asm volatile("sb $t1,0($a2)");
5324+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5325+asm volatile("nop");
5326+asm volatile("nop");
5327+ asm volatile("sb $t1,0($a2)");
5328+ asm volatile("rotr $t1,$t1,8");
5329+ asm volatile("addu $v1,$zero,$a3");
5330+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5331+ asm volatile("sb $t1,0($a2)");
5332+ asm volatile("rotr $t1,$t1,8");
5333+ asm volatile("movn $v1,$t3,$t0");
5334+asm volatile("nop");
5335+ asm volatile("sb $t1,0($a2)");
5336+ asm volatile("rotr $t1,$t1,8");
5337+asm volatile("nop");
5338+asm volatile("nop");
5339+ asm volatile("sb $t1,0($a2)");
5340+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5341+asm volatile("nop");
5342+asm volatile("nop");
5343+ asm volatile("sb $t1,0($a2)");
5344+ asm volatile("rotr $t1,$t1,8");
5345+ asm volatile("addu $v1,$zero,$a3");
5346+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5347+ asm volatile("sb $t1,0($a2)");
5348+ asm volatile("rotr $t1,$t1,8");
5349+ asm volatile("movn $v1,$t3,$t0");
5350+asm volatile("nop");
5351+ asm volatile("sb $t1,0($a2)");
5352+ asm volatile("rotr $t1,$t1,8");
5353+asm volatile("nop");
5354+asm volatile("nop");
5355+ asm volatile("sb $t1,0($a2)");
5356+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5357+asm volatile("nop");
5358+asm volatile("nop");
5359+ asm volatile("sb $t1,0($a2)");
5360+ asm volatile("rotr $t1,$t1,8");
5361+ asm volatile("addu $v1,$zero,$a3");
5362+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5363+ asm volatile("sb $t1,0($a2)");
5364+ asm volatile("rotr $t1,$t1,8");
5365+ asm volatile("movn $v1,$t3,$t0");
5366+asm volatile("nop");
5367+ asm volatile("sb $t1,0($a2)");
5368+ asm volatile("rotr $t1,$t1,8");
5369+asm volatile("nop");
5370+asm volatile("nop");
5371+ asm volatile("sb $t1,0($a2)");
5372+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5373+asm volatile("nop");
5374+asm volatile("nop");
5375+ asm volatile("sb $t1,0($a2)");
5376+ asm volatile("rotr $t1,$t1,8");
5377+ asm volatile("addu $v1,$zero,$a3");
5378+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5379+ asm volatile("sb $t1,0($a2)");
5380+ asm volatile("rotr $t1,$t1,8");
5381+ asm volatile("movn $v1,$t3,$t0");
5382+asm volatile("nop");
5383+ asm volatile("sb $t1,0($a2)");
5384+ asm volatile("rotr $t1,$t1,8");
5385+asm volatile("nop");
5386+asm volatile("nop");
5387+ asm volatile("sb $t1,0($a2)");
5388+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5389+asm volatile("nop");
5390+asm volatile("nop");
5391+ asm volatile("sb $t1,0($a2)");
5392+ asm volatile("rotr $t1,$t1,8");
5393+ asm volatile("addu $v1,$zero,$a3");
5394+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5395+ asm volatile("sb $t1,0($a2)");
5396+ asm volatile("rotr $t1,$t1,8");
5397+ asm volatile("movn $v1,$t3,$t0");
5398+asm volatile("nop");
5399+ asm volatile("sb $t1,0($a2)");
5400+ asm volatile("rotr $t1,$t1,8");
5401+asm volatile("nop");
5402+ asm volatile("lbu $t5,0($a0)");
5403+ asm volatile("sb $t1,0($a2)");
5404+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5405+ asm volatile("sll $t5,$t5,3");
5406+ asm volatile("addu $t5,$t5,$t4");
5407+ asm volatile("sb $t1,0($a2)");
5408+ asm volatile("rotr $t1,$t1,8");
5409+ asm volatile("addu $v1,$zero,$a3");
5410+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5411+ asm volatile("sb $t1,0($a2)");
5412+ asm volatile("rotr $t1,$t1,8");
5413+ asm volatile("movn $v1,$t3,$t0");
5414+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
5415+ asm volatile("sb $t1,0($a2)");
5416+ asm volatile("rotr $t1,$t1,8");
5417+ asm volatile("lbu $t2,0($t5)");
5418+asm volatile("nop");
5419+ asm volatile("sb $t1,0($a2)");
5420+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5421+ asm volatile("sll $t3,$t3,5");
5422+ asm volatile("addu $t3,$t3,$a1");
5423+ asm volatile("sb $t1,0($a2)");
5424+ asm volatile("rotr $t1,$t1,8");
5425+ asm volatile("addu $v1,$zero,$a3");
5426+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5427+ asm volatile("sb $t1,0($a2)");
5428+ asm volatile("rotr $t1,$t1,8");
5429+ asm volatile("movn $v1,$t3,$t0");
5430+ asm volatile("addiu $a0,$a0,1");
5431+ asm volatile("sb $t1,0($a2)");
5432+ asm volatile("rotr $t1,$t1,8");
5433+asm volatile("nop");
5434+asm volatile("nop");
5435+ asm volatile("sb $t1,0($a2)");
5436+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5437+asm volatile("nop");
5438+asm volatile("nop");
5439+ asm volatile("sb $t1,0($a2)");
5440+ asm volatile("rotr $t1,$t1,8");
5441+ asm volatile("addu $v1,$zero,$a3");
5442+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5443+ asm volatile("sb $t1,0($a2)");
5444+ asm volatile("rotr $t1,$t1,8");
5445+ asm volatile("movn $v1,$t3,$t0");
5446+asm volatile("nop");
5447+ asm volatile("sb $t1,0($a2)");
5448+ asm volatile("rotr $t1,$t1,8");
5449+asm volatile("nop");
5450+asm volatile("nop");
5451+ asm volatile("sb $t1,0($a2)");
5452+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5453+asm volatile("nop");
5454+asm volatile("nop");
5455+ asm volatile("sb $t1,0($a2)");
5456+ asm volatile("rotr $t1,$t1,8");
5457+ asm volatile("addu $v1,$zero,$a3");
5458+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5459+ asm volatile("sb $t1,0($a2)");
5460+ asm volatile("rotr $t1,$t1,8");
5461+ asm volatile("movn $v1,$t3,$t0");
5462+asm volatile("nop");
5463+ asm volatile("sb $t1,0($a2)");
5464+ asm volatile("rotr $t1,$t1,8");
5465+asm volatile("nop");
5466+asm volatile("nop");
5467+ asm volatile("sb $t1,0($a2)");
5468+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5469+asm volatile("nop");
5470+asm volatile("nop");
5471+ asm volatile("sb $t1,0($a2)");
5472+ asm volatile("rotr $t1,$t1,8");
5473+ asm volatile("addu $v1,$zero,$a3");
5474+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5475+ asm volatile("sb $t1,0($a2)");
5476+ asm volatile("rotr $t1,$t1,8");
5477+ asm volatile("movn $v1,$t3,$t0");
5478+asm volatile("nop");
5479+ asm volatile("sb $t1,0($a2)");
5480+ asm volatile("rotr $t1,$t1,8");
5481+asm volatile("nop");
5482+asm volatile("nop");
5483+ asm volatile("sb $t1,0($a2)");
5484+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5485+asm volatile("nop");
5486+asm volatile("nop");
5487+ asm volatile("sb $t1,0($a2)");
5488+ asm volatile("rotr $t1,$t1,8");
5489+ asm volatile("addu $v1,$zero,$a3");
5490+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5491+ asm volatile("sb $t1,0($a2)");
5492+ asm volatile("rotr $t1,$t1,8");
5493+ asm volatile("movn $v1,$t3,$t0");
5494+asm volatile("nop");
5495+ asm volatile("sb $t1,0($a2)");
5496+ asm volatile("rotr $t1,$t1,8");
5497+asm volatile("nop");
5498+asm volatile("nop");
5499+ asm volatile("sb $t1,0($a2)");
5500+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5501+asm volatile("nop");
5502+asm volatile("nop");
5503+ asm volatile("sb $t1,0($a2)");
5504+ asm volatile("rotr $t1,$t1,8");
5505+ asm volatile("addu $v1,$zero,$a3");
5506+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5507+ asm volatile("sb $t1,0($a2)");
5508+ asm volatile("rotr $t1,$t1,8");
5509+ asm volatile("movn $v1,$t3,$t0");
5510+asm volatile("nop");
5511+ asm volatile("sb $t1,0($a2)");
5512+ asm volatile("rotr $t1,$t1,8");
5513+asm volatile("nop");
5514+asm volatile("nop");
5515+ asm volatile("sb $t1,0($a2)");
5516+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5517+asm volatile("nop");
5518+asm volatile("nop");
5519+ asm volatile("sb $t1,0($a2)");
5520+ asm volatile("rotr $t1,$t1,8");
5521+ asm volatile("addu $v1,$zero,$a3");
5522+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5523+ asm volatile("sb $t1,0($a2)");
5524+ asm volatile("rotr $t1,$t1,8");
5525+ asm volatile("movn $v1,$t3,$t0");
5526+asm volatile("nop");
5527+ asm volatile("sb $t1,0($a2)");
5528+ asm volatile("rotr $t1,$t1,8");
5529+asm volatile("nop");
5530+ asm volatile("lbu $t5,0($a0)");
5531+ asm volatile("sb $t1,0($a2)");
5532+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5533+ asm volatile("sll $t5,$t5,3");
5534+ asm volatile("addu $t5,$t5,$t4");
5535+ asm volatile("sb $t1,0($a2)");
5536+ asm volatile("rotr $t1,$t1,8");
5537+ asm volatile("addu $v1,$zero,$a3");
5538+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5539+ asm volatile("sb $t1,0($a2)");
5540+ asm volatile("rotr $t1,$t1,8");
5541+ asm volatile("movn $v1,$t3,$t0");
5542+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
5543+ asm volatile("sb $t1,0($a2)");
5544+ asm volatile("rotr $t1,$t1,8");
5545+ asm volatile("lbu $t2,0($t5)");
5546+asm volatile("nop");
5547+ asm volatile("sb $t1,0($a2)");
5548+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5549+ asm volatile("sll $t3,$t3,5");
5550+ asm volatile("addu $t3,$t3,$a1");
5551+ asm volatile("sb $t1,0($a2)");
5552+ asm volatile("rotr $t1,$t1,8");
5553+ asm volatile("addu $v1,$zero,$a3");
5554+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5555+ asm volatile("sb $t1,0($a2)");
5556+ asm volatile("rotr $t1,$t1,8");
5557+ asm volatile("movn $v1,$t3,$t0");
5558+ asm volatile("addiu $a0,$a0,1");
5559+ asm volatile("sb $t1,0($a2)");
5560+ asm volatile("rotr $t1,$t1,8");
5561+asm volatile("nop");
5562+asm volatile("nop");
5563+ asm volatile("sb $t1,0($a2)");
5564+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5565+asm volatile("nop");
5566+asm volatile("nop");
5567+ asm volatile("sb $t1,0($a2)");
5568+ asm volatile("rotr $t1,$t1,8");
5569+ asm volatile("addu $v1,$zero,$a3");
5570+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5571+ asm volatile("sb $t1,0($a2)");
5572+ asm volatile("rotr $t1,$t1,8");
5573+ asm volatile("movn $v1,$t3,$t0");
5574+asm volatile("nop");
5575+ asm volatile("sb $t1,0($a2)");
5576+ asm volatile("rotr $t1,$t1,8");
5577+asm volatile("nop");
5578+asm volatile("nop");
5579+ asm volatile("sb $t1,0($a2)");
5580+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5581+asm volatile("nop");
5582+asm volatile("nop");
5583+ asm volatile("sb $t1,0($a2)");
5584+ asm volatile("rotr $t1,$t1,8");
5585+ asm volatile("addu $v1,$zero,$a3");
5586+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5587+ asm volatile("sb $t1,0($a2)");
5588+ asm volatile("rotr $t1,$t1,8");
5589+ asm volatile("movn $v1,$t3,$t0");
5590+asm volatile("nop");
5591+ asm volatile("sb $t1,0($a2)");
5592+ asm volatile("rotr $t1,$t1,8");
5593+asm volatile("nop");
5594+asm volatile("nop");
5595+ asm volatile("sb $t1,0($a2)");
5596+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5597+asm volatile("nop");
5598+asm volatile("nop");
5599+ asm volatile("sb $t1,0($a2)");
5600+ asm volatile("rotr $t1,$t1,8");
5601+ asm volatile("addu $v1,$zero,$a3");
5602+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5603+ asm volatile("sb $t1,0($a2)");
5604+ asm volatile("rotr $t1,$t1,8");
5605+ asm volatile("movn $v1,$t3,$t0");
5606+asm volatile("nop");
5607+ asm volatile("sb $t1,0($a2)");
5608+ asm volatile("rotr $t1,$t1,8");
5609+asm volatile("nop");
5610+asm volatile("nop");
5611+ asm volatile("sb $t1,0($a2)");
5612+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5613+asm volatile("nop");
5614+asm volatile("nop");
5615+ asm volatile("sb $t1,0($a2)");
5616+ asm volatile("rotr $t1,$t1,8");
5617+ asm volatile("addu $v1,$zero,$a3");
5618+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5619+ asm volatile("sb $t1,0($a2)");
5620+ asm volatile("rotr $t1,$t1,8");
5621+ asm volatile("movn $v1,$t3,$t0");
5622+asm volatile("nop");
5623+ asm volatile("sb $t1,0($a2)");
5624+ asm volatile("rotr $t1,$t1,8");
5625+asm volatile("nop");
5626+asm volatile("nop");
5627+ asm volatile("sb $t1,0($a2)");
5628+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5629+asm volatile("nop");
5630+asm volatile("nop");
5631+ asm volatile("sb $t1,0($a2)");
5632+ asm volatile("rotr $t1,$t1,8");
5633+ asm volatile("addu $v1,$zero,$a3");
5634+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5635+ asm volatile("sb $t1,0($a2)");
5636+ asm volatile("rotr $t1,$t1,8");
5637+ asm volatile("movn $v1,$t3,$t0");
5638+asm volatile("nop");
5639+ asm volatile("sb $t1,0($a2)");
5640+ asm volatile("rotr $t1,$t1,8");
5641+asm volatile("nop");
5642+asm volatile("nop");
5643+ asm volatile("sb $t1,0($a2)");
5644+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5645+asm volatile("nop");
5646+asm volatile("nop");
5647+ asm volatile("sb $t1,0($a2)");
5648+ asm volatile("rotr $t1,$t1,8");
5649+ asm volatile("addu $v1,$zero,$a3");
5650+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5651+ asm volatile("sb $t1,0($a2)");
5652+ asm volatile("rotr $t1,$t1,8");
5653+ asm volatile("movn $v1,$t3,$t0");
5654+asm volatile("nop");
5655+ asm volatile("sb $t1,0($a2)");
5656+ asm volatile("rotr $t1,$t1,8");
5657+asm volatile("nop");
5658+ asm volatile("lbu $t5,0($a0)");
5659+ asm volatile("sb $t1,0($a2)");
5660+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5661+ asm volatile("sll $t5,$t5,3");
5662+ asm volatile("addu $t5,$t5,$t4");
5663+ asm volatile("sb $t1,0($a2)");
5664+ asm volatile("rotr $t1,$t1,8");
5665+ asm volatile("addu $v1,$zero,$a3");
5666+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5667+ asm volatile("sb $t1,0($a2)");
5668+ asm volatile("rotr $t1,$t1,8");
5669+ asm volatile("movn $v1,$t3,$t0");
5670+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
5671+ asm volatile("sb $t1,0($a2)");
5672+ asm volatile("rotr $t1,$t1,8");
5673+ asm volatile("lbu $t2,0($t5)");
5674+asm volatile("nop");
5675+ asm volatile("sb $t1,0($a2)");
5676+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5677+ asm volatile("sll $t3,$t3,5");
5678+ asm volatile("addu $t3,$t3,$a1");
5679+ asm volatile("sb $t1,0($a2)");
5680+ asm volatile("rotr $t1,$t1,8");
5681+ asm volatile("addu $v1,$zero,$a3");
5682+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5683+ asm volatile("sb $t1,0($a2)");
5684+ asm volatile("rotr $t1,$t1,8");
5685+ asm volatile("movn $v1,$t3,$t0");
5686+ asm volatile("addiu $a0,$a0,1");
5687+ asm volatile("sb $t1,0($a2)");
5688+ asm volatile("rotr $t1,$t1,8");
5689+asm volatile("nop");
5690+asm volatile("nop");
5691+ asm volatile("sb $t1,0($a2)");
5692+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5693+asm volatile("nop");
5694+asm volatile("nop");
5695+ asm volatile("sb $t1,0($a2)");
5696+ asm volatile("rotr $t1,$t1,8");
5697+ asm volatile("addu $v1,$zero,$a3");
5698+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5699+ asm volatile("sb $t1,0($a2)");
5700+ asm volatile("rotr $t1,$t1,8");
5701+ asm volatile("movn $v1,$t3,$t0");
5702+asm volatile("nop");
5703+ asm volatile("sb $t1,0($a2)");
5704+ asm volatile("rotr $t1,$t1,8");
5705+asm volatile("nop");
5706+asm volatile("nop");
5707+ asm volatile("sb $t1,0($a2)");
5708+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5709+asm volatile("nop");
5710+asm volatile("nop");
5711+ asm volatile("sb $t1,0($a2)");
5712+ asm volatile("rotr $t1,$t1,8");
5713+ asm volatile("addu $v1,$zero,$a3");
5714+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5715+ asm volatile("sb $t1,0($a2)");
5716+ asm volatile("rotr $t1,$t1,8");
5717+ asm volatile("movn $v1,$t3,$t0");
5718+asm volatile("nop");
5719+ asm volatile("sb $t1,0($a2)");
5720+ asm volatile("rotr $t1,$t1,8");
5721+asm volatile("nop");
5722+asm volatile("nop");
5723+ asm volatile("sb $t1,0($a2)");
5724+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5725+asm volatile("nop");
5726+asm volatile("nop");
5727+ asm volatile("sb $t1,0($a2)");
5728+ asm volatile("rotr $t1,$t1,8");
5729+ asm volatile("addu $v1,$zero,$a3");
5730+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5731+ asm volatile("sb $t1,0($a2)");
5732+ asm volatile("rotr $t1,$t1,8");
5733+ asm volatile("movn $v1,$t3,$t0");
5734+asm volatile("nop");
5735+ asm volatile("sb $t1,0($a2)");
5736+ asm volatile("rotr $t1,$t1,8");
5737+asm volatile("nop");
5738+asm volatile("nop");
5739+ asm volatile("sb $t1,0($a2)");
5740+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5741+asm volatile("nop");
5742+asm volatile("nop");
5743+ asm volatile("sb $t1,0($a2)");
5744+ asm volatile("rotr $t1,$t1,8");
5745+ asm volatile("addu $v1,$zero,$a3");
5746+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5747+ asm volatile("sb $t1,0($a2)");
5748+ asm volatile("rotr $t1,$t1,8");
5749+ asm volatile("movn $v1,$t3,$t0");
5750+asm volatile("nop");
5751+ asm volatile("sb $t1,0($a2)");
5752+ asm volatile("rotr $t1,$t1,8");
5753+asm volatile("nop");
5754+asm volatile("nop");
5755+ asm volatile("sb $t1,0($a2)");
5756+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5757+asm volatile("nop");
5758+asm volatile("nop");
5759+ asm volatile("sb $t1,0($a2)");
5760+ asm volatile("rotr $t1,$t1,8");
5761+ asm volatile("addu $v1,$zero,$a3");
5762+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5763+ asm volatile("sb $t1,0($a2)");
5764+ asm volatile("rotr $t1,$t1,8");
5765+ asm volatile("movn $v1,$t3,$t0");
5766+asm volatile("nop");
5767+ asm volatile("sb $t1,0($a2)");
5768+ asm volatile("rotr $t1,$t1,8");
5769+asm volatile("nop");
5770+asm volatile("nop");
5771+ asm volatile("sb $t1,0($a2)");
5772+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5773+asm volatile("nop");
5774+asm volatile("nop");
5775+ asm volatile("sb $t1,0($a2)");
5776+ asm volatile("rotr $t1,$t1,8");
5777+ asm volatile("addu $v1,$zero,$a3");
5778+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5779+ asm volatile("sb $t1,0($a2)");
5780+ asm volatile("rotr $t1,$t1,8");
5781+ asm volatile("movn $v1,$t3,$t0");
5782+asm volatile("nop");
5783+ asm volatile("sb $t1,0($a2)");
5784+ asm volatile("rotr $t1,$t1,8");
5785+asm volatile("nop");
5786+ asm volatile("lbu $t5,0($a0)");
5787+ asm volatile("sb $t1,0($a2)");
5788+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5789+ asm volatile("sll $t5,$t5,3");
5790+ asm volatile("addu $t5,$t5,$t4");
5791+ asm volatile("sb $t1,0($a2)");
5792+ asm volatile("rotr $t1,$t1,8");
5793+ asm volatile("addu $v1,$zero,$a3");
5794+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5795+ asm volatile("sb $t1,0($a2)");
5796+ asm volatile("rotr $t1,$t1,8");
5797+ asm volatile("movn $v1,$t3,$t0");
5798+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
5799+ asm volatile("sb $t1,0($a2)");
5800+ asm volatile("rotr $t1,$t1,8");
5801+ asm volatile("lbu $t2,0($t5)");
5802+asm volatile("nop");
5803+ asm volatile("sb $t1,0($a2)");
5804+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5805+ asm volatile("sll $t3,$t3,5");
5806+ asm volatile("addu $t3,$t3,$a1");
5807+ asm volatile("sb $t1,0($a2)");
5808+ asm volatile("rotr $t1,$t1,8");
5809+ asm volatile("addu $v1,$zero,$a3");
5810+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5811+ asm volatile("sb $t1,0($a2)");
5812+ asm volatile("rotr $t1,$t1,8");
5813+ asm volatile("movn $v1,$t3,$t0");
5814+ asm volatile("addiu $a0,$a0,1");
5815+ asm volatile("sb $t1,0($a2)");
5816+ asm volatile("rotr $t1,$t1,8");
5817+asm volatile("nop");
5818+asm volatile("nop");
5819+ asm volatile("sb $t1,0($a2)");
5820+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5821+asm volatile("nop");
5822+asm volatile("nop");
5823+ asm volatile("sb $t1,0($a2)");
5824+ asm volatile("rotr $t1,$t1,8");
5825+ asm volatile("addu $v1,$zero,$a3");
5826+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5827+ asm volatile("sb $t1,0($a2)");
5828+ asm volatile("rotr $t1,$t1,8");
5829+ asm volatile("movn $v1,$t3,$t0");
5830+asm volatile("nop");
5831+ asm volatile("sb $t1,0($a2)");
5832+ asm volatile("rotr $t1,$t1,8");
5833+asm volatile("nop");
5834+asm volatile("nop");
5835+ asm volatile("sb $t1,0($a2)");
5836+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5837+asm volatile("nop");
5838+asm volatile("nop");
5839+ asm volatile("sb $t1,0($a2)");
5840+ asm volatile("rotr $t1,$t1,8");
5841+ asm volatile("addu $v1,$zero,$a3");
5842+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5843+ asm volatile("sb $t1,0($a2)");
5844+ asm volatile("rotr $t1,$t1,8");
5845+ asm volatile("movn $v1,$t3,$t0");
5846+asm volatile("nop");
5847+ asm volatile("sb $t1,0($a2)");
5848+ asm volatile("rotr $t1,$t1,8");
5849+asm volatile("nop");
5850+asm volatile("nop");
5851+ asm volatile("sb $t1,0($a2)");
5852+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5853+asm volatile("nop");
5854+asm volatile("nop");
5855+ asm volatile("sb $t1,0($a2)");
5856+ asm volatile("rotr $t1,$t1,8");
5857+ asm volatile("addu $v1,$zero,$a3");
5858+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5859+ asm volatile("sb $t1,0($a2)");
5860+ asm volatile("rotr $t1,$t1,8");
5861+ asm volatile("movn $v1,$t3,$t0");
5862+asm volatile("nop");
5863+ asm volatile("sb $t1,0($a2)");
5864+ asm volatile("rotr $t1,$t1,8");
5865+asm volatile("nop");
5866+asm volatile("nop");
5867+ asm volatile("sb $t1,0($a2)");
5868+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5869+asm volatile("nop");
5870+asm volatile("nop");
5871+ asm volatile("sb $t1,0($a2)");
5872+ asm volatile("rotr $t1,$t1,8");
5873+ asm volatile("addu $v1,$zero,$a3");
5874+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5875+ asm volatile("sb $t1,0($a2)");
5876+ asm volatile("rotr $t1,$t1,8");
5877+ asm volatile("movn $v1,$t3,$t0");
5878+asm volatile("nop");
5879+ asm volatile("sb $t1,0($a2)");
5880+ asm volatile("rotr $t1,$t1,8");
5881+asm volatile("nop");
5882+asm volatile("nop");
5883+ asm volatile("sb $t1,0($a2)");
5884+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5885+asm volatile("nop");
5886+asm volatile("nop");
5887+ asm volatile("sb $t1,0($a2)");
5888+ asm volatile("rotr $t1,$t1,8");
5889+ asm volatile("addu $v1,$zero,$a3");
5890+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5891+ asm volatile("sb $t1,0($a2)");
5892+ asm volatile("rotr $t1,$t1,8");
5893+ asm volatile("movn $v1,$t3,$t0");
5894+asm volatile("nop");
5895+ asm volatile("sb $t1,0($a2)");
5896+ asm volatile("rotr $t1,$t1,8");
5897+asm volatile("nop");
5898+asm volatile("nop");
5899+ asm volatile("sb $t1,0($a2)");
5900+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5901+asm volatile("nop");
5902+asm volatile("nop");
5903+ asm volatile("sb $t1,0($a2)");
5904+ asm volatile("rotr $t1,$t1,8");
5905+ asm volatile("addu $v1,$zero,$a3");
5906+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5907+ asm volatile("sb $t1,0($a2)");
5908+ asm volatile("rotr $t1,$t1,8");
5909+ asm volatile("movn $v1,$t3,$t0");
5910+asm volatile("nop");
5911+ asm volatile("sb $t1,0($a2)");
5912+ asm volatile("rotr $t1,$t1,8");
5913+asm volatile("nop");
5914+ asm volatile("lbu $t5,0($a0)");
5915+ asm volatile("sb $t1,0($a2)");
5916+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5917+ asm volatile("sll $t5,$t5,3");
5918+ asm volatile("addu $t5,$t5,$t4");
5919+ asm volatile("sb $t1,0($a2)");
5920+ asm volatile("rotr $t1,$t1,8");
5921+ asm volatile("addu $v1,$zero,$a3");
5922+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5923+ asm volatile("sb $t1,0($a2)");
5924+ asm volatile("rotr $t1,$t1,8");
5925+ asm volatile("movn $v1,$t3,$t0");
5926+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
5927+ asm volatile("sb $t1,0($a2)");
5928+ asm volatile("rotr $t1,$t1,8");
5929+ asm volatile("lbu $t2,0($t5)");
5930+asm volatile("nop");
5931+ asm volatile("sb $t1,0($a2)");
5932+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5933+ asm volatile("sll $t3,$t3,5");
5934+ asm volatile("addu $t3,$t3,$a1");
5935+ asm volatile("sb $t1,0($a2)");
5936+ asm volatile("rotr $t1,$t1,8");
5937+ asm volatile("addu $v1,$zero,$a3");
5938+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5939+ asm volatile("sb $t1,0($a2)");
5940+ asm volatile("rotr $t1,$t1,8");
5941+ asm volatile("movn $v1,$t3,$t0");
5942+ asm volatile("addiu $a0,$a0,1");
5943+ asm volatile("sb $t1,0($a2)");
5944+ asm volatile("rotr $t1,$t1,8");
5945+asm volatile("nop");
5946+asm volatile("nop");
5947+ asm volatile("sb $t1,0($a2)");
5948+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5949+asm volatile("nop");
5950+asm volatile("nop");
5951+ asm volatile("sb $t1,0($a2)");
5952+ asm volatile("rotr $t1,$t1,8");
5953+ asm volatile("addu $v1,$zero,$a3");
5954+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5955+ asm volatile("sb $t1,0($a2)");
5956+ asm volatile("rotr $t1,$t1,8");
5957+ asm volatile("movn $v1,$t3,$t0");
5958+asm volatile("nop");
5959+ asm volatile("sb $t1,0($a2)");
5960+ asm volatile("rotr $t1,$t1,8");
5961+asm volatile("nop");
5962+asm volatile("nop");
5963+ asm volatile("sb $t1,0($a2)");
5964+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5965+asm volatile("nop");
5966+asm volatile("nop");
5967+ asm volatile("sb $t1,0($a2)");
5968+ asm volatile("rotr $t1,$t1,8");
5969+ asm volatile("addu $v1,$zero,$a3");
5970+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5971+ asm volatile("sb $t1,0($a2)");
5972+ asm volatile("rotr $t1,$t1,8");
5973+ asm volatile("movn $v1,$t3,$t0");
5974+asm volatile("nop");
5975+ asm volatile("sb $t1,0($a2)");
5976+ asm volatile("rotr $t1,$t1,8");
5977+asm volatile("nop");
5978+asm volatile("nop");
5979+ asm volatile("sb $t1,0($a2)");
5980+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5981+asm volatile("nop");
5982+asm volatile("nop");
5983+ asm volatile("sb $t1,0($a2)");
5984+ asm volatile("rotr $t1,$t1,8");
5985+ asm volatile("addu $v1,$zero,$a3");
5986+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
5987+ asm volatile("sb $t1,0($a2)");
5988+ asm volatile("rotr $t1,$t1,8");
5989+ asm volatile("movn $v1,$t3,$t0");
5990+asm volatile("nop");
5991+ asm volatile("sb $t1,0($a2)");
5992+ asm volatile("rotr $t1,$t1,8");
5993+asm volatile("nop");
5994+asm volatile("nop");
5995+ asm volatile("sb $t1,0($a2)");
5996+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
5997+asm volatile("nop");
5998+asm volatile("nop");
5999+ asm volatile("sb $t1,0($a2)");
6000+ asm volatile("rotr $t1,$t1,8");
6001+ asm volatile("addu $v1,$zero,$a3");
6002+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6003+ asm volatile("sb $t1,0($a2)");
6004+ asm volatile("rotr $t1,$t1,8");
6005+ asm volatile("movn $v1,$t3,$t0");
6006+asm volatile("nop");
6007+ asm volatile("sb $t1,0($a2)");
6008+ asm volatile("rotr $t1,$t1,8");
6009+asm volatile("nop");
6010+asm volatile("nop");
6011+ asm volatile("sb $t1,0($a2)");
6012+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6013+asm volatile("nop");
6014+asm volatile("nop");
6015+ asm volatile("sb $t1,0($a2)");
6016+ asm volatile("rotr $t1,$t1,8");
6017+ asm volatile("addu $v1,$zero,$a3");
6018+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6019+ asm volatile("sb $t1,0($a2)");
6020+ asm volatile("rotr $t1,$t1,8");
6021+ asm volatile("movn $v1,$t3,$t0");
6022+asm volatile("nop");
6023+ asm volatile("sb $t1,0($a2)");
6024+ asm volatile("rotr $t1,$t1,8");
6025+asm volatile("nop");
6026+asm volatile("nop");
6027+ asm volatile("sb $t1,0($a2)");
6028+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6029+asm volatile("nop");
6030+asm volatile("nop");
6031+ asm volatile("sb $t1,0($a2)");
6032+ asm volatile("rotr $t1,$t1,8");
6033+ asm volatile("addu $v1,$zero,$a3");
6034+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6035+ asm volatile("sb $t1,0($a2)");
6036+ asm volatile("rotr $t1,$t1,8");
6037+ asm volatile("movn $v1,$t3,$t0");
6038+asm volatile("nop");
6039+ asm volatile("sb $t1,0($a2)");
6040+ asm volatile("rotr $t1,$t1,8");
6041+asm volatile("nop");
6042+ asm volatile("lbu $t5,0($a0)");
6043+ asm volatile("sb $t1,0($a2)");
6044+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6045+ asm volatile("sll $t5,$t5,3");
6046+ asm volatile("addu $t5,$t5,$t4");
6047+ asm volatile("sb $t1,0($a2)");
6048+ asm volatile("rotr $t1,$t1,8");
6049+ asm volatile("addu $v1,$zero,$a3");
6050+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6051+ asm volatile("sb $t1,0($a2)");
6052+ asm volatile("rotr $t1,$t1,8");
6053+ asm volatile("movn $v1,$t3,$t0");
6054+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
6055+ asm volatile("sb $t1,0($a2)");
6056+ asm volatile("rotr $t1,$t1,8");
6057+ asm volatile("lbu $t2,0($t5)");
6058+asm volatile("nop");
6059+ asm volatile("sb $t1,0($a2)");
6060+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6061+ asm volatile("sll $t3,$t3,5");
6062+ asm volatile("addu $t3,$t3,$a1");
6063+ asm volatile("sb $t1,0($a2)");
6064+ asm volatile("rotr $t1,$t1,8");
6065+ asm volatile("addu $v1,$zero,$a3");
6066+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6067+ asm volatile("sb $t1,0($a2)");
6068+ asm volatile("rotr $t1,$t1,8");
6069+ asm volatile("movn $v1,$t3,$t0");
6070+ asm volatile("addiu $a0,$a0,1");
6071+ asm volatile("sb $t1,0($a2)");
6072+ asm volatile("rotr $t1,$t1,8");
6073+asm volatile("nop");
6074+asm volatile("nop");
6075+ asm volatile("sb $t1,0($a2)");
6076+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6077+asm volatile("nop");
6078+asm volatile("nop");
6079+ asm volatile("sb $t1,0($a2)");
6080+ asm volatile("rotr $t1,$t1,8");
6081+ asm volatile("addu $v1,$zero,$a3");
6082+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6083+ asm volatile("sb $t1,0($a2)");
6084+ asm volatile("rotr $t1,$t1,8");
6085+ asm volatile("movn $v1,$t3,$t0");
6086+asm volatile("nop");
6087+ asm volatile("sb $t1,0($a2)");
6088+ asm volatile("rotr $t1,$t1,8");
6089+asm volatile("nop");
6090+asm volatile("nop");
6091+ asm volatile("sb $t1,0($a2)");
6092+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6093+asm volatile("nop");
6094+asm volatile("nop");
6095+ asm volatile("sb $t1,0($a2)");
6096+ asm volatile("rotr $t1,$t1,8");
6097+ asm volatile("addu $v1,$zero,$a3");
6098+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6099+ asm volatile("sb $t1,0($a2)");
6100+ asm volatile("rotr $t1,$t1,8");
6101+ asm volatile("movn $v1,$t3,$t0");
6102+asm volatile("nop");
6103+ asm volatile("sb $t1,0($a2)");
6104+ asm volatile("rotr $t1,$t1,8");
6105+asm volatile("nop");
6106+asm volatile("nop");
6107+ asm volatile("sb $t1,0($a2)");
6108+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6109+asm volatile("nop");
6110+asm volatile("nop");
6111+ asm volatile("sb $t1,0($a2)");
6112+ asm volatile("rotr $t1,$t1,8");
6113+ asm volatile("addu $v1,$zero,$a3");
6114+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6115+ asm volatile("sb $t1,0($a2)");
6116+ asm volatile("rotr $t1,$t1,8");
6117+ asm volatile("movn $v1,$t3,$t0");
6118+asm volatile("nop");
6119+ asm volatile("sb $t1,0($a2)");
6120+ asm volatile("rotr $t1,$t1,8");
6121+asm volatile("nop");
6122+asm volatile("nop");
6123+ asm volatile("sb $t1,0($a2)");
6124+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6125+asm volatile("nop");
6126+asm volatile("nop");
6127+ asm volatile("sb $t1,0($a2)");
6128+ asm volatile("rotr $t1,$t1,8");
6129+ asm volatile("addu $v1,$zero,$a3");
6130+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6131+ asm volatile("sb $t1,0($a2)");
6132+ asm volatile("rotr $t1,$t1,8");
6133+ asm volatile("movn $v1,$t3,$t0");
6134+asm volatile("nop");
6135+ asm volatile("sb $t1,0($a2)");
6136+ asm volatile("rotr $t1,$t1,8");
6137+asm volatile("nop");
6138+asm volatile("nop");
6139+ asm volatile("sb $t1,0($a2)");
6140+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6141+asm volatile("nop");
6142+asm volatile("nop");
6143+ asm volatile("sb $t1,0($a2)");
6144+ asm volatile("rotr $t1,$t1,8");
6145+ asm volatile("addu $v1,$zero,$a3");
6146+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6147+ asm volatile("sb $t1,0($a2)");
6148+ asm volatile("rotr $t1,$t1,8");
6149+ asm volatile("movn $v1,$t3,$t0");
6150+asm volatile("nop");
6151+ asm volatile("sb $t1,0($a2)");
6152+ asm volatile("rotr $t1,$t1,8");
6153+asm volatile("nop");
6154+asm volatile("nop");
6155+ asm volatile("sb $t1,0($a2)");
6156+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6157+asm volatile("nop");
6158+asm volatile("nop");
6159+ asm volatile("sb $t1,0($a2)");
6160+ asm volatile("rotr $t1,$t1,8");
6161+ asm volatile("addu $v1,$zero,$a3");
6162+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6163+ asm volatile("sb $t1,0($a2)");
6164+ asm volatile("rotr $t1,$t1,8");
6165+ asm volatile("movn $v1,$t3,$t0");
6166+asm volatile("nop");
6167+ asm volatile("sb $t1,0($a2)");
6168+ asm volatile("rotr $t1,$t1,8");
6169+asm volatile("nop");
6170+ asm volatile("lbu $t5,0($a0)");
6171+ asm volatile("sb $t1,0($a2)");
6172+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6173+ asm volatile("sll $t5,$t5,3");
6174+ asm volatile("addu $t5,$t5,$t4");
6175+ asm volatile("sb $t1,0($a2)");
6176+ asm volatile("rotr $t1,$t1,8");
6177+ asm volatile("addu $v1,$zero,$a3");
6178+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6179+ asm volatile("sb $t1,0($a2)");
6180+ asm volatile("rotr $t1,$t1,8");
6181+ asm volatile("movn $v1,$t3,$t0");
6182+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
6183+ asm volatile("sb $t1,0($a2)");
6184+ asm volatile("rotr $t1,$t1,8");
6185+ asm volatile("lbu $t2,0($t5)");
6186+asm volatile("nop");
6187+ asm volatile("sb $t1,0($a2)");
6188+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6189+ asm volatile("sll $t3,$t3,5");
6190+ asm volatile("addu $t3,$t3,$a1");
6191+ asm volatile("sb $t1,0($a2)");
6192+ asm volatile("rotr $t1,$t1,8");
6193+ asm volatile("addu $v1,$zero,$a3");
6194+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6195+ asm volatile("sb $t1,0($a2)");
6196+ asm volatile("rotr $t1,$t1,8");
6197+ asm volatile("movn $v1,$t3,$t0");
6198+ asm volatile("addiu $a0,$a0,1");
6199+ asm volatile("sb $t1,0($a2)");
6200+ asm volatile("rotr $t1,$t1,8");
6201+asm volatile("nop");
6202+asm volatile("nop");
6203+ asm volatile("sb $t1,0($a2)");
6204+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6205+asm volatile("nop");
6206+asm volatile("nop");
6207+ asm volatile("sb $t1,0($a2)");
6208+ asm volatile("rotr $t1,$t1,8");
6209+ asm volatile("addu $v1,$zero,$a3");
6210+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6211+ asm volatile("sb $t1,0($a2)");
6212+ asm volatile("rotr $t1,$t1,8");
6213+ asm volatile("movn $v1,$t3,$t0");
6214+asm volatile("nop");
6215+ asm volatile("sb $t1,0($a2)");
6216+ asm volatile("rotr $t1,$t1,8");
6217+asm volatile("nop");
6218+asm volatile("nop");
6219+ asm volatile("sb $t1,0($a2)");
6220+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6221+asm volatile("nop");
6222+asm volatile("nop");
6223+ asm volatile("sb $t1,0($a2)");
6224+ asm volatile("rotr $t1,$t1,8");
6225+ asm volatile("addu $v1,$zero,$a3");
6226+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6227+ asm volatile("sb $t1,0($a2)");
6228+ asm volatile("rotr $t1,$t1,8");
6229+ asm volatile("movn $v1,$t3,$t0");
6230+asm volatile("nop");
6231+ asm volatile("sb $t1,0($a2)");
6232+ asm volatile("rotr $t1,$t1,8");
6233+asm volatile("nop");
6234+asm volatile("nop");
6235+ asm volatile("sb $t1,0($a2)");
6236+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6237+asm volatile("nop");
6238+asm volatile("nop");
6239+ asm volatile("sb $t1,0($a2)");
6240+ asm volatile("rotr $t1,$t1,8");
6241+ asm volatile("addu $v1,$zero,$a3");
6242+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6243+ asm volatile("sb $t1,0($a2)");
6244+ asm volatile("rotr $t1,$t1,8");
6245+ asm volatile("movn $v1,$t3,$t0");
6246+asm volatile("nop");
6247+ asm volatile("sb $t1,0($a2)");
6248+ asm volatile("rotr $t1,$t1,8");
6249+asm volatile("nop");
6250+asm volatile("nop");
6251+ asm volatile("sb $t1,0($a2)");
6252+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6253+asm volatile("nop");
6254+asm volatile("nop");
6255+ asm volatile("sb $t1,0($a2)");
6256+ asm volatile("rotr $t1,$t1,8");
6257+ asm volatile("addu $v1,$zero,$a3");
6258+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6259+ asm volatile("sb $t1,0($a2)");
6260+ asm volatile("rotr $t1,$t1,8");
6261+ asm volatile("movn $v1,$t3,$t0");
6262+asm volatile("nop");
6263+ asm volatile("sb $t1,0($a2)");
6264+ asm volatile("rotr $t1,$t1,8");
6265+asm volatile("nop");
6266+asm volatile("nop");
6267+ asm volatile("sb $t1,0($a2)");
6268+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6269+asm volatile("nop");
6270+asm volatile("nop");
6271+ asm volatile("sb $t1,0($a2)");
6272+ asm volatile("rotr $t1,$t1,8");
6273+ asm volatile("addu $v1,$zero,$a3");
6274+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6275+ asm volatile("sb $t1,0($a2)");
6276+ asm volatile("rotr $t1,$t1,8");
6277+ asm volatile("movn $v1,$t3,$t0");
6278+asm volatile("nop");
6279+ asm volatile("sb $t1,0($a2)");
6280+ asm volatile("rotr $t1,$t1,8");
6281+asm volatile("nop");
6282+asm volatile("nop");
6283+ asm volatile("sb $t1,0($a2)");
6284+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6285+asm volatile("nop");
6286+asm volatile("nop");
6287+ asm volatile("sb $t1,0($a2)");
6288+ asm volatile("rotr $t1,$t1,8");
6289+ asm volatile("addu $v1,$zero,$a3");
6290+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6291+ asm volatile("sb $t1,0($a2)");
6292+ asm volatile("rotr $t1,$t1,8");
6293+ asm volatile("movn $v1,$t3,$t0");
6294+asm volatile("nop");
6295+ asm volatile("sb $t1,0($a2)");
6296+ asm volatile("rotr $t1,$t1,8");
6297+asm volatile("nop");
6298+ asm volatile("lbu $t5,0($a0)");
6299+ asm volatile("sb $t1,0($a2)");
6300+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6301+ asm volatile("sll $t5,$t5,3");
6302+ asm volatile("addu $t5,$t5,$t4");
6303+ asm volatile("sb $t1,0($a2)");
6304+ asm volatile("rotr $t1,$t1,8");
6305+ asm volatile("addu $v1,$zero,$a3");
6306+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6307+ asm volatile("sb $t1,0($a2)");
6308+ asm volatile("rotr $t1,$t1,8");
6309+ asm volatile("movn $v1,$t3,$t0");
6310+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
6311+ asm volatile("sb $t1,0($a2)");
6312+ asm volatile("rotr $t1,$t1,8");
6313+ asm volatile("lbu $t2,0($t5)");
6314+asm volatile("nop");
6315+ asm volatile("sb $t1,0($a2)");
6316+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6317+ asm volatile("sll $t3,$t3,5");
6318+ asm volatile("addu $t3,$t3,$a1");
6319+ asm volatile("sb $t1,0($a2)");
6320+ asm volatile("rotr $t1,$t1,8");
6321+ asm volatile("addu $v1,$zero,$a3");
6322+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6323+ asm volatile("sb $t1,0($a2)");
6324+ asm volatile("rotr $t1,$t1,8");
6325+ asm volatile("movn $v1,$t3,$t0");
6326+ asm volatile("addiu $a0,$a0,1");
6327+ asm volatile("sb $t1,0($a2)");
6328+ asm volatile("rotr $t1,$t1,8");
6329+asm volatile("nop");
6330+asm volatile("nop");
6331+ asm volatile("sb $t1,0($a2)");
6332+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6333+asm volatile("nop");
6334+asm volatile("nop");
6335+ asm volatile("sb $t1,0($a2)");
6336+ asm volatile("rotr $t1,$t1,8");
6337+ asm volatile("addu $v1,$zero,$a3");
6338+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6339+ asm volatile("sb $t1,0($a2)");
6340+ asm volatile("rotr $t1,$t1,8");
6341+ asm volatile("movn $v1,$t3,$t0");
6342+asm volatile("nop");
6343+ asm volatile("sb $t1,0($a2)");
6344+ asm volatile("rotr $t1,$t1,8");
6345+asm volatile("nop");
6346+asm volatile("nop");
6347+ asm volatile("sb $t1,0($a2)");
6348+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6349+asm volatile("nop");
6350+asm volatile("nop");
6351+ asm volatile("sb $t1,0($a2)");
6352+ asm volatile("rotr $t1,$t1,8");
6353+ asm volatile("addu $v1,$zero,$a3");
6354+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6355+ asm volatile("sb $t1,0($a2)");
6356+ asm volatile("rotr $t1,$t1,8");
6357+ asm volatile("movn $v1,$t3,$t0");
6358+asm volatile("nop");
6359+ asm volatile("sb $t1,0($a2)");
6360+ asm volatile("rotr $t1,$t1,8");
6361+asm volatile("nop");
6362+asm volatile("nop");
6363+ asm volatile("sb $t1,0($a2)");
6364+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6365+asm volatile("nop");
6366+asm volatile("nop");
6367+ asm volatile("sb $t1,0($a2)");
6368+ asm volatile("rotr $t1,$t1,8");
6369+ asm volatile("addu $v1,$zero,$a3");
6370+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6371+ asm volatile("sb $t1,0($a2)");
6372+ asm volatile("rotr $t1,$t1,8");
6373+ asm volatile("movn $v1,$t3,$t0");
6374+asm volatile("nop");
6375+ asm volatile("sb $t1,0($a2)");
6376+ asm volatile("rotr $t1,$t1,8");
6377+asm volatile("nop");
6378+asm volatile("nop");
6379+ asm volatile("sb $t1,0($a2)");
6380+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6381+asm volatile("nop");
6382+asm volatile("nop");
6383+ asm volatile("sb $t1,0($a2)");
6384+ asm volatile("rotr $t1,$t1,8");
6385+ asm volatile("addu $v1,$zero,$a3");
6386+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6387+ asm volatile("sb $t1,0($a2)");
6388+ asm volatile("rotr $t1,$t1,8");
6389+ asm volatile("movn $v1,$t3,$t0");
6390+asm volatile("nop");
6391+ asm volatile("sb $t1,0($a2)");
6392+ asm volatile("rotr $t1,$t1,8");
6393+asm volatile("nop");
6394+asm volatile("nop");
6395+ asm volatile("sb $t1,0($a2)");
6396+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6397+asm volatile("nop");
6398+asm volatile("nop");
6399+ asm volatile("sb $t1,0($a2)");
6400+ asm volatile("rotr $t1,$t1,8");
6401+ asm volatile("addu $v1,$zero,$a3");
6402+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6403+ asm volatile("sb $t1,0($a2)");
6404+ asm volatile("rotr $t1,$t1,8");
6405+ asm volatile("movn $v1,$t3,$t0");
6406+asm volatile("nop");
6407+ asm volatile("sb $t1,0($a2)");
6408+ asm volatile("rotr $t1,$t1,8");
6409+asm volatile("nop");
6410+asm volatile("nop");
6411+ asm volatile("sb $t1,0($a2)");
6412+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6413+asm volatile("nop");
6414+asm volatile("nop");
6415+ asm volatile("sb $t1,0($a2)");
6416+ asm volatile("rotr $t1,$t1,8");
6417+ asm volatile("addu $v1,$zero,$a3");
6418+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6419+ asm volatile("sb $t1,0($a2)");
6420+ asm volatile("rotr $t1,$t1,8");
6421+ asm volatile("movn $v1,$t3,$t0");
6422+asm volatile("nop");
6423+ asm volatile("sb $t1,0($a2)");
6424+ asm volatile("rotr $t1,$t1,8");
6425+asm volatile("nop");
6426+ asm volatile("lbu $t5,0($a0)");
6427+ asm volatile("sb $t1,0($a2)");
6428+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6429+ asm volatile("sll $t5,$t5,3");
6430+ asm volatile("addu $t5,$t5,$t4");
6431+ asm volatile("sb $t1,0($a2)");
6432+ asm volatile("rotr $t1,$t1,8");
6433+ asm volatile("addu $v1,$zero,$a3");
6434+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6435+ asm volatile("sb $t1,0($a2)");
6436+ asm volatile("rotr $t1,$t1,8");
6437+ asm volatile("movn $v1,$t3,$t0");
6438+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
6439+ asm volatile("sb $t1,0($a2)");
6440+ asm volatile("rotr $t1,$t1,8");
6441+ asm volatile("lbu $t2,0($t5)");
6442+asm volatile("nop");
6443+ asm volatile("sb $t1,0($a2)");
6444+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6445+ asm volatile("sll $t3,$t3,5");
6446+ asm volatile("addu $t3,$t3,$a1");
6447+ asm volatile("sb $t1,0($a2)");
6448+ asm volatile("rotr $t1,$t1,8");
6449+ asm volatile("addu $v1,$zero,$a3");
6450+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6451+ asm volatile("sb $t1,0($a2)");
6452+ asm volatile("rotr $t1,$t1,8");
6453+ asm volatile("movn $v1,$t3,$t0");
6454+ asm volatile("addiu $a0,$a0,1");
6455+ asm volatile("sb $t1,0($a2)");
6456+ asm volatile("rotr $t1,$t1,8");
6457+asm volatile("nop");
6458+asm volatile("nop");
6459+ asm volatile("sb $t1,0($a2)");
6460+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6461+asm volatile("nop");
6462+asm volatile("nop");
6463+ asm volatile("sb $t1,0($a2)");
6464+ asm volatile("rotr $t1,$t1,8");
6465+ asm volatile("addu $v1,$zero,$a3");
6466+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6467+ asm volatile("sb $t1,0($a2)");
6468+ asm volatile("rotr $t1,$t1,8");
6469+ asm volatile("movn $v1,$t3,$t0");
6470+asm volatile("nop");
6471+ asm volatile("sb $t1,0($a2)");
6472+ asm volatile("rotr $t1,$t1,8");
6473+asm volatile("nop");
6474+asm volatile("nop");
6475+ asm volatile("sb $t1,0($a2)");
6476+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6477+asm volatile("nop");
6478+asm volatile("nop");
6479+ asm volatile("sb $t1,0($a2)");
6480+ asm volatile("rotr $t1,$t1,8");
6481+ asm volatile("addu $v1,$zero,$a3");
6482+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6483+ asm volatile("sb $t1,0($a2)");
6484+ asm volatile("rotr $t1,$t1,8");
6485+ asm volatile("movn $v1,$t3,$t0");
6486+asm volatile("nop");
6487+ asm volatile("sb $t1,0($a2)");
6488+ asm volatile("rotr $t1,$t1,8");
6489+asm volatile("nop");
6490+asm volatile("nop");
6491+ asm volatile("sb $t1,0($a2)");
6492+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6493+asm volatile("nop");
6494+asm volatile("nop");
6495+ asm volatile("sb $t1,0($a2)");
6496+ asm volatile("rotr $t1,$t1,8");
6497+ asm volatile("addu $v1,$zero,$a3");
6498+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6499+ asm volatile("sb $t1,0($a2)");
6500+ asm volatile("rotr $t1,$t1,8");
6501+ asm volatile("movn $v1,$t3,$t0");
6502+asm volatile("nop");
6503+ asm volatile("sb $t1,0($a2)");
6504+ asm volatile("rotr $t1,$t1,8");
6505+asm volatile("nop");
6506+asm volatile("nop");
6507+ asm volatile("sb $t1,0($a2)");
6508+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6509+asm volatile("nop");
6510+asm volatile("nop");
6511+ asm volatile("sb $t1,0($a2)");
6512+ asm volatile("rotr $t1,$t1,8");
6513+ asm volatile("addu $v1,$zero,$a3");
6514+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6515+ asm volatile("sb $t1,0($a2)");
6516+ asm volatile("rotr $t1,$t1,8");
6517+ asm volatile("movn $v1,$t3,$t0");
6518+asm volatile("nop");
6519+ asm volatile("sb $t1,0($a2)");
6520+ asm volatile("rotr $t1,$t1,8");
6521+asm volatile("nop");
6522+asm volatile("nop");
6523+ asm volatile("sb $t1,0($a2)");
6524+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6525+asm volatile("nop");
6526+asm volatile("nop");
6527+ asm volatile("sb $t1,0($a2)");
6528+ asm volatile("rotr $t1,$t1,8");
6529+ asm volatile("addu $v1,$zero,$a3");
6530+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6531+ asm volatile("sb $t1,0($a2)");
6532+ asm volatile("rotr $t1,$t1,8");
6533+ asm volatile("movn $v1,$t3,$t0");
6534+asm volatile("nop");
6535+ asm volatile("sb $t1,0($a2)");
6536+ asm volatile("rotr $t1,$t1,8");
6537+asm volatile("nop");
6538+asm volatile("nop");
6539+ asm volatile("sb $t1,0($a2)");
6540+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6541+asm volatile("nop");
6542+asm volatile("nop");
6543+ asm volatile("sb $t1,0($a2)");
6544+ asm volatile("rotr $t1,$t1,8");
6545+ asm volatile("addu $v1,$zero,$a3");
6546+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6547+ asm volatile("sb $t1,0($a2)");
6548+ asm volatile("rotr $t1,$t1,8");
6549+ asm volatile("movn $v1,$t3,$t0");
6550+asm volatile("nop");
6551+ asm volatile("sb $t1,0($a2)");
6552+ asm volatile("rotr $t1,$t1,8");
6553+asm volatile("nop");
6554+ asm volatile("lbu $t5,0($a0)");
6555+ asm volatile("sb $t1,0($a2)");
6556+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6557+ asm volatile("sll $t5,$t5,3");
6558+ asm volatile("addu $t5,$t5,$t4");
6559+ asm volatile("sb $t1,0($a2)");
6560+ asm volatile("rotr $t1,$t1,8");
6561+ asm volatile("addu $v1,$zero,$a3");
6562+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6563+ asm volatile("sb $t1,0($a2)");
6564+ asm volatile("rotr $t1,$t1,8");
6565+ asm volatile("movn $v1,$t3,$t0");
6566+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
6567+ asm volatile("sb $t1,0($a2)");
6568+ asm volatile("rotr $t1,$t1,8");
6569+ asm volatile("lbu $t2,0($t5)");
6570+asm volatile("nop");
6571+ asm volatile("sb $t1,0($a2)");
6572+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6573+ asm volatile("sll $t3,$t3,5");
6574+ asm volatile("addu $t3,$t3,$a1");
6575+ asm volatile("sb $t1,0($a2)");
6576+ asm volatile("rotr $t1,$t1,8");
6577+ asm volatile("addu $v1,$zero,$a3");
6578+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6579+ asm volatile("sb $t1,0($a2)");
6580+ asm volatile("rotr $t1,$t1,8");
6581+ asm volatile("movn $v1,$t3,$t0");
6582+ asm volatile("addiu $a0,$a0,1");
6583+ asm volatile("sb $t1,0($a2)");
6584+ asm volatile("rotr $t1,$t1,8");
6585+asm volatile("nop");
6586+asm volatile("nop");
6587+ asm volatile("sb $t1,0($a2)");
6588+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6589+asm volatile("nop");
6590+asm volatile("nop");
6591+ asm volatile("sb $t1,0($a2)");
6592+ asm volatile("rotr $t1,$t1,8");
6593+ asm volatile("addu $v1,$zero,$a3");
6594+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6595+ asm volatile("sb $t1,0($a2)");
6596+ asm volatile("rotr $t1,$t1,8");
6597+ asm volatile("movn $v1,$t3,$t0");
6598+asm volatile("nop");
6599+ asm volatile("sb $t1,0($a2)");
6600+ asm volatile("rotr $t1,$t1,8");
6601+asm volatile("nop");
6602+asm volatile("nop");
6603+ asm volatile("sb $t1,0($a2)");
6604+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6605+asm volatile("nop");
6606+asm volatile("nop");
6607+ asm volatile("sb $t1,0($a2)");
6608+ asm volatile("rotr $t1,$t1,8");
6609+ asm volatile("addu $v1,$zero,$a3");
6610+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6611+ asm volatile("sb $t1,0($a2)");
6612+ asm volatile("rotr $t1,$t1,8");
6613+ asm volatile("movn $v1,$t3,$t0");
6614+asm volatile("nop");
6615+ asm volatile("sb $t1,0($a2)");
6616+ asm volatile("rotr $t1,$t1,8");
6617+asm volatile("nop");
6618+asm volatile("nop");
6619+ asm volatile("sb $t1,0($a2)");
6620+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6621+asm volatile("nop");
6622+asm volatile("nop");
6623+ asm volatile("sb $t1,0($a2)");
6624+ asm volatile("rotr $t1,$t1,8");
6625+ asm volatile("addu $v1,$zero,$a3");
6626+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6627+ asm volatile("sb $t1,0($a2)");
6628+ asm volatile("rotr $t1,$t1,8");
6629+ asm volatile("movn $v1,$t3,$t0");
6630+asm volatile("nop");
6631+ asm volatile("sb $t1,0($a2)");
6632+ asm volatile("rotr $t1,$t1,8");
6633+asm volatile("nop");
6634+asm volatile("nop");
6635+ asm volatile("sb $t1,0($a2)");
6636+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6637+asm volatile("nop");
6638+asm volatile("nop");
6639+ asm volatile("sb $t1,0($a2)");
6640+ asm volatile("rotr $t1,$t1,8");
6641+ asm volatile("addu $v1,$zero,$a3");
6642+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6643+ asm volatile("sb $t1,0($a2)");
6644+ asm volatile("rotr $t1,$t1,8");
6645+ asm volatile("movn $v1,$t3,$t0");
6646+asm volatile("nop");
6647+ asm volatile("sb $t1,0($a2)");
6648+ asm volatile("rotr $t1,$t1,8");
6649+asm volatile("nop");
6650+asm volatile("nop");
6651+ asm volatile("sb $t1,0($a2)");
6652+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6653+asm volatile("nop");
6654+asm volatile("nop");
6655+ asm volatile("sb $t1,0($a2)");
6656+ asm volatile("rotr $t1,$t1,8");
6657+ asm volatile("addu $v1,$zero,$a3");
6658+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6659+ asm volatile("sb $t1,0($a2)");
6660+ asm volatile("rotr $t1,$t1,8");
6661+ asm volatile("movn $v1,$t3,$t0");
6662+asm volatile("nop");
6663+ asm volatile("sb $t1,0($a2)");
6664+ asm volatile("rotr $t1,$t1,8");
6665+asm volatile("nop");
6666+asm volatile("nop");
6667+ asm volatile("sb $t1,0($a2)");
6668+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6669+asm volatile("nop");
6670+asm volatile("nop");
6671+ asm volatile("sb $t1,0($a2)");
6672+ asm volatile("rotr $t1,$t1,8");
6673+ asm volatile("addu $v1,$zero,$a3");
6674+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6675+ asm volatile("sb $t1,0($a2)");
6676+ asm volatile("rotr $t1,$t1,8");
6677+ asm volatile("movn $v1,$t3,$t0");
6678+asm volatile("nop");
6679+ asm volatile("sb $t1,0($a2)");
6680+ asm volatile("rotr $t1,$t1,8");
6681+asm volatile("nop");
6682+ asm volatile("lbu $t5,0($a0)");
6683+ asm volatile("sb $t1,0($a2)");
6684+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6685+ asm volatile("sll $t5,$t5,3");
6686+ asm volatile("addu $t5,$t5,$t4");
6687+ asm volatile("sb $t1,0($a2)");
6688+ asm volatile("rotr $t1,$t1,8");
6689+ asm volatile("addu $v1,$zero,$a3");
6690+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6691+ asm volatile("sb $t1,0($a2)");
6692+ asm volatile("rotr $t1,$t1,8");
6693+ asm volatile("movn $v1,$t3,$t0");
6694+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
6695+ asm volatile("sb $t1,0($a2)");
6696+ asm volatile("rotr $t1,$t1,8");
6697+ asm volatile("lbu $t2,0($t5)");
6698+asm volatile("nop");
6699+ asm volatile("sb $t1,0($a2)");
6700+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6701+ asm volatile("sll $t3,$t3,5");
6702+ asm volatile("addu $t3,$t3,$a1");
6703+ asm volatile("sb $t1,0($a2)");
6704+ asm volatile("rotr $t1,$t1,8");
6705+ asm volatile("addu $v1,$zero,$a3");
6706+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6707+ asm volatile("sb $t1,0($a2)");
6708+ asm volatile("rotr $t1,$t1,8");
6709+ asm volatile("movn $v1,$t3,$t0");
6710+ asm volatile("addiu $a0,$a0,1");
6711+ asm volatile("sb $t1,0($a2)");
6712+ asm volatile("rotr $t1,$t1,8");
6713+asm volatile("nop");
6714+asm volatile("nop");
6715+ asm volatile("sb $t1,0($a2)");
6716+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6717+asm volatile("nop");
6718+asm volatile("nop");
6719+ asm volatile("sb $t1,0($a2)");
6720+ asm volatile("rotr $t1,$t1,8");
6721+ asm volatile("addu $v1,$zero,$a3");
6722+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6723+ asm volatile("sb $t1,0($a2)");
6724+ asm volatile("rotr $t1,$t1,8");
6725+ asm volatile("movn $v1,$t3,$t0");
6726+asm volatile("nop");
6727+ asm volatile("sb $t1,0($a2)");
6728+ asm volatile("rotr $t1,$t1,8");
6729+asm volatile("nop");
6730+asm volatile("nop");
6731+ asm volatile("sb $t1,0($a2)");
6732+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6733+asm volatile("nop");
6734+asm volatile("nop");
6735+ asm volatile("sb $t1,0($a2)");
6736+ asm volatile("rotr $t1,$t1,8");
6737+ asm volatile("addu $v1,$zero,$a3");
6738+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6739+ asm volatile("sb $t1,0($a2)");
6740+ asm volatile("rotr $t1,$t1,8");
6741+ asm volatile("movn $v1,$t3,$t0");
6742+asm volatile("nop");
6743+ asm volatile("sb $t1,0($a2)");
6744+ asm volatile("rotr $t1,$t1,8");
6745+asm volatile("nop");
6746+asm volatile("nop");
6747+ asm volatile("sb $t1,0($a2)");
6748+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6749+asm volatile("nop");
6750+asm volatile("nop");
6751+ asm volatile("sb $t1,0($a2)");
6752+ asm volatile("rotr $t1,$t1,8");
6753+ asm volatile("addu $v1,$zero,$a3");
6754+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6755+ asm volatile("sb $t1,0($a2)");
6756+ asm volatile("rotr $t1,$t1,8");
6757+ asm volatile("movn $v1,$t3,$t0");
6758+asm volatile("nop");
6759+ asm volatile("sb $t1,0($a2)");
6760+ asm volatile("rotr $t1,$t1,8");
6761+asm volatile("nop");
6762+asm volatile("nop");
6763+ asm volatile("sb $t1,0($a2)");
6764+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6765+asm volatile("nop");
6766+asm volatile("nop");
6767+ asm volatile("sb $t1,0($a2)");
6768+ asm volatile("rotr $t1,$t1,8");
6769+ asm volatile("addu $v1,$zero,$a3");
6770+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6771+ asm volatile("sb $t1,0($a2)");
6772+ asm volatile("rotr $t1,$t1,8");
6773+ asm volatile("movn $v1,$t3,$t0");
6774+asm volatile("nop");
6775+ asm volatile("sb $t1,0($a2)");
6776+ asm volatile("rotr $t1,$t1,8");
6777+asm volatile("nop");
6778+asm volatile("nop");
6779+ asm volatile("sb $t1,0($a2)");
6780+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6781+asm volatile("nop");
6782+asm volatile("nop");
6783+ asm volatile("sb $t1,0($a2)");
6784+ asm volatile("rotr $t1,$t1,8");
6785+ asm volatile("addu $v1,$zero,$a3");
6786+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6787+ asm volatile("sb $t1,0($a2)");
6788+ asm volatile("rotr $t1,$t1,8");
6789+ asm volatile("movn $v1,$t3,$t0");
6790+asm volatile("nop");
6791+ asm volatile("sb $t1,0($a2)");
6792+ asm volatile("rotr $t1,$t1,8");
6793+asm volatile("nop");
6794+asm volatile("nop");
6795+ asm volatile("sb $t1,0($a2)");
6796+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6797+asm volatile("nop");
6798+asm volatile("nop");
6799+ asm volatile("sb $t1,0($a2)");
6800+ asm volatile("rotr $t1,$t1,8");
6801+ asm volatile("addu $v1,$zero,$a3");
6802+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6803+ asm volatile("sb $t1,0($a2)");
6804+ asm volatile("rotr $t1,$t1,8");
6805+ asm volatile("movn $v1,$t3,$t0");
6806+asm volatile("nop");
6807+ asm volatile("sb $t1,0($a2)");
6808+ asm volatile("rotr $t1,$t1,8");
6809+asm volatile("nop");
6810+ asm volatile("lbu $t5,0($a0)");
6811+ asm volatile("sb $t1,0($a2)");
6812+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6813+ asm volatile("sll $t5,$t5,3");
6814+ asm volatile("addu $t5,$t5,$t4");
6815+ asm volatile("sb $t1,0($a2)");
6816+ asm volatile("rotr $t1,$t1,8");
6817+ asm volatile("addu $v1,$zero,$a3");
6818+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6819+ asm volatile("sb $t1,0($a2)");
6820+ asm volatile("rotr $t1,$t1,8");
6821+ asm volatile("movn $v1,$t3,$t0");
6822+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
6823+ asm volatile("sb $t1,0($a2)");
6824+ asm volatile("rotr $t1,$t1,8");
6825+ asm volatile("lbu $t2,0($t5)");
6826+asm volatile("nop");
6827+ asm volatile("sb $t1,0($a2)");
6828+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6829+ asm volatile("sll $t3,$t3,5");
6830+ asm volatile("addu $t3,$t3,$a1");
6831+ asm volatile("sb $t1,0($a2)");
6832+ asm volatile("rotr $t1,$t1,8");
6833+ asm volatile("addu $v1,$zero,$a3");
6834+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6835+ asm volatile("sb $t1,0($a2)");
6836+ asm volatile("rotr $t1,$t1,8");
6837+ asm volatile("movn $v1,$t3,$t0");
6838+ asm volatile("addiu $a0,$a0,1");
6839+ asm volatile("sb $t1,0($a2)");
6840+ asm volatile("rotr $t1,$t1,8");
6841+asm volatile("nop");
6842+asm volatile("nop");
6843+ asm volatile("sb $t1,0($a2)");
6844+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6845+asm volatile("nop");
6846+asm volatile("nop");
6847+ asm volatile("sb $t1,0($a2)");
6848+ asm volatile("rotr $t1,$t1,8");
6849+ asm volatile("addu $v1,$zero,$a3");
6850+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6851+ asm volatile("sb $t1,0($a2)");
6852+ asm volatile("rotr $t1,$t1,8");
6853+ asm volatile("movn $v1,$t3,$t0");
6854+asm volatile("nop");
6855+ asm volatile("sb $t1,0($a2)");
6856+ asm volatile("rotr $t1,$t1,8");
6857+asm volatile("nop");
6858+asm volatile("nop");
6859+ asm volatile("sb $t1,0($a2)");
6860+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6861+asm volatile("nop");
6862+asm volatile("nop");
6863+ asm volatile("sb $t1,0($a2)");
6864+ asm volatile("rotr $t1,$t1,8");
6865+ asm volatile("addu $v1,$zero,$a3");
6866+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6867+ asm volatile("sb $t1,0($a2)");
6868+ asm volatile("rotr $t1,$t1,8");
6869+ asm volatile("movn $v1,$t3,$t0");
6870+asm volatile("nop");
6871+ asm volatile("sb $t1,0($a2)");
6872+ asm volatile("rotr $t1,$t1,8");
6873+asm volatile("nop");
6874+asm volatile("nop");
6875+ asm volatile("sb $t1,0($a2)");
6876+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6877+asm volatile("nop");
6878+asm volatile("nop");
6879+ asm volatile("sb $t1,0($a2)");
6880+ asm volatile("rotr $t1,$t1,8");
6881+ asm volatile("addu $v1,$zero,$a3");
6882+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6883+ asm volatile("sb $t1,0($a2)");
6884+ asm volatile("rotr $t1,$t1,8");
6885+ asm volatile("movn $v1,$t3,$t0");
6886+asm volatile("nop");
6887+ asm volatile("sb $t1,0($a2)");
6888+ asm volatile("rotr $t1,$t1,8");
6889+asm volatile("nop");
6890+asm volatile("nop");
6891+ asm volatile("sb $t1,0($a2)");
6892+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6893+asm volatile("nop");
6894+asm volatile("nop");
6895+ asm volatile("sb $t1,0($a2)");
6896+ asm volatile("rotr $t1,$t1,8");
6897+ asm volatile("addu $v1,$zero,$a3");
6898+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6899+ asm volatile("sb $t1,0($a2)");
6900+ asm volatile("rotr $t1,$t1,8");
6901+ asm volatile("movn $v1,$t3,$t0");
6902+asm volatile("nop");
6903+ asm volatile("sb $t1,0($a2)");
6904+ asm volatile("rotr $t1,$t1,8");
6905+asm volatile("nop");
6906+asm volatile("nop");
6907+ asm volatile("sb $t1,0($a2)");
6908+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6909+asm volatile("nop");
6910+asm volatile("nop");
6911+ asm volatile("sb $t1,0($a2)");
6912+ asm volatile("rotr $t1,$t1,8");
6913+ asm volatile("addu $v1,$zero,$a3");
6914+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6915+ asm volatile("sb $t1,0($a2)");
6916+ asm volatile("rotr $t1,$t1,8");
6917+ asm volatile("movn $v1,$t3,$t0");
6918+asm volatile("nop");
6919+ asm volatile("sb $t1,0($a2)");
6920+ asm volatile("rotr $t1,$t1,8");
6921+asm volatile("nop");
6922+asm volatile("nop");
6923+ asm volatile("sb $t1,0($a2)");
6924+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6925+asm volatile("nop");
6926+asm volatile("nop");
6927+ asm volatile("sb $t1,0($a2)");
6928+ asm volatile("rotr $t1,$t1,8");
6929+ asm volatile("addu $v1,$zero,$a3");
6930+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6931+ asm volatile("sb $t1,0($a2)");
6932+ asm volatile("rotr $t1,$t1,8");
6933+ asm volatile("movn $v1,$t3,$t0");
6934+asm volatile("nop");
6935+ asm volatile("sb $t1,0($a2)");
6936+ asm volatile("rotr $t1,$t1,8");
6937+asm volatile("nop");
6938+ asm volatile("lbu $t5,0($a0)");
6939+ asm volatile("sb $t1,0($a2)");
6940+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6941+ asm volatile("sll $t5,$t5,3");
6942+ asm volatile("addu $t5,$t5,$t4");
6943+ asm volatile("sb $t1,0($a2)");
6944+ asm volatile("rotr $t1,$t1,8");
6945+ asm volatile("addu $v1,$zero,$a3");
6946+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6947+ asm volatile("sb $t1,0($a2)");
6948+ asm volatile("rotr $t1,$t1,8");
6949+ asm volatile("movn $v1,$t3,$t0");
6950+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
6951+ asm volatile("sb $t1,0($a2)");
6952+ asm volatile("rotr $t1,$t1,8");
6953+ asm volatile("lbu $t2,0($t5)");
6954+asm volatile("nop");
6955+ asm volatile("sb $t1,0($a2)");
6956+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6957+ asm volatile("sll $t3,$t3,5");
6958+ asm volatile("addu $t3,$t3,$a1");
6959+ asm volatile("sb $t1,0($a2)");
6960+ asm volatile("rotr $t1,$t1,8");
6961+ asm volatile("addu $v1,$zero,$a3");
6962+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6963+ asm volatile("sb $t1,0($a2)");
6964+ asm volatile("rotr $t1,$t1,8");
6965+ asm volatile("movn $v1,$t3,$t0");
6966+ asm volatile("addiu $a0,$a0,1");
6967+ asm volatile("sb $t1,0($a2)");
6968+ asm volatile("rotr $t1,$t1,8");
6969+asm volatile("nop");
6970+asm volatile("nop");
6971+ asm volatile("sb $t1,0($a2)");
6972+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6973+asm volatile("nop");
6974+asm volatile("nop");
6975+ asm volatile("sb $t1,0($a2)");
6976+ asm volatile("rotr $t1,$t1,8");
6977+ asm volatile("addu $v1,$zero,$a3");
6978+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6979+ asm volatile("sb $t1,0($a2)");
6980+ asm volatile("rotr $t1,$t1,8");
6981+ asm volatile("movn $v1,$t3,$t0");
6982+asm volatile("nop");
6983+ asm volatile("sb $t1,0($a2)");
6984+ asm volatile("rotr $t1,$t1,8");
6985+asm volatile("nop");
6986+asm volatile("nop");
6987+ asm volatile("sb $t1,0($a2)");
6988+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
6989+asm volatile("nop");
6990+asm volatile("nop");
6991+ asm volatile("sb $t1,0($a2)");
6992+ asm volatile("rotr $t1,$t1,8");
6993+ asm volatile("addu $v1,$zero,$a3");
6994+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
6995+ asm volatile("sb $t1,0($a2)");
6996+ asm volatile("rotr $t1,$t1,8");
6997+ asm volatile("movn $v1,$t3,$t0");
6998+asm volatile("nop");
6999+ asm volatile("sb $t1,0($a2)");
7000+ asm volatile("rotr $t1,$t1,8");
7001+asm volatile("nop");
7002+asm volatile("nop");
7003+ asm volatile("sb $t1,0($a2)");
7004+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7005+asm volatile("nop");
7006+asm volatile("nop");
7007+ asm volatile("sb $t1,0($a2)");
7008+ asm volatile("rotr $t1,$t1,8");
7009+ asm volatile("addu $v1,$zero,$a3");
7010+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7011+ asm volatile("sb $t1,0($a2)");
7012+ asm volatile("rotr $t1,$t1,8");
7013+ asm volatile("movn $v1,$t3,$t0");
7014+asm volatile("nop");
7015+ asm volatile("sb $t1,0($a2)");
7016+ asm volatile("rotr $t1,$t1,8");
7017+asm volatile("nop");
7018+asm volatile("nop");
7019+ asm volatile("sb $t1,0($a2)");
7020+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7021+asm volatile("nop");
7022+asm volatile("nop");
7023+ asm volatile("sb $t1,0($a2)");
7024+ asm volatile("rotr $t1,$t1,8");
7025+ asm volatile("addu $v1,$zero,$a3");
7026+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7027+ asm volatile("sb $t1,0($a2)");
7028+ asm volatile("rotr $t1,$t1,8");
7029+ asm volatile("movn $v1,$t3,$t0");
7030+asm volatile("nop");
7031+ asm volatile("sb $t1,0($a2)");
7032+ asm volatile("rotr $t1,$t1,8");
7033+asm volatile("nop");
7034+asm volatile("nop");
7035+ asm volatile("sb $t1,0($a2)");
7036+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7037+asm volatile("nop");
7038+asm volatile("nop");
7039+ asm volatile("sb $t1,0($a2)");
7040+ asm volatile("rotr $t1,$t1,8");
7041+ asm volatile("addu $v1,$zero,$a3");
7042+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7043+ asm volatile("sb $t1,0($a2)");
7044+ asm volatile("rotr $t1,$t1,8");
7045+ asm volatile("movn $v1,$t3,$t0");
7046+asm volatile("nop");
7047+ asm volatile("sb $t1,0($a2)");
7048+ asm volatile("rotr $t1,$t1,8");
7049+asm volatile("nop");
7050+asm volatile("nop");
7051+ asm volatile("sb $t1,0($a2)");
7052+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7053+asm volatile("nop");
7054+asm volatile("nop");
7055+ asm volatile("sb $t1,0($a2)");
7056+ asm volatile("rotr $t1,$t1,8");
7057+ asm volatile("addu $v1,$zero,$a3");
7058+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7059+ asm volatile("sb $t1,0($a2)");
7060+ asm volatile("rotr $t1,$t1,8");
7061+ asm volatile("movn $v1,$t3,$t0");
7062+asm volatile("nop");
7063+ asm volatile("sb $t1,0($a2)");
7064+ asm volatile("rotr $t1,$t1,8");
7065+asm volatile("nop");
7066+ asm volatile("lbu $t5,0($a0)");
7067+ asm volatile("sb $t1,0($a2)");
7068+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7069+ asm volatile("sll $t5,$t5,3");
7070+ asm volatile("addu $t5,$t5,$t4");
7071+ asm volatile("sb $t1,0($a2)");
7072+ asm volatile("rotr $t1,$t1,8");
7073+ asm volatile("addu $v1,$zero,$a3");
7074+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7075+ asm volatile("sb $t1,0($a2)");
7076+ asm volatile("rotr $t1,$t1,8");
7077+ asm volatile("movn $v1,$t3,$t0");
7078+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
7079+ asm volatile("sb $t1,0($a2)");
7080+ asm volatile("rotr $t1,$t1,8");
7081+ asm volatile("lbu $t2,0($t5)");
7082+asm volatile("nop");
7083+ asm volatile("sb $t1,0($a2)");
7084+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7085+ asm volatile("sll $t3,$t3,5");
7086+ asm volatile("addu $t3,$t3,$a1");
7087+ asm volatile("sb $t1,0($a2)");
7088+ asm volatile("rotr $t1,$t1,8");
7089+ asm volatile("addu $v1,$zero,$a3");
7090+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7091+ asm volatile("sb $t1,0($a2)");
7092+ asm volatile("rotr $t1,$t1,8");
7093+ asm volatile("movn $v1,$t3,$t0");
7094+ asm volatile("addiu $a0,$a0,1");
7095+ asm volatile("sb $t1,0($a2)");
7096+ asm volatile("rotr $t1,$t1,8");
7097+asm volatile("nop");
7098+asm volatile("nop");
7099+ asm volatile("sb $t1,0($a2)");
7100+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7101+asm volatile("nop");
7102+asm volatile("nop");
7103+ asm volatile("sb $t1,0($a2)");
7104+ asm volatile("rotr $t1,$t1,8");
7105+ asm volatile("addu $v1,$zero,$a3");
7106+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7107+ asm volatile("sb $t1,0($a2)");
7108+ asm volatile("rotr $t1,$t1,8");
7109+ asm volatile("movn $v1,$t3,$t0");
7110+asm volatile("nop");
7111+ asm volatile("sb $t1,0($a2)");
7112+ asm volatile("rotr $t1,$t1,8");
7113+asm volatile("nop");
7114+asm volatile("nop");
7115+ asm volatile("sb $t1,0($a2)");
7116+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7117+asm volatile("nop");
7118+asm volatile("nop");
7119+ asm volatile("sb $t1,0($a2)");
7120+ asm volatile("rotr $t1,$t1,8");
7121+ asm volatile("addu $v1,$zero,$a3");
7122+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7123+ asm volatile("sb $t1,0($a2)");
7124+ asm volatile("rotr $t1,$t1,8");
7125+ asm volatile("movn $v1,$t3,$t0");
7126+asm volatile("nop");
7127+ asm volatile("sb $t1,0($a2)");
7128+ asm volatile("rotr $t1,$t1,8");
7129+asm volatile("nop");
7130+asm volatile("nop");
7131+ asm volatile("sb $t1,0($a2)");
7132+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7133+asm volatile("nop");
7134+asm volatile("nop");
7135+ asm volatile("sb $t1,0($a2)");
7136+ asm volatile("rotr $t1,$t1,8");
7137+ asm volatile("addu $v1,$zero,$a3");
7138+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7139+ asm volatile("sb $t1,0($a2)");
7140+ asm volatile("rotr $t1,$t1,8");
7141+ asm volatile("movn $v1,$t3,$t0");
7142+asm volatile("nop");
7143+ asm volatile("sb $t1,0($a2)");
7144+ asm volatile("rotr $t1,$t1,8");
7145+asm volatile("nop");
7146+asm volatile("nop");
7147+ asm volatile("sb $t1,0($a2)");
7148+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7149+asm volatile("nop");
7150+asm volatile("nop");
7151+ asm volatile("sb $t1,0($a2)");
7152+ asm volatile("rotr $t1,$t1,8");
7153+ asm volatile("addu $v1,$zero,$a3");
7154+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7155+ asm volatile("sb $t1,0($a2)");
7156+ asm volatile("rotr $t1,$t1,8");
7157+ asm volatile("movn $v1,$t3,$t0");
7158+asm volatile("nop");
7159+ asm volatile("sb $t1,0($a2)");
7160+ asm volatile("rotr $t1,$t1,8");
7161+asm volatile("nop");
7162+asm volatile("nop");
7163+ asm volatile("sb $t1,0($a2)");
7164+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7165+asm volatile("nop");
7166+asm volatile("nop");
7167+ asm volatile("sb $t1,0($a2)");
7168+ asm volatile("rotr $t1,$t1,8");
7169+ asm volatile("addu $v1,$zero,$a3");
7170+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7171+ asm volatile("sb $t1,0($a2)");
7172+ asm volatile("rotr $t1,$t1,8");
7173+ asm volatile("movn $v1,$t3,$t0");
7174+asm volatile("nop");
7175+ asm volatile("sb $t1,0($a2)");
7176+ asm volatile("rotr $t1,$t1,8");
7177+asm volatile("nop");
7178+asm volatile("nop");
7179+ asm volatile("sb $t1,0($a2)");
7180+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7181+asm volatile("nop");
7182+asm volatile("nop");
7183+ asm volatile("sb $t1,0($a2)");
7184+ asm volatile("rotr $t1,$t1,8");
7185+ asm volatile("addu $v1,$zero,$a3");
7186+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7187+ asm volatile("sb $t1,0($a2)");
7188+ asm volatile("rotr $t1,$t1,8");
7189+ asm volatile("movn $v1,$t3,$t0");
7190+asm volatile("nop");
7191+ asm volatile("sb $t1,0($a2)");
7192+ asm volatile("rotr $t1,$t1,8");
7193+asm volatile("nop");
7194+ asm volatile("lbu $t5,0($a0)");
7195+ asm volatile("sb $t1,0($a2)");
7196+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7197+ asm volatile("sll $t5,$t5,3");
7198+ asm volatile("addu $t5,$t5,$t4");
7199+ asm volatile("sb $t1,0($a2)");
7200+ asm volatile("rotr $t1,$t1,8");
7201+ asm volatile("addu $v1,$zero,$a3");
7202+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7203+ asm volatile("sb $t1,0($a2)");
7204+ asm volatile("rotr $t1,$t1,8");
7205+ asm volatile("movn $v1,$t3,$t0");
7206+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
7207+ asm volatile("sb $t1,0($a2)");
7208+ asm volatile("rotr $t1,$t1,8");
7209+ asm volatile("lbu $t2,0($t5)");
7210+asm volatile("nop");
7211+ asm volatile("sb $t1,0($a2)");
7212+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7213+ asm volatile("sll $t3,$t3,5");
7214+ asm volatile("addu $t3,$t3,$a1");
7215+ asm volatile("sb $t1,0($a2)");
7216+ asm volatile("rotr $t1,$t1,8");
7217+ asm volatile("addu $v1,$zero,$a3");
7218+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7219+ asm volatile("sb $t1,0($a2)");
7220+ asm volatile("rotr $t1,$t1,8");
7221+ asm volatile("movn $v1,$t3,$t0");
7222+ asm volatile("addiu $a0,$a0,1");
7223+ asm volatile("sb $t1,0($a2)");
7224+ asm volatile("rotr $t1,$t1,8");
7225+asm volatile("nop");
7226+asm volatile("nop");
7227+ asm volatile("sb $t1,0($a2)");
7228+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7229+asm volatile("nop");
7230+asm volatile("nop");
7231+ asm volatile("sb $t1,0($a2)");
7232+ asm volatile("rotr $t1,$t1,8");
7233+ asm volatile("addu $v1,$zero,$a3");
7234+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7235+ asm volatile("sb $t1,0($a2)");
7236+ asm volatile("rotr $t1,$t1,8");
7237+ asm volatile("movn $v1,$t3,$t0");
7238+asm volatile("nop");
7239+ asm volatile("sb $t1,0($a2)");
7240+ asm volatile("rotr $t1,$t1,8");
7241+asm volatile("nop");
7242+asm volatile("nop");
7243+ asm volatile("sb $t1,0($a2)");
7244+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7245+asm volatile("nop");
7246+asm volatile("nop");
7247+ asm volatile("sb $t1,0($a2)");
7248+ asm volatile("rotr $t1,$t1,8");
7249+ asm volatile("addu $v1,$zero,$a3");
7250+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7251+ asm volatile("sb $t1,0($a2)");
7252+ asm volatile("rotr $t1,$t1,8");
7253+ asm volatile("movn $v1,$t3,$t0");
7254+asm volatile("nop");
7255+ asm volatile("sb $t1,0($a2)");
7256+ asm volatile("rotr $t1,$t1,8");
7257+asm volatile("nop");
7258+asm volatile("nop");
7259+ asm volatile("sb $t1,0($a2)");
7260+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7261+asm volatile("nop");
7262+asm volatile("nop");
7263+ asm volatile("sb $t1,0($a2)");
7264+ asm volatile("rotr $t1,$t1,8");
7265+ asm volatile("addu $v1,$zero,$a3");
7266+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7267+ asm volatile("sb $t1,0($a2)");
7268+ asm volatile("rotr $t1,$t1,8");
7269+ asm volatile("movn $v1,$t3,$t0");
7270+asm volatile("nop");
7271+ asm volatile("sb $t1,0($a2)");
7272+ asm volatile("rotr $t1,$t1,8");
7273+asm volatile("nop");
7274+asm volatile("nop");
7275+ asm volatile("sb $t1,0($a2)");
7276+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7277+asm volatile("nop");
7278+asm volatile("nop");
7279+ asm volatile("sb $t1,0($a2)");
7280+ asm volatile("rotr $t1,$t1,8");
7281+ asm volatile("addu $v1,$zero,$a3");
7282+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7283+ asm volatile("sb $t1,0($a2)");
7284+ asm volatile("rotr $t1,$t1,8");
7285+ asm volatile("movn $v1,$t3,$t0");
7286+asm volatile("nop");
7287+ asm volatile("sb $t1,0($a2)");
7288+ asm volatile("rotr $t1,$t1,8");
7289+asm volatile("nop");
7290+asm volatile("nop");
7291+ asm volatile("sb $t1,0($a2)");
7292+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7293+asm volatile("nop");
7294+asm volatile("nop");
7295+ asm volatile("sb $t1,0($a2)");
7296+ asm volatile("rotr $t1,$t1,8");
7297+ asm volatile("addu $v1,$zero,$a3");
7298+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7299+ asm volatile("sb $t1,0($a2)");
7300+ asm volatile("rotr $t1,$t1,8");
7301+ asm volatile("movn $v1,$t3,$t0");
7302+asm volatile("nop");
7303+ asm volatile("sb $t1,0($a2)");
7304+ asm volatile("rotr $t1,$t1,8");
7305+asm volatile("nop");
7306+asm volatile("nop");
7307+ asm volatile("sb $t1,0($a2)");
7308+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7309+asm volatile("nop");
7310+asm volatile("nop");
7311+ asm volatile("sb $t1,0($a2)");
7312+ asm volatile("rotr $t1,$t1,8");
7313+ asm volatile("addu $v1,$zero,$a3");
7314+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7315+ asm volatile("sb $t1,0($a2)");
7316+ asm volatile("rotr $t1,$t1,8");
7317+ asm volatile("movn $v1,$t3,$t0");
7318+asm volatile("nop");
7319+ asm volatile("sb $t1,0($a2)");
7320+ asm volatile("rotr $t1,$t1,8");
7321+asm volatile("nop");
7322+ asm volatile("lbu $t5,0($a0)");
7323+ asm volatile("sb $t1,0($a2)");
7324+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7325+ asm volatile("sll $t5,$t5,3");
7326+ asm volatile("addu $t5,$t5,$t4");
7327+ asm volatile("sb $t1,0($a2)");
7328+ asm volatile("rotr $t1,$t1,8");
7329+ asm volatile("addu $v1,$zero,$a3");
7330+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7331+ asm volatile("sb $t1,0($a2)");
7332+ asm volatile("rotr $t1,$t1,8");
7333+ asm volatile("movn $v1,$t3,$t0");
7334+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
7335+ asm volatile("sb $t1,0($a2)");
7336+ asm volatile("rotr $t1,$t1,8");
7337+ asm volatile("lbu $t2,0($t5)");
7338+asm volatile("nop");
7339+ asm volatile("sb $t1,0($a2)");
7340+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7341+ asm volatile("sll $t3,$t3,5");
7342+ asm volatile("addu $t3,$t3,$a1");
7343+ asm volatile("sb $t1,0($a2)");
7344+ asm volatile("rotr $t1,$t1,8");
7345+ asm volatile("addu $v1,$zero,$a3");
7346+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7347+ asm volatile("sb $t1,0($a2)");
7348+ asm volatile("rotr $t1,$t1,8");
7349+ asm volatile("movn $v1,$t3,$t0");
7350+ asm volatile("addiu $a0,$a0,1");
7351+ asm volatile("sb $t1,0($a2)");
7352+ asm volatile("rotr $t1,$t1,8");
7353+asm volatile("nop");
7354+asm volatile("nop");
7355+ asm volatile("sb $t1,0($a2)");
7356+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7357+asm volatile("nop");
7358+asm volatile("nop");
7359+ asm volatile("sb $t1,0($a2)");
7360+ asm volatile("rotr $t1,$t1,8");
7361+ asm volatile("addu $v1,$zero,$a3");
7362+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7363+ asm volatile("sb $t1,0($a2)");
7364+ asm volatile("rotr $t1,$t1,8");
7365+ asm volatile("movn $v1,$t3,$t0");
7366+asm volatile("nop");
7367+ asm volatile("sb $t1,0($a2)");
7368+ asm volatile("rotr $t1,$t1,8");
7369+asm volatile("nop");
7370+asm volatile("nop");
7371+ asm volatile("sb $t1,0($a2)");
7372+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7373+asm volatile("nop");
7374+asm volatile("nop");
7375+ asm volatile("sb $t1,0($a2)");
7376+ asm volatile("rotr $t1,$t1,8");
7377+ asm volatile("addu $v1,$zero,$a3");
7378+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7379+ asm volatile("sb $t1,0($a2)");
7380+ asm volatile("rotr $t1,$t1,8");
7381+ asm volatile("movn $v1,$t3,$t0");
7382+asm volatile("nop");
7383+ asm volatile("sb $t1,0($a2)");
7384+ asm volatile("rotr $t1,$t1,8");
7385+asm volatile("nop");
7386+asm volatile("nop");
7387+ asm volatile("sb $t1,0($a2)");
7388+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7389+asm volatile("nop");
7390+asm volatile("nop");
7391+ asm volatile("sb $t1,0($a2)");
7392+ asm volatile("rotr $t1,$t1,8");
7393+ asm volatile("addu $v1,$zero,$a3");
7394+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7395+ asm volatile("sb $t1,0($a2)");
7396+ asm volatile("rotr $t1,$t1,8");
7397+ asm volatile("movn $v1,$t3,$t0");
7398+asm volatile("nop");
7399+ asm volatile("sb $t1,0($a2)");
7400+ asm volatile("rotr $t1,$t1,8");
7401+asm volatile("nop");
7402+asm volatile("nop");
7403+ asm volatile("sb $t1,0($a2)");
7404+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7405+asm volatile("nop");
7406+asm volatile("nop");
7407+ asm volatile("sb $t1,0($a2)");
7408+ asm volatile("rotr $t1,$t1,8");
7409+ asm volatile("addu $v1,$zero,$a3");
7410+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7411+ asm volatile("sb $t1,0($a2)");
7412+ asm volatile("rotr $t1,$t1,8");
7413+ asm volatile("movn $v1,$t3,$t0");
7414+asm volatile("nop");
7415+ asm volatile("sb $t1,0($a2)");
7416+ asm volatile("rotr $t1,$t1,8");
7417+asm volatile("nop");
7418+asm volatile("nop");
7419+ asm volatile("sb $t1,0($a2)");
7420+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7421+asm volatile("nop");
7422+asm volatile("nop");
7423+ asm volatile("sb $t1,0($a2)");
7424+ asm volatile("rotr $t1,$t1,8");
7425+ asm volatile("addu $v1,$zero,$a3");
7426+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7427+ asm volatile("sb $t1,0($a2)");
7428+ asm volatile("rotr $t1,$t1,8");
7429+ asm volatile("movn $v1,$t3,$t0");
7430+asm volatile("nop");
7431+ asm volatile("sb $t1,0($a2)");
7432+ asm volatile("rotr $t1,$t1,8");
7433+asm volatile("nop");
7434+asm volatile("nop");
7435+ asm volatile("sb $t1,0($a2)");
7436+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7437+asm volatile("nop");
7438+asm volatile("nop");
7439+ asm volatile("sb $t1,0($a2)");
7440+ asm volatile("rotr $t1,$t1,8");
7441+ asm volatile("addu $v1,$zero,$a3");
7442+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7443+ asm volatile("sb $t1,0($a2)");
7444+ asm volatile("rotr $t1,$t1,8");
7445+ asm volatile("movn $v1,$t3,$t0");
7446+asm volatile("nop");
7447+ asm volatile("sb $t1,0($a2)");
7448+ asm volatile("rotr $t1,$t1,8");
7449+asm volatile("nop");
7450+ asm volatile("lbu $t5,0($a0)");
7451+ asm volatile("sb $t1,0($a2)");
7452+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7453+ asm volatile("sll $t5,$t5,3");
7454+ asm volatile("addu $t5,$t5,$t4");
7455+ asm volatile("sb $t1,0($a2)");
7456+ asm volatile("rotr $t1,$t1,8");
7457+ asm volatile("addu $v1,$zero,$a3");
7458+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7459+ asm volatile("sb $t1,0($a2)");
7460+ asm volatile("rotr $t1,$t1,8");
7461+ asm volatile("movn $v1,$t3,$t0");
7462+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
7463+ asm volatile("sb $t1,0($a2)");
7464+ asm volatile("rotr $t1,$t1,8");
7465+ asm volatile("lbu $t2,0($t5)");
7466+asm volatile("nop");
7467+ asm volatile("sb $t1,0($a2)");
7468+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7469+ asm volatile("sll $t3,$t3,5");
7470+ asm volatile("addu $t3,$t3,$a1");
7471+ asm volatile("sb $t1,0($a2)");
7472+ asm volatile("rotr $t1,$t1,8");
7473+ asm volatile("addu $v1,$zero,$a3");
7474+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7475+ asm volatile("sb $t1,0($a2)");
7476+ asm volatile("rotr $t1,$t1,8");
7477+ asm volatile("movn $v1,$t3,$t0");
7478+ asm volatile("addiu $a0,$a0,1");
7479+ asm volatile("sb $t1,0($a2)");
7480+ asm volatile("rotr $t1,$t1,8");
7481+asm volatile("nop");
7482+asm volatile("nop");
7483+ asm volatile("sb $t1,0($a2)");
7484+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7485+asm volatile("nop");
7486+asm volatile("nop");
7487+ asm volatile("sb $t1,0($a2)");
7488+ asm volatile("rotr $t1,$t1,8");
7489+ asm volatile("addu $v1,$zero,$a3");
7490+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7491+ asm volatile("sb $t1,0($a2)");
7492+ asm volatile("rotr $t1,$t1,8");
7493+ asm volatile("movn $v1,$t3,$t0");
7494+asm volatile("nop");
7495+ asm volatile("sb $t1,0($a2)");
7496+ asm volatile("rotr $t1,$t1,8");
7497+asm volatile("nop");
7498+asm volatile("nop");
7499+ asm volatile("sb $t1,0($a2)");
7500+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7501+asm volatile("nop");
7502+asm volatile("nop");
7503+ asm volatile("sb $t1,0($a2)");
7504+ asm volatile("rotr $t1,$t1,8");
7505+ asm volatile("addu $v1,$zero,$a3");
7506+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7507+ asm volatile("sb $t1,0($a2)");
7508+ asm volatile("rotr $t1,$t1,8");
7509+ asm volatile("movn $v1,$t3,$t0");
7510+asm volatile("nop");
7511+ asm volatile("sb $t1,0($a2)");
7512+ asm volatile("rotr $t1,$t1,8");
7513+asm volatile("nop");
7514+asm volatile("nop");
7515+ asm volatile("sb $t1,0($a2)");
7516+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7517+asm volatile("nop");
7518+asm volatile("nop");
7519+ asm volatile("sb $t1,0($a2)");
7520+ asm volatile("rotr $t1,$t1,8");
7521+ asm volatile("addu $v1,$zero,$a3");
7522+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7523+ asm volatile("sb $t1,0($a2)");
7524+ asm volatile("rotr $t1,$t1,8");
7525+ asm volatile("movn $v1,$t3,$t0");
7526+asm volatile("nop");
7527+ asm volatile("sb $t1,0($a2)");
7528+ asm volatile("rotr $t1,$t1,8");
7529+asm volatile("nop");
7530+asm volatile("nop");
7531+ asm volatile("sb $t1,0($a2)");
7532+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7533+asm volatile("nop");
7534+asm volatile("nop");
7535+ asm volatile("sb $t1,0($a2)");
7536+ asm volatile("rotr $t1,$t1,8");
7537+ asm volatile("addu $v1,$zero,$a3");
7538+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7539+ asm volatile("sb $t1,0($a2)");
7540+ asm volatile("rotr $t1,$t1,8");
7541+ asm volatile("movn $v1,$t3,$t0");
7542+asm volatile("nop");
7543+ asm volatile("sb $t1,0($a2)");
7544+ asm volatile("rotr $t1,$t1,8");
7545+asm volatile("nop");
7546+asm volatile("nop");
7547+ asm volatile("sb $t1,0($a2)");
7548+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7549+asm volatile("nop");
7550+asm volatile("nop");
7551+ asm volatile("sb $t1,0($a2)");
7552+ asm volatile("rotr $t1,$t1,8");
7553+ asm volatile("addu $v1,$zero,$a3");
7554+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7555+ asm volatile("sb $t1,0($a2)");
7556+ asm volatile("rotr $t1,$t1,8");
7557+ asm volatile("movn $v1,$t3,$t0");
7558+asm volatile("nop");
7559+ asm volatile("sb $t1,0($a2)");
7560+ asm volatile("rotr $t1,$t1,8");
7561+asm volatile("nop");
7562+asm volatile("nop");
7563+ asm volatile("sb $t1,0($a2)");
7564+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7565+asm volatile("nop");
7566+asm volatile("nop");
7567+ asm volatile("sb $t1,0($a2)");
7568+ asm volatile("rotr $t1,$t1,8");
7569+ asm volatile("addu $v1,$zero,$a3");
7570+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7571+ asm volatile("sb $t1,0($a2)");
7572+ asm volatile("rotr $t1,$t1,8");
7573+ asm volatile("movn $v1,$t3,$t0");
7574+asm volatile("nop");
7575+ asm volatile("sb $t1,0($a2)");
7576+ asm volatile("rotr $t1,$t1,8");
7577+asm volatile("nop");
7578+ asm volatile("lbu $t5,0($a0)");
7579+ asm volatile("sb $t1,0($a2)");
7580+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7581+ asm volatile("sll $t5,$t5,3");
7582+ asm volatile("addu $t5,$t5,$t4");
7583+ asm volatile("sb $t1,0($a2)");
7584+ asm volatile("rotr $t1,$t1,8");
7585+ asm volatile("addu $v1,$zero,$a3");
7586+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7587+ asm volatile("sb $t1,0($a2)");
7588+ asm volatile("rotr $t1,$t1,8");
7589+ asm volatile("movn $v1,$t3,$t0");
7590+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
7591+ asm volatile("sb $t1,0($a2)");
7592+ asm volatile("rotr $t1,$t1,8");
7593+ asm volatile("lbu $t2,0($t5)");
7594+asm volatile("nop");
7595+ asm volatile("sb $t1,0($a2)");
7596+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7597+ asm volatile("sll $t3,$t3,5");
7598+ asm volatile("addu $t3,$t3,$a1");
7599+ asm volatile("sb $t1,0($a2)");
7600+ asm volatile("rotr $t1,$t1,8");
7601+ asm volatile("addu $v1,$zero,$a3");
7602+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7603+ asm volatile("sb $t1,0($a2)");
7604+ asm volatile("rotr $t1,$t1,8");
7605+ asm volatile("movn $v1,$t3,$t0");
7606+ asm volatile("addiu $a0,$a0,1");
7607+ asm volatile("sb $t1,0($a2)");
7608+ asm volatile("rotr $t1,$t1,8");
7609+asm volatile("nop");
7610+asm volatile("nop");
7611+ asm volatile("sb $t1,0($a2)");
7612+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7613+asm volatile("nop");
7614+asm volatile("nop");
7615+ asm volatile("sb $t1,0($a2)");
7616+ asm volatile("rotr $t1,$t1,8");
7617+ asm volatile("addu $v1,$zero,$a3");
7618+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7619+ asm volatile("sb $t1,0($a2)");
7620+ asm volatile("rotr $t1,$t1,8");
7621+ asm volatile("movn $v1,$t3,$t0");
7622+asm volatile("nop");
7623+ asm volatile("sb $t1,0($a2)");
7624+ asm volatile("rotr $t1,$t1,8");
7625+asm volatile("nop");
7626+asm volatile("nop");
7627+ asm volatile("sb $t1,0($a2)");
7628+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7629+asm volatile("nop");
7630+asm volatile("nop");
7631+ asm volatile("sb $t1,0($a2)");
7632+ asm volatile("rotr $t1,$t1,8");
7633+ asm volatile("addu $v1,$zero,$a3");
7634+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7635+ asm volatile("sb $t1,0($a2)");
7636+ asm volatile("rotr $t1,$t1,8");
7637+ asm volatile("movn $v1,$t3,$t0");
7638+asm volatile("nop");
7639+ asm volatile("sb $t1,0($a2)");
7640+ asm volatile("rotr $t1,$t1,8");
7641+asm volatile("nop");
7642+asm volatile("nop");
7643+ asm volatile("sb $t1,0($a2)");
7644+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7645+asm volatile("nop");
7646+asm volatile("nop");
7647+ asm volatile("sb $t1,0($a2)");
7648+ asm volatile("rotr $t1,$t1,8");
7649+ asm volatile("addu $v1,$zero,$a3");
7650+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7651+ asm volatile("sb $t1,0($a2)");
7652+ asm volatile("rotr $t1,$t1,8");
7653+ asm volatile("movn $v1,$t3,$t0");
7654+asm volatile("nop");
7655+ asm volatile("sb $t1,0($a2)");
7656+ asm volatile("rotr $t1,$t1,8");
7657+asm volatile("nop");
7658+asm volatile("nop");
7659+ asm volatile("sb $t1,0($a2)");
7660+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7661+asm volatile("nop");
7662+asm volatile("nop");
7663+ asm volatile("sb $t1,0($a2)");
7664+ asm volatile("rotr $t1,$t1,8");
7665+ asm volatile("addu $v1,$zero,$a3");
7666+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7667+ asm volatile("sb $t1,0($a2)");
7668+ asm volatile("rotr $t1,$t1,8");
7669+ asm volatile("movn $v1,$t3,$t0");
7670+asm volatile("nop");
7671+ asm volatile("sb $t1,0($a2)");
7672+ asm volatile("rotr $t1,$t1,8");
7673+asm volatile("nop");
7674+asm volatile("nop");
7675+ asm volatile("sb $t1,0($a2)");
7676+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7677+asm volatile("nop");
7678+asm volatile("nop");
7679+ asm volatile("sb $t1,0($a2)");
7680+ asm volatile("rotr $t1,$t1,8");
7681+ asm volatile("addu $v1,$zero,$a3");
7682+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7683+ asm volatile("sb $t1,0($a2)");
7684+ asm volatile("rotr $t1,$t1,8");
7685+ asm volatile("movn $v1,$t3,$t0");
7686+asm volatile("nop");
7687+ asm volatile("sb $t1,0($a2)");
7688+ asm volatile("rotr $t1,$t1,8");
7689+asm volatile("nop");
7690+asm volatile("nop");
7691+ asm volatile("sb $t1,0($a2)");
7692+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7693+asm volatile("nop");
7694+asm volatile("nop");
7695+ asm volatile("sb $t1,0($a2)");
7696+ asm volatile("rotr $t1,$t1,8");
7697+ asm volatile("addu $v1,$zero,$a3");
7698+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7699+ asm volatile("sb $t1,0($a2)");
7700+ asm volatile("rotr $t1,$t1,8");
7701+ asm volatile("movn $v1,$t3,$t0");
7702+asm volatile("nop");
7703+ asm volatile("sb $t1,0($a2)");
7704+ asm volatile("rotr $t1,$t1,8");
7705+asm volatile("nop");
7706+ asm volatile("lbu $t5,0($a0)");
7707+ asm volatile("sb $t1,0($a2)");
7708+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7709+ asm volatile("sll $t5,$t5,3");
7710+ asm volatile("addu $t5,$t5,$t4");
7711+ asm volatile("sb $t1,0($a2)");
7712+ asm volatile("rotr $t1,$t1,8");
7713+ asm volatile("addu $v1,$zero,$a3");
7714+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7715+ asm volatile("sb $t1,0($a2)");
7716+ asm volatile("rotr $t1,$t1,8");
7717+ asm volatile("movn $v1,$t3,$t0");
7718+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
7719+ asm volatile("sb $t1,0($a2)");
7720+ asm volatile("rotr $t1,$t1,8");
7721+ asm volatile("lbu $t2,0($t5)");
7722+asm volatile("nop");
7723+ asm volatile("sb $t1,0($a2)");
7724+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7725+ asm volatile("sll $t3,$t3,5");
7726+ asm volatile("addu $t3,$t3,$a1");
7727+ asm volatile("sb $t1,0($a2)");
7728+ asm volatile("rotr $t1,$t1,8");
7729+ asm volatile("addu $v1,$zero,$a3");
7730+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7731+ asm volatile("sb $t1,0($a2)");
7732+ asm volatile("rotr $t1,$t1,8");
7733+ asm volatile("movn $v1,$t3,$t0");
7734+ asm volatile("addiu $a0,$a0,1");
7735+ asm volatile("sb $t1,0($a2)");
7736+ asm volatile("rotr $t1,$t1,8");
7737+asm volatile("nop");
7738+asm volatile("nop");
7739+ asm volatile("sb $t1,0($a2)");
7740+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7741+asm volatile("nop");
7742+asm volatile("nop");
7743+ asm volatile("sb $t1,0($a2)");
7744+ asm volatile("rotr $t1,$t1,8");
7745+ asm volatile("addu $v1,$zero,$a3");
7746+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7747+ asm volatile("sb $t1,0($a2)");
7748+ asm volatile("rotr $t1,$t1,8");
7749+ asm volatile("movn $v1,$t3,$t0");
7750+asm volatile("nop");
7751+ asm volatile("sb $t1,0($a2)");
7752+ asm volatile("rotr $t1,$t1,8");
7753+asm volatile("nop");
7754+asm volatile("nop");
7755+ asm volatile("sb $t1,0($a2)");
7756+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7757+asm volatile("nop");
7758+asm volatile("nop");
7759+ asm volatile("sb $t1,0($a2)");
7760+ asm volatile("rotr $t1,$t1,8");
7761+ asm volatile("addu $v1,$zero,$a3");
7762+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7763+ asm volatile("sb $t1,0($a2)");
7764+ asm volatile("rotr $t1,$t1,8");
7765+ asm volatile("movn $v1,$t3,$t0");
7766+asm volatile("nop");
7767+ asm volatile("sb $t1,0($a2)");
7768+ asm volatile("rotr $t1,$t1,8");
7769+asm volatile("nop");
7770+asm volatile("nop");
7771+ asm volatile("sb $t1,0($a2)");
7772+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7773+asm volatile("nop");
7774+asm volatile("nop");
7775+ asm volatile("sb $t1,0($a2)");
7776+ asm volatile("rotr $t1,$t1,8");
7777+ asm volatile("addu $v1,$zero,$a3");
7778+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7779+ asm volatile("sb $t1,0($a2)");
7780+ asm volatile("rotr $t1,$t1,8");
7781+ asm volatile("movn $v1,$t3,$t0");
7782+asm volatile("nop");
7783+ asm volatile("sb $t1,0($a2)");
7784+ asm volatile("rotr $t1,$t1,8");
7785+asm volatile("nop");
7786+asm volatile("nop");
7787+ asm volatile("sb $t1,0($a2)");
7788+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7789+asm volatile("nop");
7790+asm volatile("nop");
7791+ asm volatile("sb $t1,0($a2)");
7792+ asm volatile("rotr $t1,$t1,8");
7793+ asm volatile("addu $v1,$zero,$a3");
7794+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7795+ asm volatile("sb $t1,0($a2)");
7796+ asm volatile("rotr $t1,$t1,8");
7797+ asm volatile("movn $v1,$t3,$t0");
7798+asm volatile("nop");
7799+ asm volatile("sb $t1,0($a2)");
7800+ asm volatile("rotr $t1,$t1,8");
7801+asm volatile("nop");
7802+asm volatile("nop");
7803+ asm volatile("sb $t1,0($a2)");
7804+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7805+asm volatile("nop");
7806+asm volatile("nop");
7807+ asm volatile("sb $t1,0($a2)");
7808+ asm volatile("rotr $t1,$t1,8");
7809+ asm volatile("addu $v1,$zero,$a3");
7810+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7811+ asm volatile("sb $t1,0($a2)");
7812+ asm volatile("rotr $t1,$t1,8");
7813+ asm volatile("movn $v1,$t3,$t0");
7814+asm volatile("nop");
7815+ asm volatile("sb $t1,0($a2)");
7816+ asm volatile("rotr $t1,$t1,8");
7817+asm volatile("nop");
7818+asm volatile("nop");
7819+ asm volatile("sb $t1,0($a2)");
7820+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7821+asm volatile("nop");
7822+asm volatile("nop");
7823+ asm volatile("sb $t1,0($a2)");
7824+ asm volatile("rotr $t1,$t1,8");
7825+ asm volatile("addu $v1,$zero,$a3");
7826+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7827+ asm volatile("sb $t1,0($a2)");
7828+ asm volatile("rotr $t1,$t1,8");
7829+ asm volatile("movn $v1,$t3,$t0");
7830+asm volatile("nop");
7831+ asm volatile("sb $t1,0($a2)");
7832+ asm volatile("rotr $t1,$t1,8");
7833+asm volatile("nop");
7834+ asm volatile("lbu $t5,0($a0)");
7835+ asm volatile("sb $t1,0($a2)");
7836+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7837+ asm volatile("sll $t5,$t5,3");
7838+ asm volatile("addu $t5,$t5,$t4");
7839+ asm volatile("sb $t1,0($a2)");
7840+ asm volatile("rotr $t1,$t1,8");
7841+ asm volatile("addu $v1,$zero,$a3");
7842+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7843+ asm volatile("sb $t1,0($a2)");
7844+ asm volatile("rotr $t1,$t1,8");
7845+ asm volatile("movn $v1,$t3,$t0");
7846+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
7847+ asm volatile("sb $t1,0($a2)");
7848+ asm volatile("rotr $t1,$t1,8");
7849+ asm volatile("lbu $t2,0($t5)");
7850+asm volatile("nop");
7851+ asm volatile("sb $t1,0($a2)");
7852+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7853+ asm volatile("sll $t3,$t3,5");
7854+ asm volatile("addu $t3,$t3,$a1");
7855+ asm volatile("sb $t1,0($a2)");
7856+ asm volatile("rotr $t1,$t1,8");
7857+ asm volatile("addu $v1,$zero,$a3");
7858+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7859+ asm volatile("sb $t1,0($a2)");
7860+ asm volatile("rotr $t1,$t1,8");
7861+ asm volatile("movn $v1,$t3,$t0");
7862+ asm volatile("addiu $a0,$a0,1");
7863+ asm volatile("sb $t1,0($a2)");
7864+ asm volatile("rotr $t1,$t1,8");
7865+asm volatile("nop");
7866+asm volatile("nop");
7867+ asm volatile("sb $t1,0($a2)");
7868+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7869+asm volatile("nop");
7870+asm volatile("nop");
7871+ asm volatile("sb $t1,0($a2)");
7872+ asm volatile("rotr $t1,$t1,8");
7873+ asm volatile("addu $v1,$zero,$a3");
7874+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7875+ asm volatile("sb $t1,0($a2)");
7876+ asm volatile("rotr $t1,$t1,8");
7877+ asm volatile("movn $v1,$t3,$t0");
7878+asm volatile("nop");
7879+ asm volatile("sb $t1,0($a2)");
7880+ asm volatile("rotr $t1,$t1,8");
7881+asm volatile("nop");
7882+asm volatile("nop");
7883+ asm volatile("sb $t1,0($a2)");
7884+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7885+asm volatile("nop");
7886+asm volatile("nop");
7887+ asm volatile("sb $t1,0($a2)");
7888+ asm volatile("rotr $t1,$t1,8");
7889+ asm volatile("addu $v1,$zero,$a3");
7890+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7891+ asm volatile("sb $t1,0($a2)");
7892+ asm volatile("rotr $t1,$t1,8");
7893+ asm volatile("movn $v1,$t3,$t0");
7894+asm volatile("nop");
7895+ asm volatile("sb $t1,0($a2)");
7896+ asm volatile("rotr $t1,$t1,8");
7897+asm volatile("nop");
7898+asm volatile("nop");
7899+ asm volatile("sb $t1,0($a2)");
7900+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7901+asm volatile("nop");
7902+asm volatile("nop");
7903+ asm volatile("sb $t1,0($a2)");
7904+ asm volatile("rotr $t1,$t1,8");
7905+ asm volatile("addu $v1,$zero,$a3");
7906+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7907+ asm volatile("sb $t1,0($a2)");
7908+ asm volatile("rotr $t1,$t1,8");
7909+ asm volatile("movn $v1,$t3,$t0");
7910+asm volatile("nop");
7911+ asm volatile("sb $t1,0($a2)");
7912+ asm volatile("rotr $t1,$t1,8");
7913+asm volatile("nop");
7914+asm volatile("nop");
7915+ asm volatile("sb $t1,0($a2)");
7916+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7917+asm volatile("nop");
7918+asm volatile("nop");
7919+ asm volatile("sb $t1,0($a2)");
7920+ asm volatile("rotr $t1,$t1,8");
7921+ asm volatile("addu $v1,$zero,$a3");
7922+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7923+ asm volatile("sb $t1,0($a2)");
7924+ asm volatile("rotr $t1,$t1,8");
7925+ asm volatile("movn $v1,$t3,$t0");
7926+asm volatile("nop");
7927+ asm volatile("sb $t1,0($a2)");
7928+ asm volatile("rotr $t1,$t1,8");
7929+asm volatile("nop");
7930+asm volatile("nop");
7931+ asm volatile("sb $t1,0($a2)");
7932+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7933+asm volatile("nop");
7934+asm volatile("nop");
7935+ asm volatile("sb $t1,0($a2)");
7936+ asm volatile("rotr $t1,$t1,8");
7937+ asm volatile("addu $v1,$zero,$a3");
7938+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7939+ asm volatile("sb $t1,0($a2)");
7940+ asm volatile("rotr $t1,$t1,8");
7941+ asm volatile("movn $v1,$t3,$t0");
7942+asm volatile("nop");
7943+ asm volatile("sb $t1,0($a2)");
7944+ asm volatile("rotr $t1,$t1,8");
7945+asm volatile("nop");
7946+asm volatile("nop");
7947+ asm volatile("sb $t1,0($a2)");
7948+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7949+asm volatile("nop");
7950+asm volatile("nop");
7951+ asm volatile("sb $t1,0($a2)");
7952+ asm volatile("rotr $t1,$t1,8");
7953+ asm volatile("addu $v1,$zero,$a3");
7954+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7955+ asm volatile("sb $t1,0($a2)");
7956+ asm volatile("rotr $t1,$t1,8");
7957+ asm volatile("movn $v1,$t3,$t0");
7958+asm volatile("nop");
7959+ asm volatile("sb $t1,0($a2)");
7960+ asm volatile("rotr $t1,$t1,8");
7961+asm volatile("nop");
7962+ asm volatile("lbu $t5,0($a0)");
7963+ asm volatile("sb $t1,0($a2)");
7964+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7965+ asm volatile("sll $t5,$t5,3");
7966+ asm volatile("addu $t5,$t5,$t4");
7967+ asm volatile("sb $t1,0($a2)");
7968+ asm volatile("rotr $t1,$t1,8");
7969+ asm volatile("addu $v1,$zero,$a3");
7970+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7971+ asm volatile("sb $t1,0($a2)");
7972+ asm volatile("rotr $t1,$t1,8");
7973+ asm volatile("movn $v1,$t3,$t0");
7974+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
7975+ asm volatile("sb $t1,0($a2)");
7976+ asm volatile("rotr $t1,$t1,8");
7977+ asm volatile("lbu $t2,0($t5)");
7978+asm volatile("nop");
7979+ asm volatile("sb $t1,0($a2)");
7980+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7981+ asm volatile("sll $t3,$t3,5");
7982+ asm volatile("addu $t3,$t3,$a1");
7983+ asm volatile("sb $t1,0($a2)");
7984+ asm volatile("rotr $t1,$t1,8");
7985+ asm volatile("addu $v1,$zero,$a3");
7986+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
7987+ asm volatile("sb $t1,0($a2)");
7988+ asm volatile("rotr $t1,$t1,8");
7989+ asm volatile("movn $v1,$t3,$t0");
7990+ asm volatile("addiu $a0,$a0,1");
7991+ asm volatile("sb $t1,0($a2)");
7992+ asm volatile("rotr $t1,$t1,8");
7993+asm volatile("nop");
7994+asm volatile("nop");
7995+ asm volatile("sb $t1,0($a2)");
7996+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
7997+asm volatile("nop");
7998+asm volatile("nop");
7999+ asm volatile("sb $t1,0($a2)");
8000+ asm volatile("rotr $t1,$t1,8");
8001+ asm volatile("addu $v1,$zero,$a3");
8002+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8003+ asm volatile("sb $t1,0($a2)");
8004+ asm volatile("rotr $t1,$t1,8");
8005+ asm volatile("movn $v1,$t3,$t0");
8006+asm volatile("nop");
8007+ asm volatile("sb $t1,0($a2)");
8008+ asm volatile("rotr $t1,$t1,8");
8009+asm volatile("nop");
8010+asm volatile("nop");
8011+ asm volatile("sb $t1,0($a2)");
8012+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8013+asm volatile("nop");
8014+asm volatile("nop");
8015+ asm volatile("sb $t1,0($a2)");
8016+ asm volatile("rotr $t1,$t1,8");
8017+ asm volatile("addu $v1,$zero,$a3");
8018+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8019+ asm volatile("sb $t1,0($a2)");
8020+ asm volatile("rotr $t1,$t1,8");
8021+ asm volatile("movn $v1,$t3,$t0");
8022+asm volatile("nop");
8023+ asm volatile("sb $t1,0($a2)");
8024+ asm volatile("rotr $t1,$t1,8");
8025+asm volatile("nop");
8026+asm volatile("nop");
8027+ asm volatile("sb $t1,0($a2)");
8028+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8029+asm volatile("nop");
8030+asm volatile("nop");
8031+ asm volatile("sb $t1,0($a2)");
8032+ asm volatile("rotr $t1,$t1,8");
8033+ asm volatile("addu $v1,$zero,$a3");
8034+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8035+ asm volatile("sb $t1,0($a2)");
8036+ asm volatile("rotr $t1,$t1,8");
8037+ asm volatile("movn $v1,$t3,$t0");
8038+asm volatile("nop");
8039+ asm volatile("sb $t1,0($a2)");
8040+ asm volatile("rotr $t1,$t1,8");
8041+asm volatile("nop");
8042+asm volatile("nop");
8043+ asm volatile("sb $t1,0($a2)");
8044+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8045+asm volatile("nop");
8046+asm volatile("nop");
8047+ asm volatile("sb $t1,0($a2)");
8048+ asm volatile("rotr $t1,$t1,8");
8049+ asm volatile("addu $v1,$zero,$a3");
8050+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8051+ asm volatile("sb $t1,0($a2)");
8052+ asm volatile("rotr $t1,$t1,8");
8053+ asm volatile("movn $v1,$t3,$t0");
8054+asm volatile("nop");
8055+ asm volatile("sb $t1,0($a2)");
8056+ asm volatile("rotr $t1,$t1,8");
8057+asm volatile("nop");
8058+asm volatile("nop");
8059+ asm volatile("sb $t1,0($a2)");
8060+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8061+asm volatile("nop");
8062+asm volatile("nop");
8063+ asm volatile("sb $t1,0($a2)");
8064+ asm volatile("rotr $t1,$t1,8");
8065+ asm volatile("addu $v1,$zero,$a3");
8066+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8067+ asm volatile("sb $t1,0($a2)");
8068+ asm volatile("rotr $t1,$t1,8");
8069+ asm volatile("movn $v1,$t3,$t0");
8070+asm volatile("nop");
8071+ asm volatile("sb $t1,0($a2)");
8072+ asm volatile("rotr $t1,$t1,8");
8073+asm volatile("nop");
8074+asm volatile("nop");
8075+ asm volatile("sb $t1,0($a2)");
8076+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8077+asm volatile("nop");
8078+asm volatile("nop");
8079+ asm volatile("sb $t1,0($a2)");
8080+ asm volatile("rotr $t1,$t1,8");
8081+ asm volatile("addu $v1,$zero,$a3");
8082+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8083+ asm volatile("sb $t1,0($a2)");
8084+ asm volatile("rotr $t1,$t1,8");
8085+ asm volatile("movn $v1,$t3,$t0");
8086+asm volatile("nop");
8087+ asm volatile("sb $t1,0($a2)");
8088+ asm volatile("rotr $t1,$t1,8");
8089+asm volatile("nop");
8090+ asm volatile("lbu $t5,0($a0)");
8091+ asm volatile("sb $t1,0($a2)");
8092+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8093+ asm volatile("sll $t5,$t5,3");
8094+ asm volatile("addu $t5,$t5,$t4");
8095+ asm volatile("sb $t1,0($a2)");
8096+ asm volatile("rotr $t1,$t1,8");
8097+ asm volatile("addu $v1,$zero,$a3");
8098+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8099+ asm volatile("sb $t1,0($a2)");
8100+ asm volatile("rotr $t1,$t1,8");
8101+ asm volatile("movn $v1,$t3,$t0");
8102+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
8103+ asm volatile("sb $t1,0($a2)");
8104+ asm volatile("rotr $t1,$t1,8");
8105+ asm volatile("lbu $t2,0($t5)");
8106+asm volatile("nop");
8107+ asm volatile("sb $t1,0($a2)");
8108+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8109+ asm volatile("sll $t3,$t3,5");
8110+ asm volatile("addu $t3,$t3,$a1");
8111+ asm volatile("sb $t1,0($a2)");
8112+ asm volatile("rotr $t1,$t1,8");
8113+ asm volatile("addu $v1,$zero,$a3");
8114+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8115+ asm volatile("sb $t1,0($a2)");
8116+ asm volatile("rotr $t1,$t1,8");
8117+ asm volatile("movn $v1,$t3,$t0");
8118+ asm volatile("addiu $a0,$a0,1");
8119+ asm volatile("sb $t1,0($a2)");
8120+ asm volatile("rotr $t1,$t1,8");
8121+asm volatile("nop");
8122+asm volatile("nop");
8123+ asm volatile("sb $t1,0($a2)");
8124+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8125+asm volatile("nop");
8126+asm volatile("nop");
8127+ asm volatile("sb $t1,0($a2)");
8128+ asm volatile("rotr $t1,$t1,8");
8129+ asm volatile("addu $v1,$zero,$a3");
8130+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8131+ asm volatile("sb $t1,0($a2)");
8132+ asm volatile("rotr $t1,$t1,8");
8133+ asm volatile("movn $v1,$t3,$t0");
8134+asm volatile("nop");
8135+ asm volatile("sb $t1,0($a2)");
8136+ asm volatile("rotr $t1,$t1,8");
8137+asm volatile("nop");
8138+asm volatile("nop");
8139+ asm volatile("sb $t1,0($a2)");
8140+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8141+asm volatile("nop");
8142+asm volatile("nop");
8143+ asm volatile("sb $t1,0($a2)");
8144+ asm volatile("rotr $t1,$t1,8");
8145+ asm volatile("addu $v1,$zero,$a3");
8146+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8147+ asm volatile("sb $t1,0($a2)");
8148+ asm volatile("rotr $t1,$t1,8");
8149+ asm volatile("movn $v1,$t3,$t0");
8150+asm volatile("nop");
8151+ asm volatile("sb $t1,0($a2)");
8152+ asm volatile("rotr $t1,$t1,8");
8153+asm volatile("nop");
8154+asm volatile("nop");
8155+ asm volatile("sb $t1,0($a2)");
8156+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8157+asm volatile("nop");
8158+asm volatile("nop");
8159+ asm volatile("sb $t1,0($a2)");
8160+ asm volatile("rotr $t1,$t1,8");
8161+ asm volatile("addu $v1,$zero,$a3");
8162+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8163+ asm volatile("sb $t1,0($a2)");
8164+ asm volatile("rotr $t1,$t1,8");
8165+ asm volatile("movn $v1,$t3,$t0");
8166+asm volatile("nop");
8167+ asm volatile("sb $t1,0($a2)");
8168+ asm volatile("rotr $t1,$t1,8");
8169+asm volatile("nop");
8170+asm volatile("nop");
8171+ asm volatile("sb $t1,0($a2)");
8172+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8173+asm volatile("nop");
8174+asm volatile("nop");
8175+ asm volatile("sb $t1,0($a2)");
8176+ asm volatile("rotr $t1,$t1,8");
8177+ asm volatile("addu $v1,$zero,$a3");
8178+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8179+ asm volatile("sb $t1,0($a2)");
8180+ asm volatile("rotr $t1,$t1,8");
8181+ asm volatile("movn $v1,$t3,$t0");
8182+asm volatile("nop");
8183+ asm volatile("sb $t1,0($a2)");
8184+ asm volatile("rotr $t1,$t1,8");
8185+asm volatile("nop");
8186+asm volatile("nop");
8187+ asm volatile("sb $t1,0($a2)");
8188+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8189+asm volatile("nop");
8190+asm volatile("nop");
8191+ asm volatile("sb $t1,0($a2)");
8192+ asm volatile("rotr $t1,$t1,8");
8193+ asm volatile("addu $v1,$zero,$a3");
8194+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8195+ asm volatile("sb $t1,0($a2)");
8196+ asm volatile("rotr $t1,$t1,8");
8197+ asm volatile("movn $v1,$t3,$t0");
8198+asm volatile("nop");
8199+ asm volatile("sb $t1,0($a2)");
8200+ asm volatile("rotr $t1,$t1,8");
8201+asm volatile("nop");
8202+asm volatile("nop");
8203+ asm volatile("sb $t1,0($a2)");
8204+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8205+asm volatile("nop");
8206+asm volatile("nop");
8207+ asm volatile("sb $t1,0($a2)");
8208+ asm volatile("rotr $t1,$t1,8");
8209+ asm volatile("addu $v1,$zero,$a3");
8210+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8211+ asm volatile("sb $t1,0($a2)");
8212+ asm volatile("rotr $t1,$t1,8");
8213+ asm volatile("movn $v1,$t3,$t0");
8214+asm volatile("nop");
8215+ asm volatile("sb $t1,0($a2)");
8216+ asm volatile("rotr $t1,$t1,8");
8217+asm volatile("nop");
8218+ asm volatile("lbu $t5,0($a0)");
8219+ asm volatile("sb $t1,0($a2)");
8220+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8221+ asm volatile("sll $t5,$t5,3");
8222+ asm volatile("addu $t5,$t5,$t4");
8223+ asm volatile("sb $t1,0($a2)");
8224+ asm volatile("rotr $t1,$t1,8");
8225+ asm volatile("addu $v1,$zero,$a3");
8226+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8227+ asm volatile("sb $t1,0($a2)");
8228+ asm volatile("rotr $t1,$t1,8");
8229+ asm volatile("movn $v1,$t3,$t0");
8230+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
8231+ asm volatile("sb $t1,0($a2)");
8232+ asm volatile("rotr $t1,$t1,8");
8233+ asm volatile("lbu $t2,0($t5)");
8234+asm volatile("nop");
8235+ asm volatile("sb $t1,0($a2)");
8236+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8237+ asm volatile("sll $t3,$t3,5");
8238+ asm volatile("addu $t3,$t3,$a1");
8239+ asm volatile("sb $t1,0($a2)");
8240+ asm volatile("rotr $t1,$t1,8");
8241+ asm volatile("addu $v1,$zero,$a3");
8242+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8243+ asm volatile("sb $t1,0($a2)");
8244+ asm volatile("rotr $t1,$t1,8");
8245+ asm volatile("movn $v1,$t3,$t0");
8246+ asm volatile("addiu $a0,$a0,1");
8247+ asm volatile("sb $t1,0($a2)");
8248+ asm volatile("rotr $t1,$t1,8");
8249+asm volatile("nop");
8250+asm volatile("nop");
8251+ asm volatile("sb $t1,0($a2)");
8252+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8253+asm volatile("nop");
8254+asm volatile("nop");
8255+ asm volatile("sb $t1,0($a2)");
8256+ asm volatile("rotr $t1,$t1,8");
8257+ asm volatile("addu $v1,$zero,$a3");
8258+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8259+ asm volatile("sb $t1,0($a2)");
8260+ asm volatile("rotr $t1,$t1,8");
8261+ asm volatile("movn $v1,$t3,$t0");
8262+asm volatile("nop");
8263+ asm volatile("sb $t1,0($a2)");
8264+ asm volatile("rotr $t1,$t1,8");
8265+asm volatile("nop");
8266+asm volatile("nop");
8267+ asm volatile("sb $t1,0($a2)");
8268+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8269+asm volatile("nop");
8270+asm volatile("nop");
8271+ asm volatile("sb $t1,0($a2)");
8272+ asm volatile("rotr $t1,$t1,8");
8273+ asm volatile("addu $v1,$zero,$a3");
8274+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8275+ asm volatile("sb $t1,0($a2)");
8276+ asm volatile("rotr $t1,$t1,8");
8277+ asm volatile("movn $v1,$t3,$t0");
8278+asm volatile("nop");
8279+ asm volatile("sb $t1,0($a2)");
8280+ asm volatile("rotr $t1,$t1,8");
8281+asm volatile("nop");
8282+asm volatile("nop");
8283+ asm volatile("sb $t1,0($a2)");
8284+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8285+asm volatile("nop");
8286+asm volatile("nop");
8287+ asm volatile("sb $t1,0($a2)");
8288+ asm volatile("rotr $t1,$t1,8");
8289+ asm volatile("addu $v1,$zero,$a3");
8290+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8291+ asm volatile("sb $t1,0($a2)");
8292+ asm volatile("rotr $t1,$t1,8");
8293+ asm volatile("movn $v1,$t3,$t0");
8294+asm volatile("nop");
8295+ asm volatile("sb $t1,0($a2)");
8296+ asm volatile("rotr $t1,$t1,8");
8297+asm volatile("nop");
8298+asm volatile("nop");
8299+ asm volatile("sb $t1,0($a2)");
8300+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8301+asm volatile("nop");
8302+asm volatile("nop");
8303+ asm volatile("sb $t1,0($a2)");
8304+ asm volatile("rotr $t1,$t1,8");
8305+ asm volatile("addu $v1,$zero,$a3");
8306+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8307+ asm volatile("sb $t1,0($a2)");
8308+ asm volatile("rotr $t1,$t1,8");
8309+ asm volatile("movn $v1,$t3,$t0");
8310+asm volatile("nop");
8311+ asm volatile("sb $t1,0($a2)");
8312+ asm volatile("rotr $t1,$t1,8");
8313+asm volatile("nop");
8314+asm volatile("nop");
8315+ asm volatile("sb $t1,0($a2)");
8316+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8317+asm volatile("nop");
8318+asm volatile("nop");
8319+ asm volatile("sb $t1,0($a2)");
8320+ asm volatile("rotr $t1,$t1,8");
8321+ asm volatile("addu $v1,$zero,$a3");
8322+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8323+ asm volatile("sb $t1,0($a2)");
8324+ asm volatile("rotr $t1,$t1,8");
8325+ asm volatile("movn $v1,$t3,$t0");
8326+asm volatile("nop");
8327+ asm volatile("sb $t1,0($a2)");
8328+ asm volatile("rotr $t1,$t1,8");
8329+asm volatile("nop");
8330+asm volatile("nop");
8331+ asm volatile("sb $t1,0($a2)");
8332+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8333+asm volatile("nop");
8334+asm volatile("nop");
8335+ asm volatile("sb $t1,0($a2)");
8336+ asm volatile("rotr $t1,$t1,8");
8337+ asm volatile("addu $v1,$zero,$a3");
8338+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8339+ asm volatile("sb $t1,0($a2)");
8340+ asm volatile("rotr $t1,$t1,8");
8341+ asm volatile("movn $v1,$t3,$t0");
8342+asm volatile("nop");
8343+ asm volatile("sb $t1,0($a2)");
8344+ asm volatile("rotr $t1,$t1,8");
8345+asm volatile("nop");
8346+ asm volatile("lbu $t5,0($a0)");
8347+ asm volatile("sb $t1,0($a2)");
8348+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8349+ asm volatile("sll $t5,$t5,3");
8350+ asm volatile("addu $t5,$t5,$t4");
8351+ asm volatile("sb $t1,0($a2)");
8352+ asm volatile("rotr $t1,$t1,8");
8353+ asm volatile("addu $v1,$zero,$a3");
8354+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8355+ asm volatile("sb $t1,0($a2)");
8356+ asm volatile("rotr $t1,$t1,8");
8357+ asm volatile("movn $v1,$t3,$t0");
8358+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
8359+ asm volatile("sb $t1,0($a2)");
8360+ asm volatile("rotr $t1,$t1,8");
8361+ asm volatile("lbu $t2,0($t5)");
8362+asm volatile("nop");
8363+ asm volatile("sb $t1,0($a2)");
8364+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8365+ asm volatile("sll $t3,$t3,5");
8366+ asm volatile("addu $t3,$t3,$a1");
8367+ asm volatile("sb $t1,0($a2)");
8368+ asm volatile("rotr $t1,$t1,8");
8369+ asm volatile("addu $v1,$zero,$a3");
8370+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8371+ asm volatile("sb $t1,0($a2)");
8372+ asm volatile("rotr $t1,$t1,8");
8373+ asm volatile("movn $v1,$t3,$t0");
8374+ asm volatile("addiu $a0,$a0,1");
8375+ asm volatile("sb $t1,0($a2)");
8376+ asm volatile("rotr $t1,$t1,8");
8377+asm volatile("nop");
8378+asm volatile("nop");
8379+ asm volatile("sb $t1,0($a2)");
8380+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8381+asm volatile("nop");
8382+asm volatile("nop");
8383+ asm volatile("sb $t1,0($a2)");
8384+ asm volatile("rotr $t1,$t1,8");
8385+ asm volatile("addu $v1,$zero,$a3");
8386+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8387+ asm volatile("sb $t1,0($a2)");
8388+ asm volatile("rotr $t1,$t1,8");
8389+ asm volatile("movn $v1,$t3,$t0");
8390+asm volatile("nop");
8391+ asm volatile("sb $t1,0($a2)");
8392+ asm volatile("rotr $t1,$t1,8");
8393+asm volatile("nop");
8394+asm volatile("nop");
8395+ asm volatile("sb $t1,0($a2)");
8396+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8397+asm volatile("nop");
8398+asm volatile("nop");
8399+ asm volatile("sb $t1,0($a2)");
8400+ asm volatile("rotr $t1,$t1,8");
8401+ asm volatile("addu $v1,$zero,$a3");
8402+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8403+ asm volatile("sb $t1,0($a2)");
8404+ asm volatile("rotr $t1,$t1,8");
8405+ asm volatile("movn $v1,$t3,$t0");
8406+asm volatile("nop");
8407+ asm volatile("sb $t1,0($a2)");
8408+ asm volatile("rotr $t1,$t1,8");
8409+asm volatile("nop");
8410+asm volatile("nop");
8411+ asm volatile("sb $t1,0($a2)");
8412+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8413+asm volatile("nop");
8414+asm volatile("nop");
8415+ asm volatile("sb $t1,0($a2)");
8416+ asm volatile("rotr $t1,$t1,8");
8417+ asm volatile("addu $v1,$zero,$a3");
8418+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8419+ asm volatile("sb $t1,0($a2)");
8420+ asm volatile("rotr $t1,$t1,8");
8421+ asm volatile("movn $v1,$t3,$t0");
8422+asm volatile("nop");
8423+ asm volatile("sb $t1,0($a2)");
8424+ asm volatile("rotr $t1,$t1,8");
8425+asm volatile("nop");
8426+asm volatile("nop");
8427+ asm volatile("sb $t1,0($a2)");
8428+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8429+asm volatile("nop");
8430+asm volatile("nop");
8431+ asm volatile("sb $t1,0($a2)");
8432+ asm volatile("rotr $t1,$t1,8");
8433+ asm volatile("addu $v1,$zero,$a3");
8434+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8435+ asm volatile("sb $t1,0($a2)");
8436+ asm volatile("rotr $t1,$t1,8");
8437+ asm volatile("movn $v1,$t3,$t0");
8438+asm volatile("nop");
8439+ asm volatile("sb $t1,0($a2)");
8440+ asm volatile("rotr $t1,$t1,8");
8441+asm volatile("nop");
8442+asm volatile("nop");
8443+ asm volatile("sb $t1,0($a2)");
8444+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8445+asm volatile("nop");
8446+asm volatile("nop");
8447+ asm volatile("sb $t1,0($a2)");
8448+ asm volatile("rotr $t1,$t1,8");
8449+ asm volatile("addu $v1,$zero,$a3");
8450+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8451+ asm volatile("sb $t1,0($a2)");
8452+ asm volatile("rotr $t1,$t1,8");
8453+ asm volatile("movn $v1,$t3,$t0");
8454+asm volatile("nop");
8455+ asm volatile("sb $t1,0($a2)");
8456+ asm volatile("rotr $t1,$t1,8");
8457+asm volatile("nop");
8458+asm volatile("nop");
8459+ asm volatile("sb $t1,0($a2)");
8460+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8461+asm volatile("nop");
8462+asm volatile("nop");
8463+ asm volatile("sb $t1,0($a2)");
8464+ asm volatile("rotr $t1,$t1,8");
8465+ asm volatile("addu $v1,$zero,$a3");
8466+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8467+ asm volatile("sb $t1,0($a2)");
8468+ asm volatile("rotr $t1,$t1,8");
8469+ asm volatile("movn $v1,$t3,$t0");
8470+asm volatile("nop");
8471+ asm volatile("sb $t1,0($a2)");
8472+ asm volatile("rotr $t1,$t1,8");
8473+asm volatile("nop");
8474+ asm volatile("lbu $t5,0($a0)");
8475+ asm volatile("sb $t1,0($a2)");
8476+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8477+ asm volatile("sll $t5,$t5,3");
8478+ asm volatile("addu $t5,$t5,$t4");
8479+ asm volatile("sb $t1,0($a2)");
8480+ asm volatile("rotr $t1,$t1,8");
8481+ asm volatile("addu $v1,$zero,$a3");
8482+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8483+ asm volatile("sb $t1,0($a2)");
8484+ asm volatile("rotr $t1,$t1,8");
8485+ asm volatile("movn $v1,$t3,$t0");
8486+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
8487+ asm volatile("sb $t1,0($a2)");
8488+ asm volatile("rotr $t1,$t1,8");
8489+ asm volatile("lbu $t2,0($t5)");
8490+asm volatile("nop");
8491+ asm volatile("sb $t1,0($a2)");
8492+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8493+ asm volatile("sll $t3,$t3,5");
8494+ asm volatile("addu $t3,$t3,$a1");
8495+ asm volatile("sb $t1,0($a2)");
8496+ asm volatile("rotr $t1,$t1,8");
8497+ asm volatile("addu $v1,$zero,$a3");
8498+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8499+ asm volatile("sb $t1,0($a2)");
8500+ asm volatile("rotr $t1,$t1,8");
8501+ asm volatile("movn $v1,$t3,$t0");
8502+ asm volatile("addiu $a0,$a0,1");
8503+ asm volatile("sb $t1,0($a2)");
8504+ asm volatile("rotr $t1,$t1,8");
8505+asm volatile("nop");
8506+asm volatile("nop");
8507+ asm volatile("sb $t1,0($a2)");
8508+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8509+asm volatile("nop");
8510+asm volatile("nop");
8511+ asm volatile("sb $t1,0($a2)");
8512+ asm volatile("rotr $t1,$t1,8");
8513+ asm volatile("addu $v1,$zero,$a3");
8514+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8515+ asm volatile("sb $t1,0($a2)");
8516+ asm volatile("rotr $t1,$t1,8");
8517+ asm volatile("movn $v1,$t3,$t0");
8518+asm volatile("nop");
8519+ asm volatile("sb $t1,0($a2)");
8520+ asm volatile("rotr $t1,$t1,8");
8521+asm volatile("nop");
8522+asm volatile("nop");
8523+ asm volatile("sb $t1,0($a2)");
8524+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8525+asm volatile("nop");
8526+asm volatile("nop");
8527+ asm volatile("sb $t1,0($a2)");
8528+ asm volatile("rotr $t1,$t1,8");
8529+ asm volatile("addu $v1,$zero,$a3");
8530+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8531+ asm volatile("sb $t1,0($a2)");
8532+ asm volatile("rotr $t1,$t1,8");
8533+ asm volatile("movn $v1,$t3,$t0");
8534+asm volatile("nop");
8535+ asm volatile("sb $t1,0($a2)");
8536+ asm volatile("rotr $t1,$t1,8");
8537+asm volatile("nop");
8538+asm volatile("nop");
8539+ asm volatile("sb $t1,0($a2)");
8540+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8541+asm volatile("nop");
8542+asm volatile("nop");
8543+ asm volatile("sb $t1,0($a2)");
8544+ asm volatile("rotr $t1,$t1,8");
8545+ asm volatile("addu $v1,$zero,$a3");
8546+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8547+ asm volatile("sb $t1,0($a2)");
8548+ asm volatile("rotr $t1,$t1,8");
8549+ asm volatile("movn $v1,$t3,$t0");
8550+asm volatile("nop");
8551+ asm volatile("sb $t1,0($a2)");
8552+ asm volatile("rotr $t1,$t1,8");
8553+asm volatile("nop");
8554+asm volatile("nop");
8555+ asm volatile("sb $t1,0($a2)");
8556+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8557+asm volatile("nop");
8558+asm volatile("nop");
8559+ asm volatile("sb $t1,0($a2)");
8560+ asm volatile("rotr $t1,$t1,8");
8561+ asm volatile("addu $v1,$zero,$a3");
8562+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8563+ asm volatile("sb $t1,0($a2)");
8564+ asm volatile("rotr $t1,$t1,8");
8565+ asm volatile("movn $v1,$t3,$t0");
8566+asm volatile("nop");
8567+ asm volatile("sb $t1,0($a2)");
8568+ asm volatile("rotr $t1,$t1,8");
8569+asm volatile("nop");
8570+asm volatile("nop");
8571+ asm volatile("sb $t1,0($a2)");
8572+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8573+asm volatile("nop");
8574+asm volatile("nop");
8575+ asm volatile("sb $t1,0($a2)");
8576+ asm volatile("rotr $t1,$t1,8");
8577+ asm volatile("addu $v1,$zero,$a3");
8578+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8579+ asm volatile("sb $t1,0($a2)");
8580+ asm volatile("rotr $t1,$t1,8");
8581+ asm volatile("movn $v1,$t3,$t0");
8582+asm volatile("nop");
8583+ asm volatile("sb $t1,0($a2)");
8584+ asm volatile("rotr $t1,$t1,8");
8585+asm volatile("nop");
8586+asm volatile("nop");
8587+ asm volatile("sb $t1,0($a2)");
8588+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8589+asm volatile("nop");
8590+asm volatile("nop");
8591+ asm volatile("sb $t1,0($a2)");
8592+ asm volatile("rotr $t1,$t1,8");
8593+ asm volatile("addu $v1,$zero,$a3");
8594+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8595+ asm volatile("sb $t1,0($a2)");
8596+ asm volatile("rotr $t1,$t1,8");
8597+ asm volatile("movn $v1,$t3,$t0");
8598+asm volatile("nop");
8599+ asm volatile("sb $t1,0($a2)");
8600+ asm volatile("rotr $t1,$t1,8");
8601+asm volatile("nop");
8602+ asm volatile("lbu $t5,0($a0)");
8603+ asm volatile("sb $t1,0($a2)");
8604+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8605+ asm volatile("sll $t5,$t5,3");
8606+ asm volatile("addu $t5,$t5,$t4");
8607+ asm volatile("sb $t1,0($a2)");
8608+ asm volatile("rotr $t1,$t1,8");
8609+ asm volatile("addu $v1,$zero,$a3");
8610+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8611+ asm volatile("sb $t1,0($a2)");
8612+ asm volatile("rotr $t1,$t1,8");
8613+ asm volatile("movn $v1,$t3,$t0");
8614+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
8615+ asm volatile("sb $t1,0($a2)");
8616+ asm volatile("rotr $t1,$t1,8");
8617+ asm volatile("lbu $t2,0($t5)");
8618+asm volatile("nop");
8619+ asm volatile("sb $t1,0($a2)");
8620+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8621+ asm volatile("sll $t3,$t3,5");
8622+ asm volatile("addu $t3,$t3,$a1");
8623+ asm volatile("sb $t1,0($a2)");
8624+ asm volatile("rotr $t1,$t1,8");
8625+ asm volatile("addu $v1,$zero,$a3");
8626+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8627+ asm volatile("sb $t1,0($a2)");
8628+ asm volatile("rotr $t1,$t1,8");
8629+ asm volatile("movn $v1,$t3,$t0");
8630+ asm volatile("addiu $a0,$a0,1");
8631+ asm volatile("sb $t1,0($a2)");
8632+ asm volatile("rotr $t1,$t1,8");
8633+asm volatile("nop");
8634+asm volatile("nop");
8635+ asm volatile("sb $t1,0($a2)");
8636+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8637+asm volatile("nop");
8638+asm volatile("nop");
8639+ asm volatile("sb $t1,0($a2)");
8640+ asm volatile("rotr $t1,$t1,8");
8641+ asm volatile("addu $v1,$zero,$a3");
8642+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8643+ asm volatile("sb $t1,0($a2)");
8644+ asm volatile("rotr $t1,$t1,8");
8645+ asm volatile("movn $v1,$t3,$t0");
8646+asm volatile("nop");
8647+ asm volatile("sb $t1,0($a2)");
8648+ asm volatile("rotr $t1,$t1,8");
8649+asm volatile("nop");
8650+asm volatile("nop");
8651+ asm volatile("sb $t1,0($a2)");
8652+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8653+asm volatile("nop");
8654+asm volatile("nop");
8655+ asm volatile("sb $t1,0($a2)");
8656+ asm volatile("rotr $t1,$t1,8");
8657+ asm volatile("addu $v1,$zero,$a3");
8658+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8659+ asm volatile("sb $t1,0($a2)");
8660+ asm volatile("rotr $t1,$t1,8");
8661+ asm volatile("movn $v1,$t3,$t0");
8662+asm volatile("nop");
8663+ asm volatile("sb $t1,0($a2)");
8664+ asm volatile("rotr $t1,$t1,8");
8665+asm volatile("nop");
8666+asm volatile("nop");
8667+ asm volatile("sb $t1,0($a2)");
8668+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8669+asm volatile("nop");
8670+asm volatile("nop");
8671+ asm volatile("sb $t1,0($a2)");
8672+ asm volatile("rotr $t1,$t1,8");
8673+ asm volatile("addu $v1,$zero,$a3");
8674+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8675+ asm volatile("sb $t1,0($a2)");
8676+ asm volatile("rotr $t1,$t1,8");
8677+ asm volatile("movn $v1,$t3,$t0");
8678+asm volatile("nop");
8679+ asm volatile("sb $t1,0($a2)");
8680+ asm volatile("rotr $t1,$t1,8");
8681+asm volatile("nop");
8682+asm volatile("nop");
8683+ asm volatile("sb $t1,0($a2)");
8684+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8685+asm volatile("nop");
8686+asm volatile("nop");
8687+ asm volatile("sb $t1,0($a2)");
8688+ asm volatile("rotr $t1,$t1,8");
8689+ asm volatile("addu $v1,$zero,$a3");
8690+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8691+ asm volatile("sb $t1,0($a2)");
8692+ asm volatile("rotr $t1,$t1,8");
8693+ asm volatile("movn $v1,$t3,$t0");
8694+asm volatile("nop");
8695+ asm volatile("sb $t1,0($a2)");
8696+ asm volatile("rotr $t1,$t1,8");
8697+asm volatile("nop");
8698+asm volatile("nop");
8699+ asm volatile("sb $t1,0($a2)");
8700+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8701+asm volatile("nop");
8702+asm volatile("nop");
8703+ asm volatile("sb $t1,0($a2)");
8704+ asm volatile("rotr $t1,$t1,8");
8705+ asm volatile("addu $v1,$zero,$a3");
8706+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8707+ asm volatile("sb $t1,0($a2)");
8708+ asm volatile("rotr $t1,$t1,8");
8709+ asm volatile("movn $v1,$t3,$t0");
8710+asm volatile("nop");
8711+ asm volatile("sb $t1,0($a2)");
8712+ asm volatile("rotr $t1,$t1,8");
8713+asm volatile("nop");
8714+asm volatile("nop");
8715+ asm volatile("sb $t1,0($a2)");
8716+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8717+asm volatile("nop");
8718+asm volatile("nop");
8719+ asm volatile("sb $t1,0($a2)");
8720+ asm volatile("rotr $t1,$t1,8");
8721+ asm volatile("addu $v1,$zero,$a3");
8722+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8723+ asm volatile("sb $t1,0($a2)");
8724+ asm volatile("rotr $t1,$t1,8");
8725+ asm volatile("movn $v1,$t3,$t0");
8726+asm volatile("nop");
8727+ asm volatile("sb $t1,0($a2)");
8728+ asm volatile("rotr $t1,$t1,8");
8729+asm volatile("nop");
8730+ asm volatile("lbu $t5,0($a0)");
8731+ asm volatile("sb $t1,0($a2)");
8732+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8733+ asm volatile("sll $t5,$t5,3");
8734+ asm volatile("addu $t5,$t5,$t4");
8735+ asm volatile("sb $t1,0($a2)");
8736+ asm volatile("rotr $t1,$t1,8");
8737+ asm volatile("addu $v1,$zero,$a3");
8738+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8739+ asm volatile("sb $t1,0($a2)");
8740+ asm volatile("rotr $t1,$t1,8");
8741+ asm volatile("movn $v1,$t3,$t0");
8742+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
8743+ asm volatile("sb $t1,0($a2)");
8744+ asm volatile("rotr $t1,$t1,8");
8745+ asm volatile("lbu $t2,0($t5)");
8746+asm volatile("nop");
8747+ asm volatile("sb $t1,0($a2)");
8748+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8749+ asm volatile("sll $t3,$t3,5");
8750+ asm volatile("addu $t3,$t3,$a1");
8751+ asm volatile("sb $t1,0($a2)");
8752+ asm volatile("rotr $t1,$t1,8");
8753+ asm volatile("addu $v1,$zero,$a3");
8754+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8755+ asm volatile("sb $t1,0($a2)");
8756+ asm volatile("rotr $t1,$t1,8");
8757+ asm volatile("movn $v1,$t3,$t0");
8758+ asm volatile("addiu $a0,$a0,1");
8759+ asm volatile("sb $t1,0($a2)");
8760+ asm volatile("rotr $t1,$t1,8");
8761+asm volatile("nop");
8762+asm volatile("nop");
8763+ asm volatile("sb $t1,0($a2)");
8764+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8765+asm volatile("nop");
8766+asm volatile("nop");
8767+ asm volatile("sb $t1,0($a2)");
8768+ asm volatile("rotr $t1,$t1,8");
8769+ asm volatile("addu $v1,$zero,$a3");
8770+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8771+ asm volatile("sb $t1,0($a2)");
8772+ asm volatile("rotr $t1,$t1,8");
8773+ asm volatile("movn $v1,$t3,$t0");
8774+asm volatile("nop");
8775+ asm volatile("sb $t1,0($a2)");
8776+ asm volatile("rotr $t1,$t1,8");
8777+asm volatile("nop");
8778+asm volatile("nop");
8779+ asm volatile("sb $t1,0($a2)");
8780+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8781+asm volatile("nop");
8782+asm volatile("nop");
8783+ asm volatile("sb $t1,0($a2)");
8784+ asm volatile("rotr $t1,$t1,8");
8785+ asm volatile("addu $v1,$zero,$a3");
8786+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8787+ asm volatile("sb $t1,0($a2)");
8788+ asm volatile("rotr $t1,$t1,8");
8789+ asm volatile("movn $v1,$t3,$t0");
8790+asm volatile("nop");
8791+ asm volatile("sb $t1,0($a2)");
8792+ asm volatile("rotr $t1,$t1,8");
8793+asm volatile("nop");
8794+asm volatile("nop");
8795+ asm volatile("sb $t1,0($a2)");
8796+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8797+asm volatile("nop");
8798+asm volatile("nop");
8799+ asm volatile("sb $t1,0($a2)");
8800+ asm volatile("rotr $t1,$t1,8");
8801+ asm volatile("addu $v1,$zero,$a3");
8802+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8803+ asm volatile("sb $t1,0($a2)");
8804+ asm volatile("rotr $t1,$t1,8");
8805+ asm volatile("movn $v1,$t3,$t0");
8806+asm volatile("nop");
8807+ asm volatile("sb $t1,0($a2)");
8808+ asm volatile("rotr $t1,$t1,8");
8809+asm volatile("nop");
8810+asm volatile("nop");
8811+ asm volatile("sb $t1,0($a2)");
8812+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8813+asm volatile("nop");
8814+asm volatile("nop");
8815+ asm volatile("sb $t1,0($a2)");
8816+ asm volatile("rotr $t1,$t1,8");
8817+ asm volatile("addu $v1,$zero,$a3");
8818+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8819+ asm volatile("sb $t1,0($a2)");
8820+ asm volatile("rotr $t1,$t1,8");
8821+ asm volatile("movn $v1,$t3,$t0");
8822+asm volatile("nop");
8823+ asm volatile("sb $t1,0($a2)");
8824+ asm volatile("rotr $t1,$t1,8");
8825+asm volatile("nop");
8826+asm volatile("nop");
8827+ asm volatile("sb $t1,0($a2)");
8828+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8829+asm volatile("nop");
8830+asm volatile("nop");
8831+ asm volatile("sb $t1,0($a2)");
8832+ asm volatile("rotr $t1,$t1,8");
8833+ asm volatile("addu $v1,$zero,$a3");
8834+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8835+ asm volatile("sb $t1,0($a2)");
8836+ asm volatile("rotr $t1,$t1,8");
8837+ asm volatile("movn $v1,$t3,$t0");
8838+asm volatile("nop");
8839+ asm volatile("sb $t1,0($a2)");
8840+ asm volatile("rotr $t1,$t1,8");
8841+asm volatile("nop");
8842+asm volatile("nop");
8843+ asm volatile("sb $t1,0($a2)");
8844+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8845+asm volatile("nop");
8846+asm volatile("nop");
8847+ asm volatile("sb $t1,0($a2)");
8848+ asm volatile("rotr $t1,$t1,8");
8849+ asm volatile("addu $v1,$zero,$a3");
8850+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8851+ asm volatile("sb $t1,0($a2)");
8852+ asm volatile("rotr $t1,$t1,8");
8853+ asm volatile("movn $v1,$t3,$t0");
8854+asm volatile("nop");
8855+ asm volatile("sb $t1,0($a2)");
8856+ asm volatile("rotr $t1,$t1,8");
8857+asm volatile("nop");
8858+ asm volatile("lbu $t5,0($a0)");
8859+ asm volatile("sb $t1,0($a2)");
8860+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8861+ asm volatile("sll $t5,$t5,3");
8862+ asm volatile("addu $t5,$t5,$t4");
8863+ asm volatile("sb $t1,0($a2)");
8864+ asm volatile("rotr $t1,$t1,8");
8865+ asm volatile("addu $v1,$zero,$a3");
8866+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8867+ asm volatile("sb $t1,0($a2)");
8868+ asm volatile("rotr $t1,$t1,8");
8869+ asm volatile("movn $v1,$t3,$t0");
8870+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
8871+ asm volatile("sb $t1,0($a2)");
8872+ asm volatile("rotr $t1,$t1,8");
8873+ asm volatile("lbu $t2,0($t5)");
8874+asm volatile("nop");
8875+ asm volatile("sb $t1,0($a2)");
8876+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8877+ asm volatile("sll $t3,$t3,5");
8878+ asm volatile("addu $t3,$t3,$a1");
8879+ asm volatile("sb $t1,0($a2)");
8880+ asm volatile("rotr $t1,$t1,8");
8881+ asm volatile("addu $v1,$zero,$a3");
8882+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8883+ asm volatile("sb $t1,0($a2)");
8884+ asm volatile("rotr $t1,$t1,8");
8885+ asm volatile("movn $v1,$t3,$t0");
8886+ asm volatile("addiu $a0,$a0,1");
8887+ asm volatile("sb $t1,0($a2)");
8888+ asm volatile("rotr $t1,$t1,8");
8889+asm volatile("nop");
8890+asm volatile("nop");
8891+ asm volatile("sb $t1,0($a2)");
8892+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8893+asm volatile("nop");
8894+asm volatile("nop");
8895+ asm volatile("sb $t1,0($a2)");
8896+ asm volatile("rotr $t1,$t1,8");
8897+ asm volatile("addu $v1,$zero,$a3");
8898+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8899+ asm volatile("sb $t1,0($a2)");
8900+ asm volatile("rotr $t1,$t1,8");
8901+ asm volatile("movn $v1,$t3,$t0");
8902+asm volatile("nop");
8903+ asm volatile("sb $t1,0($a2)");
8904+ asm volatile("rotr $t1,$t1,8");
8905+asm volatile("nop");
8906+asm volatile("nop");
8907+ asm volatile("sb $t1,0($a2)");
8908+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8909+asm volatile("nop");
8910+asm volatile("nop");
8911+ asm volatile("sb $t1,0($a2)");
8912+ asm volatile("rotr $t1,$t1,8");
8913+ asm volatile("addu $v1,$zero,$a3");
8914+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8915+ asm volatile("sb $t1,0($a2)");
8916+ asm volatile("rotr $t1,$t1,8");
8917+ asm volatile("movn $v1,$t3,$t0");
8918+asm volatile("nop");
8919+ asm volatile("sb $t1,0($a2)");
8920+ asm volatile("rotr $t1,$t1,8");
8921+asm volatile("nop");
8922+asm volatile("nop");
8923+ asm volatile("sb $t1,0($a2)");
8924+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8925+asm volatile("nop");
8926+asm volatile("nop");
8927+ asm volatile("sb $t1,0($a2)");
8928+ asm volatile("rotr $t1,$t1,8");
8929+ asm volatile("addu $v1,$zero,$a3");
8930+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8931+ asm volatile("sb $t1,0($a2)");
8932+ asm volatile("rotr $t1,$t1,8");
8933+ asm volatile("movn $v1,$t3,$t0");
8934+asm volatile("nop");
8935+ asm volatile("sb $t1,0($a2)");
8936+ asm volatile("rotr $t1,$t1,8");
8937+asm volatile("nop");
8938+asm volatile("nop");
8939+ asm volatile("sb $t1,0($a2)");
8940+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8941+asm volatile("nop");
8942+asm volatile("nop");
8943+ asm volatile("sb $t1,0($a2)");
8944+ asm volatile("rotr $t1,$t1,8");
8945+ asm volatile("addu $v1,$zero,$a3");
8946+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8947+ asm volatile("sb $t1,0($a2)");
8948+ asm volatile("rotr $t1,$t1,8");
8949+ asm volatile("movn $v1,$t3,$t0");
8950+asm volatile("nop");
8951+ asm volatile("sb $t1,0($a2)");
8952+ asm volatile("rotr $t1,$t1,8");
8953+asm volatile("nop");
8954+asm volatile("nop");
8955+ asm volatile("sb $t1,0($a2)");
8956+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8957+asm volatile("nop");
8958+asm volatile("nop");
8959+ asm volatile("sb $t1,0($a2)");
8960+ asm volatile("rotr $t1,$t1,8");
8961+ asm volatile("addu $v1,$zero,$a3");
8962+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8963+ asm volatile("sb $t1,0($a2)");
8964+ asm volatile("rotr $t1,$t1,8");
8965+ asm volatile("movn $v1,$t3,$t0");
8966+asm volatile("nop");
8967+ asm volatile("sb $t1,0($a2)");
8968+ asm volatile("rotr $t1,$t1,8");
8969+asm volatile("nop");
8970+asm volatile("nop");
8971+ asm volatile("sb $t1,0($a2)");
8972+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8973+asm volatile("nop");
8974+asm volatile("nop");
8975+ asm volatile("sb $t1,0($a2)");
8976+ asm volatile("rotr $t1,$t1,8");
8977+ asm volatile("addu $v1,$zero,$a3");
8978+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8979+ asm volatile("sb $t1,0($a2)");
8980+ asm volatile("rotr $t1,$t1,8");
8981+ asm volatile("movn $v1,$t3,$t0");
8982+asm volatile("nop");
8983+ asm volatile("sb $t1,0($a2)");
8984+ asm volatile("rotr $t1,$t1,8");
8985+asm volatile("nop");
8986+ asm volatile("lbu $t5,0($a0)");
8987+ asm volatile("sb $t1,0($a2)");
8988+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
8989+ asm volatile("sll $t5,$t5,3");
8990+ asm volatile("addu $t5,$t5,$t4");
8991+ asm volatile("sb $t1,0($a2)");
8992+ asm volatile("rotr $t1,$t1,8");
8993+ asm volatile("addu $v1,$zero,$a3");
8994+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
8995+ asm volatile("sb $t1,0($a2)");
8996+ asm volatile("rotr $t1,$t1,8");
8997+ asm volatile("movn $v1,$t3,$t0");
8998+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
8999+ asm volatile("sb $t1,0($a2)");
9000+ asm volatile("rotr $t1,$t1,8");
9001+ asm volatile("lbu $t2,0($t5)");
9002+asm volatile("nop");
9003+ asm volatile("sb $t1,0($a2)");
9004+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9005+ asm volatile("sll $t3,$t3,5");
9006+ asm volatile("addu $t3,$t3,$a1");
9007+ asm volatile("sb $t1,0($a2)");
9008+ asm volatile("rotr $t1,$t1,8");
9009+ asm volatile("addu $v1,$zero,$a3");
9010+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9011+ asm volatile("sb $t1,0($a2)");
9012+ asm volatile("rotr $t1,$t1,8");
9013+ asm volatile("movn $v1,$t3,$t0");
9014+ asm volatile("addiu $a0,$a0,1");
9015+ asm volatile("sb $t1,0($a2)");
9016+ asm volatile("rotr $t1,$t1,8");
9017+asm volatile("nop");
9018+asm volatile("nop");
9019+ asm volatile("sb $t1,0($a2)");
9020+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9021+asm volatile("nop");
9022+asm volatile("nop");
9023+ asm volatile("sb $t1,0($a2)");
9024+ asm volatile("rotr $t1,$t1,8");
9025+ asm volatile("addu $v1,$zero,$a3");
9026+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9027+ asm volatile("sb $t1,0($a2)");
9028+ asm volatile("rotr $t1,$t1,8");
9029+ asm volatile("movn $v1,$t3,$t0");
9030+asm volatile("nop");
9031+ asm volatile("sb $t1,0($a2)");
9032+ asm volatile("rotr $t1,$t1,8");
9033+asm volatile("nop");
9034+asm volatile("nop");
9035+ asm volatile("sb $t1,0($a2)");
9036+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9037+asm volatile("nop");
9038+asm volatile("nop");
9039+ asm volatile("sb $t1,0($a2)");
9040+ asm volatile("rotr $t1,$t1,8");
9041+ asm volatile("addu $v1,$zero,$a3");
9042+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9043+ asm volatile("sb $t1,0($a2)");
9044+ asm volatile("rotr $t1,$t1,8");
9045+ asm volatile("movn $v1,$t3,$t0");
9046+asm volatile("nop");
9047+ asm volatile("sb $t1,0($a2)");
9048+ asm volatile("rotr $t1,$t1,8");
9049+asm volatile("nop");
9050+asm volatile("nop");
9051+ asm volatile("sb $t1,0($a2)");
9052+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9053+asm volatile("nop");
9054+asm volatile("nop");
9055+ asm volatile("sb $t1,0($a2)");
9056+ asm volatile("rotr $t1,$t1,8");
9057+ asm volatile("addu $v1,$zero,$a3");
9058+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9059+ asm volatile("sb $t1,0($a2)");
9060+ asm volatile("rotr $t1,$t1,8");
9061+ asm volatile("movn $v1,$t3,$t0");
9062+asm volatile("nop");
9063+ asm volatile("sb $t1,0($a2)");
9064+ asm volatile("rotr $t1,$t1,8");
9065+asm volatile("nop");
9066+asm volatile("nop");
9067+ asm volatile("sb $t1,0($a2)");
9068+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9069+asm volatile("nop");
9070+asm volatile("nop");
9071+ asm volatile("sb $t1,0($a2)");
9072+ asm volatile("rotr $t1,$t1,8");
9073+ asm volatile("addu $v1,$zero,$a3");
9074+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9075+ asm volatile("sb $t1,0($a2)");
9076+ asm volatile("rotr $t1,$t1,8");
9077+ asm volatile("movn $v1,$t3,$t0");
9078+asm volatile("nop");
9079+ asm volatile("sb $t1,0($a2)");
9080+ asm volatile("rotr $t1,$t1,8");
9081+asm volatile("nop");
9082+asm volatile("nop");
9083+ asm volatile("sb $t1,0($a2)");
9084+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9085+asm volatile("nop");
9086+asm volatile("nop");
9087+ asm volatile("sb $t1,0($a2)");
9088+ asm volatile("rotr $t1,$t1,8");
9089+ asm volatile("addu $v1,$zero,$a3");
9090+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9091+ asm volatile("sb $t1,0($a2)");
9092+ asm volatile("rotr $t1,$t1,8");
9093+ asm volatile("movn $v1,$t3,$t0");
9094+asm volatile("nop");
9095+ asm volatile("sb $t1,0($a2)");
9096+ asm volatile("rotr $t1,$t1,8");
9097+asm volatile("nop");
9098+asm volatile("nop");
9099+ asm volatile("sb $t1,0($a2)");
9100+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9101+asm volatile("nop");
9102+asm volatile("nop");
9103+ asm volatile("sb $t1,0($a2)");
9104+ asm volatile("rotr $t1,$t1,8");
9105+ asm volatile("addu $v1,$zero,$a3");
9106+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9107+ asm volatile("sb $t1,0($a2)");
9108+ asm volatile("rotr $t1,$t1,8");
9109+ asm volatile("movn $v1,$t3,$t0");
9110+asm volatile("nop");
9111+ asm volatile("sb $t1,0($a2)");
9112+ asm volatile("rotr $t1,$t1,8");
9113+asm volatile("nop");
9114+ asm volatile("lbu $t5,0($a0)");
9115+ asm volatile("sb $t1,0($a2)");
9116+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9117+ asm volatile("sll $t5,$t5,3");
9118+ asm volatile("addu $t5,$t5,$t4");
9119+ asm volatile("sb $t1,0($a2)");
9120+ asm volatile("rotr $t1,$t1,8");
9121+ asm volatile("addu $v1,$zero,$a3");
9122+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9123+ asm volatile("sb $t1,0($a2)");
9124+ asm volatile("rotr $t1,$t1,8");
9125+ asm volatile("movn $v1,$t3,$t0");
9126+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
9127+ asm volatile("sb $t1,0($a2)");
9128+ asm volatile("rotr $t1,$t1,8");
9129+ asm volatile("lbu $t2,0($t5)");
9130+asm volatile("nop");
9131+ asm volatile("sb $t1,0($a2)");
9132+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9133+ asm volatile("sll $t3,$t3,5");
9134+ asm volatile("addu $t3,$t3,$a1");
9135+ asm volatile("sb $t1,0($a2)");
9136+ asm volatile("rotr $t1,$t1,8");
9137+ asm volatile("addu $v1,$zero,$a3");
9138+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9139+ asm volatile("sb $t1,0($a2)");
9140+ asm volatile("rotr $t1,$t1,8");
9141+ asm volatile("movn $v1,$t3,$t0");
9142+ asm volatile("addiu $a0,$a0,1");
9143+ asm volatile("sb $t1,0($a2)");
9144+ asm volatile("rotr $t1,$t1,8");
9145+asm volatile("nop");
9146+asm volatile("nop");
9147+ asm volatile("sb $t1,0($a2)");
9148+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9149+asm volatile("nop");
9150+asm volatile("nop");
9151+ asm volatile("sb $t1,0($a2)");
9152+ asm volatile("rotr $t1,$t1,8");
9153+ asm volatile("addu $v1,$zero,$a3");
9154+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9155+ asm volatile("sb $t1,0($a2)");
9156+ asm volatile("rotr $t1,$t1,8");
9157+ asm volatile("movn $v1,$t3,$t0");
9158+asm volatile("nop");
9159+ asm volatile("sb $t1,0($a2)");
9160+ asm volatile("rotr $t1,$t1,8");
9161+asm volatile("nop");
9162+asm volatile("nop");
9163+ asm volatile("sb $t1,0($a2)");
9164+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9165+asm volatile("nop");
9166+asm volatile("nop");
9167+ asm volatile("sb $t1,0($a2)");
9168+ asm volatile("rotr $t1,$t1,8");
9169+ asm volatile("addu $v1,$zero,$a3");
9170+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9171+ asm volatile("sb $t1,0($a2)");
9172+ asm volatile("rotr $t1,$t1,8");
9173+ asm volatile("movn $v1,$t3,$t0");
9174+asm volatile("nop");
9175+ asm volatile("sb $t1,0($a2)");
9176+ asm volatile("rotr $t1,$t1,8");
9177+asm volatile("nop");
9178+asm volatile("nop");
9179+ asm volatile("sb $t1,0($a2)");
9180+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9181+asm volatile("nop");
9182+asm volatile("nop");
9183+ asm volatile("sb $t1,0($a2)");
9184+ asm volatile("rotr $t1,$t1,8");
9185+ asm volatile("addu $v1,$zero,$a3");
9186+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9187+ asm volatile("sb $t1,0($a2)");
9188+ asm volatile("rotr $t1,$t1,8");
9189+ asm volatile("movn $v1,$t3,$t0");
9190+asm volatile("nop");
9191+ asm volatile("sb $t1,0($a2)");
9192+ asm volatile("rotr $t1,$t1,8");
9193+asm volatile("nop");
9194+asm volatile("nop");
9195+ asm volatile("sb $t1,0($a2)");
9196+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9197+asm volatile("nop");
9198+asm volatile("nop");
9199+ asm volatile("sb $t1,0($a2)");
9200+ asm volatile("rotr $t1,$t1,8");
9201+ asm volatile("addu $v1,$zero,$a3");
9202+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9203+ asm volatile("sb $t1,0($a2)");
9204+ asm volatile("rotr $t1,$t1,8");
9205+ asm volatile("movn $v1,$t3,$t0");
9206+asm volatile("nop");
9207+ asm volatile("sb $t1,0($a2)");
9208+ asm volatile("rotr $t1,$t1,8");
9209+asm volatile("nop");
9210+asm volatile("nop");
9211+ asm volatile("sb $t1,0($a2)");
9212+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9213+asm volatile("nop");
9214+asm volatile("nop");
9215+ asm volatile("sb $t1,0($a2)");
9216+ asm volatile("rotr $t1,$t1,8");
9217+ asm volatile("addu $v1,$zero,$a3");
9218+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9219+ asm volatile("sb $t1,0($a2)");
9220+ asm volatile("rotr $t1,$t1,8");
9221+ asm volatile("movn $v1,$t3,$t0");
9222+asm volatile("nop");
9223+ asm volatile("sb $t1,0($a2)");
9224+ asm volatile("rotr $t1,$t1,8");
9225+asm volatile("nop");
9226+asm volatile("nop");
9227+ asm volatile("sb $t1,0($a2)");
9228+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9229+asm volatile("nop");
9230+asm volatile("nop");
9231+ asm volatile("sb $t1,0($a2)");
9232+ asm volatile("rotr $t1,$t1,8");
9233+ asm volatile("addu $v1,$zero,$a3");
9234+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9235+ asm volatile("sb $t1,0($a2)");
9236+ asm volatile("rotr $t1,$t1,8");
9237+ asm volatile("movn $v1,$t3,$t0");
9238+asm volatile("nop");
9239+ asm volatile("sb $t1,0($a2)");
9240+ asm volatile("rotr $t1,$t1,8");
9241+asm volatile("nop");
9242+ asm volatile("lbu $t5,0($a0)");
9243+ asm volatile("sb $t1,0($a2)");
9244+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9245+ asm volatile("sll $t5,$t5,3");
9246+ asm volatile("addu $t5,$t5,$t4");
9247+ asm volatile("sb $t1,0($a2)");
9248+ asm volatile("rotr $t1,$t1,8");
9249+ asm volatile("addu $v1,$zero,$a3");
9250+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9251+ asm volatile("sb $t1,0($a2)");
9252+ asm volatile("rotr $t1,$t1,8");
9253+ asm volatile("movn $v1,$t3,$t0");
9254+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
9255+ asm volatile("sb $t1,0($a2)");
9256+ asm volatile("rotr $t1,$t1,8");
9257+ asm volatile("lbu $t2,0($t5)");
9258+asm volatile("nop");
9259+ asm volatile("sb $t1,0($a2)");
9260+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9261+ asm volatile("sll $t3,$t3,5");
9262+ asm volatile("addu $t3,$t3,$a1");
9263+ asm volatile("sb $t1,0($a2)");
9264+ asm volatile("rotr $t1,$t1,8");
9265+ asm volatile("addu $v1,$zero,$a3");
9266+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9267+ asm volatile("sb $t1,0($a2)");
9268+ asm volatile("rotr $t1,$t1,8");
9269+ asm volatile("movn $v1,$t3,$t0");
9270+ asm volatile("addiu $a0,$a0,1");
9271+ asm volatile("sb $t1,0($a2)");
9272+ asm volatile("rotr $t1,$t1,8");
9273+asm volatile("nop");
9274+asm volatile("nop");
9275+ asm volatile("sb $t1,0($a2)");
9276+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9277+asm volatile("nop");
9278+asm volatile("nop");
9279+ asm volatile("sb $t1,0($a2)");
9280+ asm volatile("rotr $t1,$t1,8");
9281+ asm volatile("addu $v1,$zero,$a3");
9282+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9283+ asm volatile("sb $t1,0($a2)");
9284+ asm volatile("rotr $t1,$t1,8");
9285+ asm volatile("movn $v1,$t3,$t0");
9286+asm volatile("nop");
9287+ asm volatile("sb $t1,0($a2)");
9288+ asm volatile("rotr $t1,$t1,8");
9289+asm volatile("nop");
9290+asm volatile("nop");
9291+ asm volatile("sb $t1,0($a2)");
9292+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9293+asm volatile("nop");
9294+asm volatile("nop");
9295+ asm volatile("sb $t1,0($a2)");
9296+ asm volatile("rotr $t1,$t1,8");
9297+ asm volatile("addu $v1,$zero,$a3");
9298+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9299+ asm volatile("sb $t1,0($a2)");
9300+ asm volatile("rotr $t1,$t1,8");
9301+ asm volatile("movn $v1,$t3,$t0");
9302+asm volatile("nop");
9303+ asm volatile("sb $t1,0($a2)");
9304+ asm volatile("rotr $t1,$t1,8");
9305+asm volatile("nop");
9306+asm volatile("nop");
9307+ asm volatile("sb $t1,0($a2)");
9308+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9309+asm volatile("nop");
9310+asm volatile("nop");
9311+ asm volatile("sb $t1,0($a2)");
9312+ asm volatile("rotr $t1,$t1,8");
9313+ asm volatile("addu $v1,$zero,$a3");
9314+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9315+ asm volatile("sb $t1,0($a2)");
9316+ asm volatile("rotr $t1,$t1,8");
9317+ asm volatile("movn $v1,$t3,$t0");
9318+asm volatile("nop");
9319+ asm volatile("sb $t1,0($a2)");
9320+ asm volatile("rotr $t1,$t1,8");
9321+asm volatile("nop");
9322+asm volatile("nop");
9323+ asm volatile("sb $t1,0($a2)");
9324+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9325+asm volatile("nop");
9326+asm volatile("nop");
9327+ asm volatile("sb $t1,0($a2)");
9328+ asm volatile("rotr $t1,$t1,8");
9329+ asm volatile("addu $v1,$zero,$a3");
9330+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9331+ asm volatile("sb $t1,0($a2)");
9332+ asm volatile("rotr $t1,$t1,8");
9333+ asm volatile("movn $v1,$t3,$t0");
9334+asm volatile("nop");
9335+ asm volatile("sb $t1,0($a2)");
9336+ asm volatile("rotr $t1,$t1,8");
9337+asm volatile("nop");
9338+asm volatile("nop");
9339+ asm volatile("sb $t1,0($a2)");
9340+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9341+asm volatile("nop");
9342+asm volatile("nop");
9343+ asm volatile("sb $t1,0($a2)");
9344+ asm volatile("rotr $t1,$t1,8");
9345+ asm volatile("addu $v1,$zero,$a3");
9346+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9347+ asm volatile("sb $t1,0($a2)");
9348+ asm volatile("rotr $t1,$t1,8");
9349+ asm volatile("movn $v1,$t3,$t0");
9350+asm volatile("nop");
9351+ asm volatile("sb $t1,0($a2)");
9352+ asm volatile("rotr $t1,$t1,8");
9353+asm volatile("nop");
9354+asm volatile("nop");
9355+ asm volatile("sb $t1,0($a2)");
9356+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9357+asm volatile("nop");
9358+asm volatile("nop");
9359+ asm volatile("sb $t1,0($a2)");
9360+ asm volatile("rotr $t1,$t1,8");
9361+ asm volatile("addu $v1,$zero,$a3");
9362+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9363+ asm volatile("sb $t1,0($a2)");
9364+ asm volatile("rotr $t1,$t1,8");
9365+ asm volatile("movn $v1,$t3,$t0");
9366+asm volatile("nop");
9367+ asm volatile("sb $t1,0($a2)");
9368+ asm volatile("rotr $t1,$t1,8");
9369+asm volatile("nop");
9370+ asm volatile("lbu $t5,0($a0)");
9371+ asm volatile("sb $t1,0($a2)");
9372+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9373+ asm volatile("sll $t5,$t5,3");
9374+ asm volatile("addu $t5,$t5,$t4");
9375+ asm volatile("sb $t1,0($a2)");
9376+ asm volatile("rotr $t1,$t1,8");
9377+ asm volatile("addu $v1,$zero,$a3");
9378+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9379+ asm volatile("sb $t1,0($a2)");
9380+ asm volatile("rotr $t1,$t1,8");
9381+ asm volatile("movn $v1,$t3,$t0");
9382+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
9383+ asm volatile("sb $t1,0($a2)");
9384+ asm volatile("rotr $t1,$t1,8");
9385+ asm volatile("lbu $t2,0($t5)");
9386+asm volatile("nop");
9387+ asm volatile("sb $t1,0($a2)");
9388+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9389+ asm volatile("sll $t3,$t3,5");
9390+ asm volatile("addu $t3,$t3,$a1");
9391+ asm volatile("sb $t1,0($a2)");
9392+ asm volatile("rotr $t1,$t1,8");
9393+ asm volatile("addu $v1,$zero,$a3");
9394+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9395+ asm volatile("sb $t1,0($a2)");
9396+ asm volatile("rotr $t1,$t1,8");
9397+ asm volatile("movn $v1,$t3,$t0");
9398+ asm volatile("addiu $a0,$a0,1");
9399+ asm volatile("sb $t1,0($a2)");
9400+ asm volatile("rotr $t1,$t1,8");
9401+asm volatile("nop");
9402+asm volatile("nop");
9403+ asm volatile("sb $t1,0($a2)");
9404+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9405+asm volatile("nop");
9406+asm volatile("nop");
9407+ asm volatile("sb $t1,0($a2)");
9408+ asm volatile("rotr $t1,$t1,8");
9409+ asm volatile("addu $v1,$zero,$a3");
9410+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9411+ asm volatile("sb $t1,0($a2)");
9412+ asm volatile("rotr $t1,$t1,8");
9413+ asm volatile("movn $v1,$t3,$t0");
9414+asm volatile("nop");
9415+ asm volatile("sb $t1,0($a2)");
9416+ asm volatile("rotr $t1,$t1,8");
9417+asm volatile("nop");
9418+asm volatile("nop");
9419+ asm volatile("sb $t1,0($a2)");
9420+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9421+asm volatile("nop");
9422+asm volatile("nop");
9423+ asm volatile("sb $t1,0($a2)");
9424+ asm volatile("rotr $t1,$t1,8");
9425+ asm volatile("addu $v1,$zero,$a3");
9426+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9427+ asm volatile("sb $t1,0($a2)");
9428+ asm volatile("rotr $t1,$t1,8");
9429+ asm volatile("movn $v1,$t3,$t0");
9430+asm volatile("nop");
9431+ asm volatile("sb $t1,0($a2)");
9432+ asm volatile("rotr $t1,$t1,8");
9433+asm volatile("nop");
9434+asm volatile("nop");
9435+ asm volatile("sb $t1,0($a2)");
9436+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9437+asm volatile("nop");
9438+asm volatile("nop");
9439+ asm volatile("sb $t1,0($a2)");
9440+ asm volatile("rotr $t1,$t1,8");
9441+ asm volatile("addu $v1,$zero,$a3");
9442+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9443+ asm volatile("sb $t1,0($a2)");
9444+ asm volatile("rotr $t1,$t1,8");
9445+ asm volatile("movn $v1,$t3,$t0");
9446+asm volatile("nop");
9447+ asm volatile("sb $t1,0($a2)");
9448+ asm volatile("rotr $t1,$t1,8");
9449+asm volatile("nop");
9450+asm volatile("nop");
9451+ asm volatile("sb $t1,0($a2)");
9452+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9453+asm volatile("nop");
9454+asm volatile("nop");
9455+ asm volatile("sb $t1,0($a2)");
9456+ asm volatile("rotr $t1,$t1,8");
9457+ asm volatile("addu $v1,$zero,$a3");
9458+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9459+ asm volatile("sb $t1,0($a2)");
9460+ asm volatile("rotr $t1,$t1,8");
9461+ asm volatile("movn $v1,$t3,$t0");
9462+asm volatile("nop");
9463+ asm volatile("sb $t1,0($a2)");
9464+ asm volatile("rotr $t1,$t1,8");
9465+asm volatile("nop");
9466+asm volatile("nop");
9467+ asm volatile("sb $t1,0($a2)");
9468+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9469+asm volatile("nop");
9470+asm volatile("nop");
9471+ asm volatile("sb $t1,0($a2)");
9472+ asm volatile("rotr $t1,$t1,8");
9473+ asm volatile("addu $v1,$zero,$a3");
9474+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9475+ asm volatile("sb $t1,0($a2)");
9476+ asm volatile("rotr $t1,$t1,8");
9477+ asm volatile("movn $v1,$t3,$t0");
9478+asm volatile("nop");
9479+ asm volatile("sb $t1,0($a2)");
9480+ asm volatile("rotr $t1,$t1,8");
9481+asm volatile("nop");
9482+asm volatile("nop");
9483+ asm volatile("sb $t1,0($a2)");
9484+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9485+asm volatile("nop");
9486+asm volatile("nop");
9487+ asm volatile("sb $t1,0($a2)");
9488+ asm volatile("rotr $t1,$t1,8");
9489+ asm volatile("addu $v1,$zero,$a3");
9490+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9491+ asm volatile("sb $t1,0($a2)");
9492+ asm volatile("rotr $t1,$t1,8");
9493+ asm volatile("movn $v1,$t3,$t0");
9494+asm volatile("nop");
9495+ asm volatile("sb $t1,0($a2)");
9496+ asm volatile("rotr $t1,$t1,8");
9497+asm volatile("nop");
9498+ asm volatile("lbu $t5,0($a0)");
9499+ asm volatile("sb $t1,0($a2)");
9500+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9501+ asm volatile("sll $t5,$t5,3");
9502+ asm volatile("addu $t5,$t5,$t4");
9503+ asm volatile("sb $t1,0($a2)");
9504+ asm volatile("rotr $t1,$t1,8");
9505+ asm volatile("addu $v1,$zero,$a3");
9506+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9507+ asm volatile("sb $t1,0($a2)");
9508+ asm volatile("rotr $t1,$t1,8");
9509+ asm volatile("movn $v1,$t3,$t0");
9510+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
9511+ asm volatile("sb $t1,0($a2)");
9512+ asm volatile("rotr $t1,$t1,8");
9513+ asm volatile("lbu $t2,0($t5)");
9514+asm volatile("nop");
9515+ asm volatile("sb $t1,0($a2)");
9516+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9517+ asm volatile("sll $t3,$t3,5");
9518+ asm volatile("addu $t3,$t3,$a1");
9519+ asm volatile("sb $t1,0($a2)");
9520+ asm volatile("rotr $t1,$t1,8");
9521+ asm volatile("addu $v1,$zero,$a3");
9522+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9523+ asm volatile("sb $t1,0($a2)");
9524+ asm volatile("rotr $t1,$t1,8");
9525+ asm volatile("movn $v1,$t3,$t0");
9526+ asm volatile("addiu $a0,$a0,1");
9527+ asm volatile("sb $t1,0($a2)");
9528+ asm volatile("rotr $t1,$t1,8");
9529+asm volatile("nop");
9530+asm volatile("nop");
9531+ asm volatile("sb $t1,0($a2)");
9532+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9533+asm volatile("nop");
9534+asm volatile("nop");
9535+ asm volatile("sb $t1,0($a2)");
9536+ asm volatile("rotr $t1,$t1,8");
9537+ asm volatile("addu $v1,$zero,$a3");
9538+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9539+ asm volatile("sb $t1,0($a2)");
9540+ asm volatile("rotr $t1,$t1,8");
9541+ asm volatile("movn $v1,$t3,$t0");
9542+asm volatile("nop");
9543+ asm volatile("sb $t1,0($a2)");
9544+ asm volatile("rotr $t1,$t1,8");
9545+asm volatile("nop");
9546+asm volatile("nop");
9547+ asm volatile("sb $t1,0($a2)");
9548+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9549+asm volatile("nop");
9550+asm volatile("nop");
9551+ asm volatile("sb $t1,0($a2)");
9552+ asm volatile("rotr $t1,$t1,8");
9553+ asm volatile("addu $v1,$zero,$a3");
9554+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9555+ asm volatile("sb $t1,0($a2)");
9556+ asm volatile("rotr $t1,$t1,8");
9557+ asm volatile("movn $v1,$t3,$t0");
9558+asm volatile("nop");
9559+ asm volatile("sb $t1,0($a2)");
9560+ asm volatile("rotr $t1,$t1,8");
9561+asm volatile("nop");
9562+asm volatile("nop");
9563+ asm volatile("sb $t1,0($a2)");
9564+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9565+asm volatile("nop");
9566+asm volatile("nop");
9567+ asm volatile("sb $t1,0($a2)");
9568+ asm volatile("rotr $t1,$t1,8");
9569+ asm volatile("addu $v1,$zero,$a3");
9570+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9571+ asm volatile("sb $t1,0($a2)");
9572+ asm volatile("rotr $t1,$t1,8");
9573+ asm volatile("movn $v1,$t3,$t0");
9574+asm volatile("nop");
9575+ asm volatile("sb $t1,0($a2)");
9576+ asm volatile("rotr $t1,$t1,8");
9577+asm volatile("nop");
9578+asm volatile("nop");
9579+ asm volatile("sb $t1,0($a2)");
9580+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9581+asm volatile("nop");
9582+asm volatile("nop");
9583+ asm volatile("sb $t1,0($a2)");
9584+ asm volatile("rotr $t1,$t1,8");
9585+ asm volatile("addu $v1,$zero,$a3");
9586+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9587+ asm volatile("sb $t1,0($a2)");
9588+ asm volatile("rotr $t1,$t1,8");
9589+ asm volatile("movn $v1,$t3,$t0");
9590+asm volatile("nop");
9591+ asm volatile("sb $t1,0($a2)");
9592+ asm volatile("rotr $t1,$t1,8");
9593+asm volatile("nop");
9594+asm volatile("nop");
9595+ asm volatile("sb $t1,0($a2)");
9596+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9597+asm volatile("nop");
9598+asm volatile("nop");
9599+ asm volatile("sb $t1,0($a2)");
9600+ asm volatile("rotr $t1,$t1,8");
9601+ asm volatile("addu $v1,$zero,$a3");
9602+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9603+ asm volatile("sb $t1,0($a2)");
9604+ asm volatile("rotr $t1,$t1,8");
9605+ asm volatile("movn $v1,$t3,$t0");
9606+asm volatile("nop");
9607+ asm volatile("sb $t1,0($a2)");
9608+ asm volatile("rotr $t1,$t1,8");
9609+asm volatile("nop");
9610+asm volatile("nop");
9611+ asm volatile("sb $t1,0($a2)");
9612+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9613+asm volatile("nop");
9614+asm volatile("nop");
9615+ asm volatile("sb $t1,0($a2)");
9616+ asm volatile("rotr $t1,$t1,8");
9617+ asm volatile("addu $v1,$zero,$a3");
9618+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9619+ asm volatile("sb $t1,0($a2)");
9620+ asm volatile("rotr $t1,$t1,8");
9621+ asm volatile("movn $v1,$t3,$t0");
9622+asm volatile("nop");
9623+ asm volatile("sb $t1,0($a2)");
9624+ asm volatile("rotr $t1,$t1,8");
9625+asm volatile("nop");
9626+ asm volatile("lbu $t5,0($a0)");
9627+ asm volatile("sb $t1,0($a2)");
9628+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9629+ asm volatile("sll $t5,$t5,3");
9630+ asm volatile("addu $t5,$t5,$t4");
9631+ asm volatile("sb $t1,0($a2)");
9632+ asm volatile("rotr $t1,$t1,8");
9633+ asm volatile("addu $v1,$zero,$a3");
9634+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9635+ asm volatile("sb $t1,0($a2)");
9636+ asm volatile("rotr $t1,$t1,8");
9637+ asm volatile("movn $v1,$t3,$t0");
9638+ asm volatile("lbu $t3,%0($a0)"::"n"(ATTROFFSET));
9639+ asm volatile("sb $t1,0($a2)");
9640+ asm volatile("rotr $t1,$t1,8");
9641+ asm volatile("lbu $t2,0($t5)");
9642+asm volatile("nop");
9643+ asm volatile("sb $t1,0($a2)");
9644+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9645+ asm volatile("sll $t3,$t3,5");
9646+ asm volatile("addu $t3,$t3,$a1");
9647+ asm volatile("sb $t1,0($a2)");
9648+ asm volatile("rotr $t1,$t1,8");
9649+ asm volatile("addu $v1,$zero,$a3");
9650+ asm volatile("ext $t0,$t2,7,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9651+ asm volatile("sb $t1,0($a2)");
9652+ asm volatile("rotr $t1,$t1,8");
9653+ asm volatile("movn $v1,$t3,$t0");
9654+ asm volatile("addiu $a0,$a0,1");
9655+ asm volatile("sb $t1,0($a2)");
9656+ asm volatile("rotr $t1,$t1,8");
9657+asm volatile("nop");
9658+asm volatile("nop");
9659+ asm volatile("sb $t1,0($a2)");
9660+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9661+asm volatile("nop");
9662+asm volatile("nop");
9663+ asm volatile("sb $t1,0($a2)");
9664+ asm volatile("rotr $t1,$t1,8");
9665+ asm volatile("addu $v1,$zero,$a3");
9666+ asm volatile("ext $t0,$t2,6,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9667+ asm volatile("sb $t1,0($a2)");
9668+ asm volatile("rotr $t1,$t1,8");
9669+ asm volatile("movn $v1,$t3,$t0");
9670+asm volatile("nop");
9671+ asm volatile("sb $t1,0($a2)");
9672+ asm volatile("rotr $t1,$t1,8");
9673+asm volatile("nop");
9674+asm volatile("nop");
9675+ asm volatile("sb $t1,0($a2)");
9676+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9677+asm volatile("nop");
9678+asm volatile("nop");
9679+ asm volatile("sb $t1,0($a2)");
9680+ asm volatile("rotr $t1,$t1,8");
9681+ asm volatile("addu $v1,$zero,$a3");
9682+ asm volatile("ext $t0,$t2,5,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9683+ asm volatile("sb $t1,0($a2)");
9684+ asm volatile("rotr $t1,$t1,8");
9685+ asm volatile("movn $v1,$t3,$t0");
9686+asm volatile("nop");
9687+ asm volatile("sb $t1,0($a2)");
9688+ asm volatile("rotr $t1,$t1,8");
9689+asm volatile("nop");
9690+asm volatile("nop");
9691+ asm volatile("sb $t1,0($a2)");
9692+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9693+asm volatile("nop");
9694+asm volatile("nop");
9695+ asm volatile("sb $t1,0($a2)");
9696+ asm volatile("rotr $t1,$t1,8");
9697+ asm volatile("addu $v1,$zero,$a3");
9698+ asm volatile("ext $t0,$t2,4,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9699+ asm volatile("sb $t1,0($a2)");
9700+ asm volatile("rotr $t1,$t1,8");
9701+ asm volatile("movn $v1,$t3,$t0");
9702+asm volatile("nop");
9703+ asm volatile("sb $t1,0($a2)");
9704+ asm volatile("rotr $t1,$t1,8");
9705+asm volatile("nop");
9706+asm volatile("nop");
9707+ asm volatile("sb $t1,0($a2)");
9708+ asm volatile("lw $t1,12($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9709+asm volatile("nop");
9710+asm volatile("nop");
9711+ asm volatile("sb $t1,0($a2)");
9712+ asm volatile("rotr $t1,$t1,8");
9713+ asm volatile("addu $v1,$zero,$a3");
9714+ asm volatile("ext $t0,$t2,3,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9715+ asm volatile("sb $t1,0($a2)");
9716+ asm volatile("rotr $t1,$t1,8");
9717+ asm volatile("movn $v1,$t3,$t0");
9718+asm volatile("nop");
9719+ asm volatile("sb $t1,0($a2)");
9720+ asm volatile("rotr $t1,$t1,8");
9721+asm volatile("nop");
9722+asm volatile("nop");
9723+ asm volatile("sb $t1,0($a2)");
9724+ asm volatile("lw $t1,16($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9725+asm volatile("nop");
9726+asm volatile("nop");
9727+ asm volatile("sb $t1,0($a2)");
9728+ asm volatile("rotr $t1,$t1,8");
9729+ asm volatile("addu $v1,$zero,$a3");
9730+ asm volatile("ext $t0,$t2,2,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9731+ asm volatile("sb $t1,0($a2)");
9732+ asm volatile("rotr $t1,$t1,8");
9733+ asm volatile("movn $v1,$t3,$t0");
9734+asm volatile("nop");
9735+ asm volatile("sb $t1,0($a2)");
9736+ asm volatile("rotr $t1,$t1,8");
9737+asm volatile("nop");
9738+asm volatile("nop");
9739+ asm volatile("sb $t1,0($a2)");
9740+ asm volatile("lw $t1,0($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9741+asm volatile("nop");
9742+asm volatile("nop");
9743+ asm volatile("sb $t1,0($a2)");
9744+ asm volatile("rotr $t1,$t1,8");
9745+ asm volatile("addu $v1,$zero,$a3");
9746+ asm volatile("ext $t0,$t2,1,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9747+ asm volatile("sb $t1,0($a2)");
9748+ asm volatile("rotr $t1,$t1,8");
9749+ asm volatile("movn $v1,$t3,$t0");
9750+asm volatile("nop");
9751+ asm volatile("sb $t1,0($a2)");
9752+ asm volatile("rotr $t1,$t1,8");
9753+asm volatile("nop");
9754+ asm volatile("lbu $t5,0($a0)");
9755+ asm volatile("sb $t1,0($a2)");
9756+ asm volatile("lw $t1,4($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9757+ asm volatile("sll $t5,$t5,3");
9758+ asm volatile("addu $t5,$t5,$t4");
9759+ asm volatile("sb $t1,0($a2)");
9760+ asm volatile("rotr $t1,$t1,8");
9761+ asm volatile("addu $v1,$zero,$a3");
9762+ asm volatile("ext $t0,$t2,0,1"); //ext t0,t2,n,1 n:7,6,5,4,3,2,1,0,7,6...
9763+ asm volatile("sb $t1,0($a2)");
9764+ asm volatile("rotr $t1,$t1,8");
9765+ asm volatile("movn $v1,$t3,$t0");
9766+asm volatile("nop");
9767+ asm volatile("sb $t1,0($a2)");
9768+ asm volatile("rotr $t1,$t1,8");
9769+asm volatile("nop");
9770+asm volatile("nop");
9771+ asm volatile("sb $t1,0($a2)");
9772+ asm volatile("lw $t1,8($v1)"); //lw t1,n(v1) n:0,4,8,12,16,0,4...
9773+asm volatile("nop");
9774+asm volatile("nop");
9775+ asm volatile("sb $t1,0($a2)");
9776+ asm volatile("rotr $t1,$t1,8");
9777+asm volatile("nop");
9778+asm volatile("nop");
9779+ asm volatile("sb $t1,0($a2)");
9780+ asm volatile("rotr $t1,$t1,8");
9781+asm volatile("nop");
9782+asm volatile("nop");
9783+ asm volatile("sb $t1,0($a2)");
9784+ asm volatile("rotr $t1,$t1,8");
9785+asm volatile("nop");
9786+asm volatile("nop");
9787+ asm volatile("sb $t1,0($a2)");
9788+
9789+
9790+ nop();nop();
9791+
9792+ // LATE=C_BLK;
9793+ asm volatile("addiu $t1,$zero,%0"::"n"(C_BLK));
9794+ asm volatile("sb $t1,0($a2)");
9795+
9796+asm volatile("label5:");
9797+ mOC2ClearIntFlag(); // OC2割り込みフラグクリア
9798+}
9799+
9800+// グラフィック画面クリア
9801+void g_clearscreen(void)
9802+{
9803+ unsigned int *vp;
9804+ int i;
9805+ vp=(unsigned int *)GVRAM;
9806+ for(i=0;i<X_RES*Y_RES/4;i++) *vp++=0;
9807+}
9808+//テキスト画面クリア
9809+void clearscreen(void)
9810+{
9811+ unsigned int *vp;
9812+ int i;
9813+ vp=(unsigned int *)TVRAM;
9814+ for(i=0;i<WIDTH_X*WIDTH_Y*2/4;i++) *vp++=0;
9815+ cursor=TVRAM;
9816+}
9817+
9818+void set_palette(unsigned char n,unsigned char b,unsigned char r,unsigned char g)
9819+{
9820+ // カラーパレット設定(5ビットDA、電源3.3V、1周期を5分割)
9821+ // n:パレット番号0?255、r,g,b:0?255
9822+ // 輝度Y=0.587*G+0.114*B+0.299*R
9823+ // 信号N=Y+0.4921*(B-Y)*sinθ+0.8773*(R-Y)*cosθ
9824+ // 出力データS=(N*0.71[v]+0.29[v])/3.3[v]*64*1.3
9825+
9826+ int y;
9827+ y=(150*g+29*b+77*r+128)/256;
9828+
9829+ ClTable[n*32+ 0]=(4582*y+ 0*((int)b-y)+4020*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*0/20
9830+ ClTable[n*32+ 1]=(4582*y+1824*((int)b-y)+2363*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*1/20
9831+ ClTable[n*32+ 2]=(4582*y+2145*((int)b-y)-1242*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*2/20
9832+ ClTable[n*32+ 3]=(4582*y+ 697*((int)b-y)-3824*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*3/20
9833+ ClTable[n*32+ 4]=(4582*y-1325*((int)b-y)-3252*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*4/20
9834+ ClTable[n*32+ 5]=(4582*y-2255*((int)b-y)+ 0*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*5/20
9835+ ClTable[n*32+ 6]=(4582*y-1326*((int)b-y)+3252*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*6/20
9836+ ClTable[n*32+ 7]=(4582*y+ 697*((int)b-y)+3824*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*7/20
9837+ ClTable[n*32+ 8]=(4582*y+2145*((int)b-y)+1242*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*8/20
9838+ ClTable[n*32+ 9]=(4582*y+1824*((int)b-y)-2363*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*9/20
9839+ ClTable[n*32+10]=(4582*y+ 0*((int)b-y)-4020*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*10/20
9840+ ClTable[n*32+11]=(4582*y-1824*((int)b-y)-2363*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*11/20
9841+ ClTable[n*32+12]=(4582*y-2145*((int)b-y)+1242*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*12/20
9842+ ClTable[n*32+13]=(4582*y- 697*((int)b-y)+3823*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*13/20
9843+ ClTable[n*32+14]=(4582*y+1325*((int)b-y)+3252*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*14/20
9844+ ClTable[n*32+15]=(4582*y+2255*((int)b-y)+ 0*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*15/20
9845+ ClTable[n*32+16]=(4582*y+1326*((int)b-y)-3252*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*16/20
9846+ ClTable[n*32+17]=(4582*y- 697*((int)b-y)-3824*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*17/20
9847+ ClTable[n*32+18]=(4582*y-2145*((int)b-y)-1242*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*18/20
9848+ ClTable[n*32+19]=(4582*y-1824*((int)b-y)+2363*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*19/20
9849+}
9850+void set_bgcolor(unsigned char b,unsigned char r,unsigned char g)
9851+{
9852+ // バックグラウンドカラー設定
9853+
9854+ int y;
9855+ y=(150*g+29*b+77*r+128)/256;
9856+
9857+ BGClTable[ 0]=(4582*y+ 0*((int)b-y)+4020*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*0/20
9858+ BGClTable[ 1]=(4582*y+1824*((int)b-y)+2363*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*1/20
9859+ BGClTable[ 2]=(4582*y+2145*((int)b-y)-1242*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*2/20
9860+ BGClTable[ 3]=(4582*y+ 697*((int)b-y)-3824*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*3/20
9861+ BGClTable[ 4]=(4582*y-1325*((int)b-y)-3252*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*4/20
9862+ BGClTable[ 5]=(4582*y-2255*((int)b-y)+ 0*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*5/20
9863+ BGClTable[ 6]=(4582*y-1326*((int)b-y)+3252*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*6/20
9864+ BGClTable[ 7]=(4582*y+ 697*((int)b-y)+3824*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*7/20
9865+ BGClTable[ 8]=(4582*y+2145*((int)b-y)+1242*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*8/20
9866+ BGClTable[ 9]=(4582*y+1824*((int)b-y)-2363*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*9/20
9867+ BGClTable[10]=(4582*y+ 0*((int)b-y)-4020*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*10/20
9868+ BGClTable[11]=(4582*y-1824*((int)b-y)-2363*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*11/20
9869+ BGClTable[12]=(4582*y-2145*((int)b-y)+1242*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*12/20
9870+ BGClTable[13]=(4582*y- 697*((int)b-y)+3823*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*13/20
9871+ BGClTable[14]=(4582*y+1325*((int)b-y)+3252*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*14/20
9872+ BGClTable[15]=(4582*y+2255*((int)b-y)+ 0*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*15/20
9873+ BGClTable[16]=(4582*y+1326*((int)b-y)-3252*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*16/20
9874+ BGClTable[17]=(4582*y- 697*((int)b-y)-3824*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*17/20
9875+ BGClTable[18]=(4582*y-2145*((int)b-y)-1242*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*18/20
9876+ BGClTable[19]=(4582*y-1824*((int)b-y)+2363*((int)r-y)+1872*256+32768)/65536;//θ=2Π*3*19/20
9877+}
9878+
9879+void start_composite(void)
9880+{
9881+ // 変数初期設定
9882+ LineCount=0; // 処理中ラインカウンター
9883+ drawing=0;
9884+ TVRAMp=TVRAM;
9885+ fontp=Fontp;
9886+ if(graphmode) GVRAMp=GVRAM;
9887+
9888+ PR2 = H_NTSC -1; // 約63.5usecに設定
9889+ T2CONSET=0x8000; // タイマ2スタート
9890+}
9891+void stop_composite(void)
9892+{
9893+ T2CONCLR = 0x8000; // タイマ2停止
9894+}
9895+
9896+// カラーコンポジット出力初期化
9897+void init_composite(void)
9898+{
9899+ unsigned int *fontROMp,*fontRAMp;
9900+ unsigned int i;
9901+
9902+ clearscreen();
9903+ graphmode=0;
9904+
9905+ //カラーパレット初期化
9906+ for(i=0;i<8;i++){
9907+ set_palette(i,255*(i&1),255*((i>>1)&1),255*(i>>2));
9908+ }
9909+ for(i=0;i<8;i++){
9910+ set_palette(i+8,128*(i&1),128*((i>>1)&1),128*(i>>2));
9911+ }
9912+ for(i=16;i<256;i++){
9913+ set_palette(i,255,255,255);
9914+ }
9915+ set_bgcolor(0,0,0); //バックグランドカラーは黒
9916+ setcursorcolor(7);
9917+
9918+ //フォント初期化 FontData[]からfontdata[]にコピー
9919+ fontROMp=(unsigned int *)FontData;
9920+ fontRAMp=(unsigned int *)fontdata;
9921+ for(i=0;i<256*8/4;i++) *fontRAMp++=*fontROMp++;
9922+ Fontp=fontdata;
9923+
9924+ // タイマ2の初期設定,内部クロックで63.5usec周期、1:1
9925+ T2CON = 0x0000; // タイマ2停止状態
9926+ mT2SetIntPriority(5); // 割り込みレベル5
9927+ mT2ClearIntFlag();
9928+ mT2IntEnable(1); // タイマ2割り込み有効化
9929+
9930+ // OC1の割り込み有効化
9931+ mOC1SetIntPriority(5); // 割り込みレベル5
9932+ mOC1ClearIntFlag();
9933+ mOC1IntEnable(1); // OC1割り込み有効化
9934+
9935+ // OC2の割り込み有効化
9936+ mOC2SetIntPriority(5); // 割り込みレベル5
9937+ mOC2ClearIntFlag();
9938+ mOC2IntEnable(1); // OC2割り込み有効化
9939+
9940+ // OC5の割り込み有効化
9941+ mOC5SetIntPriority(5); // 割り込みレベル5
9942+ mOC5ClearIntFlag();
9943+ mOC5IntEnable(1); // OC5割り込み有効化
9944+
9945+ OSCCONCLR=0x10; // WAIT命令はアイドルモード
9946+ INTEnableSystemMultiVectoredInt();
9947+ SYSTEMConfig(95000000,SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE); //キャッシュ有効化(周辺クロックには適用しない)
9948+ BMXCONCLR=0x40; // RAMアクセスウェイト0
9949+ start_composite();
9950+}
9951+//テキストモードとテキスト&グラフィックモードの切り替え
9952+void set_graphmode(unsigned char m){
9953+// m:0 テキストモード、0以外 テキスト&グラフィックモード
9954+ stop_composite();
9955+ if(m){
9956+ graphmode=1;
9957+ }
9958+ else{
9959+ graphmode=0;
9960+ }
9961+ start_composite();
9962+}
9963+void init_graphic(unsigned char *gvram){
9964+// グラフィック機能を初期化
9965+// パラメータとして、28KBのメモリ領域へのポインタを与える
9966+ int i;
9967+ GVRAM=gvram;
9968+ g_clearscreen();
9969+}
--- branches/lib_videoout/lib_video_megalopa.h (nonexistent)
+++ branches/lib_videoout/lib_video_megalopa.h (revision 8)
@@ -0,0 +1,89 @@
1+// lib_video_megalopa.h
2+// テキスト+グラフィックビデオ出力 PIC32MX370F512H用ヘッダーファイル by K.Tanaka
3+
4+#define X_RES 288 // Graphic横方向解像度
5+#define Y_RES 216 // Graphic縦方向解像度
6+#define WIDTH_X 36 // 横方向文字数
7+#define WIDTH_Y 27 // 縦方向文字数
8+#define ATTROFFSET (WIDTH_X*WIDTH_Y) // VRAM上のカラーパレット格納位置
9+
10+extern volatile char drawing; // 表示期間中は-1
11+extern volatile unsigned short drawcount; // 1画面表示終了ごとに1足す。アプリ側で0にする。
12+ // 最低1回は画面表示したことのチェックと、アプリの処理が何画面期間必要かの確認に利用。
13+extern unsigned char *GVRAM; // Graphicビデオメモリ
14+extern unsigned char TVRAM[]; // Characterビデオメモリ
15+extern const unsigned char FontData[]; //フォントパターン(初期化時にここからfontdata[]にコピー)
16+extern unsigned char graphmode; //テキストモード時 0、テキスト&グラフィックモード時 0以外
17+extern unsigned char fontdata[]; //固定フォント領域、初期化時にFontData[]からコピー
18+extern unsigned char *Fontp; //現在のフォントパターンの先頭アドレス
19+
20+void start_composite(void); //カラーコンポジット出力開始
21+void stop_composite(void); //カラーコンポジット出力停止
22+void init_composite(void); //カラーコンポジット出力初期化
23+void g_clearscreen(void); //Graphic画面クリア
24+void clearscreen(void); //Character画面クリア
25+void set_palette(unsigned char n,unsigned char b,unsigned char r,unsigned char g); //カラーパレット設定
26+void set_bgcolor(unsigned char b,unsigned char r,unsigned char g); // バックグラウンドカラー設定
27+void init_graphic(unsigned char *gvram); //グラフィックモード利用準備
28+void set_graphmode(unsigned char m); //テキストモードとグラフィックモードの切り替え
29+
30+// 以下は text_graph_library.c ライブラリを使用するための宣言
31+
32+// グラフィック画面関連
33+void g_pset(int x,int y,unsigned int c);
34+ // (x,y)の位置にカラーcで点を描画
35+void g_putbmpmn(int x,int y,char m,char n,const unsigned char bmp[]);
36+ // 横m*縦nドットのキャラクターを座標x,yに表示
37+ // unsigned char bmp[m*n]配列に、単純にカラー番号を並べる
38+ // カラー番号が0の部分は透明色として扱う
39+void g_clrbmpmn(int x,int y,char m,char n);
40+ // 縦m*横nドットのキャラクター消去
41+ // カラー0で塗りつぶし
42+void g_gline(int x1,int y1,int x2,int y2,unsigned int c);
43+ // (x1,y1)-(x2,y2)にカラーcで線分を描画
44+void g_hline(int x1,int x2,int y,unsigned int c);
45+ // (x1,y)-(x2,y)の水平ラインをカラーcで高速描画
46+void g_boxfill(int x1,int y1,int x2,int y2,unsigned int c);
47+ //座標(x1,y1),(x2,y2)を対角線とするカラーcで塗られた長方形を描画
48+ // (x1,y1),(x2,y2)を対角線とするカラーcで塗られた長方形を描画
49+void g_circle(int x0,int y0,unsigned int r,unsigned int c);
50+ // (x0,y0)を中心に、半径r、カラーcの円を描画
51+void g_circlefill(int x0,int y0,unsigned int r,unsigned int c);
52+ // (x0,y0)を中心に、半径r、カラーcで塗られた円を描画
53+void g_putfont(int x,int y,unsigned int c,int bc,unsigned char n);
54+ //8*8ドットのアルファベットフォント表示
55+ //座標(x,y)、カラー番号c
56+ //bc:バックグランドカラー、負数の場合無視
57+ //n:文字番号
58+void g_printstr(int x,int y,unsigned int c,int bc,unsigned char *s);
59+ //座標(x,y)からカラー番号cで文字列sを表示、bc:バックグランドカラー
60+void g_printnum(int x,int y,unsigned char c,int bc,unsigned int n);
61+ //座標(x,y)にカラー番号cで数値nを表示、bc:バックグランドカラー
62+void g_printnum2(int x,int y,unsigned char c,int bc,unsigned int n,unsigned char e);
63+ //座標(x,y)にカラー番号cで数値nを表示、bc:バックグランドカラー、e桁で表示
64+unsigned int g_color(int x,int y);
65+//座標(x,y)のVRAM上の現在のパレット番号を返す、画面外は0を返す
66+
67+//テキスト画面関連
68+extern unsigned char *cursor;
69+extern unsigned char cursorcolor;
70+void vramscroll(void);
71+ //1行スクロール
72+void setcursor(unsigned char x,unsigned char y,unsigned char c);
73+ //カーソル位置とカラーを設定
74+void setcursorcolor(unsigned char c);
75+ //カーソル位置そのままでカラー番号をcに設定
76+void printchar(unsigned char n);
77+ //カーソル位置にテキストコードnを1文字表示し、カーソルを1文字進める
78+void printstr(unsigned char *s);
79+ //カーソル位置に文字列sを表示
80+void printnum(unsigned int n);
81+ //カーソル位置に符号なし整数nを10進数表示
82+void printnum2(unsigned int n,unsigned char e);
83+ //カーソル位置に符号なし整数nをe桁の10進数表示(前の空き桁部分はスペースで埋める)
84+void cls(void);
85+ //テキスト画面を0でクリアし、カーソルを画面先頭に移動
86+void startPCG(unsigned char *p,int a);
87+ // RAMフォント(PCG)の利用開始、pがフォント格納場所、aが0以外でシステムフォントをコピー
88+void stopPCG(void);
89+ // RAMフォント(PCG)の利用停止
--- branches/lib_videoout/text_graph_library.c (nonexistent)
+++ branches/lib_videoout/text_graph_library.c (revision 8)
@@ -0,0 +1,660 @@
1+// text-graph-library.c
2+// テキスト+グラフィックビデオ出力用ライブラリ by K.Tanaka
3+
4+#include "lib_video_megalopa.h"
5+
6+const unsigned char __attribute__((__weak__ , aligned (4))) FontData[256*8]={
7+//フォントデータ
8+//キャラクタコード順に8バイトずつ、上位ビットが左
9+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
10+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
11+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
12+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
13+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
14+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
15+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
16+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
17+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
18+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
19+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
20+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
21+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
22+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
23+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
24+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
25+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
26+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
27+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
28+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
29+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
30+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
31+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
32+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
33+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
34+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
35+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
36+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
37+ 0x00,0x08,0x0C,0xFE,0xFE,0x0C,0x08,0x00,
38+ 0x00,0x20,0x60,0xFE,0xFE,0x60,0x20,0x00,
39+ 0x18,0x3C,0x7E,0x18,0x18,0x18,0x18,0x00,
40+ 0x00,0x18,0x18,0x18,0x18,0x7E,0x3C,0x18,
41+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
42+ 0x30,0x30,0x30,0x30,0x00,0x00,0x30,0x00,
43+ 0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,
44+ 0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00,
45+ 0x18,0x7E,0xD8,0x7E,0x1A,0xFE,0x18,0x00,
46+ 0xE0,0xE6,0x0C,0x18,0x30,0x6E,0xCE,0x00,
47+ 0x78,0xCC,0xD8,0x70,0xDE,0xCC,0x76,0x00,
48+ 0x0C,0x18,0x30,0x00,0x00,0x00,0x00,0x00,
49+ 0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00,
50+ 0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00,
51+ 0xD6,0x7C,0x38,0xFE,0x38,0x7C,0xD6,0x00,
52+ 0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00,
53+ 0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x60,
54+ 0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,
55+ 0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x00,
56+ 0x00,0x06,0x0C,0x18,0x30,0x60,0xC0,0x00,
57+ 0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,
58+ 0x18,0x38,0x78,0x18,0x18,0x18,0x7E,0x00,
59+ 0x7C,0xC6,0x06,0x1C,0x70,0xC0,0xFE,0x00,
60+ 0x7C,0xC6,0x06,0x3C,0x06,0xC6,0x7C,0x00,
61+ 0x0C,0x1C,0x3C,0x6C,0xFE,0x0C,0x0C,0x00,
62+ 0xFE,0xC0,0xF8,0x0C,0x06,0xCC,0x78,0x00,
63+ 0x3C,0x60,0xC0,0xFC,0xC6,0xC6,0x7C,0x00,
64+ 0xFE,0xC6,0x0C,0x18,0x30,0x30,0x30,0x00,
65+ 0x7C,0xC6,0xC6,0x7C,0xC6,0xC6,0x7C,0x00,
66+ 0x7C,0xC6,0xC6,0x7E,0x06,0x0C,0x78,0x00,
67+ 0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x00,
68+ 0x00,0x30,0x00,0x00,0x00,0x30,0x30,0x60,
69+ 0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00,
70+ 0x00,0x00,0xFE,0x00,0xFE,0x00,0x00,0x00,
71+ 0x60,0x30,0x18,0x0C,0x18,0x30,0x60,0x00,
72+ 0x7C,0xC6,0x06,0x1C,0x30,0x00,0x30,0x00,
73+ 0x3C,0x66,0xDE,0xF6,0xDC,0x60,0x3E,0x00,
74+ 0x38,0x6C,0xC6,0xFE,0xC6,0xC6,0xC6,0x00,
75+ 0xFC,0x66,0x66,0x7C,0x66,0x66,0xFC,0x00,
76+ 0x3C,0x66,0xC0,0xC0,0xC0,0x66,0x3C,0x00,
77+ 0xF8,0x6C,0x66,0x66,0x66,0x6C,0xF8,0x00,
78+ 0xFE,0xC0,0xC0,0xF8,0xC0,0xC0,0xFE,0x00,
79+ 0xFE,0xC0,0xC0,0xF8,0xC0,0xC0,0xC0,0x00,
80+ 0x3C,0x66,0xC0,0xCE,0xC6,0x66,0x3C,0x00,
81+ 0xC6,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0x00,
82+ 0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,
83+ 0x1E,0x0C,0x0C,0x0C,0x0C,0xCC,0x78,0x00,
84+ 0xC6,0xCC,0xD8,0xF0,0xD8,0xCC,0xC6,0x00,
85+ 0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFE,0x00,
86+ 0xC6,0xEE,0xFE,0xD6,0xC6,0xC6,0xC6,0x00,
87+ 0xC6,0xE6,0xF6,0xDE,0xCE,0xC6,0xC6,0x00,
88+ 0x38,0x6C,0xC6,0xC6,0xC6,0x6C,0x38,0x00,
89+ 0xFC,0xC6,0xC6,0xFC,0xC0,0xC0,0xC0,0x00,
90+ 0x38,0x6C,0xC6,0xC6,0xDE,0x6C,0x3E,0x00,
91+ 0xFC,0xC6,0xC6,0xFC,0xD8,0xCC,0xC6,0x00,
92+ 0x7C,0xC6,0xC0,0x7C,0x06,0xC6,0x7C,0x00,
93+ 0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x00,
94+ 0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,
95+ 0xC6,0xC6,0xC6,0x6C,0x6C,0x38,0x38,0x00,
96+ 0xC6,0xC6,0xC6,0xD6,0xFE,0xEE,0xC6,0x00,
97+ 0xC6,0xC6,0x6C,0x38,0x6C,0xC6,0xC6,0x00,
98+ 0xCC,0xCC,0xCC,0x78,0x30,0x30,0x30,0x00,
99+ 0xFE,0x06,0x0C,0x38,0x60,0xC0,0xFE,0x00,
100+ 0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00,
101+ 0xCC,0xCC,0x78,0xFC,0x30,0xFC,0x30,0x00,
102+ 0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00,
103+ 0x30,0x78,0xCC,0x00,0x00,0x00,0x00,0x00,
104+ 0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,
105+ 0x30,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,
106+ 0x00,0x00,0x7C,0x0C,0x7C,0xCC,0x7E,0x00,
107+ 0xC0,0xC0,0xFC,0xE6,0xC6,0xE6,0xFC,0x00,
108+ 0x00,0x00,0x7C,0xC6,0xC0,0xC6,0x7C,0x00,
109+ 0x06,0x06,0x7E,0xCE,0xC6,0xCE,0x7E,0x00,
110+ 0x00,0x00,0x7C,0xC6,0xFE,0xC0,0x7C,0x00,
111+ 0x1C,0x36,0x30,0xFC,0x30,0x30,0x30,0x00,
112+ 0x00,0x00,0x7E,0xCE,0xCE,0x7E,0x06,0x7C,
113+ 0xC0,0xC0,0xFC,0xE6,0xC6,0xC6,0xC6,0x00,
114+ 0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00,
115+ 0x0C,0x00,0x1C,0x0C,0x0C,0x0C,0xCC,0x78,
116+ 0xC0,0xC0,0xCC,0xD8,0xF0,0xF8,0xCC,0x00,
117+ 0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,
118+ 0x00,0x00,0xFC,0xB6,0xB6,0xB6,0xB6,0x00,
119+ 0x00,0x00,0xFC,0xE6,0xC6,0xC6,0xC6,0x00,
120+ 0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7C,0x00,
121+ 0x00,0x00,0xFC,0xE6,0xE6,0xFC,0xC0,0xC0,
122+ 0x00,0x00,0x7E,0xCE,0xCE,0x7E,0x06,0x06,
123+ 0x00,0x00,0xDC,0xE6,0xC0,0xC0,0xC0,0x00,
124+ 0x00,0x00,0x7E,0xC0,0x7C,0x06,0xFC,0x00,
125+ 0x30,0x30,0xFC,0x30,0x30,0x36,0x1C,0x00,
126+ 0x00,0x00,0xC6,0xC6,0xC6,0xCE,0x76,0x00,
127+ 0x00,0x00,0xC6,0xC6,0xC6,0x6C,0x38,0x00,
128+ 0x00,0x00,0x86,0xB6,0xB6,0xB6,0xFC,0x00,
129+ 0x00,0x00,0xC6,0x6C,0x38,0x6C,0xC6,0x00,
130+ 0x00,0x00,0xC6,0xC6,0xCE,0x7E,0x06,0x7C,
131+ 0x00,0x00,0xFE,0x0C,0x38,0x60,0xFE,0x00,
132+ 0x3C,0x60,0x60,0xC0,0x60,0x60,0x3C,0x00,
133+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,
134+ 0xF0,0x18,0x18,0x0C,0x18,0x18,0xF0,0x00,
135+ 0x60,0xB6,0x1C,0x00,0x00,0x00,0x00,0x00,
136+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
137+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
138+ 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
139+ 0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,
140+ 0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
141+ 0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,
142+ 0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
143+ 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
144+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
145+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
146+ 0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
147+ 0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
148+ 0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,
149+ 0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,
150+ 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
151+ 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
152+ 0x18,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,
153+ 0x18,0x18,0x18,0x18,0xFF,0x00,0x00,0x00,
154+ 0x00,0x00,0x00,0x00,0xFF,0x18,0x18,0x18,
155+ 0x18,0x18,0x18,0x18,0xF8,0x18,0x18,0x18,
156+ 0x18,0x18,0x18,0x18,0x1F,0x18,0x18,0x18,
157+ 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
158+ 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,
159+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
160+ 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
161+ 0x00,0x00,0x00,0x00,0x1F,0x18,0x18,0x18,
162+ 0x00,0x00,0x00,0x00,0xF8,0x18,0x18,0x18,
163+ 0x18,0x18,0x18,0x18,0x1F,0x00,0x00,0x00,
164+ 0x18,0x18,0x18,0x18,0xF8,0x00,0x00,0x00,
165+ 0x00,0x00,0x00,0x00,0x07,0x0C,0x18,0x18,
166+ 0x00,0x00,0x00,0x00,0xE0,0x30,0x18,0x18,
167+ 0x18,0x18,0x18,0x0C,0x07,0x00,0x00,0x00,
168+ 0x18,0x18,0x18,0x30,0xE0,0x00,0x00,0x00,
169+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
170+ 0x00,0x00,0x00,0x00,0x78,0x68,0x78,0x00,
171+ 0x78,0x60,0x60,0x60,0x00,0x00,0x00,0x00,
172+ 0x00,0x00,0x00,0x18,0x18,0x18,0x78,0x00,
173+ 0x00,0x00,0x00,0x00,0x60,0x30,0x18,0x00,
174+ 0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,
175+ 0xFE,0x06,0x06,0xFE,0x06,0x0C,0x78,0x00,
176+ 0x00,0x00,0xFC,0x0C,0x38,0x30,0x60,0x00,
177+ 0x00,0x00,0x0C,0x18,0x38,0x78,0x18,0x00,
178+ 0x00,0x00,0x30,0xFC,0xCC,0x0C,0x38,0x00,
179+ 0x00,0x00,0x00,0xFC,0x30,0x30,0xFC,0x00,
180+ 0x00,0x00,0x18,0xFC,0x38,0x78,0xD8,0x00,
181+ 0x00,0x00,0x60,0xFC,0x6C,0x68,0x60,0x00,
182+ 0x00,0x00,0x00,0x78,0x18,0x18,0xFC,0x00,
183+ 0x00,0x00,0x7C,0x0C,0x7C,0x0C,0x7C,0x00,
184+ 0x00,0x00,0x00,0xAC,0xAC,0x0C,0x38,0x00,
185+ 0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,
186+ 0xFE,0x06,0x06,0x34,0x38,0x30,0x60,0x00,
187+ 0x06,0x0C,0x18,0x38,0x78,0xD8,0x18,0x00,
188+ 0x18,0xFE,0xC6,0xC6,0x06,0x0C,0x38,0x00,
189+ 0x00,0x7E,0x18,0x18,0x18,0x18,0x7E,0x00,
190+ 0x18,0xFE,0x18,0x38,0x78,0xD8,0x18,0x00,
191+ 0x30,0xFE,0x36,0x36,0x36,0x36,0x6C,0x00,
192+ 0x18,0x7E,0x18,0x7E,0x18,0x18,0x18,0x00,
193+ 0x3E,0x66,0xC6,0x0C,0x18,0x30,0xE0,0x00,
194+ 0x60,0x7E,0xD8,0x18,0x18,0x18,0x30,0x00,
195+ 0x00,0xFE,0x06,0x06,0x06,0x06,0xFE,0x00,
196+ 0x6C,0xFE,0x6C,0x0C,0x0C,0x18,0x30,0x00,
197+ 0x00,0xF0,0x00,0xF6,0x06,0x0C,0xF8,0x00,
198+ 0xFE,0x06,0x0C,0x18,0x38,0x6C,0xC6,0x00,
199+ 0x60,0xFE,0x66,0x6C,0x60,0x60,0x3E,0x00,
200+ 0xC6,0xC6,0x66,0x06,0x0C,0x18,0xF0,0x00,
201+ 0x3E,0x66,0xE6,0x3C,0x18,0x30,0xE0,0x00,
202+ 0x0C,0x78,0x18,0xFE,0x18,0x18,0xF0,0x00,
203+ 0x00,0xD6,0xD6,0xD6,0x0C,0x18,0xF0,0x00,
204+ 0x7C,0x00,0xFE,0x18,0x18,0x30,0x60,0x00,
205+ 0x30,0x30,0x38,0x3C,0x36,0x30,0x30,0x00,
206+ 0x18,0x18,0xFE,0x18,0x18,0x30,0x60,0x00,
207+ 0x00,0x7C,0x00,0x00,0x00,0x00,0xFE,0x00,
208+ 0x00,0x7E,0x06,0x6C,0x18,0x36,0x60,0x00,
209+ 0x18,0x7E,0x0C,0x18,0x3C,0x7E,0x18,0x00,
210+ 0x06,0x06,0x06,0x0C,0x18,0x30,0x60,0x00,
211+ 0x30,0x18,0x0C,0xC6,0xC6,0xC6,0xC6,0x00,
212+ 0xC0,0xC0,0xFE,0xC0,0xC0,0xC0,0x7E,0x00,
213+ 0x00,0xFE,0x06,0x06,0x0C,0x18,0x70,0x00,
214+ 0x00,0x30,0x78,0xCC,0x06,0x06,0x00,0x00,
215+ 0x18,0x18,0xFE,0x18,0xDB,0xDB,0x18,0x00,
216+ 0xFE,0x06,0x06,0x6C,0x38,0x30,0x18,0x00,
217+ 0x00,0x3C,0x00,0x3C,0x00,0x7C,0x06,0x00,
218+ 0x0C,0x18,0x30,0x60,0xCC,0xFC,0x06,0x00,
219+ 0x02,0x36,0x3C,0x18,0x3C,0x6C,0xC0,0x00,
220+ 0x00,0xFE,0x30,0xFE,0x30,0x30,0x3E,0x00,
221+ 0x30,0x30,0xFE,0x36,0x3C,0x30,0x30,0x00,
222+ 0x00,0x78,0x18,0x18,0x18,0x18,0xFE,0x00,
223+ 0xFE,0x06,0x06,0xFE,0x06,0x06,0xFE,0x00,
224+ 0x7C,0x00,0xFE,0x06,0x0C,0x18,0x30,0x00,
225+ 0xC6,0xC6,0xC6,0x06,0x06,0x0C,0x38,0x00,
226+ 0x6C,0x6C,0x6C,0x6E,0x6E,0x6C,0xC8,0x00,
227+ 0x60,0x60,0x60,0x66,0x6C,0x78,0x70,0x00,
228+ 0x00,0xFE,0xC6,0xC6,0xC6,0xC6,0xFE,0x00,
229+ 0x00,0xFE,0xC6,0xC6,0x06,0x0C,0x38,0x00,
230+ 0x00,0xF0,0x06,0x06,0x0C,0x18,0xF0,0x00,
231+ 0x18,0xCC,0x60,0x00,0x00,0x00,0x00,0x00,
232+ 0x70,0xD8,0x70,0x00,0x00,0x00,0x00,0x00,
233+ 0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,
234+ 0x18,0x18,0x1F,0x18,0x18,0x1F,0x18,0x18,
235+ 0x18,0x18,0xFF,0x18,0x18,0xFF,0x18,0x18,
236+ 0x18,0x18,0xF8,0x18,0x18,0xF8,0x18,0x18,
237+ 0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,
238+ 0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,
239+ 0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,
240+ 0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,
241+ 0x10,0x38,0x7C,0xFE,0xFE,0x38,0x7C,0x00,
242+ 0x6C,0xFE,0xFE,0xFE,0x7C,0x38,0x10,0x00,
243+ 0x10,0x38,0x7C,0xFE,0x7C,0x38,0x10,0x00,
244+ 0x38,0x38,0xFE,0xFE,0xD6,0x10,0x7C,0x00,
245+ 0x00,0x3C,0x7E,0x7E,0x7E,0x7E,0x3C,0x00,
246+ 0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,
247+ 0x03,0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,
248+ 0x80,0xC0,0x60,0x30,0x18,0x0C,0x06,0x03,
249+ 0x83,0xC6,0x6C,0x38,0x38,0x6C,0xC6,0x83,
250+ 0xFE,0xB6,0xB6,0xFE,0x86,0x86,0x86,0x00,
251+ 0xC0,0xFE,0xD8,0x7E,0x58,0xFE,0x18,0x00,
252+ 0x7E,0x66,0x7E,0x66,0x7E,0x66,0xC6,0x00,
253+ 0xFE,0xC6,0xC6,0xFE,0xC6,0xC6,0xFE,0x00,
254+ 0x06,0xEF,0xA6,0xFF,0xA2,0xFF,0x0A,0x06,
255+ 0x00,0x38,0x6C,0xC6,0x7C,0x34,0x6C,0x00,
256+ 0xFC,0x6C,0xFE,0x6E,0xF6,0xEC,0x6C,0x78,
257+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
258+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
259+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
260+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
261+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
262+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
263+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
264+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
265+};
266+
267+void g_pset(int x,int y,unsigned int c)
268+// (x,y)の位置にカラーcで点を描画
269+{
270+ if(x<0 || x>=X_RES) return;
271+ if(y<0 || y>=Y_RES) return;
272+ *(GVRAM+y*X_RES+x)=(unsigned char)c;
273+}
274+
275+void g_putbmpmn(int x,int y,char m,char n,const unsigned char bmp[])
276+// 横m*縦nドットのキャラクターを座標x,yに表示
277+// unsigned char bmp[m*n]配列に、単純にカラー番号を並べる
278+// カラー番号が0の部分は透明色として扱う
279+{
280+ int i,j;
281+ unsigned char *vp;
282+ const unsigned char *p;
283+ if(x<=-m || x>X_RES || y<=-n || y>=Y_RES) return; //画面外
284+ if(y<0){ //画面上部に切れる場合
285+ i=0;
286+ p=bmp-y*m;
287+ }
288+ else{
289+ i=y;
290+ p=bmp;
291+ }
292+ for(;i<y+n;i++){
293+ if(i>=Y_RES) return; //画面下部に切れる場合
294+ if(x<0){ //画面左に切れる場合は残る部分のみ描画
295+ j=0;
296+ p+=-x;
297+ vp=GVRAM+i*X_RES;
298+ }
299+ else{
300+ j=x;
301+ vp=GVRAM+i*X_RES+x;
302+ }
303+ for(;j<x+m;j++){
304+ if(j>=X_RES){ //画面右に切れる場合
305+ p+=x+m-j;
306+ break;
307+ }
308+ if(*p!=0){ //カラー番号が0の場合、透明として処理
309+ *vp=*p;
310+ }
311+ p++;
312+ vp++;
313+ }
314+ }
315+}
316+
317+void g_clrbmpmn(int x,int y,char m,char n)
318+// 縦m*横nドットのキャラクター消去
319+// カラー0で塗りつぶし
320+{
321+ int i,j;
322+ unsigned char *vp;
323+ if(x<=-m || x>=X_RES || y<=-n || y>=Y_RES) return; //画面外
324+ if(y<0){ //画面上部に切れる場合
325+ i=0;
326+ }
327+ else{
328+ i=y;
329+ }
330+ for(;i<y+n;i++){
331+ if(i>=Y_RES) return; //画面下部に切れる場合
332+ if(x<0){ //画面左に切れる場合は残る部分のみ描画
333+ j=0;
334+ vp=GVRAM+i*X_RES;
335+ }
336+ else{
337+ j=x;
338+ vp=GVRAM+i*X_RES+x;
339+ }
340+ for(;j<x+m;j++){
341+ if(j>=X_RES){ //画面右に切れる場合
342+ break;
343+ }
344+ *vp++=0;
345+ }
346+ }
347+}
348+
349+void g_gline(int x1,int y1,int x2,int y2,unsigned int c)
350+// (x1,y1)-(x2,y2)にカラーcで線分を描画
351+{
352+ int sx,sy,dx,dy,i;
353+ int e;
354+
355+ if(x2>x1){
356+ dx=x2-x1;
357+ sx=1;
358+ }
359+ else{
360+ dx=x1-x2;
361+ sx=-1;
362+ }
363+ if(y2>y1){
364+ dy=y2-y1;
365+ sy=1;
366+ }
367+ else{
368+ dy=y1-y2;
369+ sy=-1;
370+ }
371+ if(dx>=dy){
372+ e=-dx;
373+ for(i=0;i<=dx;i++){
374+ g_pset(x1,y1,c);
375+ x1+=sx;
376+ e+=dy*2;
377+ if(e>=0){
378+ y1+=sy;
379+ e-=dx*2;
380+ }
381+ }
382+ }
383+ else{
384+ e=-dy;
385+ for(i=0;i<=dy;i++){
386+ g_pset(x1,y1,c);
387+ y1+=sy;
388+ e+=dx*2;
389+ if(e>=0){
390+ x1+=sx;
391+ e-=dy*2;
392+ }
393+ }
394+ }
395+}
396+void g_circle(int x0,int y0,unsigned int r,unsigned int c)
397+// (x0,y0)を中心に、半径r、カラーcの円を描画
398+{
399+ int x,y,f;
400+ x=r;
401+ y=0;
402+ f=-2*r+3;
403+ while(x>=y){
404+ g_pset(x0-x,y0-y,c);
405+ g_pset(x0-x,y0+y,c);
406+ g_pset(x0+x,y0-y,c);
407+ g_pset(x0+x,y0+y,c);
408+ g_pset(x0-y,y0-x,c);
409+ g_pset(x0-y,y0+x,c);
410+ g_pset(x0+y,y0-x,c);
411+ g_pset(x0+y,y0+x,c);
412+ if(f>=0){
413+ x--;
414+ f-=x*4;
415+ }
416+ y++;
417+ f+=y*4+2;
418+ }
419+}
420+void g_hline(int x1,int x2,int y,unsigned int c)
421+// (x1,y)-(x2,y)の水平ラインをカラーcで高速描画
422+{
423+ int temp;
424+ unsigned int d,*ad;
425+
426+ if(y<0 || y>=Y_RES) return;
427+ if(x1>x2){
428+ temp=x1;
429+ x1=x2;
430+ x2=temp;
431+ }
432+ if(x2<0 || x1>=X_RES) return;
433+ if(x1<0) x1=0;
434+ if(x2>=X_RES) x2=X_RES-1;
435+ while(x1&3){
436+ g_pset(x1++,y,c);
437+ if(x1>x2) return;
438+ }
439+ d=c|(c<<8)|(c<<16)|(c<<24);
440+ ad=(unsigned int *)(GVRAM+y*X_RES+x1);
441+ while(x1+3<=x2){
442+ *ad++=d;
443+ x1+=4;
444+ }
445+ while(x1<=x2) g_pset(x1++,y,c);
446+}
447+
448+void g_boxfill(int x1,int y1,int x2,int y2,unsigned int c)
449+// (x1,y1),(x2,y2)を対角線とするカラーcで塗られた長方形を描画
450+{
451+ int temp;
452+ if(x1>x2){
453+ temp=x1;
454+ x1=x2;
455+ x2=temp;
456+ }
457+ if(x2<0 || x1>=X_RES) return;
458+ if(y1>y2){
459+ temp=y1;
460+ y1=y2;
461+ y2=temp;
462+ }
463+ if(y2<0 || y1>=Y_RES) return;
464+ if(y1<0) y1=0;
465+ if(y2>=Y_RES) y2=Y_RES-1;
466+ while(y1<=y2){
467+ g_hline(x1,x2,y1++,c);
468+ }
469+}
470+void g_circlefill(int x0,int y0,unsigned int r,unsigned int c)
471+// (x0,y0)を中心に、半径r、カラーcで塗られた円を描画
472+{
473+ int x,y,f;
474+ x=r;
475+ y=0;
476+ f=-2*r+3;
477+ while(x>=y){
478+ g_hline(x0-x,x0+x,y0-y,c);
479+ g_hline(x0-x,x0+x,y0+y,c);
480+ g_hline(x0-y,x0+y,y0-x,c);
481+ g_hline(x0-y,x0+y,y0+x,c);
482+ if(f>=0){
483+ x--;
484+ f-=x*4;
485+ }
486+ y++;
487+ f+=y*4+2;
488+ }
489+}
490+void g_putfont(int x,int y,unsigned int c,int bc,unsigned char n)
491+//8*8ドットのアルファベットフォント表示
492+//座標(x,y)、カラー番号c
493+//bc:バックグランドカラー、負数の場合無視
494+//n:文字番号
495+{
496+ int i,j;
497+ unsigned char d;
498+ const unsigned char *p;
499+
500+ p=FontData+n*8;
501+ for(i=0;i<8;i++){
502+ d=*p++;
503+ for(j=0;j<8;j++){
504+ if(d&0x80) g_pset(x+j,y+i,c);
505+ else if(bc>=0) g_pset(x+j,y+i,bc);
506+ d<<=1;
507+ }
508+ }
509+}
510+
511+void g_printstr(int x,int y,unsigned int c,int bc,unsigned char *s){
512+ //座標(x,y)からカラー番号cで文字列sを表示、bc:バックグランドカラー
513+ while(*s){
514+ g_putfont(x,y,c,bc,*s++);
515+ x+=8;
516+ }
517+}
518+void g_printnum(int x,int y,unsigned char c,int bc,unsigned int n){
519+ //座標(x,y)にカラー番号cで数値nを表示、bc:バックグランドカラー
520+ unsigned int d,e;
521+ d=10;
522+ e=0;
523+ while(n>=d){
524+ e++;
525+ if(e==9) break;
526+ d*=10;
527+ }
528+ x+=e*8;
529+ do{
530+ g_putfont(x,y,c,bc,'0'+n%10);
531+ n/=10;
532+ x-=8;
533+ }while(n!=0);
534+}
535+void g_printnum2(int x,int y,unsigned char c,int bc,unsigned int n,unsigned char e){
536+ //座標(x,y)にカラー番号cで数値nを表示、bc:バックグランドカラー、e桁で表示
537+ if(e==0) return;
538+ x+=(e-1)*8;
539+ do{
540+ g_putfont(x,y,c,bc,'0'+n%10);
541+ e--;
542+ n/=10;
543+ x-=8;
544+ }while(e!=0 && n!=0);
545+ while(e!=0){
546+ g_putfont(x,y,c,bc,' ');
547+ x-=8;
548+ e--;
549+ }
550+}
551+unsigned int g_color(int x,int y){
552+ //座標(x,y)のVRAM上の現在のパレット番号を返す、画面外は0を返す
553+ if(x<0 || x>=X_RES || y<0 || y>=Y_RES) return 0;
554+ return *(GVRAM+y*Y_RES+x);
555+}
556+
557+
558+unsigned char *cursor=TVRAM;
559+unsigned char cursorcolor=7;
560+
561+void vramscroll(void){
562+ unsigned int *p1,*p2;
563+
564+ p1=(unsigned int *)TVRAM;
565+ p2=(unsigned int *)(TVRAM+WIDTH_X);
566+ while(p2<(unsigned int *)(TVRAM+ATTROFFSET)){
567+ *(p1+ATTROFFSET/4)=*(p2+ATTROFFSET/4);
568+ *p1++=*p2++;
569+ }
570+ while(p1<(unsigned int *)(TVRAM+ATTROFFSET)){
571+ *(p1+ATTROFFSET/4)=0;
572+ *p1++=0;
573+ }
574+}
575+void setcursor(unsigned char x,unsigned char y,unsigned char c){
576+ //カーソルを座標(x,y)にカラー番号cに設定
577+ if(x>=WIDTH_X || y>=WIDTH_Y) return;
578+ cursor=TVRAM+y*WIDTH_X+x;
579+ cursorcolor=c;
580+}
581+void setcursorcolor(unsigned char c){
582+ //カーソル位置そのままでカラー番号をcに設定
583+ cursorcolor=c;
584+}
585+void printchar(unsigned char n){
586+ //カーソル位置にテキストコードnを1文字表示し、カーソルを1文字進める
587+ if(cursor<TVRAM || cursor>TVRAM+WIDTH_X*WIDTH_Y) return;
588+ if(cursor==TVRAM+WIDTH_X*WIDTH_Y){
589+ vramscroll();
590+ cursor=TVRAM+WIDTH_X*(WIDTH_Y-1);
591+ }
592+ if(n=='\n'){
593+ //改行
594+ cursor+=WIDTH_X-((cursor-TVRAM)%WIDTH_X);
595+ } else{
596+ *cursor=n;
597+ *(cursor+ATTROFFSET)=cursorcolor;
598+ cursor++;
599+ }
600+}
601+void printstr(unsigned char *s){
602+ //カーソル位置に文字列sを表示
603+ while(*s){
604+ printchar(*s++);
605+ }
606+}
607+void printnum(unsigned int n){
608+ //カーソル位置に符号なし整数nを10進数表示
609+ unsigned int d,n1;
610+ n1=n/10;
611+ d=1;
612+ while(n1>=d){
613+ d*=10;
614+ }
615+ while(d!=0){
616+ printchar('0'+n/d);
617+ n%=d;
618+ d/=10;
619+ }
620+}
621+void printnum2(unsigned int n,unsigned char e){
622+ //カーソル位置に符号なし整数nをe桁の10進数表示(前の空き桁部分はスペースで埋める)
623+ unsigned int d,n1;
624+ if(e==0) return;
625+ n1=n/10;
626+ d=1;
627+ e--;
628+ while(e>0 && n1>=d){
629+ d*=10;
630+ e--;
631+ }
632+ if(e==0 && n1>d) n%=d*10;
633+ for(;e>0;e--) printchar(' ');
634+ while(d!=0){
635+ printchar('0'+n/d);
636+ n%=d;
637+ d/=10;
638+ }
639+}
640+
641+void cls(void){
642+ //テキスト画面を0でクリアし、カーソルを画面先頭に移動
643+ clearscreen();
644+}
645+
646+void startPCG(unsigned char *p,int a){
647+// RAMフォント(PCG)の利用開始
648+// p:RAMフォントの格納アドレス(8*256=2048バイト)
649+// a: システムフォントからのコピー指定。0の場合コピーなし、0以外でコピー
650+ int i;
651+ if(a){
652+ for(i=0;i<8*256;i++) *p++=fontdata[i];
653+ Fontp=p-8*256;
654+ }
655+ else Fontp=p;
656+}
657+void stopPCG(void){
658+// RAMフォント(PCG)の利用停止
659+ Fontp=fontdata;
660+}
--- branches/sd-lib/Compiler.h (nonexistent)
+++ branches/sd-lib/Compiler.h (revision 8)
@@ -0,0 +1,208 @@
1+/*********************************************************************
2+ *
3+ * Compiler and hardware specific definitions
4+ *
5+ *********************************************************************
6+ * FileName: Compiler.h
7+ * Dependencies: None
8+ * Processor: PIC10, PIC12, PIC16, PIC18, PIC24, dsPIC, PIC32
9+ * Compiler: Microchip C32 v1.00 or higher
10+ * Microchip C30 v3.01 or higher
11+ * Microchip C18 v3.13 or higher
12+ * HI-TECH PICC-18 PRO 9.63 or higher
13+ * HI-TECH PICC PRO V9.80 or higher
14+ * Company: Microchip Technology, Inc.
15+ *
16+ * Software License Agreement
17+ *
18+ * Copyright (C) 2011 Microchip Technology Inc. All rights
19+ * reserved.
20+ *
21+ * Microchip licenses to you the right to use, modify, copy, and
22+ * distribute:
23+ * (i) the Software when embedded on a Microchip microcontroller or
24+ * digital signal controller product ("Device") which is
25+ * integrated into Licensee's product; or
26+ * (ii) ONLY the Software driver source files ENC28J60.c and
27+ * ENC28J60.h ported to a non-Microchip device used in
28+ * conjunction with a Microchip ethernet controller for the
29+ * sole purpose of interfacing with the ethernet controller.
30+ *
31+ * You should refer to the license agreement accompanying this
32+ * Software for additional information regarding your rights and
33+ * obligations.
34+ *
35+ * THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT
36+ * WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT
37+ * LIMITATION, ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A
38+ * PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL
39+ * MICROCHIP BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR
40+ * CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF
41+ * PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
42+ * BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE
43+ * THEREOF), ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER
44+ * SIMILAR COSTS, WHETHER ASSERTED ON THE BASIS OF CONTRACT, TORT
45+ * (INCLUDING NEGLIGENCE), BREACH OF WARRANTY, OR OTHERWISE.
46+ *
47+ *
48+ * Date Comment
49+ *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
50+ * 10/03/2006 Original, copied from old Compiler.h
51+ * 11/07/2007 Reorganized and simplified
52+ * 03/31/2010 Removed dependency on WORD and DWORD typedefs
53+ * 04/14/2010 Added defines to uniquely identify each compiler
54+ * 10/13/2010 Added support for PIC10, PIC12, and PIC16 with PICC compiler
55+ ********************************************************************/
56+#ifndef __COMPILER_H
57+#define __COMPILER_H
58+
59+// Include proper device header file
60+#if defined(__18CXX) && !defined(HI_TECH_C)
61+ // PIC18 processor with Microchip C18 compiler
62+ #define COMPILER_MPLAB_C18
63+ #include <p18cxxx.h>
64+#elif defined(__PICC18__) && defined(HI_TECH_C)
65+ // PIC18 processor with (Microchip) HI-TECH PICC-18 compiler
66+ #if !defined(__18CXX)
67+ #define __18CXX
68+ #endif
69+ #define COMPILER_HITECH_PICC18
70+ #include <htc.h>
71+#elif (defined(_PIC12) || defined(_PIC14) || defined(_PIC14E)) && defined(HI_TECH_C)
72+ // PIC10/12/16 processor with (Microchip) HI-TECH PICC compiler
73+ #define COMPILER_HITECH_PICC
74+ #include <htc.h>
75+#elif (defined(__PIC24F__) || defined(__PIC24FK__)) && defined(__C30__) // Microchip C30 compiler
76+ // PIC24F processor
77+ #define COMPILER_MPLAB_C30
78+ #include <p24Fxxxx.h>
79+#elif defined(__PIC24H__) && defined(__C30__) // Microchip C30 compiler
80+ // PIC24H processor
81+ #define COMPILER_MPLAB_C30
82+ #include <p24Hxxxx.h>
83+#elif defined(__PIC24E__) && defined(__C30__) // Microchip C30 compiler
84+ // PIC24E processor
85+ #define COMPILER_MPLAB_C30
86+ #include <p24Exxxx.h>
87+#elif defined(__dsPIC33F__) && defined(__C30__) // Microchip C30 compiler
88+ // dsPIC33F processor
89+ #define COMPILER_MPLAB_C30
90+ #include <p33Fxxxx.h>
91+#elif defined(__dsPIC33E__) && defined(__C30__) // Microchip C30 compiler
92+ // dsPIC33E processor
93+ #define COMPILER_MPLAB_C30
94+ #include <p33Exxxx.h>
95+#elif defined(__dsPIC30F__) && defined(__C30__) // Microchip C30 compiler
96+ // dsPIC30F processor
97+ #define COMPILER_MPLAB_C30
98+ #include <p30fxxxx.h>
99+#elif defined(__C30__) // Microchip C30 compiler, but targeting "generic-16bit" processor.
100+ #define COMPILER_MPLAB_C30
101+ #include <p30sim.h>
102+ // Define some useful inline assembly functions which are normally in the
103+ // processor header files, but absent from the generic p30sim.h file.
104+ #if !defined(Nop)
105+ #define Nop() __builtin_nop()
106+ #define ClrWdt() {__asm__ volatile ("clrwdt");}
107+ #define Sleep() {__asm__ volatile ("pwrsav #0");}
108+ #define Idle() {__asm__ volatile ("pwrsav #1");}
109+ #endif
110+#elif defined(__PIC32MX__) // Microchip C32 compiler
111+ #if !defined(__C32__)
112+ #define __C32__
113+ #endif
114+ #define COMPILER_MPLAB_C32
115+ #include <p32xxxx.h>
116+ #include <plib.h>
117+#else
118+ #error Unknown processor or compiler. See Compiler.h
119+#endif
120+
121+#include <stdio.h>
122+#include <stdlib.h>
123+#include <string.h>
124+
125+
126+// Base RAM and ROM pointer types for given architecture
127+#if defined(__PIC32MX__)
128+ #define PTR_BASE unsigned long
129+ #define ROM_PTR_BASE unsigned long
130+#elif defined(__C30__)
131+ #define PTR_BASE unsigned short
132+ #define ROM_PTR_BASE unsigned short
133+#elif defined(COMPILER_MPLAB_C18)
134+ #define PTR_BASE unsigned short
135+ #define ROM_PTR_BASE unsigned short long
136+#elif defined(COMPILER_HITECH_PICC18)
137+ #define PTR_BASE unsigned short
138+ #define ROM_PTR_BASE unsigned long
139+#endif
140+
141+
142+// Definitions that apply to all except Microchip MPLAB C Compiler for PIC18 MCUs (C18)
143+#if !defined(COMPILER_MPLAB_C18)
144+ #define memcmppgm2ram(a,b,c) memcmp(a,b,c)
145+ #define strcmppgm2ram(a,b) strcmp(a,b)
146+ #define memcpypgm2ram(a,b,c) memcpy(a,b,c)
147+ #define strcpypgm2ram(a,b) strcpy(a,b)
148+ #define strncpypgm2ram(a,b,c) strncpy(a,b,c)
149+ #define strstrrampgm(a,b) strstr(a,b)
150+ #define strlenpgm(a) strlen(a)
151+ #define strchrpgm(a,b) strchr(a,b)
152+ #define strcatpgm2ram(a,b) strcat(a,b)
153+#endif
154+
155+
156+// Definitions that apply to all 8-bit products
157+// (PIC10, PIC12, PIC16, PIC18)
158+#if defined(__18CXX) || defined(COMPILER_HITECH_PICC)
159+ #define __attribute__(a)
160+
161+ #define FAR far
162+
163+ // Microchip C18 specific defines
164+ #if defined(COMPILER_MPLAB_C18)
165+ #define ROM rom
166+ #endif
167+
168+ // HI TECH specific defines
169+ #if defined(COMPILER_HITECH_PICC18) || defined(COMPILER_HITECH_PICC)
170+ #define ROM const
171+ #define rom
172+ #define Nop() asm("NOP");
173+ #define ClrWdt() asm("CLRWDT");
174+ #define Reset() asm("RESET");
175+ #endif
176+
177+// Definitions that apply to all 16-bit and 32-bit products
178+// (PIC24F, PIC24H, dsPIC30F, dsPIC33F, and PIC32)
179+#else
180+ #define ROM const
181+
182+ // 16-bit specific defines (PIC24F, PIC24H, dsPIC30F, dsPIC33F)
183+ #if defined(__C30__)
184+ #define Reset() asm("reset")
185+ #define FAR __attribute__((far))
186+ #endif
187+
188+ // 32-bit specific defines (PIC32)
189+ #if defined(__PIC32MX__)
190+ #if (__C32_VERSION__ < 200)
191+ #define persistent
192+ #endif
193+ #define far
194+ #define FAR
195+ #define Reset() SoftReset()
196+ #define ClrWdt() (WDTCONSET = _WDTCON_WDTCLR_MASK)
197+
198+ // MPLAB C Compiler for PIC32 MCUs version 1.04 and below don't have a
199+ // Nop() function. However, version 1.05 has Nop() declared as _nop().
200+ #if !defined(Nop) && (__C32_VERSION__ <= 104)
201+ #define Nop() asm("nop")
202+ #endif
203+ #endif
204+#endif
205+
206+
207+
208+#endif
--- branches/sd-lib/FSDefs.h (nonexistent)
+++ branches/sd-lib/FSDefs.h (revision 8)
@@ -0,0 +1,558 @@
1+/******************************************************************************
2+ *
3+ * Microchip Memory Disk Drive File System
4+ *
5+ ******************************************************************************
6+ * FileName: FSDefs.h
7+ * Dependencies: GenericTypeDefs.h
8+ * Processor: PIC18/PIC24/dsPIC30/dsPIC33/PIC32
9+ * Compiler: C18/C30/C32
10+ * Company: Microchip Technology, Inc.
11+ * Version: 1.2.4
12+ *
13+ * Software License Agreement
14+ *
15+ * The software supplied herewith by Microchip Technology Incorporated
16+ * (the 鼎ompany? for its PICmicroョ Microcontroller is intended and
17+ * supplied to you, the Company痴 customer, for use solely and
18+ * exclusively on Microchip PICmicro Microcontroller products. The
19+ * software is owned by the Company and/or its supplier, and is
20+ * protected under applicable copyright laws. All rights are reserved.
21+ * Any use in violation of the foregoing restrictions may subject the
22+ * user to criminal sanctions under applicable laws, as well as to
23+ * civil liability for the breach of the terms and conditions of this
24+ * license.
25+ *
26+ * THIS SOFTWARE IS PROVIDED IN AN 鄭S IS CONDITION. NO WARRANTIES,
27+ * WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
28+ * TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
29+ * PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
30+ * IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
31+ * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
32+ *
33+*****************************************************************************/
34+
35+#ifndef _FSDEF__H
36+#define _FSDEF__H
37+
38+#include "GenericTypeDefs.h"
39+
40+// Summary: An enumeration used for various error codes.
41+// Description: The CETYPE enumeration is used to indicate different error conditions during device operation.
42+typedef enum _CETYPE
43+{
44+ CE_GOOD = 0, // No error
45+ CE_ERASE_FAIL, // An erase failed
46+ CE_NOT_PRESENT, // No device was present
47+ CE_NOT_FORMATTED, // The disk is of an unsupported format
48+ CE_BAD_PARTITION, // The boot record is bad
49+ CE_UNSUPPORTED_FS, // The file system type is unsupported
50+ CE_INIT_ERROR, // An initialization error has occured
51+ CE_NOT_INIT, // An operation was performed on an uninitialized device
52+ CE_BAD_SECTOR_READ, // A bad read of a sector occured
53+ CE_WRITE_ERROR, // Could not write to a sector
54+ CE_INVALID_CLUSTER, // Invalid cluster value > maxcls
55+ CE_FILE_NOT_FOUND, // Could not find the file on the device
56+ CE_DIR_NOT_FOUND, // Could not find the directory
57+ CE_BAD_FILE, // File is corrupted
58+ CE_DONE, // No more files in this directory
59+ CE_COULD_NOT_GET_CLUSTER, // Could not load/allocate next cluster in file
60+ CE_FILENAME_2_LONG, // A specified file name is too long to use
61+ CE_FILENAME_EXISTS, // A specified filename already exists on the device
62+ CE_INVALID_FILENAME, // Invalid file name
63+ CE_DELETE_DIR, // The user tried to delete a directory with FSremove
64+ CE_DIR_FULL, // All root dir entry are taken
65+ CE_DISK_FULL, // All clusters in partition are taken
66+ CE_DIR_NOT_EMPTY, // This directory is not empty yet, remove files before deleting
67+ CE_NONSUPPORTED_SIZE, // The disk is too big to format as FAT16
68+ CE_WRITE_PROTECTED, // Card is write protected
69+ CE_FILENOTOPENED, // File not opened for the write
70+ CE_SEEK_ERROR, // File location could not be changed successfully
71+ CE_BADCACHEREAD, // Bad cache read
72+ CE_CARDFAT32, // FAT 32 - card not supported
73+ CE_READONLY, // The file is read-only
74+ CE_WRITEONLY, // The file is write-only
75+ CE_INVALID_ARGUMENT, // Invalid argument
76+ CE_TOO_MANY_FILES_OPEN, // Too many files are already open
77+ CE_UNSUPPORTED_SECTOR_SIZE // Unsupported sector size
78+} CETYPE;
79+
80+
81+// Summary: A macro indicating a dir entry was found
82+// Description: The FOUND macro indicates that a directory entry was found in the specified position
83+#define FOUND 0
84+
85+// Summary: A macro indicating no dir entry was found
86+// Description: The NOT_FOUND macro indicates that the specified directory entry to load was deleted
87+#define NOT_FOUND 1
88+
89+// Summary: A macro indicating that no more files were found
90+// Description: The NO_MORE macro indicates that there are no more directory entries to search for
91+#define NO_MORE 2
92+
93+
94+
95+// Summary: A macro indicating the device is formatted with FAT12
96+// Description: The FAT12 macro is used to indicate that the file system on the device being accessed is a FAT12 file system.
97+#define FAT12 1
98+
99+// Summary: A macro indicating the device is formatted with FAT16
100+// Description: The FAT16 macro is used to indicate that the file system on the device being accessed is a FAT16 file system.
101+#define FAT16 2
102+
103+// Summary: A macro indicating the device is formatted with FAT32
104+// Description: The FAT32 macro is used to indicate that the file system on the device being accessed is a FAT32 file system.
105+#define FAT32 3
106+
107+
108+
109+// Summary: A read-only attribute macro
110+// Description: A macro for the read-only attribute. A file with this attribute should not be written to. Note that this
111+// attribute will not actually prevent a write to the file; that functionality is operating-system dependant. The
112+// user should take care not to write to a read-only file.
113+#define ATTR_READ_ONLY 0x01
114+
115+// Summary: A hidden attribute macro
116+// Description: A macro for the hidden attribute. A file with this attribute may be hidden from the user, depending on the
117+// implementation of the operating system.
118+#define ATTR_HIDDEN 0x02
119+
120+// Summary: A system attribute macro
121+// Description: A macro for the system attribute. A file with this attribute is used by the operating system, and should not be
122+// modified. Note that this attribute will not actually prevent a write to the file.
123+#define ATTR_SYSTEM 0x04
124+
125+// Summary: A volume attribute macro
126+// Description: A macro for the volume attribute. If the first directory entry in the root directory has the volume attribute set,
127+// the device will use the name in that directory entry as the volume name.
128+#define ATTR_VOLUME 0x08
129+
130+// Summary: A macro for the attributes for a long-file name entry
131+// Description: A macro for the long-name attributes. If a directory entry is used in a long-file name implementation, it will have
132+// all four lower bits set. This indicates that any software that does not support long file names should ignore that
133+// entry.
134+#define ATTR_LONG_NAME 0x0f
135+
136+// Summary: A directory attribute macro
137+// Description: A macro for the directory attribute. If a directory entry has this attribute set, the file it points to is a directory-
138+// type file, and will contain directory entries that point to additional directories or files.
139+#define ATTR_DIRECTORY 0x10
140+
141+// Summary: An archive attribute macro
142+// Description: A macro for the archive attribute. This attribute will indicate to some archiving programs that the file with this
143+// attribute needs to be backed up. Most operating systems create files with the archive attribute set.
144+#define ATTR_ARCHIVE 0x20
145+
146+// Summary: A macro for all attributes
147+// Description: A macro for all attributes. The search functions in this library require an argument that determines which attributes
148+// a file is allowed to have in order to be found. If ATTR_MASK is specified as this argument, any file may be found, regardless
149+// of its attributes.
150+#define ATTR_MASK 0x3f
151+
152+
153+
154+// Summary: A macro to indicate an empty FAT entry
155+// Description: The CLUSTER_EMPTY value is used to indicate that a FAT entry and it's corresponding cluster are available.
156+#define CLUSTER_EMPTY 0x0000
157+
158+// Summary: A macro to indicate the last cluster value for FAT12
159+// Description: The LAST_CLUSTER_FAT12 macro is used when reading the FAT to indicate that the next FAT12 entry for a file contains
160+// the end-of-file value.
161+#define LAST_CLUSTER_FAT12 0xff8
162+
163+// Summary: A macro to indicate the last cluster value for FAT16
164+// Description: The LAST_CLUSTER_FAT16 macro is used when reading the FAT to indicate that the next FAT16 entry for a file contains
165+// the end-of-file value.
166+#define LAST_CLUSTER_FAT16 0xfff8
167+
168+// Summary: A macro to indicate the last allocatable cluster for FAT12
169+// Description: The END_CLUSTER_FAT12 value is used as a comparison in FAT12 to determine that the firmware has reached the end of
170+// the range of allowed allocatable clusters.
171+#define END_CLUSTER_FAT12 0xFF7
172+
173+// Summary: A macro to indicate the last allocatable cluster for FAT16
174+// Description: The END_CLUSTER_FAT16 value is used as a comparison in FAT16 to determine that the firmware has reached the end of
175+// the range of allowed allocatable clusters.
176+#define END_CLUSTER_FAT16 0xFFF7
177+
178+// Summary: A macro to indicate the failure of the ReadFAT function
179+// Description: The CLUSTER_FAIL_FAT16 macro is used by the ReadFAT function to indicate that an error occured reading a FAT12 or FAT16
180+// file allocation table. Note that since '0xFFF8' is used for the last cluster return value in the FAT16 implementation
181+// the end-of-file value '0xFFFF' can be used to indicate an error condition.
182+#define CLUSTER_FAIL_FAT16 0xFFFF
183+
184+
185+
186+#ifdef SUPPORT_FAT32
187+ // Summary: A macro to indicate the last cluster value for FAT32
188+ // Description: The LAST_CLUSTER_FAT32 macro is used when reading the FAT to indicate that the next FAT32 entry for a file contains
189+ // the end-of-file value.
190+ #define LAST_CLUSTER_FAT32 0x0FFFFFF8
191+
192+ // Summary: A macro to indicate the last allocatable cluster for FAT32
193+ // Description: The END_CLUSTER_FAT32 value is used as a comparison in FAT32 to determine that the firmware has reached the end of
194+ // the range of allowed allocatable clusters.
195+ #define END_CLUSTER_FAT32 0x0FFFFFF7
196+
197+ // Summary: A macro to indicate the failure of the ReadFAT function
198+ // Description: The CLUSTER_FAIL_FAT32 macro is used by the ReadFAT function to indicate that an error occured reading a FAT32
199+ // file allocation able.
200+ #define CLUSTER_FAIL_FAT32 0x0FFFFFFF
201+
202+#endif
203+
204+// Summary: A macro indicating the number of bytes in a directory entry.
205+// Description: The NUMBER_OF_BYTES_IN_DIR_ENTRY macro represents the number of bytes in one directory entry. It is used to calculate
206+// the number of sectors in the root directory based on information in the boot sector.
207+#define NUMBER_OF_BYTES_IN_DIR_ENTRY 32
208+
209+
210+
211+// Summary: A macro for a deleted dir entry marker.
212+// Description: The DIR_DEL macro is used to mark a directory entry as deleted. When a file is deleted, this value will replace the
213+// first character in the file name, and will indicate that the file the entry points to was deleted.
214+#define DIR_DEL 0xE5
215+
216+// Summary: A macro for the last dir entry marker.
217+// Description: The DIR_EMPTY macro is used to indicate the last entry in a directory. Since entries in use cannot start with a 0 and
218+// deleted entries start with the DIR_DEL character, a 0 will mark the end of the in-use or previously used group of
219+// entries in a directory
220+#define DIR_EMPTY 0
221+
222+
223+
224+// Summary: A macro used to indicate the length of an 8.3 file name
225+// Description: The DIR_NAMESIZE macro is used when validing the name portion of 8.3 filenames
226+#define DIR_NAMESIZE 8
227+
228+// Summary: A macro used to indicate the length of an 8.3 file extension
229+// Description: The DIR_EXTENSION macro is used when validating the extension portion of 8.3 filenames
230+#define DIR_EXTENSION 3
231+
232+// Summary: A macro used to indicate the length of an 8.3 file name and extension
233+// Description: The DIR_NAMECOMP macro is used when validating 8.3 filenames
234+#define DIR_NAMECOMP (DIR_NAMESIZE+DIR_EXTENSION)
235+
236+
237+
238+// Summary: A macro to write a byte to RAM
239+// Description: The RAMwrite macro is used to write a byte of data to a RAM array
240+#define RAMwrite( a, f, d) *(a+f) = d
241+
242+// Summary: A macro to read a byte from RAM
243+// Description: The RAMread macro is used to read a byte of data from a RAM array
244+#define RAMread( a, f) *(a+f)
245+
246+// Summary: A macro to read a 16-bit word from RAM
247+// Description: The RAMreadW macro is used to read two bytes of data from a RAM array
248+#define RAMreadW( a, f) *(WORD *)(a+f)
249+
250+// Summary: A macro to read a 32-bit word from RAM
251+// Description: The RAMreadD macro is used to read four bytes of data from a RAM array
252+#define RAMreadD( a, f) *(DWORD *)(a+f)
253+
254+
255+
256+#ifndef EOF
257+ // Summary: Indicates error conditions or end-of-file conditions
258+ // Description: The EOF macro is used to indicate error conditions in some function calls. It is also used to indicate
259+ // that the end-of-file has been reached.
260+ #define EOF ((int)-1)
261+#endif
262+
263+
264+
265+// Summary: A structure containing information about the device.
266+// Description: The DISK structure contains information about the device being accessed.
267+typedef struct
268+{
269+ BYTE * buffer; // Address of the global data buffer used to read and write file information
270+ DWORD firsts; // Logical block address of the first sector of the FAT partition on the device
271+ DWORD fat; // Logical block address of the FAT
272+ DWORD root; // Logical block address of the root directory
273+ DWORD data; // Logical block address of the data section of the device.
274+ WORD maxroot; // The maximum number of entries in the root directory.
275+ DWORD maxcls; // The maximum number of clusters in the partition.
276+ DWORD sectorSize; // The size of a sector in bytes
277+ DWORD fatsize; // The number of sectors in the FAT
278+ BYTE fatcopy; // The number of copies of the FAT in the partition
279+ BYTE SecPerClus; // The number of sectors per cluster in the data region
280+ BYTE type; // The file system type of the partition (FAT12, FAT16 or FAT32)
281+ BYTE mount; // Device mount flag (TRUE if disk was mounted successfully, FALSE otherwise)
282+#if defined __PIC32MX__ || defined __C30__
283+} __attribute__ ((packed)) DISK;
284+#else
285+} DISK;
286+#endif
287+
288+
289+#ifdef __18CXX
290+ // Summary: A 24-bit data type
291+ // Description: The SWORD macro is used to defined a 24-bit data type. For 16+ bit architectures, this must be represented as
292+ // an array of three bytes.
293+ typedef unsigned short long SWORD;
294+#else
295+ // Summary: A 24-bit data type
296+ // Description: The SWORD macro is used to defined a 24-bit data type. For 16+ bit architectures, this must be represented as
297+ // an array of three bytes.
298+ typedef struct
299+ {
300+ unsigned char array[3];
301+#if defined __PIC32MX__ || defined __C30__
302+ } __attribute__ ((packed)) SWORD;
303+#else
304+ } SWORD;
305+#endif
306+#endif
307+
308+
309+
310+// Summary: A structure containing the bios parameter block for a FAT12 file system (in the boot sector)
311+// Description: The _BPB_FAT12 structure provides a layout of the "bios parameter block" in the boot sector of a FAT12 partition.
312+typedef struct {
313+ SWORD BootSec_JumpCmd; // Jump Command
314+ BYTE BootSec_OEMName[8]; // OEM name
315+ WORD BootSec_BPS; // Number of bytes per sector
316+ BYTE BootSec_SPC; // Number of sectors per cluster
317+ WORD BootSec_ResrvSec; // Number of reserved sectors at the beginning of the partition
318+ BYTE BootSec_FATCount; // Number of FATs on the partition
319+ WORD BootSec_RootDirEnts; // Number of root directory entries
320+ WORD BootSec_TotSec16; // Total number of sectors
321+ BYTE BootSec_MDesc; // Media descriptor
322+ WORD BootSec_SPF; // Number of sectors per FAT
323+ WORD BootSec_SPT; // Number of sectors per track
324+ WORD BootSec_HeadCnt; // Number of heads
325+ DWORD BootSec_HiddenSecCnt; // Number of hidden sectors
326+ DWORD BootSec_Reserved; // Reserved space
327+ BYTE BootSec_DriveNum; // Drive number
328+ BYTE BootSec_Reserved2; // Reserved space
329+ BYTE BootSec_BootSig; // Boot signature - equal to 0x29
330+ BYTE BootSec_VolID[4]; // Volume ID
331+ BYTE BootSec_VolLabel[11]; // Volume Label
332+ BYTE BootSec_FSType[8]; // File system type in ASCII. Not used for determination
333+#if defined __PIC32MX__ || defined __C30__
334+ } __attribute__ ((packed)) _BPB_FAT12;
335+#else
336+ } _BPB_FAT12;
337+#endif
338+
339+// Summary: A structure containing the bios parameter block for a FAT16 file system (in the boot sector)
340+// Description: The _BPB_FAT16 structure provides a layout of the "bios parameter block" in the boot sector of a FAT16 partition.
341+typedef struct {
342+ SWORD BootSec_JumpCmd; // Jump Command
343+ BYTE BootSec_OEMName[8]; // OEM name
344+ WORD BootSec_BPS; // Number of bytes per sector
345+ BYTE BootSec_SPC; // Number of sectors per cluster
346+ WORD BootSec_ResrvSec; // Number of reserved sectors at the beginning of the partition
347+ BYTE BootSec_FATCount; // Number of FATs on the partition
348+ WORD BootSec_RootDirEnts; // Number of root directory entries
349+ WORD BootSec_TotSec16; // Total number of sectors
350+ BYTE BootSec_MDesc; // Media descriptor
351+ WORD BootSec_SPF; // Number of sectors per FAT
352+ WORD BootSec_SPT; // Number of sectors per track
353+ WORD BootSec_HeadCnt; // Number of heads
354+ DWORD BootSec_HiddenSecCnt; // Number of hidden sectors
355+ DWORD BootSec_TotSec32; // Total sector count (32 bits)
356+ BYTE BootSec_DriveNum; // Drive number
357+ BYTE BootSec_Reserved; // Reserved space
358+ BYTE BootSec_BootSig; // Boot signature - equal to 0x29
359+ BYTE BootSec_VolID[4]; // Volume ID
360+ BYTE BootSec_VolLabel[11]; // Volume Label
361+ BYTE BootSec_FSType[8]; // File system type in ASCII. Not used for determination
362+#if defined __PIC32MX__ || defined __C30__
363+ } __attribute__ ((packed)) _BPB_FAT16;
364+#else
365+ } _BPB_FAT16;
366+#endif
367+
368+// Summary: A structure containing the bios parameter block for a FAT32 file system (in the boot sector)
369+// Description: The _BPB_FAT32 structure provides a layout of the "bios parameter block" in the boot sector of a FAT32 partition.
370+typedef struct {
371+ SWORD BootSec_jmpBoot; // Jump Command
372+ BYTE BootSec_OEMName[8]; // OEM name
373+ WORD BootSec_BytsPerSec; // Number of bytes per sector
374+ BYTE BootSec_SecPerClus; // Number of sectors per cluster
375+ WORD BootSec_RsvdSecCnt; // Number of reserved sectors at the beginning of the partition
376+ BYTE BootSec_NumFATs; // Number of FATs on the partition
377+ WORD BootSec_RootEntCnt; // Number of root directory entries
378+ WORD BootSec_TotSec16; // Total number of sectors
379+ BYTE BootSec_Media; // Media descriptor
380+ WORD BootSec_FATSz16; // Number of sectors per FAT
381+ WORD BootSec_SecPerTrk; // Number of sectors per track
382+ WORD BootSec_NumHeads; // Number of heads
383+ DWORD BootSec_HiddSec; // Number of hidden sectors
384+ DWORD BootSec_TotSec32; // Total sector count (32 bits)
385+ DWORD BootSec_FATSz32; // Sectors per FAT (32 bits)
386+ WORD BootSec_ExtFlags; // Presently active FAT. Defined by bits 0-3 if bit 7 is 1.
387+ WORD BootSec_FSVers; // FAT32 filesystem version. Should be 0:0
388+ DWORD BootSec_RootClus; // Start cluster of the root directory (should be 2)
389+ WORD BootSec_FSInfo; // File system information
390+ WORD BootSec_BkBootSec; // Backup boot sector address.
391+ BYTE BootSec_Reserved[12]; // Reserved space
392+ BYTE BootSec_DrvNum; // Drive number
393+ BYTE BootSec_Reserved1; // Reserved space
394+ BYTE BootSec_BootSig; // Boot signature - 0x29
395+ BYTE BootSec_VolID[4]; // Volume ID
396+ BYTE BootSec_VolLab[11]; // Volume Label
397+ BYTE BootSec_FilSysType[8]; // File system type in ASCII. Not used for determination
398+#if defined __PIC32MX__ || defined __C30__
399+ } __attribute__ ((packed)) _BPB_FAT32;
400+#else
401+ } _BPB_FAT32;
402+#endif
403+
404+
405+// Description: A macro for the boot sector bytes per sector value offset
406+#define BSI_BPS 11
407+
408+// Description: A macro for the boot sector sector per cluster value offset
409+#define BSI_SPC 13
410+
411+// Description: A macro for the boot sector reserved sector count value offset
412+#define BSI_RESRVSEC 14
413+
414+// Description: A macro for the boot sector FAT count value offset
415+#define BSI_FATCOUNT 16
416+
417+// Description: A macro for the boot sector root directory entry count value offset
418+#define BSI_ROOTDIRENTS 17
419+
420+// Description: A macro for the boot sector 16-bit total sector count value offset
421+#define BSI_TOTSEC16 19
422+
423+// Description: A macro for the boot sector sectors per FAT value offset
424+#define BSI_SPF 22
425+
426+// Description: A macro for the boot sector 32-bit total sector count value offset
427+#define BSI_TOTSEC32 32
428+
429+// Description: A macro for the boot sector boot signature offset
430+#define BSI_BOOTSIG 38
431+
432+// Description: A macro for the boot sector file system type string offset
433+#define BSI_FSTYPE 54
434+
435+// Description: A macro for the boot sector 32-bit sector per FAT value offset
436+#define BSI_FATSZ32 36
437+
438+// Description: A macro for the boot sector start cluster of root directory value offset
439+#define BSI_ROOTCLUS 44
440+
441+// Description: A macro for the FAT32 boot sector boot signature offset
442+#define BSI_FAT32_BOOTSIG 66
443+
444+// Description: A macro for the FAT32 boot sector file system type string offset
445+#define BSI_FAT32_FSTYPE 82
446+
447+
448+
449+// Summary: A partition table entry structure.
450+// Description: The PTE_MBR structure contains values found in a partition table entry in the MBR of a device.
451+typedef struct
452+{
453+ BYTE PTE_BootDes; // The boot descriptor (should be 0x00 in a non-bootable device)
454+ SWORD PTE_FrstPartSect; // The cylinder-head-sector address of the first sector of the partition
455+ BYTE PTE_FSDesc; // The file system descriptor
456+ SWORD PTE_LstPartSect; // The cylinder-head-sector address of the last sector of the partition
457+ DWORD PTE_FrstSect; // The logical block address of the first sector of the partition
458+ DWORD PTE_NumSect; // The number of sectors in a partition
459+#if defined __PIC32MX__ || defined __C30__
460+ } __attribute__ ((packed)) PTE_MBR;
461+#else
462+ } PTE_MBR;
463+#endif
464+
465+
466+// Summary: A structure of the organization of a master boot record.
467+// Description: The _PT_MBR structure has the same form as a master boot record. When the MBR is loaded from the device, it will
468+// be cast as a _PT_MBR structure so the MBR elements can be accessed.
469+typedef struct
470+{
471+ BYTE ConsChkRtn[446]; // Boot code
472+ PTE_MBR Partition0; // The first partition table entry
473+ PTE_MBR Partition1; // The second partition table entry
474+ PTE_MBR Partition2; // The third partition table entry
475+ PTE_MBR Partition3; // The fourth partition table entry
476+ BYTE Signature0; // MBR signature code - equal to 0x55
477+ BYTE Signature1; // MBR signature code - equal to 0xAA
478+#if defined __PIC32MX__ || defined __C30__
479+}__attribute__((packed)) _PT_MBR;
480+#else
481+}_PT_MBR;
482+#endif
483+
484+// Summary: A pointer to a _PT_MBR structure
485+// Description: The PT_MBR pointer points to a _PT_MBR structure.
486+typedef _PT_MBR * PT_MBR;
487+
488+
489+
490+// Summary: A structure of the organization of a boot sector.
491+// Description: The _BootSec structure has the same form as a boot sector. When the boot sector is loaded from the device, it will
492+// be cast as a _BootSec structure so the boot sector elements can be accessed.
493+typedef struct
494+{
495+ // A union of different bios parameter blocks
496+ union
497+ {
498+ _BPB_FAT32 FAT_32;
499+ _BPB_FAT16 FAT_16;
500+ _BPB_FAT12 FAT_12;
501+ }FAT;
502+ BYTE Reserved[512-sizeof(_BPB_FAT32)-2]; // Reserved space
503+ BYTE Signature0; // Boot sector signature code - equal to 0x55
504+ BYTE Signature1; // Boot sector signature code - equal to 0xAA
505+#if defined __PIC32MX__ || defined __C30__
506+ } __attribute__ ((packed)) _BootSec;
507+#else
508+ } _BootSec;
509+#endif
510+
511+// Summary: A pointer to a _BootSec structure
512+// Description: The BootSec pointer points to a _BootSec structure.
513+typedef _BootSec * BootSec;
514+
515+
516+
517+// Summary: A macro indicating the offset for the master boot record
518+// Description: FO_MBR is a macro that indicates the addresss of the master boot record on the device. When the device is initialized
519+// this sector will be read
520+#define FO_MBR 0L
521+
522+
523+
524+// Summary: A macro for the first boot sector/MBR signature byte
525+// Description: The FAT_GOOD_SIGN_0 macro is used to determine that the first byte of the MBR or boot sector signature code is correct
526+#define FAT_GOOD_SIGN_0 0x55
527+
528+// Summary: A macro for the second boot sector/MBR signature byte
529+// Description: The FAT_GOOD_SIGN_1 macro is used to determine that the second byte of the MBR or boot sector signature code is correct
530+#define FAT_GOOD_SIGN_1 0xAA
531+
532+
533+typedef struct
534+{
535+ BYTE errorCode;
536+ union
537+ {
538+ BYTE value;
539+ struct
540+ {
541+ BYTE sectorSize : 1;
542+ BYTE maxLUN : 1;
543+ } bits;
544+ } validityFlags;
545+
546+ WORD sectorSize;
547+ BYTE maxLUN;
548+} MEDIA_INFORMATION;
549+
550+typedef enum
551+{
552+ MEDIA_NO_ERROR, // No errors
553+ MEDIA_DEVICE_NOT_PRESENT, // The requested device is not present
554+ MEDIA_CANNOT_INITIALIZE // Cannot initialize media
555+} MEDIA_ERRORS;
556+
557+
558+#endif
--- branches/sd-lib/FSIO.c (nonexistent)
+++ branches/sd-lib/FSIO.c (revision 8)
@@ -0,0 +1,13172 @@
1+/******************************************************************************
2+*
3+* Microchip Memory Disk Drive File System
4+*
5+******************************************************************************
6+* FileName: FSIO.c
7+* Dependencies: GenericTypeDefs.h
8+* FSIO.h
9+* Physical interface include file (SD-SPI.h, CF-PMP.h, ...)
10+* string.h
11+* stdlib.h
12+* FSDefs.h
13+* ctype.h
14+* salloc.h
15+* Processor: PIC18/PIC24/dsPIC30/dsPIC33/PIC32
16+* Compiler: C18/C30/C32
17+* Company: Microchip Technology, Inc.
18+*
19+* Software License Agreement
20+*
21+* The software supplied herewith by Microchip Technology Incorporated
22+* (the 鼎ompany・ for its PICmicroョ Microcontroller is intended and
23+* supplied to you, the Company痴 customer, for use solely and
24+* exclusively on Microchip PICmicro Microcontroller products. The
25+* software is owned by the Company and/or its supplier, and is
26+* protected under applicable copyright laws. All rights are reserved.
27+* Any use in violation of the foregoing restrictions may subject the
28+* user to criminal sanctions under applicable laws, as well as to
29+* civil liability for the breach of the terms and conditions of this
30+* license.
31+*
32+* THIS SOFTWARE IS PROVIDED IN AN 鄭S IS・CONDITION. NO WARRANTIES,
33+* WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
34+* TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
35+* PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
36+* IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
37+* CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
38+*
39+********************************************************************
40+ File Description:
41+
42+ Change History:
43+ Rev Description
44+ ----- -----------
45+ 1.2.5 Fixed bug that prevented writes to alternate FAT tables
46+ Fixed bug that prevented FAT being updated when media is re-inserted
47+
48+ 1.2.6 Fixed bug that resulted in a bus error when attempts to read a invalid memory region
49+ Fixed bug that prevented the Windows Explorer to show the Date Creation field for directories
50+
51+ x.x.x Fixed issue on some USB drives where the information written
52+ to the drive is cached in a RAM for 500ms before it is
53+ written to the flash unless the sector is accessed again.
54+ Add some error recovery for FAT32 systems when there is
55+ corruption in the boot sector.
56+
57+ 1.3.0 Modified to support Long File Name(LFN) format
58+ 1.3.4 1) Initialized some of the local variables to default values
59+ to remove non-critical compiler warnings for code sanitation.
60+ 2) The sector size of the media device is obtained from the MBR of media.So,
61+ instead of using the hard coded macro "DIRENTRIES_PER_SECTOR", the variables
62+ "dirEntriesPerSector" & "disk->sectorSize" are used in the code. Refer
63+ "Cache_File_Entry","EraseCluster" & "writeDotEntries" fucntions to see
64+ the change.
65+********************************************************************/
66+
67+#include "Compiler.h"
68+#include "FSIO.h"
69+#include "GenericTypeDefs.h"
70+#include "string.h"
71+#include "stdlib.h"
72+#include "ctype.h"
73+#include "FSDefs.h"
74+
75+#ifdef ALLOW_FSFPRINTF
76+#include "stdarg.h"
77+#endif
78+
79+#ifdef FS_DYNAMIC_MEM
80+ #ifdef __18CXX
81+ #include "salloc.h"
82+ #endif
83+#endif
84+
85+#ifndef ALLOW_WRITES
86+ #ifdef ALLOW_FORMATS
87+ #error Write functions must be enabled to use the format function
88+ #endif
89+ #ifdef ALLOW_FSFPRINTF
90+ #error Write functions must be enabled to use the FSfprintf function
91+ #endif
92+#endif
93+
94+#ifdef USEREALTIMECLOCK
95+ #ifdef USERDEFINEDCLOCK
96+ #error Please select only one timestamp clocking mode in FSconfig.h
97+ #endif
98+ #ifdef INCREMENTTIMESTAMP
99+ #error Please select only one timestamp clocking mode in FSconfig.h
100+ #endif
101+#elif defined USERDEFINEDCLOCK
102+ #ifdef INCREMENTTIMESTAMP
103+ #error Please select only one timestamp clocking mode in FSconfig.h
104+ #endif
105+#endif
106+/*****************************************************************************/
107+/* Global Variables */
108+/*****************************************************************************/
109+
110+#ifndef FS_DYNAMIC_MEM
111+ FSFILE gFileArray[FS_MAX_FILES_OPEN]; // Array that contains file information (static allocation)
112+ BYTE gFileSlotOpen[FS_MAX_FILES_OPEN]; // Array that indicates which elements of gFileArray are available for use
113+ #ifdef SUPPORT_LFN
114+ // Array that stores long file name (static allocation)
115+ unsigned short int lfnData[FS_MAX_FILES_OPEN][257];
116+ #endif
117+#endif
118+
119+#ifdef SUPPORT_LFN
120+ #ifdef ALLOW_FILESEARCH
121+ // Array that stores long file name for File Search operation (static allocation)
122+ unsigned short int recordSearchName[257];
123+ unsigned short int recordFoundName[257];
124+ unsigned short int recordSearchLength;
125+ #endif
126+ unsigned short int fileFoundString[261];
127+#endif
128+
129+#if defined(USEREALTIMECLOCK) || defined(USERDEFINEDCLOCK)
130+// Timing variables
131+BYTE gTimeCrtMS; // Global time variable (for timestamps) used to indicate create time (milliseconds)
132+WORD gTimeCrtTime; // Global time variable (for timestamps) used to indicate create time
133+WORD gTimeCrtDate; // Global time variable (for timestamps) used to indicate create date
134+WORD gTimeAccDate; // Global time variable (for timestamps) used to indicate last access date
135+WORD gTimeWrtTime; // Global time variable (for timestamps) used to indicate last update time
136+WORD gTimeWrtDate; // Global time variable (for timestamps) used to indicate last update date
137+#endif
138+
139+DWORD gLastFATSectorRead = 0xFFFFFFFF; // Global variable indicating which FAT sector was read last
140+BYTE gNeedFATWrite = FALSE; // Global variable indicating that there is information that needs to be written to the FAT
141+FSFILE * gBufferOwner = NULL; // Global variable indicating which file is using the data buffer
142+DWORD gLastDataSectorRead = 0xFFFFFFFF; // Global variable indicating which data sector was read last
143+BYTE gNeedDataWrite = FALSE; // Global variable indicating that there is information that needs to be written to the data section
144+BYTE nextClusterIsLast = FALSE; // Global variable indicating that the entries in a directory align with a cluster boundary
145+
146+BYTE gBufferZeroed = FALSE; // Global variable indicating that the data buffer contains all zeros
147+
148+DWORD FatRootDirClusterValue; // Global variable containing the cluster number of the root dir (0 for FAT12/16)
149+
150+BYTE FSerrno; // Global error variable. Set to one of many error codes after each function call.
151+
152+DWORD TempClusterCalc; // Global variable used to store the calculated value of the cluster of a specified sector.
153+BYTE dirCleared; // Global variable used by the "recursive" FSrmdir function to indicate that all subdirectories and files have been deleted from the target directory.
154+BYTE recache = FALSE; // Global variable used by the "recursive" FSrmdir function to indicate that additional cache reads are needed.
155+FSFILE tempCWDobj; // Global variable used to preserve the current working directory information.
156+FSFILE gFileTemp; // Global variable used for file operations.
157+
158+FSFILE cwd; // Global current working directory
159+FSFILE * cwdptr = &cwd; // Pointer to the current working directory
160+
161+
162+#ifdef __18CXX
163+ #pragma udata dataBuffer = DATA_BUFFER_ADDRESS
164+ BYTE gDataBuffer[MEDIA_SECTOR_SIZE]; // The global data sector buffer
165+ #pragma udata FATBuffer = FAT_BUFFER_ADDRESS
166+ BYTE gFATBuffer[MEDIA_SECTOR_SIZE]; // The global FAT sector buffer
167+#endif
168+
169+#if defined (__C30__) || defined (__PIC32MX__)
170+ BYTE __attribute__ ((aligned(4))) gDataBuffer[MEDIA_SECTOR_SIZE]; // The global data sector buffer
171+ BYTE __attribute__ ((aligned(4))) gFATBuffer[MEDIA_SECTOR_SIZE]; // The global FAT sector buffer
172+#endif
173+
174+
175+#pragma udata
176+
177+DISK gDiskData; // Global structure containing device information.
178+
179+/* Global Variables to handle ASCII & UTF16 file operations */
180+char *asciiFilename;
181+unsigned short int fileNameLength;
182+#ifdef SUPPORT_LFN
183+ unsigned short int *utf16Filename;
184+ BOOL utfModeFileName = FALSE;
185+ BOOL twoByteMode = FALSE;
186+#endif
187+/************************************************************************/
188+/* Structures and defines */
189+/************************************************************************/
190+
191+// Directory entry structure
192+typedef struct
193+{
194+ char DIR_Name[DIR_NAMESIZE]; // File name
195+ char DIR_Extension[DIR_EXTENSION]; // File extension
196+ BYTE DIR_Attr; // File attributes
197+ BYTE DIR_NTRes; // Reserved byte
198+ BYTE DIR_CrtTimeTenth; // Create time (millisecond field)
199+ WORD DIR_CrtTime; // Create time (second, minute, hour field)
200+ WORD DIR_CrtDate; // Create date
201+ WORD DIR_LstAccDate; // Last access date
202+ WORD DIR_FstClusHI; // High word of the entry's first cluster number
203+ WORD DIR_WrtTime; // Last update time
204+ WORD DIR_WrtDate; // Last update date
205+ WORD DIR_FstClusLO; // Low word of the entry's first cluster number
206+ DWORD DIR_FileSize; // The 32-bit file size
207+}_DIRENTRY;
208+
209+typedef _DIRENTRY * DIRENTRY; // A pointer to a directory entry structure
210+
211+#define DIRECTORY 0x12 // Value indicating that the CreateFileEntry function will be creating a directory
212+
213+#define DIRENTRIES_PER_SECTOR (MEDIA_SECTOR_SIZE / 32) // The number of directory entries in a sector
214+
215+// Maximum number of UTF16 words in single Root directory entry
216+#define MAX_UTF16_CHARS_IN_LFN_ENTRY (BYTE)13
217+
218+// Long File Name Entry
219+typedef struct
220+{
221+ BYTE LFN_SequenceNo; // Sequence number,
222+ BYTE LFN_Part1[10]; // File name part 1
223+ BYTE LFN_Attribute; // File attribute
224+ BYTE LFN_Type; // LFN Type
225+ BYTE LFN_Checksum; // Checksum
226+ unsigned short int LFN_Part2[6]; // File name part 2
227+ unsigned short int LFN_Reserved2; // Reserved for future use
228+ unsigned short int LFN_Part3[2]; // File name part 3
229+}LFN_ENTRY;
230+
231+/* Summary: Possible type of file or directory name.
232+** Description: See the FormatFileName() & FormatDirName() function for more information.
233+*/
234+typedef enum
235+{
236+ NAME_8P3_ASCII_CAPS_TYPE,
237+ NAME_8P3_ASCII_MIXED_TYPE,
238+ NAME_8P3_UTF16_TYPE, // SUBTYPES OF 8P3 UTF16 TYPE
239+ NAME_8P3_UTF16_ASCII_CAPS_TYPE,
240+ NAME_8P3_UTF16_ASCII_MIXED_TYPE,
241+ NAME_8P3_UTF16_NONASCII_TYPE,
242+ NAME_LFN_TYPE,
243+ NAME_ERROR
244+} FILE_DIR_NAME_TYPE;
245+
246+// internal errors
247+#define CE_FAT_EOF 60 // Error that indicates an attempt to read FAT entries beyond the end of the file
248+#define CE_EOF 61 // Error that indicates that the end of the file has been reached
249+
250+typedef FSFILE * FILEOBJ; // Pointer to an FSFILE object
251+
252+#ifdef ALLOW_FSFPRINTF
253+
254+#define _FLAG_MINUS 0x1 // FSfprintf minus flag indicator
255+#define _FLAG_PLUS 0x2 // FSfprintf plus flag indicator
256+#define _FLAG_SPACE 0x4 // FSfprintf space flag indicator
257+#define _FLAG_OCTO 0x8 // FSfprintf octothorpe (hash mark) flag indicator
258+#define _FLAG_ZERO 0x10 // FSfprintf zero flag indicator
259+#define _FLAG_SIGNED 0x80 // FSfprintf signed flag indicator
260+
261+#ifdef __18CXX
262+ #define _FMT_UNSPECIFIED 0 // FSfprintf unspecified argument size flag
263+ #define _FMT_LONG 1 // FSfprintf 32-bit argument size flag
264+ #define _FMT_SHRTLONG 2 // FSfprintf 24-bit argument size flag
265+ #define _FMT_BYTE 3 // FSfprintf 8-bit argument size flag
266+#else
267+ #define _FMT_UNSPECIFIED 0 // FSfprintf unspecified argument size flag
268+ #define _FMT_LONGLONG 1 // FSfprintf 64-bit argument size flag
269+ #define _FMT_LONG 2 // FSfprintf 32-bit argument size flag
270+ #define _FMT_BYTE 3 // FSfprintf 8-bit argument size flag
271+#endif
272+
273+#ifdef __18CXX
274+ static const rom char s_digits[] = "0123456789abcdef"; // FSfprintf table of conversion digits
275+#else
276+ static const char s_digits[] = "0123456789abcdef"; // FSfprintf table of conversion digits
277+#endif
278+
279+#endif
280+
281+/************************************************************************************/
282+/* Prototypes */
283+/************************************************************************************/
284+
285+DWORD ReadFAT (DISK *dsk, DWORD ccls);
286+DIRENTRY Cache_File_Entry( FILEOBJ fo, WORD * curEntry, BYTE ForceRead);
287+BYTE Fill_File_Object(FILEOBJ fo, WORD *fHandle);
288+DWORD Cluster2Sector(DISK * disk, DWORD cluster);
289+DIRENTRY LoadDirAttrib(FILEOBJ fo, WORD *fHandle);
290+#ifdef INCREMENTTIMESTAMP
291+ void IncrementTimeStamp(DIRENTRY dir);
292+#elif defined USEREALTIMECLOCK
293+ void CacheTime (void);
294+#endif
295+
296+#if defined (__C30__) || defined (__PIC32MX__)
297+ BYTE ReadByte( BYTE* pBuffer, WORD index );
298+ WORD ReadWord( BYTE* pBuffer, WORD index );
299+ DWORD ReadDWord( BYTE* pBuffer, WORD index );
300+#endif
301+
302+void FileObjectCopy(FILEOBJ foDest,FILEOBJ foSource);
303+FILE_DIR_NAME_TYPE ValidateChars(BYTE mode);
304+BYTE FormatFileName( const char* fileName, FILEOBJ fptr, BYTE mode);
305+CETYPE FILEfind( FILEOBJ foDest, FILEOBJ foCompareTo, BYTE cmd, BYTE mode);
306+BYTE FILEget_next_cluster(FILEOBJ fo, DWORD n);
307+CETYPE FILEopen (FILEOBJ fo, WORD *fHandle, char type);
308+#if defined(SUPPORT_LFN)
309+BOOL Alias_LFN_Object(FILEOBJ fo);
310+BYTE Fill_LFN_Object(FILEOBJ fo, LFN_ENTRY *lfno, WORD *fHandle);
311+#endif
312+
313+// Write functions
314+#ifdef ALLOW_WRITES
315+ BYTE Write_File_Entry( FILEOBJ fo, WORD * curEntry);
316+ BYTE flushData (void);
317+ CETYPE FILEerase( FILEOBJ fo, WORD *fHandle, BYTE EraseClusters);
318+ BYTE FILEallocate_new_cluster( FILEOBJ fo, BYTE mode);
319+ BYTE FAT_erase_cluster_chain (DWORD cluster, DISK * dsk);
320+ DWORD FATfindEmptyCluster(FILEOBJ fo);
321+ BYTE FindEmptyEntries(FILEOBJ fo, WORD *fHandle);
322+ BYTE PopulateEntries(FILEOBJ fo, WORD *fHandle, BYTE mode);
323+ CETYPE FILECreateHeadCluster( FILEOBJ fo, DWORD *cluster);
324+ BYTE EraseCluster(DISK *disk, DWORD cluster);
325+ CETYPE CreateFirstCluster(FILEOBJ fo);
326+ DWORD WriteFAT (DISK *dsk, DWORD ccls, DWORD value, BYTE forceWrite);
327+ CETYPE CreateFileEntry(FILEOBJ fo, WORD *fHandle, BYTE mode, BOOL createFirstCluster);
328+#endif
329+
330+// Directory functions
331+#ifdef ALLOW_DIRS
332+ BYTE GetPreviousEntry (FSFILE * fo);
333+ BYTE FormatDirName (char * string,FILEOBJ fptr, BYTE mode);
334+ int CreateDIR (char * path);
335+ BYTE writeDotEntries (DISK * dsk, DWORD dotAddress, DWORD dotdotAddress);
336+ int eraseDir (char * path);
337+#ifdef ALLOW_PGMFUNCTIONS
338+ #ifdef ALLOW_WRITES
339+ int mkdirhelper (BYTE mode, char * ramptr, const rom char * romptr);
340+ int rmdirhelper (BYTE mode, char * ramptr, const rom char * romptr, unsigned char rmsubdirs);
341+ #endif
342+int chdirhelper (BYTE mode, char * ramptr, const rom char * romptr);
343+#else
344+ #ifdef ALLOW_WRITES
345+ int mkdirhelper (BYTE mode, char * ramptr, char * romptr);
346+ int rmdirhelper (BYTE mode, char * ramptr, char * romptr, unsigned char rmsubdirs);
347+ #endif
348+ int chdirhelper (BYTE mode, char * ramptr, char * romptr);
349+#endif
350+#endif
351+
352+#ifdef ALLOW_FSFPRINTF
353+ #ifdef __18CXX
354+ int FSvfprintf (auto FSFILE *handle, auto const rom char *formatString, auto va_list ap);
355+ #else
356+ int FSvfprintf (FSFILE *handle, const char *formatString, va_list ap);
357+ #endif
358+ int FSputc (char c, FSFILE * file);
359+ unsigned char str_put_n_chars (FSFILE * handle, unsigned char n, char c);
360+#endif
361+
362+BYTE DISKmount( DISK *dsk);
363+BYTE LoadMBR(DISK *dsk);
364+BYTE LoadBootSector(DISK *dsk);
365+DWORD GetFullClusterNumber(DIRENTRY entry);
366+
367+
368+/*************************************************************************
369+ Function:
370+ int FSInit(void)
371+ Summary:
372+ Function to initialize the device.
373+ Conditions:
374+ The physical device should be connected to the microcontroller.
375+ Input:
376+ None
377+ Return Values:
378+ TRUE - Initialization successful
379+ FALSE - Initialization unsuccessful
380+ Side Effects:
381+ The FSerrno variable will be changed.
382+ Description:
383+ Initializes the static or dynamic memory slots for holding file
384+ structures. Initializes the device with the DISKmount function. Loads
385+ MBR and boot sector information. Initializes the current working
386+ directory to the root directory for the device if directory support
387+ is enabled.
388+ Remarks:
389+ None
390+ *************************************************************************/
391+
392+int FSInit(void)
393+{
394+ int fIndex;
395+#ifndef FS_DYNAMIC_MEM
396+ for( fIndex = 0; fIndex < FS_MAX_FILES_OPEN; fIndex++ )
397+ gFileSlotOpen[fIndex] = TRUE;
398+#else
399+ #ifdef __18CXX
400+ SRAMInitHeap();
401+ #endif
402+#endif
403+
404+ gBufferZeroed = FALSE;
405+ gNeedFATWrite = FALSE;
406+ gLastFATSectorRead = 0xFFFFFFFF;
407+ gLastDataSectorRead = 0xFFFFFFFF;
408+
409+ MDD_InitIO();
410+
411+ if(DISKmount(&gDiskData) == CE_GOOD)
412+ {
413+ // Initialize the current working directory to the root
414+#ifdef ALLOW_DIRS
415+ cwdptr->dsk = &gDiskData;
416+ cwdptr->sec = 0;
417+ cwdptr->pos = 0;
418+ cwdptr->seek = 0;
419+ cwdptr->size = 0;
420+ cwdptr->name[0] = '\\';
421+ for (fIndex = 1; fIndex < 11; fIndex++)
422+ {
423+ cwdptr->name[fIndex] = 0x20;
424+ }
425+ cwdptr->entry = 0;
426+ cwdptr->attributes = ATTR_DIRECTORY;
427+ // "FatRootDirClusterValue" indicates the root
428+ cwdptr->dirclus = FatRootDirClusterValue;
429+ cwdptr->dirccls = FatRootDirClusterValue;
430+ #if defined(SUPPORT_LFN)
431+ // Initialize default values for LFN support
432+ cwdptr->AsciiEncodingType = TRUE;
433+ cwdptr->utf16LFNlength = 0x0000;
434+ #endif
435+#endif
436+
437+ FSerrno = 0;
438+ return TRUE;
439+ }
440+
441+ return FALSE;
442+}
443+
444+
445+/********************************************************************************
446+ Function:
447+ CETYPE FILEfind (FILEOBJ foDest, FILEOBJ foCompareTo, BYTE cmd, BYTE mode)
448+ Summary
449+ Finds a file on the device
450+ Conditions:
451+ This function should not be called by the user.
452+ Input:
453+ foDest - FSFILE object containing information of the file found
454+ foCompareTo - FSFILE object containing the name/attr of the file to be
455+ found
456+ cmd -
457+ - LOOK_FOR_EMPTY_ENTRY: Search for empty entry.
458+ - LOOK_FOR_MATCHING_ENTRY: Search for matching entry.
459+ mode -
460+ - 0: Match file exactly with default attributes.
461+ - 1: Match file to user-specified attributes.
462+ Return Values:
463+ CE_GOOD - File found.
464+ CE_FILE_NOT_FOUND - File not found.
465+ Side Effects:
466+ None.
467+ Description:
468+ The FILEfind function will sequentially cache directory entries within
469+ the current working directory into the foDest FSFILE object. If the cmd
470+ parameter is specified as LOOK_FOR_EMPTY_ENTRY the search will continue
471+ until an empty directory entry is found. If the cmd parameter is specified
472+ as LOOK_FOR_MATCHING_ENTRY these entries will be compared to the foCompareTo
473+ object until a match is found or there are no more entries in the current
474+ working directory. If the mode is specified a '0' the attributes of the FSFILE
475+ entries are irrelevant. If the mode is specified as '1' the attributes of the
476+ foDest entry must match the attributes specified in the foCompareTo file and
477+ partial string search characters may bypass portions of the comparison.
478+ Remarks:
479+ None
480+ ********************************************************************************/
481+
482+CETYPE FILEfind( FILEOBJ foDest, FILEOBJ foCompareTo, BYTE cmd, BYTE mode)
483+{
484+ WORD attrib, compareAttrib;
485+ WORD fHandle = foDest->entry; // current entry counter
486+ CETYPE statusB = CE_FILE_NOT_FOUND;
487+ BYTE character,test,state,index;
488+
489+ #if defined(SUPPORT_LFN)
490+
491+ LFN_ENTRY lfnObject; // Long File Name Object
492+ unsigned char *dst = (unsigned char *)&fileFoundString[0];
493+ unsigned short int *templfnPtr = (unsigned short int *)foCompareTo -> utf16LFNptr;
494+ UINT16_VAL tempShift;
495+ short int fileCompareLfnIndex,fileFoundLfnIndex = 0,fileFoundMaxLfnIndex = 0,lfnCountIndex;
496+ BOOL lfnFirstCheck = FALSE,foundSFN,foundLFN,fileFoundDotPosition = FALSE,fileCompareDotPosition;
497+ BYTE lfnMaxSequenceNum = 0,reminder = 0;
498+
499+ fileNameLength = foCompareTo->utf16LFNlength;
500+
501+ // If 'fileNameLength' is non zero then it means that file name is of LFN format.
502+ // If 'fileNameLength' is zero then it means that file name is of 8.3 format
503+ if(fileNameLength)
504+ {
505+ // Find out the number of root entries for the given LFN
506+ reminder = fileNameLength % MAX_UTF16_CHARS_IN_LFN_ENTRY;
507+
508+ index = fileNameLength/MAX_UTF16_CHARS_IN_LFN_ENTRY;
509+
510+ if(reminder || (fileNameLength < MAX_UTF16_CHARS_IN_LFN_ENTRY))
511+ {
512+ index++;
513+ }
514+
515+ // The maximum sequence number of the LFN
516+ lfnMaxSequenceNum = (BYTE)0x40 | (BYTE)index;
517+ }
518+ #endif
519+
520+ // reset the cluster
521+ foDest->dirccls = foDest->dirclus;
522+ // Attribute to be compared as per application layer request
523+ compareAttrib = 0xFFFF ^ foCompareTo->attributes;
524+
525+ if (fHandle == 0)
526+ {
527+ if (Cache_File_Entry(foDest, &fHandle, TRUE) == NULL)
528+ {
529+ statusB = CE_BADCACHEREAD;
530+ }
531+ }
532+ else
533+ {
534+ // Maximum 16 entries possible
535+ if ((fHandle & MASK_MAX_FILE_ENTRY_LIMIT_BITS) != 0)
536+ {
537+ if (Cache_File_Entry (foDest, &fHandle, TRUE) == NULL)
538+ {
539+ statusB = CE_BADCACHEREAD;
540+ }
541+ }
542+ }
543+
544+ if (statusB != CE_BADCACHEREAD)
545+ {
546+ // Loop until you reach the end or find the file
547+ while(1)
548+ {
549+ if(statusB != CE_GOOD) //First time entry always here
550+ {
551+ #if defined(SUPPORT_LFN)
552+ state = Fill_LFN_Object(foDest,&lfnObject,&fHandle);
553+ #else
554+ state = Fill_File_Object(foDest, &fHandle);
555+ #endif
556+
557+ if(state == NO_MORE) // Reached the end of available files. Comparision over and file not found so quit.
558+ {
559+ break;
560+ }
561+ }
562+ else // statusB == CE_GOOD then exit
563+ {
564+ break; // Code below intializes"statusB = CE_GOOD;" so, if no problem in the filled file, Exit the while loop.
565+ }
566+
567+ if(state == FOUND) // Validate the correct matching of filled file data with the required(to be found) one.
568+ {
569+ #if defined(SUPPORT_LFN)
570+ foundSFN = FALSE;
571+ foundLFN = FALSE;
572+
573+ if(lfnObject.LFN_Attribute != ATTR_LONG_NAME)
574+ {
575+ lfnFirstCheck = FALSE;
576+ if((mode == 0x00) && fileNameLength)
577+ {
578+ fHandle++;
579+ continue;
580+ }
581+
582+ *dst = lfnObject.LFN_SequenceNo;
583+ for(index = 0;index < 10;index++)
584+ dst[index + 1] = lfnObject.LFN_Part1[index];
585+ foundSFN = TRUE;
586+ }
587+ else
588+ {
589+ if(lfnObject.LFN_SequenceNo & 0x40)
590+ {
591+ if((mode == 0x00) && ((fileNameLength && (lfnObject.LFN_SequenceNo != lfnMaxSequenceNum)) || !fileNameLength))
592+ {
593+// fHandle = fHandle + (lfnObject.LFN_SequenceNo & 0xBF) + 1;
594+ fHandle++;
595+ continue;
596+ }
597+
598+ fileFoundLfnIndex = (lfnObject.LFN_SequenceNo & 0xBF) * MAX_UTF16_CHARS_IN_LFN_ENTRY - 1;
599+ fileCompareLfnIndex = fileFoundLfnIndex;
600+
601+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part3[1];
602+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part3[0];
603+
604+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[5];
605+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[4];
606+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[3];
607+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[2];
608+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[1];
609+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[0];
610+
611+ tempShift.byte.LB = lfnObject.LFN_Part1[8];
612+ tempShift.byte.HB = lfnObject.LFN_Part1[9];
613+ fileFoundString[fileFoundLfnIndex--] = tempShift.Val;
614+ tempShift.byte.LB = lfnObject.LFN_Part1[6];
615+ tempShift.byte.HB = lfnObject.LFN_Part1[7];
616+ fileFoundString[fileFoundLfnIndex--] = tempShift.Val;
617+ tempShift.byte.LB = lfnObject.LFN_Part1[4];
618+ tempShift.byte.HB = lfnObject.LFN_Part1[5];
619+ fileFoundString[fileFoundLfnIndex--] = tempShift.Val;
620+ tempShift.byte.LB = lfnObject.LFN_Part1[2];
621+ tempShift.byte.HB = lfnObject.LFN_Part1[3];
622+ fileFoundString[fileFoundLfnIndex--] = tempShift.Val;
623+ tempShift.byte.LB = lfnObject.LFN_Part1[0];
624+ tempShift.byte.HB = lfnObject.LFN_Part1[1];
625+ fileFoundString[fileFoundLfnIndex--] = tempShift.Val;
626+
627+ if(reminder)
628+ index = reminder;
629+ else
630+ index = MAX_UTF16_CHARS_IN_LFN_ENTRY;
631+
632+ if(mode == 0x00)
633+ {
634+ if((fileFoundString[fileFoundLfnIndex + index] != 0x00) && fileNameLength)
635+ {
636+// fHandle = fHandle + (lfnObject.LFN_SequenceNo & 0xBF) + 1;
637+ fHandle++;
638+ continue;
639+ }
640+ }
641+ else
642+ {
643+ while(fileFoundString[fileCompareLfnIndex])
644+ fileCompareLfnIndex--;
645+ fileFoundMaxLfnIndex = fileCompareLfnIndex - 1;
646+ }
647+ lfnFirstCheck = TRUE;
648+ }
649+ else if(lfnFirstCheck == TRUE)
650+ {
651+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part3[1];
652+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part3[0];
653+
654+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[5];
655+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[4];
656+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[3];
657+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[2];
658+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[1];
659+ fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[0];
660+
661+ tempShift.byte.LB = lfnObject.LFN_Part1[8];
662+ tempShift.byte.HB = lfnObject.LFN_Part1[9];
663+ fileFoundString[fileFoundLfnIndex--] = tempShift.Val;
664+ tempShift.byte.LB = lfnObject.LFN_Part1[6];
665+ tempShift.byte.HB = lfnObject.LFN_Part1[7];
666+ fileFoundString[fileFoundLfnIndex--] = tempShift.Val;
667+ tempShift.byte.LB = lfnObject.LFN_Part1[4];
668+ tempShift.byte.HB = lfnObject.LFN_Part1[5];
669+ fileFoundString[fileFoundLfnIndex--] = tempShift.Val;
670+ tempShift.byte.LB = lfnObject.LFN_Part1[2];
671+ tempShift.byte.HB = lfnObject.LFN_Part1[3];
672+ fileFoundString[fileFoundLfnIndex--] = tempShift.Val;
673+ tempShift.byte.LB = lfnObject.LFN_Part1[0];
674+ tempShift.byte.HB = lfnObject.LFN_Part1[1];
675+ fileFoundString[fileFoundLfnIndex--] = tempShift.Val;
676+ }
677+ else
678+ {
679+ fHandle++;
680+ continue;
681+ }
682+
683+ if(fileFoundLfnIndex > 0)
684+ {
685+ fHandle++;
686+ continue;
687+ }
688+
689+ foundLFN = TRUE;
690+ }
691+
692+ lfnFirstCheck = FALSE;
693+ statusB = CE_GOOD;
694+ switch (mode)
695+ {
696+ case 0:
697+ if(fileNameLength)
698+ {
699+ // see if we are a volume id or hidden, ignore
700+ // search for one. if status = TRUE we found one
701+ for(fileCompareLfnIndex = 0;fileCompareLfnIndex < fileNameLength;fileCompareLfnIndex++)
702+ {
703+ if(foCompareTo -> AsciiEncodingType)
704+ {
705+ // get the source character
706+ character = (BYTE)templfnPtr[fileCompareLfnIndex];
707+ // get the destination character
708+ test = (BYTE)fileFoundString[fileCompareLfnIndex];
709+ if((fileFoundString[fileCompareLfnIndex] > 0xFF) || (tolower(character) != tolower(test)))
710+ {
711+ statusB = CE_FILE_NOT_FOUND; // Nope its not a match
712+ break;
713+ }
714+ }
715+ else
716+ {
717+ if(templfnPtr[fileCompareLfnIndex] != fileFoundString[fileCompareLfnIndex])
718+ {
719+ statusB = CE_FILE_NOT_FOUND; // Nope its not a match
720+ break;
721+ }
722+ }
723+ }// for loop
724+ }
725+ else
726+ {
727+ /* We got something */
728+ character = (BYTE)'m'; // random value
729+
730+ // search for one. if status = TRUE we found one
731+ for(index = 0; index < DIR_NAMECOMP; index++)
732+ {
733+ // get the source character
734+ character = dst[index];
735+ // get the destination character
736+ test = foCompareTo->name[index];
737+ if(tolower(character) != tolower(test))
738+ {
739+ statusB = CE_FILE_NOT_FOUND; // Nope its not a match
740+ break;
741+ }
742+ }// for loop
743+ }
744+ break;
745+
746+ case 1:
747+ if(fileNameLength)
748+ {
749+ fileFoundDotPosition = FALSE;
750+ if(foundLFN)
751+ {
752+ lfnCountIndex = fileFoundMaxLfnIndex;
753+ while(lfnCountIndex > 0)
754+ {
755+ if(fileFoundString[lfnCountIndex] == '.')
756+ {
757+ fileFoundDotPosition = TRUE;
758+ lfnCountIndex--;
759+ break;
760+ }
761+ lfnCountIndex--;
762+ }
763+
764+ if(fileFoundDotPosition == FALSE)
765+ lfnCountIndex = fileFoundMaxLfnIndex;
766+ }
767+ else
768+ {
769+ if(dst[DIR_NAMESIZE] != ' ')
770+ fileFoundDotPosition = TRUE;
771+ lfnCountIndex = DIR_NAMESIZE - 1;
772+ }
773+
774+ fileFoundLfnIndex = fileNameLength - 1;
775+ fileCompareDotPosition = FALSE;
776+ while(fileFoundLfnIndex > 0)
777+ {
778+ if(templfnPtr[fileFoundLfnIndex] == '.')
779+ {
780+ fileCompareDotPosition = TRUE;
781+ fileFoundLfnIndex--;
782+ break;
783+ }
784+ fileFoundLfnIndex--;
785+ }
786+ if(fileCompareDotPosition == FALSE)
787+ fileFoundLfnIndex = fileNameLength - 1;
788+
789+ // Check for attribute match
790+ for(fileCompareLfnIndex = 0;;)
791+ {
792+ if (templfnPtr[fileCompareLfnIndex] == '*')
793+ break;
794+
795+ if(fileCompareLfnIndex > lfnCountIndex)
796+ {
797+// if(foundLFN)
798+// fHandle++;
799+ statusB = CE_FILE_NOT_FOUND; // Nope its not a match
800+ break;
801+ }
802+
803+ if (templfnPtr[fileCompareLfnIndex] != '?')
804+ {
805+ if(foCompareTo -> AsciiEncodingType)
806+ {
807+ // get the source character
808+ character = (BYTE)templfnPtr[fileCompareLfnIndex];
809+ // get the destination character
810+ if(foundLFN)
811+ test = (BYTE)fileFoundString[fileCompareLfnIndex];
812+ else
813+ test = dst[fileCompareLfnIndex];
814+
815+ if((foundLFN && (fileFoundString[fileCompareLfnIndex] > 0xFF)) ||
816+ (tolower(character) != tolower(test)))
817+ {
818+// if(foundLFN)
819+// fHandle++;
820+ statusB = CE_FILE_NOT_FOUND; // Nope its not a match
821+ break;
822+ }
823+ }
824+ else
825+ {
826+ if((templfnPtr[fileCompareLfnIndex] != fileFoundString[fileCompareLfnIndex]) || foundSFN)
827+ {
828+// if(foundLFN)
829+// fHandle++;
830+ statusB = CE_FILE_NOT_FOUND; // Nope its not a match
831+ break;
832+ }
833+ }
834+ }
835+
836+ fileCompareLfnIndex++;
837+ if(fileCompareLfnIndex > fileFoundLfnIndex)
838+ {
839+ if(fileCompareLfnIndex <= lfnCountIndex)
840+ {
841+// if(foundLFN)
842+// fHandle++;
843+ statusB = CE_FILE_NOT_FOUND; // Nope its not a match
844+ }
845+ break;
846+ }
847+ }// for loop
848+
849+ if(fileCompareDotPosition == FALSE)
850+ {
851+ if(fileFoundDotPosition == TRUE)
852+ {
853+// if(foundLFN)
854+// fHandle++;
855+ statusB = CE_FILE_NOT_FOUND; // Nope its not a match
856+ }
857+ break;
858+ }
859+ else
860+ {
861+ if(fileFoundDotPosition == FALSE)
862+ {
863+// if(foundLFN)
864+// fHandle++;
865+ statusB = CE_FILE_NOT_FOUND; // Nope its not a match
866+ break;
867+ }
868+
869+ if(foundLFN)
870+ lfnCountIndex = lfnCountIndex + 2;
871+ else
872+ lfnCountIndex = DIR_NAMESIZE;
873+ }
874+
875+ // Check for attribute match
876+ for(fileCompareLfnIndex = fileFoundLfnIndex + 2;;)
877+ {
878+ if (templfnPtr[fileCompareLfnIndex] == '*')
879+ break;
880+
881+ if((foundLFN && (lfnCountIndex > fileFoundMaxLfnIndex)) || (foundSFN && (lfnCountIndex == 11)))
882+ {
883+// if(foundLFN)
884+// fHandle++;
885+ statusB = CE_FILE_NOT_FOUND; // Nope its not a match
886+ break;
887+ }
888+
889+ if (templfnPtr[fileCompareLfnIndex] != '?')
890+ {
891+ if(foCompareTo -> AsciiEncodingType)
892+ {
893+ // get the source character
894+ character = (BYTE)templfnPtr[fileCompareLfnIndex];
895+ // get the destination character
896+ if(foundLFN)
897+ test = (BYTE)fileFoundString[lfnCountIndex];
898+ else
899+ test = dst[lfnCountIndex];
900+ if((foundLFN && (fileFoundString[lfnCountIndex] > 0xFF)) ||
901+ (tolower(character) != tolower(test)))
902+ {
903+// if(foundLFN)
904+// fHandle++;
905+ statusB = CE_FILE_NOT_FOUND; // Nope its not a match
906+ break;
907+ }
908+ }
909+ else
910+ {
911+ if((templfnPtr[fileCompareLfnIndex] != fileFoundString[lfnCountIndex]) || foundSFN)
912+ {
913+// if(foundLFN)
914+// fHandle++;
915+ statusB = CE_FILE_NOT_FOUND; // Nope its not a match
916+ break;
917+ }
918+ }
919+ }
920+ lfnCountIndex++;
921+ fileCompareLfnIndex++;
922+ if(fileCompareLfnIndex == (fileNameLength - 1))
923+ {
924+ if((foundLFN && (lfnCountIndex <= fileFoundMaxLfnIndex)) || (foundSFN && (lfnCountIndex < 11) && (dst[lfnCountIndex] != ' ')))
925+ {
926+// if(foundLFN)
927+// fHandle++;
928+ statusB = CE_FILE_NOT_FOUND; // Nope its not a match
929+ }
930+ break;
931+ }
932+ }// for loop
933+ }
934+ else
935+ {
936+ /* We got something */
937+ if(foundLFN)
938+ {
939+ fileCompareLfnIndex = fileFoundMaxLfnIndex;
940+ fileFoundDotPosition = FALSE;
941+ while(fileCompareLfnIndex > 0)
942+ {
943+ if(fileFoundString[fileCompareLfnIndex] == '.')
944+ {
945+ fileFoundDotPosition = TRUE;
946+ fileCompareLfnIndex--;
947+ break;
948+ }
949+ fileCompareLfnIndex--;
950+ }
951+
952+ if(fileFoundDotPosition == FALSE)
953+ fileCompareLfnIndex = fileFoundMaxLfnIndex;
954+ }
955+ else
956+ fileCompareLfnIndex = DIR_NAMESIZE - 1; // Short File name last char position
957+
958+ character = (BYTE)'m'; // random value
959+ if (foCompareTo->name[0] != '*') //If "*" is passed for comparion as 1st char then don't proceed. Go back, file alreay found.
960+ {
961+ for (index = 0;;)
962+ {
963+ if(foundLFN)
964+ {
965+ if((fileFoundString[index] > 0xFF) || (index > fileCompareLfnIndex))
966+ {
967+// fHandle++;
968+ statusB = CE_FILE_NOT_FOUND; // it's not a match
969+ break;
970+ }
971+ }
972+
973+ // Get the source character
974+ if(foundLFN)
975+ character = (BYTE)fileFoundString[index];
976+ else
977+ character = dst[index];
978+
979+ // Get the destination character
980+ test = foCompareTo->name[index];
981+ if (test == '*')
982+ break;
983+ if (test != '?')
984+ {
985+ if(tolower(character) != tolower(test))
986+ {
987+ statusB = CE_FILE_NOT_FOUND; // it's not a match
988+ break;
989+ }
990+ }
991+
992+ index++;
993+ if(index == DIR_NAMESIZE)
994+ {
995+ if(foundLFN && (index <= fileCompareLfnIndex))
996+ {
997+// fHandle++;
998+ statusB = CE_FILE_NOT_FOUND; // it's not a match
999+ }
1000+ break;
1001+ }
1002+ }
1003+ }
1004+
1005+ // Before calling this "FILEfind" fn, "formatfilename" must be called. Hence, extn always starts from position "8".
1006+ if ((foCompareTo->name[8] != '*') && (statusB == CE_GOOD))
1007+ {
1008+ if(foundLFN)
1009+ {
1010+ if(foCompareTo->name[8] == ' ')
1011+ {
1012+ if(fileFoundDotPosition == TRUE)
1013+ {
1014+// fHandle++;
1015+ statusB = CE_FILE_NOT_FOUND; // it's not a match
1016+ }
1017+ break;
1018+ }
1019+ else
1020+ {
1021+ if(fileFoundDotPosition == FALSE)
1022+ {
1023+// fHandle++;
1024+ statusB = CE_FILE_NOT_FOUND; // it's not a match
1025+ break;
1026+ }
1027+ }
1028+ fileCompareLfnIndex = fileCompareLfnIndex + 2;
1029+ }
1030+ else
1031+ fileCompareLfnIndex = DIR_NAMESIZE;
1032+
1033+ for (index = 8;;)
1034+ {
1035+ if(foundLFN)
1036+ {
1037+ if((fileFoundString[fileCompareLfnIndex] > 0xFF) || (fileCompareLfnIndex > fileFoundMaxLfnIndex))
1038+ {
1039+// fHandle++;
1040+ statusB = CE_FILE_NOT_FOUND; // it's not a match
1041+ break;
1042+ }
1043+ }
1044+ // Get the destination character
1045+ test = foCompareTo->name[index];
1046+ // Get the source character
1047+ if(foundLFN)
1048+ character = (BYTE)fileFoundString[fileCompareLfnIndex++];
1049+ else
1050+ character = dst[fileCompareLfnIndex++];
1051+
1052+ if (test == '*')
1053+ break;
1054+ if (test != '?')
1055+ {
1056+ if(tolower(character) != tolower(test))
1057+ {
1058+ statusB = CE_FILE_NOT_FOUND; // it's not a match
1059+ break;
1060+ }
1061+ }
1062+
1063+ index++;
1064+ if(index == DIR_NAMECOMP)
1065+ {
1066+ if(foundLFN && (fileCompareLfnIndex <= fileFoundMaxLfnIndex))
1067+ statusB = CE_FILE_NOT_FOUND; // it's not a match
1068+ break;
1069+ }
1070+ }
1071+ }
1072+ }
1073+ break;
1074+ }
1075+
1076+ // If the comparision of each character in LFN is completed
1077+ if(statusB == CE_GOOD)
1078+ {
1079+ if(foundLFN)
1080+ fHandle++;
1081+
1082+ state = Fill_File_Object(foDest, &fHandle);
1083+
1084+ /* We got something get the attributes */
1085+ attrib = foDest->attributes;
1086+
1087+ attrib &= ATTR_MASK;
1088+
1089+ switch (mode)
1090+ {
1091+ case 0:
1092+ // see if we are a volume id or hidden, ignore
1093+ if(attrib == ATTR_VOLUME)
1094+ statusB = CE_FILE_NOT_FOUND;
1095+ break;
1096+
1097+ case 1:
1098+ // Check for attribute match
1099+ if ((attrib & compareAttrib) != 0)
1100+ statusB = CE_FILE_NOT_FOUND; // Indicate the already filled file data is correct and go back
1101+ if(foundLFN)
1102+ foDest->utf16LFNlength = fileFoundMaxLfnIndex + 1;
1103+ else
1104+ foDest->utf16LFNlength = 0;
1105+ break;
1106+ }
1107+ }
1108+ #else
1109+ {
1110+ /* We got something */
1111+ // get the attributes
1112+ attrib = foDest->attributes;
1113+
1114+ attrib &= ATTR_MASK;
1115+ switch (mode)
1116+ {
1117+ case 0:
1118+ // see if we are a volume id or hidden, ignore
1119+ if(attrib != ATTR_VOLUME)
1120+ {
1121+ statusB = CE_GOOD;
1122+ character = (BYTE)'m'; // random value
1123+
1124+ // search for one. if status = TRUE we found one
1125+ for(index = 0; index < DIR_NAMECOMP; index++)
1126+ {
1127+ // get the source character
1128+ character = foDest->name[index];
1129+ // get the destination character
1130+ test = foCompareTo->name[index];
1131+ if(tolower(character) != tolower(test))
1132+ {
1133+ statusB = CE_FILE_NOT_FOUND; // Nope its not a match
1134+ break;
1135+ }
1136+ }// for loop
1137+ } // not dir nor vol
1138+ break;
1139+
1140+ case 1:
1141+ // Check for attribute match
1142+ if (((attrib & compareAttrib) == 0) && (attrib != ATTR_LONG_NAME))
1143+ {
1144+ statusB = CE_GOOD; // Indicate the already filled file data is correct and go back
1145+ character = (BYTE)'m'; // random value
1146+ if (foCompareTo->name[0] != '*') //If "*" is passed for comparion as 1st char then don't proceed. Go back, file alreay found.
1147+ {
1148+ for (index = 0; index < DIR_NAMESIZE; index++)
1149+ {
1150+ // Get the source character
1151+ character = foDest->name[index];
1152+ // Get the destination character
1153+ test = foCompareTo->name[index];
1154+ if (test == '*')
1155+ break;
1156+ if (test != '?')
1157+ {
1158+ if(tolower(character) != tolower(test))
1159+ {
1160+ statusB = CE_FILE_NOT_FOUND; // it's not a match
1161+ break;
1162+ }
1163+ }
1164+ }
1165+ }
1166+
1167+ // Before calling this "FILEfind" fn, "formatfilename" must be called. Hence, extn always starts from position "8".
1168+ if ((foCompareTo->name[8] != '*') && (statusB == CE_GOOD))
1169+ {
1170+ for (index = 8; index < DIR_NAMECOMP; index++)
1171+ {
1172+ // Get the source character
1173+ character = foDest->name[index];
1174+ // Get the destination character
1175+ test = foCompareTo->name[index];
1176+ if (test == '*')
1177+ break;
1178+ if (test != '?')
1179+ {
1180+ if(tolower(character) != tolower(test))
1181+ {
1182+ statusB = CE_FILE_NOT_FOUND; // it's not a match
1183+ break;
1184+ }
1185+ }
1186+ }
1187+ }
1188+
1189+ } // Attribute match
1190+
1191+ break;
1192+ }
1193+ }
1194+ #endif
1195+ } // not found
1196+ else
1197+ {
1198+ #if defined(SUPPORT_LFN)
1199+ lfnFirstCheck = FALSE;
1200+ #endif
1201+ /*** looking for an empty/re-usable entry ***/
1202+ if ( cmd == LOOK_FOR_EMPTY_ENTRY)
1203+ statusB = CE_GOOD;
1204+ } // found or not
1205+
1206+ // increment it no matter what happened
1207+ fHandle++;
1208+
1209+ }// while
1210+ }
1211+
1212+ return(statusB);
1213+} // FILEFind
1214+
1215+
1216+/**************************************************************************
1217+ Function:
1218+ CETYPE FILEopen (FILEOBJ fo, WORD *fHandle, char type)
1219+ Summary:
1220+ Loads file information from the device
1221+ Conditions:
1222+ This function should not be called by the user.
1223+ Input:
1224+ fo - File to be opened
1225+ fHandle - Location of file
1226+ type -
1227+ - WRITE - Create a new file or replace an existing file
1228+ - READ - Read data from an existing file
1229+ - APPEND - Append data to an existing file
1230+ Return Values:
1231+ CE_GOOD - FILEopen successful
1232+ CE_NOT_INIT - Device is not yet initialized
1233+ CE_FILE_NOT_FOUND - Could not find the file on the device
1234+ CE_BAD_SECTOR_READ - A bad read of a sector occured
1235+ Side Effects:
1236+ None
1237+ Description:
1238+ This function will cache a directory entry in the directory specified
1239+ by the dirclus parameter of hte FSFILE object 'fo.' The offset of the
1240+ entry in the directory is specified by fHandle. Once the directory entry
1241+ has been loaded, the first sector of the file can be loaded using the
1242+ cluster value specified in the directory entry. The type argument will
1243+ specify the mode the files will be opened in. This will allow this
1244+ function to set the correct read/write flags for the file.
1245+ Remarks:
1246+ If the mode the file is being opened in is a plus mode (e.g. READ+) the
1247+ flags will be modified further in the FSfopen function.
1248+ **************************************************************************/
1249+
1250+CETYPE FILEopen (FILEOBJ fo, WORD *fHandle, char type)
1251+{
1252+ DISK *dsk; //Disk structure
1253+ BYTE r; //Result of search for file
1254+ DWORD l; //lba of first sector of first cluster
1255+ CETYPE error = CE_GOOD;
1256+
1257+ dsk = (DISK *)(fo->dsk);
1258+ if (dsk->mount == FALSE)
1259+ {
1260+ error = CE_NOT_INIT;
1261+ }
1262+ else
1263+ {
1264+ // load the sector
1265+ fo->dirccls = fo->dirclus;
1266+ // Cache no matter what if it's the first entry
1267+ if (*fHandle == 0)
1268+ {
1269+ if (Cache_File_Entry(fo, fHandle, TRUE) == NULL)
1270+ {
1271+ error = CE_BADCACHEREAD;
1272+ }
1273+ }
1274+ else
1275+ {
1276+ // If it's not the first, only cache it if it's
1277+ // not divisible by the number of entries per sector
1278+ // If it is, Fill_File_Object will cache it
1279+ if ((*fHandle & 0xf) != 0)
1280+ {
1281+ if (Cache_File_Entry (fo, fHandle, TRUE) == NULL)
1282+ {
1283+ error = CE_BADCACHEREAD;
1284+ }
1285+ }
1286+ }
1287+
1288+ // Fill up the File Object with the information pointed to by fHandle
1289+ r = Fill_File_Object(fo, fHandle);
1290+ if (r != FOUND)
1291+ error = CE_FILE_NOT_FOUND;
1292+ else
1293+ {
1294+ fo->seek = 0; // first byte in file
1295+ fo->ccls = fo->cluster; // first cluster
1296+ fo->sec = 0; // first sector in the cluster
1297+ fo->pos = 0; // first byte in sector/cluster
1298+
1299+ if ( r == NOT_FOUND)
1300+ {
1301+ error = CE_FILE_NOT_FOUND;
1302+ }
1303+ else
1304+ {
1305+ // Determine the lba of the selected sector and load
1306+ l = Cluster2Sector(dsk,fo->ccls);
1307+#ifdef ALLOW_WRITES
1308+ if (gNeedDataWrite)
1309+ if (flushData())
1310+ return CE_WRITE_ERROR;
1311+#endif
1312+ gBufferOwner = fo;
1313+ if (gLastDataSectorRead != l)
1314+ {
1315+ gBufferZeroed = FALSE;
1316+ if ( !MDD_SectorRead( l, dsk->buffer))
1317+ error = CE_BAD_SECTOR_READ;
1318+ gLastDataSectorRead = l;
1319+ }
1320+ } // -- found
1321+
1322+ fo->flags.FileWriteEOF = FALSE;
1323+ // Set flag for operation type
1324+#ifdef ALLOW_WRITES
1325+ if ((type == 'w') || (type == 'a'))
1326+ {
1327+ fo->flags.write = 1; //write or append
1328+ fo->flags.read = 0;
1329+ }
1330+ else
1331+ {
1332+#endif
1333+ fo->flags.write = 0; //read
1334+ fo->flags.read = 1;
1335+#ifdef ALLOW_WRITES
1336+ } // -- flags
1337+#endif
1338+ } // -- r = Found
1339+ } // -- Mounted
1340+ return (error);
1341+} // -- FILEopen
1342+
1343+
1344+/*************************************************************************
1345+ Function:
1346+ BYTE FILEget_next_cluster(FILEOBJ fo, WORD n)
1347+ Summary:
1348+ Step through a chain of clusters
1349+ Conditions:
1350+ This function should not be called by the user.
1351+ Input:
1352+ fo - The file to get the next cluster of
1353+ n - Number of links in the FAT cluster chain to jump through
1354+ Return Values:
1355+ CE_GOOD - Operation successful
1356+ CE_BAD_SECTOR_READ - A bad read occured of a sector
1357+ CE_INVALID_CLUSTER - Invalid cluster value \> maxcls
1358+ CE_FAT_EOF - Fat attempt to read beyond EOF
1359+ Side Effects:
1360+ None
1361+ Description:
1362+ This function will load 'n' proximate clusters for a file from
1363+ the FAT on the device. It will stop checking for clusters if the
1364+ ReadFAT function returns an error, if it reaches the last cluster in
1365+ a file, or if the device tries to read beyond the last cluster used
1366+ by the device.
1367+ Remarks:
1368+ None
1369+ *************************************************************************/
1370+
1371+BYTE FILEget_next_cluster(FILEOBJ fo, DWORD n)
1372+{
1373+ DWORD c, c2, ClusterFailValue, LastClustervalue;
1374+ BYTE error = CE_GOOD;
1375+ DISK * disk;
1376+
1377+ disk = fo->dsk;
1378+
1379+ /* Settings based on FAT type */
1380+ switch (disk->type)
1381+ {
1382+#ifdef SUPPORT_FAT32 // If FAT32 supported.
1383+ case FAT32:
1384+ LastClustervalue = LAST_CLUSTER_FAT32;
1385+ ClusterFailValue = CLUSTER_FAIL_FAT32;
1386+ break;
1387+#endif
1388+ case FAT12:
1389+ LastClustervalue = LAST_CLUSTER_FAT12;
1390+ ClusterFailValue = CLUSTER_FAIL_FAT16;
1391+ break;
1392+ case FAT16:
1393+ default:
1394+ LastClustervalue = LAST_CLUSTER_FAT16;
1395+ ClusterFailValue = CLUSTER_FAIL_FAT16;
1396+ break;
1397+ }
1398+
1399+ // loop n times
1400+ do
1401+ {
1402+ // get the next cluster link from FAT
1403+ c2 = fo->ccls;
1404+ if ( (c = ReadFAT( disk, c2)) == ClusterFailValue)
1405+ error = CE_BAD_SECTOR_READ;
1406+ else
1407+ {
1408+ // check if cluster value is valid
1409+ if ( c >= disk->maxcls)
1410+ {
1411+ error = CE_INVALID_CLUSTER;
1412+ }
1413+
1414+ // compare against max value of a cluster in FAT
1415+ // return if eof
1416+ if ( c >= LastClustervalue) // check against eof
1417+ {
1418+ error = CE_FAT_EOF;
1419+ }
1420+ }
1421+
1422+ // update the FSFILE structure
1423+ fo->ccls = c;
1424+
1425+ } while ((--n > 0) && (error == CE_GOOD));// loop end
1426+
1427+ return(error);
1428+} // get next cluster
1429+
1430+
1431+/**************************************************************************
1432+ Function:
1433+ BYTE DISKmount ( DISK *dsk)
1434+ Summary:
1435+ Initialies the device and loads MBR and boot sector information
1436+ Conditions:
1437+ This function should not be called by the user.
1438+ Input:
1439+ dsk - The disk structure to be initialized.
1440+ Return Values:
1441+ CE_GOOD - Disk mounted
1442+ CE_INIT_ERROR - Initialization error has occured
1443+ CE_UNSUPPORTED_SECTOR_SIZE - Media sector size bigger than
1444+ MEDIA_SECTOR_SIZE as defined in FSconfig.h.
1445+ Side Effects:
1446+ None
1447+ Description:
1448+ This function will use the function pointed to by the MDD_MediaInitialize
1449+ function pointer to initialize the device (if any initialization is
1450+ required). It then attempts to load the master boot record with the
1451+ LoadMBR function and the boot sector with the LoadBootSector function.
1452+ These two functions will be used to initialize a global DISK structure
1453+ that will be used when accessing file information in the future.
1454+ Remarks:
1455+ None
1456+ **************************************************************************/
1457+
1458+BYTE DISKmount( DISK *dsk)
1459+{
1460+ BYTE error = CE_GOOD;
1461+ MEDIA_INFORMATION *mediaInformation;
1462+
1463+ dsk->mount = FALSE; // default invalid
1464+ dsk->buffer = gDataBuffer; // assign buffer
1465+
1466+ // Initialize the device
1467+ mediaInformation = MDD_MediaInitialize();
1468+ if (mediaInformation->errorCode != MEDIA_NO_ERROR)
1469+ {
1470+ error = CE_INIT_ERROR;
1471+ FSerrno = CE_INIT_ERROR;
1472+ }
1473+ else
1474+ {
1475+ // If the media initialization routine determined the sector size,
1476+ // check it and make sure we can support it.
1477+ if (mediaInformation->validityFlags.bits.sectorSize)
1478+ {
1479+ dsk->sectorSize = mediaInformation->sectorSize;
1480+ if (mediaInformation->sectorSize > MEDIA_SECTOR_SIZE)
1481+ {
1482+ error = CE_UNSUPPORTED_SECTOR_SIZE;
1483+ FSerrno = CE_UNSUPPORTED_SECTOR_SIZE;
1484+ return error;
1485+ }
1486+ }
1487+
1488+ // Load the Master Boot Record (partition)
1489+ if((error = LoadMBR(dsk)) == CE_GOOD)
1490+ {
1491+ // Now the boot sector
1492+ if((error = LoadBootSector(dsk)) == CE_GOOD)
1493+ dsk->mount = TRUE; // Mark that the DISK mounted successfully
1494+ }
1495+ } // -- Load file parameters
1496+
1497+ return(error);
1498+} // -- mount
1499+
1500+
1501+
1502+/********************************************************************
1503+ Function:
1504+ CETYPE LoadMBR ( DISK *dsk)
1505+ Summary:
1506+ Loads the MBR and extracts necessary information
1507+ Conditions:
1508+ This function should not be called by the user.
1509+ Input:
1510+ dsk - The disk containing the master boot record to be loaded
1511+ Return Values:
1512+ CE_GOOD - MBR loaded successfully
1513+ CE_BAD_SECTOR_READ - A bad read occured of a sector
1514+ CE_BAD_PARTITION - The boot record is bad
1515+ Side Effects:
1516+ None
1517+ Description:
1518+ The LoadMBR function will use the function pointed to by the
1519+ MDD_SectorRead function pointer to read the 0 sector from the
1520+ device. If a valid boot signature is obtained, this function
1521+ will compare fields in that cached sector to the values that
1522+ would be present if that sector was a boot sector. If all of
1523+ those values match, it will be assumed that the device does not
1524+ have a master boot record and the 0 sector is actually the boot
1525+ sector. Otherwise, data about the partition and the actual
1526+ location of the boot sector will be loaded from the MBR into
1527+ the DISK structure pointed to by 'dsk.'
1528+ Remarks:
1529+ None
1530+ ********************************************************************/
1531+
1532+BYTE LoadMBR(DISK *dsk)
1533+{
1534+ PT_MBR Partition;
1535+ BYTE error = CE_GOOD;
1536+ BYTE type;
1537+ BootSec BSec;
1538+
1539+ // Get the partition table from the MBR
1540+ if ( MDD_SectorRead( FO_MBR, dsk->buffer) != TRUE)
1541+ {
1542+ error = CE_BAD_SECTOR_READ;
1543+ FSerrno = CE_BAD_SECTOR_READ;
1544+ }
1545+ else
1546+ {
1547+ // Check if the card has no MBR
1548+ BSec = (BootSec) dsk->buffer;
1549+
1550+ if((BSec->Signature0 == FAT_GOOD_SIGN_0) && (BSec->Signature1 == FAT_GOOD_SIGN_1))
1551+ {
1552+ // Technically, the OEM name is not for indication
1553+ // The alternative is to read the CIS from attribute
1554+ // memory. See the PCMCIA metaformat for more details
1555+#if defined (__C30__) || defined (__PIC32MX__)
1556+ if ((ReadByte( dsk->buffer, BSI_FSTYPE ) == 'F') && \
1557+ (ReadByte( dsk->buffer, BSI_FSTYPE + 1 ) == 'A') && \
1558+ (ReadByte( dsk->buffer, BSI_FSTYPE + 2 ) == 'T') && \
1559+ (ReadByte( dsk->buffer, BSI_FSTYPE + 3 ) == '1') && \
1560+ (ReadByte( dsk->buffer, BSI_BOOTSIG) == 0x29))
1561+#else
1562+ if ((BSec->FAT.FAT_16.BootSec_FSType[0] == 'F') && \
1563+ (BSec->FAT.FAT_16.BootSec_FSType[1] == 'A') && \
1564+ (BSec->FAT.FAT_16.BootSec_FSType[2] == 'T') && \
1565+ (BSec->FAT.FAT_16.BootSec_FSType[3] == '1') && \
1566+ (BSec->FAT.FAT_16.BootSec_BootSig == 0x29))
1567+#endif
1568+ {
1569+ dsk->firsts = 0;
1570+ dsk->type = FAT16;
1571+ return CE_GOOD;
1572+ }
1573+ else
1574+ {
1575+#if defined (__C30__) || defined (__PIC32MX__)
1576+ if ((ReadByte( dsk->buffer, BSI_FAT32_FSTYPE ) == 'F') && \
1577+ (ReadByte( dsk->buffer, BSI_FAT32_FSTYPE + 1 ) == 'A') && \
1578+ (ReadByte( dsk->buffer, BSI_FAT32_FSTYPE + 2 ) == 'T') && \
1579+ (ReadByte( dsk->buffer, BSI_FAT32_FSTYPE + 3 ) == '3') && \
1580+ (ReadByte( dsk->buffer, BSI_FAT32_BOOTSIG) == 0x29))
1581+#else
1582+ if ((BSec->FAT.FAT_32.BootSec_FilSysType[0] == 'F') && \
1583+ (BSec->FAT.FAT_32.BootSec_FilSysType[1] == 'A') && \
1584+ (BSec->FAT.FAT_32.BootSec_FilSysType[2] == 'T') && \
1585+ (BSec->FAT.FAT_32.BootSec_FilSysType[3] == '3') && \
1586+ (BSec->FAT.FAT_32.BootSec_BootSig == 0x29))
1587+#endif
1588+ {
1589+ dsk->firsts = 0;
1590+ dsk->type = FAT32;
1591+ return CE_GOOD;
1592+ }
1593+ }
1594+ }
1595+ // assign it the partition table strucutre
1596+ Partition = (PT_MBR)dsk->buffer;
1597+
1598+ // Ensure its good
1599+ if((Partition->Signature0 != FAT_GOOD_SIGN_0) || (Partition->Signature1 != FAT_GOOD_SIGN_1))
1600+ {
1601+ FSerrno = CE_BAD_PARTITION;
1602+ error = CE_BAD_PARTITION;
1603+ }
1604+ else
1605+ {
1606+ /* Valid Master Boot Record Loaded */
1607+
1608+ // Get the 32 bit offset to the first partition
1609+ dsk->firsts = Partition->Partition0.PTE_FrstSect;
1610+
1611+ // check if the partition type is acceptable
1612+ type = Partition->Partition0.PTE_FSDesc;
1613+
1614+ switch (type)
1615+ {
1616+ case 0x01:
1617+ dsk->type = FAT12;
1618+ break;
1619+
1620+ case 0x04:
1621+ case 0x06:
1622+ case 0x0E:
1623+ dsk->type = FAT16;
1624+ break;
1625+
1626+ case 0x0B:
1627+ case 0x0C:
1628+
1629+#ifdef SUPPORT_FAT32 // If FAT32 supported.
1630+ dsk->type = FAT32; // FAT32 is supported too
1631+#else
1632+ FSerrno = CE_CARDFAT32;
1633+ error = CE_CARDFAT32;
1634+#endif
1635+ break;
1636+
1637+ default:
1638+ FSerrno = CE_UNSUPPORTED_FS;
1639+ error = CE_UNSUPPORTED_FS;
1640+ } // switch
1641+ }
1642+ }
1643+
1644+ return(error);
1645+}// -- LoadMBR
1646+
1647+
1648+/**************************************************************************
1649+ Function:
1650+ BYTE LoadBootSector (DISK *dsk)
1651+ Summary:
1652+ Load the boot sector and extract the necessary information
1653+ Conditions:
1654+ This function should not be called by the user.
1655+ Input:
1656+ dsk - The disk containing the boot sector
1657+ Return Values:
1658+ CE_GOOD - Boot sector loaded
1659+ CE_BAD_SECTOR_READ - A bad read occured of a sector
1660+ CE_NOT_FORMATTED - The disk is of an unsupported format
1661+ CE_CARDFAT32 - FAT 32 device not supported
1662+ CE_UNSUPPORTED_SECTOR_SIZE - The sector size is not supported
1663+ Side Effects:
1664+ None
1665+ Description:
1666+ LoadBootSector will use the function pointed to by the MDD_SectorWrite
1667+ function pointer to load the boot sector, whose location was obtained
1668+ by a previous call of LoadMBR. If the boot sector is loaded successfully,
1669+ partition information will be calcualted from it and copied into the DISK
1670+ structure pointed to by 'dsk.'
1671+ Remarks:
1672+ None
1673+ **************************************************************************/
1674+
1675+
1676+BYTE LoadBootSector(DISK *dsk)
1677+{
1678+ DWORD RootDirSectors;
1679+ DWORD TotSec,DataSec;
1680+ BYTE error = CE_GOOD;
1681+ BootSec BSec;
1682+ WORD BytesPerSec;
1683+ WORD ReservedSectorCount;
1684+
1685+ #if defined(SUPPORT_FAT32)
1686+ BOOL TriedSpecifiedBackupBootSec = FALSE;
1687+ BOOL TriedBackupBootSecAtAddress6 = FALSE;
1688+ #endif
1689+ // Get the Boot sector
1690+ if ( MDD_SectorRead( dsk->firsts, dsk->buffer) != TRUE)
1691+ {
1692+ error = CE_BAD_SECTOR_READ;
1693+ }
1694+ else
1695+ {
1696+ BSec = (BootSec)dsk->buffer;
1697+
1698+ do //test each possible boot sector (FAT32 can have backup boot sectors)
1699+ {
1700+
1701+ //Verify the Boot Sector has a valid signature
1702+ if( (BSec->Signature0 != FAT_GOOD_SIGN_0)
1703+ || (BSec->Signature1 != FAT_GOOD_SIGN_1)
1704+ )
1705+ {
1706+ error = CE_NOT_FORMATTED;
1707+ }
1708+ else
1709+ {
1710+
1711+ do //loop just to allow a break to jump out of this section of code
1712+ {
1713+ #ifdef __18CXX
1714+ // Load count of sectors per cluster
1715+ dsk->SecPerClus = BSec->FAT.FAT_16.BootSec_SPC;
1716+ // Load the sector number of the first FAT sector
1717+ dsk->fat = dsk->firsts + BSec->FAT.FAT_16.BootSec_ResrvSec;
1718+ // Load the count of FAT tables
1719+ dsk->fatcopy = BSec->FAT.FAT_16.BootSec_FATCount;
1720+ // Load the size of the FATs
1721+ dsk->fatsize = BSec->FAT.FAT_16.BootSec_SPF;
1722+ if(dsk->fatsize == 0)
1723+ dsk->fatsize = BSec->FAT.FAT_32.BootSec_FATSz32;
1724+ // Calculate the location of the root sector (for FAT12/16)
1725+ dsk->root = dsk->fat + (DWORD)(dsk->fatcopy * (DWORD)dsk->fatsize);
1726+ // Determine the max size of the root (will be 0 for FAT32)
1727+ dsk->maxroot = BSec->FAT.FAT_16.BootSec_RootDirEnts;
1728+
1729+ // Determine the total number of sectors in the partition
1730+ if(BSec->FAT.FAT_16.BootSec_TotSec16 != 0)
1731+ {
1732+ TotSec = BSec->FAT.FAT_16.BootSec_TotSec16;
1733+ }
1734+ else
1735+ {
1736+ TotSec = BSec->FAT.FAT_16.BootSec_TotSec32;
1737+ }
1738+
1739+ // Calculate the number of bytes in each sector
1740+ BytesPerSec = BSec->FAT.FAT_16.BootSec_BPS;
1741+ if( (BytesPe

Part of diff was cut off due to size limit. Use your local client to view the full diff.