SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 1 ************ OBJECT LISTING ************ FILE NAME: C:\Documents and Settings\Papa_2\Bureau\FruitNinja\FruitNinja\MonochromeLib.c SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT Monochrome 1 /*************************************************************/ Monochrome 2 /** MonochromeLib - monochrome graphic library for fx-9860G **/ Monochrome 3 /** MonochromeLib is free software **/ Monochrome 4 /** **/ Monochrome 5 /** @author Pierre "PierrotLL" Le Gall **/ Monochrome 6 /** @contact legallpierre89@gmail.com **/ Monochrome 7 /** **/ Monochrome 8 /** @file MonochromeLib.c **/ Monochrome 9 /** Code file of MonochromeLib **/ Monochrome 10 /** **/ Monochrome 11 /** @date 11-22-2011 **/ Monochrome 12 /*************************************************************/ Monochrome 13 Monochrome 14 #include "MonochromeLib.h" Monochrome 15 #include Monochrome 16 Monochrome 17 Monochrome 18 /******************************/ Monochrome 19 /** Dependencies management **/ Monochrome 20 /******************************/ Monochrome 21 Monochrome 22 #ifdef ML_ALL Monochrome 23 #define ML_CLEAR_VRAM Monochrome 24 #define ML_CLEAR_SCREEN Monochrome 25 #define ML_DISPLAY_VRAM Monochrome 26 #define ML_SET_CONTRAST Monochrome 27 #define ML_GET_CONTRAST Monochrome 28 #define ML_PIXEL Monochrome 29 #define ML_POINT Monochrome 30 #define ML_PIXEL_TEST Monochrome 31 #define ML_LINE Monochrome 32 #define ML_HORIZONTAL_LINE Monochrome 33 #define ML_VERTICAL_LINE Monochrome 34 #define ML_RECTANGLE Monochrome 35 #define ML_POLYGON Monochrome 36 #define ML_FILLED_POLYGON Monochrome 37 #define ML_CIRCLE Monochrome 38 #define ML_FILLED_CIRCLE Monochrome 39 #define ML_ELLIPSE Monochrome 40 #define ML_ELLIPSE_IN_RECT Monochrome 41 #define ML_FILLED_ELLIPSE Monochrome 42 #define ML_FILLED_ELLIPSE_IN_RECT Monochrome 43 #define ML_HORIZONTAL_SCROLL Monochrome 44 #define ML_VERTICAL_SCROLL Monochrome 45 #define ML_BMP_OR Monochrome 46 #define ML_BMP_AND Monochrome 47 #define ML_BMP_XOR Monochrome 48 #define ML_BMP_OR_CL Monochrome 49 #define ML_BMP_AND_CL Monochrome 50 #define ML_BMP_XOR_CL Monochrome 51 #define ML_BMP_8_OR Monochrome 52 #define ML_BMP_8_AND Monochrome 53 #define ML_BMP_8_XOR Monochrome 54 #define ML_BMP_8_OR_CL SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 2 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT Monochrome 55 #define ML_BMP_8_AND_CL Monochrome 56 #define ML_BMP_8_XOR_CL Monochrome 57 #define ML_BMP_16_OR Monochrome 58 #define ML_BMP_16_AND Monochrome 59 #define ML_BMP_16_XOR Monochrome 60 #define ML_BMP_16_OR_CL Monochrome 61 #define ML_BMP_16_AND_CL Monochrome 62 #define ML_BMP_16_XOR_CL Monochrome 63 #endif Monochrome 64 Monochrome 65 #ifdef ML_POLYGON Monochrome 66 #define ML_LINE Monochrome 67 #endif Monochrome 68 Monochrome 69 #ifdef ML_LINE Monochrome 70 #define ML_PIXEL Monochrome 71 #endif Monochrome 72 Monochrome 73 #ifdef ML_POINT Monochrome 74 #define ML_PIXEL Monochrome 75 #define ML_RECTANGLE Monochrome 76 #endif Monochrome 77 Monochrome 78 #ifdef ML_RECTANGLE Monochrome 79 #define ML_HORIZONTAL_LINE Monochrome 80 #endif Monochrome 81 Monochrome 82 #ifdef ML_FILLED_POLYGON Monochrome 83 #define ML_HORIZONTAL_LINE Monochrome 84 #endif Monochrome 85 Monochrome 86 #ifdef ML_CIRCLE Monochrome 87 #define ML_PIXEL Monochrome 88 #endif Monochrome 89 Monochrome 90 #ifdef ML_FILLED_CIRCLE Monochrome 91 #define ML_HORIZONTAL_LINE Monochrome 92 #endif Monochrome 93 Monochrome 94 #ifdef ML_ELLIPSE_IN_RECT Monochrome 95 #define ML_ELLIPSE Monochrome 96 #endif Monochrome 97 Monochrome 98 #ifdef ML_ELLIPSE Monochrome 99 #define ML_PIXEL Monochrome 100 #endif Monochrome 101 Monochrome 102 #ifdef ML_FILLED_ELLIPSE_IN_RECT Monochrome 103 #define ML_FILLED_ELLIPSE Monochrome 104 #endif Monochrome 105 Monochrome 106 #ifdef ML_FILLED_ELLIPSE Monochrome 107 #define ML_HORIZONTAL_LINE Monochrome 108 #endif Monochrome 109 Monochrome 110 Monochrome 111 /***************/ SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 3 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT Monochrome 112 /** Functions **/ Monochrome 113 /***************/ Monochrome 114 Monochrome 115 #define sgn(x) (x<0?-1:1) Monochrome 116 #define rnd(x) ((int)(x+0.5)) Monochrome 117 Monochrome 118 //Thanks to Simon Lothar for this function Monochrome 119 typedef char*(*sc_cpv)(void); Monochrome 120 const unsigned int sc0135[] = { 0xD201D002, 0x422B0009, 0x80010070, 0x0135 }; Monochrome 121 #define ML_vram_adress (*(sc_cpv)sc0135) Monochrome 122 Monochrome 123 #ifdef ML_CLEAR_VRAM Monochrome 124 void ML_clear_vram() P 00000000 _ML_clear_vram: ; function: ML_clear_vram ; frame size=8 00000000 2FD6 MOV.L R13,@-R15 00000002 4F22 STS.L PR,@-R15 Monochrome 125 { Monochrome 126 int i, end, *pointer_long, vram; Monochrome 127 char *pointer_byte; Monochrome 128 vram = (int)ML_vram_adress(); 00000004 D344 MOV.L L769+6,R3 ; _sc0135 00000006 430B JSR @R3 00000008 0009 NOP 0000000A 6703 MOV R0,R7 Monochrome 129 end = 4-vram&3; 0000000C E004 MOV #4,R0 0000000E 3078 SUB R7,R0 00000010 E603 MOV #3,R6 00000012 2609 AND R0,R6 Monochrome 130 pointer_byte = (char*)vram; 00000014 6D73 MOV R7,R13 Monochrome 131 for(i=0 ; i>3)] |= 128>>(x&7); 000000FC 6340 MOV.B @R4,R3 Monochrome 202 break; 000000FE A01A BRA L768 00000100 235B OR R5,R3 00000102 L545: ; case label Monochrome 203 case ML_WHITE: Monochrome 204 vram[(y<<4)+(x>>3)] &= ~(128>>(x&7)); 00000102 6557 NOT R5,R5 00000104 6340 MOV.B @R4,R3 Monochrome 205 break; 00000106 A016 BRA L768 00000108 2359 AND R5,R3 0000010A L546: ; case label Monochrome 206 case ML_XOR: Monochrome 207 vram[(y<<4)+(x>>3)] ^= 128>>(x&7); 0000010A 6140 MOV.B @R4,R1 0000010C 215A XOR R5,R1 Monochrome 208 break; 0000010E A017 BRA L563 00000110 2410 MOV.B R1,@R4 00000112 L769: 00000112 03FC .DATA.W H'03FC 00000114 0080 .DATA.W H'0080 00000116 0000 .DATA.W 0 00000118 <00000000> .DATA.L _sc0135 0000011C B4000000 .DATA.L H'B4000000 00000120 B4010000 .DATA.L H'B4010000 00000124 L547: ; case label Monochrome 209 case ML_CHECKER: Monochrome 210 if(y&1^x&1) vram[(y<<4)+(x>>3)] &= ~(128>>(x&7)); 00000124 E601 MOV #1,R6 00000126 2D69 AND R6,R13 00000128 2E69 AND R6,R14 0000012A 2DEA XOR R14,R13 0000012C 2DD8 TST R13,R13 0000012E 8904 BT L565 00000130 6340 MOV.B @R4,R3 00000132 6557 NOT R5,R5 00000134 2359 AND R5,R3 00000136 L768: 00000136 A003 BRA L563 00000138 2430 MOV.B R3,@R4 0000013A L565: Monochrome 211 else vram[(y<<4)+(x>>3)] |= 128>>(x&7); 0000013A 6140 MOV.B @R4,R1 0000013C 215B OR R5,R1 0000013E 2410 MOV.B R1,@R4 Monochrome 212 break; Monochrome 213 } Monochrome 214 } 00000140 L563: 00000140 7F04 ADD #4,R15 00000142 4F26 LDS.L @R15+,PR 00000144 6DF6 MOV.L @R15+,R13 00000146 000B RTS SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 8 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00000148 6EF6 MOV.L @R15+,R14 Monochrome 215 #endif Monochrome 216 Monochrome 217 #ifdef ML_POINT Monochrome 218 void ML_point(int x, int y, int width, ML_Color color) Monochrome 219 { Monochrome 220 if(width < 1) return; Monochrome 221 if(width == 1) ML_pixel(x, y, color); Monochrome 222 else Monochrome 223 { Monochrome 224 int padding, pair; Monochrome 225 padding = width>>1; Monochrome 226 pair = !(width&1); Monochrome 227 ML_rectangle(x-padding+pair, y-padding+pair, x+padding, y+padding, 0, 0, color); Monochrome 228 } Monochrome 229 } Monochrome 230 #endif Monochrome 231 Monochrome 232 #ifdef ML_PIXEL_TEST Monochrome 233 ML_Color ML_pixel_test(int x, int y) Monochrome 234 { Monochrome 235 char *vram, byte; Monochrome 236 if(x&~127 || y&~63) return ML_TRANSPARENT; Monochrome 237 vram = ML_vram_adress(); Monochrome 238 byte = 1<<(7-(x&7)); Monochrome 239 return (vram[(y<<4)+(x>>3)] & byte ? ML_BLACK : ML_WHITE); Monochrome 240 Monochrome 241 } Monochrome 242 #endif Monochrome 243 Monochrome 244 #ifdef ML_LINE Monochrome 245 void ML_line(int x1, int y1, int x2, int y2, ML_Color color) 0000014A _ML_line: ; function: ML_line ; frame size=40 0000014A 2FE6 MOV.L R14,@-R15 0000014C 2FD6 MOV.L R13,@-R15 Monochrome 246 { Monochrome 247 int i, x, y, dx, dy, sx, sy, cumul; Monochrome 248 x = x1; Monochrome 249 y = y1; Monochrome 250 dx = x2 - x1; 0000014E 6E63 MOV R6,R14 00000150 2FC6 MOV.L R12,@-R15 00000152 3E48 SUB R4,R14 00000154 2FB6 MOV.L R11,@-R15 00000156 6C53 MOV R5,R12 00000158 2FA6 MOV.L R10,@-R15 0000015A 6B43 MOV R4,R11 0000015C 2F96 MOV.L R9,@-R15 Monochrome 251 dy = y2 - y1; 0000015E 6A73 MOV R7,R10 00000160 2F86 MOV.L R8,@-R15 Monochrome 252 sx = sgn(dx); 00000162 4E11 CMP/PZ R14 00000164 4F22 STS.L PR,@-R15 00000166 7FF8 ADD #-8,R15 00000168 59FA MOV.L @(40,R15),R9 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 9 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 0000016A 8D02 BT/S L567 0000016C 3A58 SUB R5,R10 0000016E A001 BRA L568 00000170 E8FF MOV #-1,R8 00000172 L567: 00000172 E801 MOV #1,R8 00000174 L568: Monochrome 253 sy = sgn(dy); 00000174 4A11 CMP/PZ R10 00000176 8901 BT L569 00000178 A001 BRA L570 0000017A E2FF MOV #-1,R2 0000017C L569: 0000017C E201 MOV #1,R2 0000017E L570: 0000017E 1F21 MOV.L R2,@(4,R15) Monochrome 254 dx = abs(dx); 00000180 D326 MOV.L L770+2,R3 ; _abs 00000182 430B JSR @R3 00000184 64E3 MOV R14,R4 00000186 6D03 MOV R0,R13 Monochrome 255 dy = abs(dy); 00000188 D224 MOV.L L770+2,R2 ; _abs 0000018A 420B JSR @R2 0000018C 64A3 MOV R10,R4 0000018E 6E03 MOV R0,R14 Monochrome 256 ML_pixel(x, y, color); 00000190 6693 MOV R9,R6 00000192 65C3 MOV R12,R5 00000194 BF89 BSR _ML_pixel 00000196 64B3 MOV R11,R4 Monochrome 257 if(dx > dy) 00000198 3DE7 CMP/GT R14,R13 0000019A 8F1B BF/S L571 0000019C E401 MOV #1,R4 Monochrome 258 { Monochrome 259 cumul = dx / 2; 0000019E 6AD3 MOV R13,R10 000001A0 E300 MOV #0,R3 000001A2 33A7 CMP/GT R10,R3 000001A4 3A3E ADDC R3,R10 000001A6 4A21 SHAR R10 Monochrome 260 for(i=1 ; i dx) 000001B2 3AD7 CMP/GT R13,R10 000001B4 8F03 BF/S L574 000001B6 3B8C ADD R8,R11 Monochrome 265 { SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 10 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT Monochrome 266 cumul -= dx; Monochrome 267 y += sy; 000001B8 52F1 MOV.L @(4,R15),R2 000001BA 3AD8 SUB R13,R10 000001BC 3C2C ADD R2,R12 000001BE L574: Monochrome 268 } Monochrome 269 ML_pixel(x, y, color); 000001BE 6693 MOV R9,R6 000001C0 65C3 MOV R12,R5 000001C2 BF72 BSR _ML_pixel 000001C4 64B3 MOV R11,R4 000001C6 62F2 MOV.L @R15,R2 000001C8 7201 ADD #1,R2 000001CA 32D3 CMP/GE R13,R2 000001CC 8FF0 BF/S L573 000001CE 2F22 MOV.L R2,@R15 000001D0 A019 BRA L575 000001D2 0009 NOP 000001D4 L571: Monochrome 270 } Monochrome 271 } Monochrome 272 else Monochrome 273 { Monochrome 274 cumul = dy / 2; 000001D4 6AE3 MOV R14,R10 000001D6 E300 MOV #0,R3 000001D8 33A7 CMP/GT R10,R3 000001DA 3A3E ADDC R3,R10 000001DC 4A21 SHAR R10 Monochrome 275 for(i=1 ; i dy) 000001EA 3AE7 CMP/GT R14,R10 000001EC 8F02 BF/S L578 000001EE 3C1C ADD R1,R12 Monochrome 280 { Monochrome 281 cumul -= dy; 000001F0 3AE8 SUB R14,R10 Monochrome 282 x += sx; 000001F2 3B8C ADD R8,R11 000001F4 L578: Monochrome 283 } Monochrome 284 ML_pixel(x, y, color); 000001F4 6693 MOV R9,R6 000001F6 65C3 MOV R12,R5 000001F8 BF57 BSR _ML_pixel 000001FA 64B3 MOV R11,R4 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 11 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 000001FC 63F2 MOV.L @R15,R3 000001FE 7301 ADD #1,R3 00000200 33E3 CMP/GE R14,R3 00000202 8FF0 BF/S L577 00000204 2F32 MOV.L R3,@R15 00000206 L575: Monochrome 285 } Monochrome 286 } Monochrome 287 } 00000206 7F08 ADD #8,R15 00000208 4F26 LDS.L @R15+,PR 0000020A 68F6 MOV.L @R15+,R8 0000020C 69F6 MOV.L @R15+,R9 0000020E 6AF6 MOV.L @R15+,R10 00000210 6BF6 MOV.L @R15+,R11 00000212 6CF6 MOV.L @R15+,R12 00000214 6DF6 MOV.L @R15+,R13 00000216 000B RTS 00000218 6EF6 MOV.L @R15+,R14 0000021A L770: 0000021A 0000 .DATA.W 0 0000021C <00000000> .DATA.L _abs Monochrome 288 #endif Monochrome 289 Monochrome 290 #ifdef ML_HORIZONTAL_LINE Monochrome 291 void ML_horizontal_line(int y, int x1, int x2, ML_Color color) 00000220 _ML_horizontal_line: ; function: ML_horizontal_line ; frame size=44 00000220 2FE6 MOV.L R14,@-R15 00000222 2FD6 MOV.L R13,@-R15 00000224 2FC6 MOV.L R12,@-R15 00000226 6C53 MOV R5,R12 Monochrome 292 { Monochrome 293 int i; Monochrome 294 char checker; Monochrome 295 char* vram = ML_vram_adress(); 00000228 D332 MOV.L L771+2,R3 ; _sc0135 0000022A 2FB6 MOV.L R11,@-R15 0000022C 2FA6 MOV.L R10,@-R15 0000022E 6B63 MOV R6,R11 00000230 2F96 MOV.L R9,@-R15 00000232 2F86 MOV.L R8,@-R15 00000234 4F22 STS.L PR,@-R15 00000236 7FF4 ADD #-12,R15 00000238 2F42 MOV.L R4,@R15 0000023A 430B JSR @R3 0000023C 1F72 MOV.L R7,@(8,R15) 0000023E 6603 MOV R0,R6 Monochrome 296 if(y&~63 || (x1<0 && x2<0) || (x1>127 && x2>127)) return; 00000240 62F2 MOV.L @R15,R2 00000242 E3C0 MOV #-64,R3 00000244 2238 TST R3,R2 00000246 8901 BT L772 00000248 A136 BRA L582 0000024A 0009 NOP 0000024C L772: 0000024C 4C11 CMP/PZ R12 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 12 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 0000024E 8903 BT L581 00000250 4B11 CMP/PZ R11 00000252 8901 BT L773 00000254 A130 BRA L582 00000256 0009 NOP 00000258 L773: 00000258 L581: 00000258 E37F MOV #127,R3 0000025A 3C37 CMP/GT R3,R12 0000025C 8B03 BF L579 0000025E 3B37 CMP/GT R3,R11 00000260 8B01 BF L774 00000262 A129 BRA L582 00000264 0009 NOP 00000266 L774: 00000266 L579: Monochrome 297 if(x1 > x2) 00000266 3CB7 CMP/GT R11,R12 00000268 8F03 BF/S L583 Monochrome 298 { Monochrome 299 i = x1; Monochrome 300 x1 = x2; Monochrome 301 x2 = i; Monochrome 302 } Monochrome 303 if(x1 < 0) x1 = 0; 0000026A E800 MOV #0,R8 0000026C 64C3 MOV R12,R4 0000026E 6CB3 MOV R11,R12 00000270 6B43 MOV R4,R11 00000272 L583: 00000272 4C11 CMP/PZ R12 00000274 8D01 BT/S L584 Monochrome 304 if(x2 > 127) x2 = 127; 00000276 E47F MOV #127,R4 00000278 6C83 MOV R8,R12 0000027A L584: 0000027A 3B47 CMP/GT R4,R11 0000027C 8F01 BF/S L585 0000027E E707 MOV #7,R7 00000280 6B43 MOV R4,R11 00000282 L585: 00000282 65C3 MOV R12,R5 00000284 6DF2 MOV.L @R15,R13 00000286 69C3 MOV R12,R9 00000288 9433 MOV.W L771,R4 ; H'00FF 0000028A 6EB3 MOV R11,R14 0000028C 4521 SHAR R5 0000028E 4521 SHAR R5 00000290 4521 SHAR R5 00000292 4E21 SHAR R14 00000294 4E21 SHAR R14 00000296 4E21 SHAR R14 00000298 4D08 SHLL2 R13 0000029A 4D08 SHLL2 R13 0000029C 2979 AND R7,R9 0000029E 6AB3 MOV R11,R10 000002A0 60C3 MOV R12,R0 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 13 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 000002A2 4011 CMP/PZ R0 000002A4 8F02 BF/S L586 000002A6 2A79 AND R7,R10 000002A8 A005 BRA L587 000002AA C907 AND #7,R0 000002AC L586: 000002AC 6007 NOT R0,R0 000002AE 7001 ADD #1,R0 000002B0 C907 AND #7,R0 000002B2 6007 NOT R0,R0 000002B4 7001 ADD #1,R0 000002B6 L587: 000002B6 6303 MOV R0,R3 000002B8 60B3 MOV R11,R0 000002BA 4011 CMP/PZ R0 000002BC 8B01 BF L588 000002BE A005 BRA L589 000002C0 C907 AND #7,R0 000002C2 L588: 000002C2 6007 NOT R0,R0 000002C4 7001 ADD #1,R0 000002C6 C907 AND #7,R0 000002C8 6007 NOT R0,R0 000002CA 7001 ADD #1,R0 000002CC L589: 000002CC 3308 SUB R0,R3 000002CE 7307 ADD #7,R3 000002D0 633B NEG R3,R3 000002D2 6043 MOV R4,R0 000002D4 403C SHAD R3,R0 000002D6 1F01 MOV.L R0,@(4,R15) 000002D8 50F2 MOV.L @(8,R15),R0 000002DA 8801 CMP/EQ #1,R0 000002DC 890C BT L548 000002DE 8800 CMP/EQ #0,R0 000002E0 8934 BT L549 000002E2 8802 CMP/EQ #2,R0 000002E4 8965 BT L550 000002E6 8803 CMP/EQ #3,R0 000002E8 8B01 BF L775 000002EA A091 BRA L551 000002EC 0009 NOP 000002EE L775: 000002EE A0E3 BRA L582 000002F0 0009 NOP 000002F2 L771: 000002F2 00FF .DATA.W H'00FF 000002F4 <00000000> .DATA.L _sc0135 000002F8 L548: ; case label Monochrome 305 switch(color) Monochrome 306 { Monochrome 307 case ML_BLACK: Monochrome 308 if(x1>>3 != x2>>3) 000002F8 35E0 CMP/EQ R14,R5 000002FA 891E BT L591 Monochrome 309 { Monochrome 310 vram[(y<<4)+(x1>>3)] |= 255 >> (x1&7); SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 14 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 000002FC 60D3 MOV R13,R0 000002FE 305C ADD R5,R0 00000300 016C MOV.B @(R0,R6),R1 Monochrome 311 vram[(y<<4)+(x2>>3)] |= 255 << 7-(x2&7); 00000302 37A8 SUB R10,R7 00000304 639B NEG R9,R3 00000306 6243 MOV R4,R2 00000308 423C SHAD R3,R2 0000030A 212B OR R2,R1 0000030C 0614 MOV.B R1,@(R0,R6) 0000030E 447C SHAD R7,R4 00000310 60E3 MOV R14,R0 00000312 30DC ADD R13,R0 00000314 036C MOV.B @(R0,R6),R3 Monochrome 312 for(i=(x1>>3)+1 ; i>3 ; i++) 00000316 7501 ADD #1,R5 00000318 234B OR R4,R3 0000031A 64D3 MOV R13,R4 0000031C 0634 MOV.B R3,@(R0,R6) 0000031E 35E3 CMP/GE R14,R5 00000320 345C ADD R5,R4 00000322 346C ADD R6,R4 00000324 8F02 BF/S L776 00000326 E6FF MOV #-1,R6 00000328 A0C6 BRA L582 0000032A 0009 NOP 0000032C L776: 0000032C L593: Monochrome 313 vram[(y<<4) + i] = 255; 0000032C 2460 MOV.B R6,@R4 0000032E 7501 ADD #1,R5 00000330 35E3 CMP/GE R14,R5 00000332 8FFB BF/S L593 00000334 7401 ADD #1,R4 00000336 A0BF BRA L582 00000338 0009 NOP 0000033A L591: Monochrome 314 } Monochrome 315 else vram[(y<<4)+(x1>>3)] |= (255>>(x1%8 + 7-x2%8))<<(7-(x2&7)); 0000033A 60D3 MOV R13,R0 0000033C 53F1 MOV.L @(4,R15),R3 0000033E 37A8 SUB R10,R7 00000340 305C ADD R5,R0 00000342 437C SHAD R7,R3 00000344 026C MOV.B @(R0,R6),R2 00000346 223B OR R3,R2 Monochrome 316 break; 00000348 A0B6 BRA L582 0000034A 0624 MOV.B R2,@(R0,R6) 0000034C L549: ; case label Monochrome 317 case ML_WHITE: Monochrome 318 if(x1>>3 != x2>>3) 0000034C 35E0 CMP/EQ R14,R5 0000034E 8920 BT L595 Monochrome 319 { Monochrome 320 vram[(y<<4)+(x1>>3)] &= 255 << 8-(x1&7); 00000350 60D3 MOV R13,R0 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 15 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00000352 305C ADD R5,R0 00000354 E308 MOV #8,R3 00000356 3398 SUB R9,R3 00000358 6243 MOV R4,R2 0000035A 423C SHAD R3,R2 0000035C 036C MOV.B @(R0,R6),R3 Monochrome 321 vram[(y<<4)+(x2>>3)] &= 255 >> 1+(x2&7); Monochrome 322 for(i=(x1>>3)+1 ; i>3 ; i++) 0000035E 7501 ADD #1,R5 00000360 2329 AND R2,R3 00000362 35E3 CMP/GE R14,R5 00000364 0634 MOV.B R3,@(R0,R6) 00000366 60E3 MOV R14,R0 00000368 30DC ADD R13,R0 0000036A 63A3 MOV R10,R3 0000036C 026C MOV.B @(R0,R6),R2 0000036E 7301 ADD #1,R3 00000370 633B NEG R3,R3 00000372 443C SHAD R3,R4 00000374 2249 AND R4,R2 00000376 64D3 MOV R13,R4 00000378 0624 MOV.B R2,@(R0,R6) 0000037A 345C ADD R5,R4 0000037C 8F02 BF/S L777 0000037E 346C ADD R6,R4 00000380 A09A BRA L582 00000382 0009 NOP 00000384 L777: 00000384 L597: Monochrome 323 vram[(y<<4) + i] = 0; 00000384 2480 MOV.B R8,@R4 00000386 7501 ADD #1,R5 00000388 35E3 CMP/GE R14,R5 0000038A 8FFB BF/S L597 0000038C 7401 ADD #1,R4 0000038E A093 BRA L582 00000390 0009 NOP 00000392 L595: Monochrome 324 } Monochrome 325 else vram[(y<<4)+(x1>>3)] &= (255<<8-(x1&7)) | (255>>1+(x2&7)); 00000392 60D3 MOV R13,R0 00000394 305C ADD R5,R0 00000396 E308 MOV #8,R3 00000398 3398 SUB R9,R3 0000039A 6243 MOV R4,R2 0000039C 423C SHAD R3,R2 0000039E 63A3 MOV R10,R3 000003A0 7301 ADD #1,R3 000003A2 633B NEG R3,R3 000003A4 6143 MOV R4,R1 000003A6 413C SHAD R3,R1 000003A8 036C MOV.B @(R0,R6),R3 000003AA 221B OR R1,R2 000003AC 2329 AND R2,R3 Monochrome 326 break; 000003AE A083 BRA L582 000003B0 0634 MOV.B R3,@(R0,R6) SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 16 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 000003B2 L550: ; case label Monochrome 327 case ML_XOR: Monochrome 328 if(x1>>3 != x2>>3) 000003B2 35E0 CMP/EQ R14,R5 000003B4 891E BT L599 Monochrome 329 { Monochrome 330 vram[(y<<4)+(x1>>3)] ^= 255 >> (x1&7); 000003B6 60D3 MOV R13,R0 000003B8 305C ADD R5,R0 000003BA 639B NEG R9,R3 000003BC 016C MOV.B @(R0,R6),R1 Monochrome 331 vram[(y<<4)+(x2>>3)] ^= 255 << 7-(x2&7); 000003BE 37A8 SUB R10,R7 000003C0 6243 MOV R4,R2 000003C2 423C SHAD R3,R2 000003C4 212A XOR R2,R1 000003C6 6343 MOV R4,R3 000003C8 0614 MOV.B R1,@(R0,R6) Monochrome 332 for(i=(x1>>3)+1 ; i<(x2>>3) ; i++) 000003CA 7501 ADD #1,R5 000003CC 60E3 MOV R14,R0 000003CE 30DC ADD R13,R0 000003D0 026C MOV.B @(R0,R6),R2 000003D2 35E3 CMP/GE R14,R5 000003D4 437C SHAD R7,R3 000003D6 223A XOR R3,R2 000003D8 0624 MOV.B R2,@(R0,R6) 000003DA 63D3 MOV R13,R3 000003DC 335C ADD R5,R3 000003DE 8D6B BT/S L582 000003E0 363C ADD R3,R6 000003E2 L601: 000003E2 7501 ADD #1,R5 Monochrome 333 vram[(y<<4) + i] ^= 255; 000003E4 6360 MOV.B @R6,R3 000003E6 35E3 CMP/GE R14,R5 000003E8 234A XOR R4,R3 000003EA 2630 MOV.B R3,@R6 000003EC 8FF9 BF/S L601 000003EE 7601 ADD #1,R6 000003F0 A062 BRA L582 000003F2 0009 NOP 000003F4 L599: Monochrome 334 } Monochrome 335 else vram[(y<<4)+(x1>>3)] ^= (255>>((x1&7) + 7-(x2&7)))<<(7-(x2&7)); 000003F4 60D3 MOV R13,R0 000003F6 305C ADD R5,R0 000003F8 6393 MOV R9,R3 000003FA 33A8 SUB R10,R3 000003FC 7307 ADD #7,R3 000003FE 633B NEG R3,R3 00000400 443C SHAD R3,R4 00000402 E207 MOV #7,R2 00000404 036C MOV.B @(R0,R6),R3 00000406 32A8 SUB R10,R2 00000408 442C SHAD R2,R4 0000040A 234A XOR R4,R3 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 17 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT Monochrome 336 break; 0000040C A054 BRA L582 0000040E 0634 MOV.B R3,@(R0,R6) 00000410 L551: ; case label Monochrome 337 case ML_CHECKER: Monochrome 338 checker = (y&1 ? 85 : 170); 00000410 60F2 MOV.L @R15,R0 00000412 C801 TST #1,R0 00000414 8901 BT L603 00000416 A001 BRA L604 00000418 EC55 MOV #85,R12 0000041A L603: 0000041A 9C57 MOV.W L778,R12 ; H'00AA 0000041C L604: Monochrome 339 if(x1>>3 != x2>>3) 0000041C 35E0 CMP/EQ R14,R5 0000041E 8932 BT L605 Monochrome 340 { Monochrome 341 vram[(y<<4)+(x1>>3)] &= 255 << 8-(x1&7); 00000420 63D3 MOV R13,R3 00000422 335C ADD R5,R3 00000424 336C ADD R6,R3 00000426 629B NEG R9,R2 00000428 1F31 MOV.L R3,@(4,R15) 0000042A 6143 MOV R4,R1 0000042C 7208 ADD #8,R2 0000042E 412C SHAD R2,R1 00000430 6230 MOV.B @R3,R2 00000432 2219 AND R1,R2 00000434 2320 MOV.B R2,@R3 Monochrome 342 vram[(y<<4)+(x2>>3)] &= 255 >> 1+(x2&7); 00000436 6143 MOV R4,R1 00000438 63E3 MOV R14,R3 0000043A 33DC ADD R13,R3 0000043C 336C ADD R6,R3 0000043E 62A3 MOV R10,R2 00000440 2F32 MOV.L R3,@R15 00000442 7201 ADD #1,R2 00000444 6030 MOV.B @R3,R0 00000446 622B NEG R2,R2 00000448 412C SHAD R2,R1 0000044A 2019 AND R1,R0 0000044C 2300 MOV.B R0,@R3 Monochrome 343 vram[(y<<4)+(x1>>3)] |= checker & 255>>(x1&7); 0000044E 629B NEG R9,R2 00000450 53F1 MOV.L @(4,R15),R3 00000452 6143 MOV R4,R1 00000454 412C SHAD R2,R1 00000456 21C9 AND R12,R1 00000458 6230 MOV.B @R3,R2 0000045A 221B OR R1,R2 0000045C 2320 MOV.B R2,@R3 Monochrome 344 vram[(y<<4)+(x2>>3)] |= checker & 255<<7-(x2&7); 0000045E 63F2 MOV.L @R15,R3 00000460 6230 MOV.B @R3,R2 Monochrome 345 for(i=(x1>>3)+1 ; i>3 ; i++) 00000462 7501 ADD #1,R5 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 18 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00000464 37A8 SUB R10,R7 00000466 447C SHAD R7,R4 00000468 24C9 AND R12,R4 0000046A 224B OR R4,R2 0000046C 2320 MOV.B R2,@R3 0000046E 64D3 MOV R13,R4 00000470 345C ADD R5,R4 00000472 35E3 CMP/GE R14,R5 00000474 8D20 BT/S L582 00000476 346C ADD R6,R4 00000478 L607: Monochrome 346 vram[(y<<4) + i] = checker; 00000478 24C0 MOV.B R12,@R4 0000047A 7501 ADD #1,R5 0000047C 35E3 CMP/GE R14,R5 0000047E 8FFB BF/S L607 00000480 7401 ADD #1,R4 00000482 A019 BRA L582 00000484 0009 NOP 00000486 L605: Monochrome 347 } Monochrome 348 else Monochrome 349 { Monochrome 350 vram[(y<<4)+(x1>>3)] &= (255<<8-(x1&7)) | (255>>1+(x2&7)); 00000486 63D3 MOV R13,R3 00000488 335C ADD R5,R3 0000048A 336C ADD R6,R3 0000048C 2F32 MOV.L R3,@R15 0000048E E208 MOV #8,R2 00000490 3298 SUB R9,R2 00000492 6143 MOV R4,R1 00000494 412C SHAD R2,R1 00000496 62A3 MOV R10,R2 00000498 7201 ADD #1,R2 0000049A 622B NEG R2,R2 0000049C 6043 MOV R4,R0 0000049E 402C SHAD R2,R0 000004A0 6230 MOV.B @R3,R2 Monochrome 351 vram[(y<<4)+(x1>>3)] |= checker & (255>>(x1%8 + 7-x2%8))<<(7-(x2&7)); 000004A2 37A8 SUB R10,R7 000004A4 210B OR R0,R1 000004A6 2219 AND R1,R2 000004A8 2320 MOV.B R2,@R3 000004AA 63F2 MOV.L @R15,R3 000004AC 52F1 MOV.L @(4,R15),R2 000004AE 427C SHAD R7,R2 000004B0 6130 MOV.B @R3,R1 000004B2 22C9 AND R12,R2 000004B4 212B OR R2,R1 000004B6 2310 MOV.B R1,@R3 Monochrome 352 } Monochrome 353 break; Monochrome 354 } Monochrome 355 } 000004B8 L582: 000004B8 7F0C ADD #12,R15 000004BA 4F26 LDS.L @R15+,PR SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 19 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 000004BC 68F6 MOV.L @R15+,R8 000004BE 69F6 MOV.L @R15+,R9 000004C0 6AF6 MOV.L @R15+,R10 000004C2 6BF6 MOV.L @R15+,R11 000004C4 6CF6 MOV.L @R15+,R12 000004C6 6DF6 MOV.L @R15+,R13 000004C8 000B RTS 000004CA 6EF6 MOV.L @R15+,R14 000004CC L778: 000004CC 00AA .DATA.W H'00AA Monochrome 356 Monochrome 357 #endif Monochrome 358 Monochrome 359 #ifdef ML_VERTICAL_LINE Monochrome 360 void ML_vertical_line(int x, int y1, int y2, ML_Color color) Monochrome 361 { Monochrome 362 int i, j; Monochrome 363 char checker, byte, *vram = ML_vram_adress(); Monochrome 364 if(x&~127 || (y1<0 && y2<0) || (y1>63 && y2>63)) return; Monochrome 365 if(y1 > y2) Monochrome 366 { Monochrome 367 int tmp = y1; Monochrome 368 y1 = y2; Monochrome 369 y2 = tmp; Monochrome 370 } Monochrome 371 if(y1 < 0) y1 = 0; Monochrome 372 if(y2 > 63) y2 = 63; Monochrome 373 Monochrome 374 i = (y1<<4)+(x>>3); Monochrome 375 j = (y2<<4)+(x>>3); Monochrome 376 switch(color) Monochrome 377 { Monochrome 378 case ML_BLACK: Monochrome 379 byte = 128>>(x&7); Monochrome 380 for( ; i<=j ; i+=16) Monochrome 381 vram[i] |= byte; Monochrome 382 break; Monochrome 383 case ML_WHITE: Monochrome 384 byte = ~(128>>(x&7)); Monochrome 385 for( ; i<=j ; i+=16) Monochrome 386 vram[i] &= byte; Monochrome 387 break; Monochrome 388 case ML_XOR: Monochrome 389 byte = 128>>(x&7); Monochrome 390 for( ; i<=j ; i+=16) Monochrome 391 vram[i] ^= byte; Monochrome 392 break; Monochrome 393 case ML_CHECKER: Monochrome 394 byte = 128>>(x&7); Monochrome 395 checker = y1&1^x&1; Monochrome 396 for( ; i<=j ; i+=16) Monochrome 397 { Monochrome 398 if(checker) vram[i] &= ~byte; Monochrome 399 else vram[i] |= byte; Monochrome 400 checker = !checker; Monochrome 401 } Monochrome 402 break; SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 20 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT Monochrome 403 } Monochrome 404 } Monochrome 405 #endif Monochrome 406 Monochrome 407 #ifdef ML_RECTANGLE Monochrome 408 void ML_rectangle(int x1, int y1, int x2, int y2, int border_width, ML_Color border_color, ML_Color fill_c +olor) 000004CE _ML_rectangle: ; function: ML_rectangle ; frame size=48 000004CE 2FE6 MOV.L R14,@-R15 000004D0 2FD6 MOV.L R13,@-R15 000004D2 6D43 MOV R4,R13 000004D4 2FC6 MOV.L R12,@-R15 000004D6 6C63 MOV R6,R12 000004D8 2FB6 MOV.L R11,@-R15 Monochrome 409 { Monochrome 410 int i; Monochrome 411 if(x1 > x2) 000004DA 3DC7 CMP/GT R12,R13 000004DC 2FA6 MOV.L R10,@-R15 000004DE 2F96 MOV.L R9,@-R15 000004E0 2F86 MOV.L R8,@-R15 000004E2 4F22 STS.L PR,@-R15 000004E4 7FF0 ADD #-16,R15 000004E6 5EFC MOV.L @(48,R15),R14 000004E8 8F03 BF/S L609 000004EA 5BFD MOV.L @(52,R15),R11 Monochrome 412 { Monochrome 413 i = x1; 000004EC 64D3 MOV R13,R4 Monochrome 414 x1 = x2; 000004EE 6DC3 MOV R12,R13 Monochrome 415 x2 = i; 000004F0 6C43 MOV R4,R12 000004F2 L609: Monochrome 416 } Monochrome 417 if(y1 > y2) 000004F2 3577 CMP/GT R7,R5 000004F4 8B02 BF L610 Monochrome 418 { Monochrome 419 i = y1; 000004F6 6453 MOV R5,R4 Monochrome 420 y1 = y2; 000004F8 6573 MOV R7,R5 Monochrome 421 y2 = i; 000004FA 6743 MOV R4,R7 000004FC L610: 000004FC 64C3 MOV R12,R4 000004FE 34D8 SUB R13,R4 00000500 E300 MOV #0,R3 00000502 3347 CMP/GT R4,R3 00000504 343E ADDC R3,R4 00000506 4421 SHAR R4 00000508 7401 ADD #1,R4 0000050A 3E47 CMP/GT R4,R14 0000050C 8B00 BF L611 Monochrome 422 } SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 21 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT Monochrome 423 if(border_width > (x2-x1)/2+1) border_width = (x2-x1)/2+1; 0000050E 6E43 MOV R4,R14 00000510 L611: 00000510 6473 MOV R7,R4 00000512 3458 SUB R5,R4 00000514 E300 MOV #0,R3 00000516 3347 CMP/GT R4,R3 00000518 343E ADDC R3,R4 0000051A 4421 SHAR R4 0000051C 7401 ADD #1,R4 0000051E 3E47 CMP/GT R4,R14 00000520 8F01 BF/S L612 00000522 6353 MOV R5,R3 Monochrome 424 if(border_width > (y2-y1)/2+1) border_width = (y2-y1)/2+1; 00000524 6E43 MOV R4,R14 00000526 L612: 00000526 33EC ADD R14,R3 00000528 1F33 MOV.L R3,@(12,R15) 0000052A 6873 MOV R7,R8 0000052C 62D3 MOV R13,R2 0000052E 32EC ADD R14,R2 00000530 1F22 MOV.L R2,@(8,R15) 00000532 61C3 MOV R12,R1 00000534 31E8 SUB R14,R1 00000536 60B3 MOV R11,R0 00000538 2F12 MOV.L R1,@R15 0000053A 88FF CMP/EQ #-1,R0 0000053C 8D2D BT/S L613 0000053E 38E8 SUB R14,R8 00000540 4E15 CMP/PL R14 00000542 8B2A BF L613 Monochrome 425 if(border_color != ML_TRANSPARENT && border_width > 0) Monochrome 426 { Monochrome 427 for(i=0 ; i t[i]) 000005EE 62D2 MOV.L @R13,R2 000005F0 3C27 CMP/GT R2,R12 000005F2 8F08 BF/S L623 000005F4 7701 ADD #1,R7 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 24 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT Monochrome 466 { Monochrome 467 j++; 000005F6 7E01 ADD #1,R14 Monochrome 468 tmp = t[j]; Monochrome 469 t[j] = t[i]; 000005F8 6352 MOV.L @R5,R3 000005FA 60E3 MOV R14,R0 000005FC 4008 SHLL2 R0 000005FE 304C ADD R4,R0 00000600 6102 MOV.L @R0,R1 00000602 2032 MOV.L R3,@R0 Monochrome 470 t[i] = tmp; 00000604 2512 MOV.L R1,@R5 00000606 L623: 00000606 7504 ADD #4,R5 00000608 3763 CMP/GE R6,R7 0000060A 8FF0 BF/S L622 0000060C 7D04 ADD #4,R13 0000060E L621: Monochrome 471 } Monochrome 472 } Monochrome 473 t[r] = t[j+1]; 0000060E 65E3 MOV R14,R5 00000610 53F1 MOV.L @(4,R15),R3 Monochrome 474 t[j+1] = x; Monochrome 475 return j + 1; 00000612 60E3 MOV R14,R0 00000614 4508 SHLL2 R5 00000616 354C ADD R4,R5 00000618 7504 ADD #4,R5 0000061A 7001 ADD #1,R0 0000061C 6252 MOV.L @R5,R2 0000061E 2322 MOV.L R2,@R3 00000620 25C2 MOV.L R12,@R5 Monochrome 476 } 00000622 7F08 ADD #8,R15 00000624 6CF6 MOV.L @R15+,R12 00000626 6DF6 MOV.L @R15+,R13 00000628 000B RTS 0000062A 6EF6 MOV.L @R15+,R14 Monochrome 477 Monochrome 478 static void ML_filled_polygon_quicksord(int* t, int p, int r) 0000062C __$ML_filled_polygon_quicksord: ; function: ML_filled_polygon_quicksord ; frame size=20 0000062C 2FE6 MOV.L R14,@-R15 0000062E 6E53 MOV R5,R14 00000630 2FD6 MOV.L R13,@-R15 00000632 6D63 MOV R6,R13 00000634 2FC6 MOV.L R12,@-R15 00000636 4F22 STS.L PR,@-R15 00000638 7FFC ADD #-4,R15 0000063A 2F42 MOV.L R4,@R15 0000063C L625: Monochrome 479 { Monochrome 480 int q; Monochrome 481 if(p < r) 0000063C 3ED3 CMP/GE R13,R14 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 25 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 0000063E 890E BT L626 Monochrome 482 { Monochrome 483 q = ML_filled_polygon_quicksord_partition(t, p, r); 00000640 66D3 MOV R13,R6 00000642 65E3 MOV R14,R5 00000644 BFC1 BSR __$ML_filled_polygon_quicksord_partition 00000646 64F2 MOV.L @R15,R4 00000648 6C03 MOV R0,R12 Monochrome 484 ML_filled_polygon_quicksord(t, p, q-1); 0000064A 6603 MOV R0,R6 0000064C 76FF ADD #-1,R6 0000064E 65E3 MOV R14,R5 00000650 BFEC BSR __$ML_filled_polygon_quicksord 00000652 64F2 MOV.L @R15,R4 Monochrome 485 ML_filled_polygon_quicksord(t, q+1, r); 00000654 65D3 MOV R13,R5 00000656 64C3 MOV R12,R4 00000658 7401 ADD #1,R4 0000065A AFEF BRA L625 0000065C 6E43 MOV R4,R14 0000065E L626: Monochrome 486 } Monochrome 487 } 0000065E 7F04 ADD #4,R15 00000660 4F26 LDS.L @R15+,PR 00000662 6CF6 MOV.L @R15+,R12 00000664 6DF6 MOV.L @R15+,R13 00000666 000B RTS 00000668 6EF6 MOV.L @R15+,R14 Monochrome 488 Monochrome 489 Monochrome 490 void ML_filled_polygon(const int *x, const int *y, int nb_vertices, ML_Color color) 0000066A _ML_filled_polygon: ; function: ML_filled_polygon ; frame size=108 ; used runtime library name: ; __divls, __modls, __addd, __dtoi, __itod Monochrome 491 { Monochrome 492 int i, j, dx, dy, ymin, ymax; Monochrome 493 int *cut_in_line, nb_cut; Monochrome 494 if(nb_vertices < 3) return; 0000066A E303 MOV #3,R3 0000066C 2FE6 MOV.L R14,@-R15 0000066E 2FD6 MOV.L R13,@-R15 00000670 2FC6 MOV.L R12,@-R15 00000672 2FB6 MOV.L R11,@-R15 00000674 2FA6 MOV.L R10,@-R15 00000676 6B63 MOV R6,R11 00000678 2F96 MOV.L R9,@-R15 0000067A 6A53 MOV R5,R10 0000067C 2F86 MOV.L R8,@-R15 0000067E 3B33 CMP/GE R3,R11 00000680 4F22 STS.L PR,@-R15 00000682 4F12 STS.L MACL,@-R15 00000684 7FD8 ADD #-40,R15 00000686 1F44 MOV.L R4,@(16,R15) 00000688 8D02 BT/S L779 0000068A 1F73 MOV.L R7,@(12,R15) SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 26 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 0000068C A103 BRA L628 0000068E 0009 NOP 00000690 L779: Monochrome 495 cut_in_line = malloc(nb_vertices*sizeof(int)); 00000690 D313 MOV.L L780+2,R3 ; _malloc 00000692 64B3 MOV R11,R4 00000694 430B JSR @R3 00000696 4408 SHLL2 R4 00000698 6D03 MOV R0,R13 Monochrome 496 if(!cut_in_line) return; 0000069A 2DD8 TST R13,R13 0000069C 8B01 BF L781 0000069E A0FA BRA L628 000006A0 0009 NOP 000006A2 L781: Monochrome 497 ymin = ymax = y[0]; Monochrome 498 for(i=1 ; i ymax) ymax = y[i]; 000006C2 53F6 MOV.L @(24,R15),R3 000006C4 6262 MOV.L @R6,R2 000006C6 3237 CMP/GT R3,R2 000006C8 8F02 BF/S L633 000006CA 7401 ADD #1,R4 000006CC 6252 MOV.L @R5,R2 000006CE 1F26 MOV.L R2,@(24,R15) 000006D0 L633: 000006D0 7504 ADD #4,R5 000006D2 7604 ADD #4,R6 000006D4 34B3 CMP/GE R11,R4 000006D6 8FEE BF/S L631 000006D8 7704 ADD #4,R7 000006DA L630: Monochrome 502 } Monochrome 503 for(i=ymin ; i<=ymax ; i++) 000006DA A0CA BRA L634 000006DC 6CE3 MOV R14,R12 000006DE L780: SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 27 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 000006DE 0000 .DATA.W 0 000006E0 <00000000> .DATA.L _malloc 000006E4 L635: Monochrome 504 { Monochrome 505 nb_cut = 0; 000006E4 E900 MOV #0,R9 Monochrome 506 for(j=0 ; j=i) || (y[j]>=i && y[(j+1)%nb_vertices]<=i)) 000006F4 60E3 MOV R14,R0 000006F6 4008 SHLL2 R0 000006F8 04AE MOV.L @(R0,R10),R4 000006FA 34C7 CMP/GT R12,R4 000006FC 8908 BT L640 000006FE 61E3 MOV R14,R1 00000700 D397 MOV.L L782+2,R3 ; __modls 00000702 7101 ADD #1,R1 00000704 430B JSR @R3 00000706 60B3 MOV R11,R0 00000708 4008 SHLL2 R0 0000070A 02AE MOV.L @(R0,R10),R2 0000070C 32C3 CMP/GE R12,R2 0000070E 890A BT L639 00000710 L640: 00000710 34C3 CMP/GE R12,R4 00000712 8B56 BF L638 00000714 D392 MOV.L L782+2,R3 ; __modls 00000716 61E3 MOV R14,R1 00000718 7101 ADD #1,R1 0000071A 430B JSR @R3 0000071C 60B3 MOV R11,R0 0000071E 4008 SHLL2 R0 00000720 02AE MOV.L @(R0,R10),R2 00000722 32C7 CMP/GT R12,R2 00000724 894D BT L638 00000726 L639: Monochrome 509 { Monochrome 510 dy = abs(y[j]-y[(j+1)%nb_vertices]); 00000726 60E3 MOV R14,R0 00000728 51F2 MOV.L @(8,R15),R1 0000072A 4008 SHLL2 R0 0000072C D38C MOV.L L782+2,R3 ; __modls 0000072E 04AE MOV.L @(R0,R10),R4 00000730 430B JSR @R3 00000732 60B3 MOV R11,R0 00000734 D28B MOV.L L782+6,R2 ; _abs 00000736 4008 SHLL2 R0 00000738 03AE MOV.L @(R0,R10),R3 0000073A 420B JSR @R2 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 28 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 0000073C 3438 SUB R3,R4 Monochrome 511 if(dy) 0000073E 2008 TST R0,R0 00000740 8D3F BT/S L638 00000742 1F05 MOV.L R0,@(20,R15) Monochrome 512 { Monochrome 513 dx = x[(j+1)%nb_vertices]-x[j]; 00000744 51F1 MOV.L @(4,R15),R1 00000746 D286 MOV.L L782+2,R2 ; __modls 00000748 420B JSR @R2 0000074A 60B3 MOV R11,R0 0000074C 53F4 MOV.L @(16,R15),R3 Monochrome 514 cut_in_line[nb_cut] = x[j] + rnd(abs(i-y[j]+sgn(i-y[j])/2)*dx/dy); 0000074E 64C3 MOV R12,R4 00000750 4008 SHLL2 R0 00000752 023E MOV.L @(R0,R3),R2 00000754 60F2 MOV.L @R15,R0 00000756 013E MOV.L @(R0,R3),R1 00000758 1F18 MOV.L R1,@(32,R15) 0000075A 3218 SUB R1,R2 0000075C 1F27 MOV.L R2,@(28,R15) 0000075E 6193 MOV R9,R1 00000760 4108 SHLL2 R1 00000762 31DC ADD R13,R1 00000764 2F16 MOV.L R1,@-R15 00000766 7FF8 ADD #-8,R15 00000768 50F3 MOV.L @(12,R15),R0 0000076A 02AE MOV.L @(R0,R10),R2 0000076C 3428 SUB R2,R4 0000076E 4411 CMP/PZ R4 00000770 8D02 BT/S L642 00000772 1F2C MOV.L R2,@(48,R15) 00000774 A001 BRA L643 00000776 E4FF MOV #-1,R4 00000778 L642: 00000778 E401 MOV #1,R4 0000077A L643: 0000077A E300 MOV #0,R3 0000077C 52FC MOV.L @(48,R15),R2 0000077E 3347 CMP/GT R4,R3 00000780 343E ADDC R3,R4 00000782 4421 SHAR R4 00000784 D377 MOV.L L782+6,R3 ; _abs 00000786 3428 SUB R2,R4 00000788 430B JSR @R3 0000078A 34CC ADD R12,R4 0000078C 51FA MOV.L @(40,R15),R1 0000078E 0017 MUL.L R1,R0 00000790 D375 MOV.L L782+10,R3 ; __divls 00000792 011A STS MACL,R1 00000794 430B JSR @R3 00000796 50F8 MOV.L @(32,R15),R0 00000798 D274 MOV.L L782+14,R2 ; __itod 0000079A 7FF8 ADD #-8,R15 0000079C 420B JSR @R2 0000079E 2FF6 MOV.L R15,@-R15 000007A0 D174 MOV.L L782+22,R1 ; __addd SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 29 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 000007A2 E300 MOV #0,R3 000007A4 2F36 MOV.L R3,@-R15 000007A6 D372 MOV.L L782+18,R3 ; H'3FE00000 000007A8 2F36 MOV.L R3,@-R15 000007AA 62F3 MOV R15,R2 000007AC 7210 ADD #16,R2 000007AE 410B JSR @R1 000007B0 2F26 MOV.L R2,@-R15 000007B2 D371 MOV.L L782+26,R3 ; __dtoi 000007B4 430B JSR @R3 000007B6 0009 NOP 000007B8 52F9 MOV.L @(36,R15),R2 Monochrome 515 nb_cut++; 000007BA 7901 ADD #1,R9 000007BC 63F6 MOV.L @R15+,R3 000007BE 302C ADD R2,R0 000007C0 2302 MOV.L R0,@R3 000007C2 L638: 000007C2 7E01 ADD #1,R14 000007C4 62F2 MOV.L @R15,R2 000007C6 3EB3 CMP/GE R11,R14 000007C8 7204 ADD #4,R2 000007CA 2F22 MOV.L R2,@R15 000007CC 53F1 MOV.L @(4,R15),R3 000007CE 7301 ADD #1,R3 000007D0 1F31 MOV.L R3,@(4,R15) 000007D2 51F2 MOV.L @(8,R15),R1 000007D4 7101 ADD #1,R1 000007D6 8F8D BF/S L637 000007D8 1F12 MOV.L R1,@(8,R15) 000007DA L636: Monochrome 516 } Monochrome 517 } Monochrome 518 } Monochrome 519 ML_filled_polygon_quicksord(cut_in_line, 0, nb_cut-1); 000007DA 6693 MOV R9,R6 000007DC 76FF ADD #-1,R6 000007DE E500 MOV #0,R5 000007E0 1F61 MOV.L R6,@(4,R15) 000007E2 BF23 BSR __$ML_filled_polygon_quicksord 000007E4 64D3 MOV R13,R4 Monochrome 520 j = 0; 000007E6 EE00 MOV #0,R14 000007E8 6493 MOV R9,R4 Monochrome 521 while(j plot_x) Monochrome 557 { Monochrome 558 if(d < 0) Monochrome 559 d += 2*plot_x+3; Monochrome 560 else Monochrome 561 { Monochrome 562 d += 2*(plot_x-plot_y)+5; Monochrome 563 plot_y--; Monochrome 564 } Monochrome 565 plot_x++; Monochrome 566 if(plot_y >= plot_x) Monochrome 567 { Monochrome 568 ML_pixel(x+plot_x, y+plot_y, color); Monochrome 569 ML_pixel(x-plot_x, y+plot_y, color); Monochrome 570 ML_pixel(x+plot_x, y-plot_y, color); Monochrome 571 ML_pixel(x-plot_x, y-plot_y, color); Monochrome 572 } Monochrome 573 if(plot_y > plot_x) Monochrome 574 { Monochrome 575 ML_pixel(x+plot_y, y+plot_x, color); Monochrome 576 ML_pixel(x-plot_y, y+plot_x, color); Monochrome 577 ML_pixel(x+plot_y, y-plot_x, color); Monochrome 578 ML_pixel(x-plot_y, y-plot_x, color); Monochrome 579 } Monochrome 580 } Monochrome 581 } Monochrome 582 #endif Monochrome 583 Monochrome 584 #ifdef ML_FILLED_CIRCLE Monochrome 585 void ML_filled_circle(int x, int y, int radius, ML_Color color) 000008AC _ML_filled_circle: ; function: ML_filled_circle ; frame size=36 000008AC 2FE6 MOV.L R14,@-R15 Monochrome 586 { Monochrome 587 int plot_x, plot_y, d; Monochrome 588 Monochrome 589 if(radius < 0) return; 000008AE 4611 CMP/PZ R6 000008B0 2FD6 MOV.L R13,@-R15 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 33 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 000008B2 2FC6 MOV.L R12,@-R15 000008B4 2FB6 MOV.L R11,@-R15 000008B6 6C43 MOV R4,R12 000008B8 2FA6 MOV.L R10,@-R15 000008BA 6A53 MOV R5,R10 000008BC 2F96 MOV.L R9,@-R15 000008BE 2F86 MOV.L R8,@-R15 000008C0 4F22 STS.L PR,@-R15 000008C2 7FFC ADD #-4,R15 000008C4 8F41 BF/S L655 000008C6 6B73 MOV R7,R11 Monochrome 590 plot_x = 0; 000008C8 ED00 MOV #0,R13 Monochrome 591 plot_y = radius; 000008CA 6E63 MOV R6,R14 Monochrome 592 d = 1 - radius; 000008CC E901 MOV #1,R9 000008CE 3968 SUB R6,R9 Monochrome 593 Monochrome 594 ML_horizontal_line(y, x-plot_y, x+plot_y, color); 000008D0 67B3 MOV R11,R7 000008D2 66C3 MOV R12,R6 000008D4 36EC ADD R14,R6 000008D6 65C3 MOV R12,R5 000008D8 35E8 SUB R14,R5 000008DA BCA1 BSR _ML_horizontal_line 000008DC 64A3 MOV R10,R4 Monochrome 595 while(plot_y > plot_x) 000008DE 4E15 CMP/PL R14 000008E0 8B33 BF L655 000008E2 L657: Monochrome 596 { Monochrome 597 if(d < 0) 000008E2 4911 CMP/PZ R9 000008E4 8904 BT L658 Monochrome 598 d += 2*plot_x+3; 000008E6 63D3 MOV R13,R3 000008E8 4300 SHLL R3 000008EA 7303 ADD #3,R3 000008EC A018 BRA L659 000008EE 393C ADD R3,R9 000008F0 L658: Monochrome 599 else { Monochrome 600 d += 2*(plot_x-plot_y)+5; 000008F0 63D3 MOV R13,R3 000008F2 33E8 SUB R14,R3 000008F4 4300 SHLL R3 000008F6 7305 ADD #5,R3 000008F8 393C ADD R3,R9 Monochrome 601 plot_y--; 000008FA 7EFF ADD #-1,R14 Monochrome 602 ML_horizontal_line(y+plot_y+1, x-plot_x, x+plot_x, color); 000008FC 67B3 MOV R11,R7 000008FE 68C3 MOV R12,R8 00000900 38DC ADD R13,R8 00000902 6683 MOV R8,R6 00000904 65C3 MOV R12,R5 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 34 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00000906 35D8 SUB R13,R5 00000908 2F52 MOV.L R5,@R15 0000090A 64A3 MOV R10,R4 0000090C 34EC ADD R14,R4 0000090E BC87 BSR _ML_horizontal_line 00000910 7401 ADD #1,R4 Monochrome 603 ML_horizontal_line(y-plot_y-1, x-plot_x, x+plot_x, color); 00000912 67B3 MOV R11,R7 00000914 65F2 MOV.L @R15,R5 00000916 64A3 MOV R10,R4 00000918 6683 MOV R8,R6 0000091A 34E8 SUB R14,R4 0000091C BC80 BSR _ML_horizontal_line 0000091E 74FF ADD #-1,R4 00000920 L659: Monochrome 604 } Monochrome 605 plot_x++; 00000920 7D01 ADD #1,R13 Monochrome 606 if(plot_y >= plot_x) 00000922 3ED3 CMP/GE R13,R14 00000924 8B0F BF L660 Monochrome 607 { Monochrome 608 ML_horizontal_line(y+plot_x, x-plot_y, x+plot_y, color); 00000926 67B3 MOV R11,R7 00000928 66C3 MOV R12,R6 0000092A 36EC ADD R14,R6 0000092C 2F62 MOV.L R6,@R15 0000092E 68C3 MOV R12,R8 00000930 38E8 SUB R14,R8 00000932 6583 MOV R8,R5 00000934 64A3 MOV R10,R4 00000936 BC73 BSR _ML_horizontal_line 00000938 34DC ADD R13,R4 Monochrome 609 ML_horizontal_line(y-plot_x, x-plot_y, x+plot_y, color); 0000093A 67B3 MOV R11,R7 0000093C 66F2 MOV.L @R15,R6 0000093E 6583 MOV R8,R5 00000940 64A3 MOV R10,R4 00000942 BC6D BSR _ML_horizontal_line 00000944 34D8 SUB R13,R4 00000946 L660: 00000946 3ED7 CMP/GT R13,R14 00000948 89CB BT L657 0000094A L655: Monochrome 610 } Monochrome 611 } Monochrome 612 } 0000094A 7F04 ADD #4,R15 0000094C 4F26 LDS.L @R15+,PR 0000094E 68F6 MOV.L @R15+,R8 00000950 69F6 MOV.L @R15+,R9 00000952 6AF6 MOV.L @R15+,R10 00000954 6BF6 MOV.L @R15+,R11 00000956 6CF6 MOV.L @R15+,R12 00000958 6DF6 MOV.L @R15+,R13 0000095A 000B RTS 0000095C 6EF6 MOV.L @R15+,R14 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 35 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 0000095E L782: 0000095E 0000 .DATA.W 0 00000960 <00000000> .DATA.L __modls 00000964 <00000000> .DATA.L _abs 00000968 <00000000> .DATA.L __divls 0000096C <00000000> .DATA.L __itod 00000970 3FE00000 .DATA.L H'3FE00000 00000974 <00000000> .DATA.L __addd 00000978 <00000000> .DATA.L __dtoi 0000097C <00000000> .DATA.L _free Monochrome 613 #endif Monochrome 614 Monochrome 615 #ifdef ML_ELLIPSE Monochrome 616 void ML_ellipse(int x, int y, int radius1, int radius2, ML_Color color) Monochrome 617 { Monochrome 618 int plot_x, plot_y; Monochrome 619 float d1, d2; Monochrome 620 if(radius1 < 1 || radius2 < 1) return; Monochrome 621 plot_x = 0; Monochrome 622 plot_y = radius2; Monochrome 623 d1 = radius2*radius2 - radius1*radius1*radius2 + radius1*radius1/4; Monochrome 624 ML_pixel(x, y+plot_y, color); Monochrome 625 ML_pixel(x, y-plot_y, color); Monochrome 626 while(radius1*radius1*(plot_y-.5) > radius2*radius2*(plot_x+1)) Monochrome 627 { Monochrome 628 if(d1 < 0) Monochrome 629 { Monochrome 630 d1 += radius2*radius2*(2*plot_x+3); Monochrome 631 plot_x++; Monochrome 632 } else { Monochrome 633 d1 += radius2*radius2*(2*plot_x+3) + radius1*radius1*(-2*plot_y+2); Monochrome 634 plot_x++; Monochrome 635 plot_y--; Monochrome 636 } Monochrome 637 ML_pixel(x+plot_x, y+plot_y, color); Monochrome 638 ML_pixel(x-plot_x, y+plot_y, color); Monochrome 639 ML_pixel(x+plot_x, y-plot_y, color); Monochrome 640 ML_pixel(x-plot_x, y-plot_y, color); Monochrome 641 } Monochrome 642 d2 = radius2*radius2*(plot_x+.5)*(plot_x+.5) + radius1*radius1*(plot_y-1)*(plot_y-1) - radius1*rad +ius1*radius2*radius2; Monochrome 643 while(plot_y > 0) Monochrome 644 { Monochrome 645 if(d2 < 0) Monochrome 646 { Monochrome 647 d2 += radius2*radius2*(2*plot_x+2) + radius1*radius1*(-2*plot_y+3); Monochrome 648 plot_y--; Monochrome 649 plot_x++; Monochrome 650 } else { Monochrome 651 d2 += radius1*radius1*(-2*plot_y+3); Monochrome 652 plot_y--; Monochrome 653 } Monochrome 654 ML_pixel(x+plot_x, y+plot_y, color); Monochrome 655 ML_pixel(x-plot_x, y+plot_y, color); Monochrome 656 if(plot_y > 0) Monochrome 657 { Monochrome 658 ML_pixel(x+plot_x, y-plot_y, color); SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 36 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT Monochrome 659 ML_pixel(x-plot_x, y-plot_y, color); Monochrome 660 } Monochrome 661 } Monochrome 662 } Monochrome 663 #endif Monochrome 664 Monochrome 665 #ifdef ML_ELLIPSE_IN_RECT Monochrome 666 void ML_ellipse_in_rect(int x1, int y1, int x2, int y2, ML_Color color) Monochrome 667 { Monochrome 668 int radius1, radius2; Monochrome 669 if(x1 > x2) Monochrome 670 { Monochrome 671 int tmp = x1; Monochrome 672 x1 = x2; Monochrome 673 x2 = tmp; Monochrome 674 } Monochrome 675 if(y1 > y2) Monochrome 676 { Monochrome 677 int tmp = y1; Monochrome 678 y1 = y2; Monochrome 679 y2 = tmp; Monochrome 680 } Monochrome 681 radius1 = (x2-x1)/2; Monochrome 682 radius2 = (y2-y1)/2; Monochrome 683 ML_ellipse(x1+radius1, y1+radius2, radius1, radius2, color); Monochrome 684 } Monochrome 685 #endif Monochrome 686 Monochrome 687 #ifdef ML_FILLED_ELLIPSE Monochrome 688 void ML_filled_ellipse(int x, int y, int radius1, int radius2, ML_Color color) Monochrome 689 { Monochrome 690 int plot_x, plot_y; Monochrome 691 float d1, d2; Monochrome 692 if(radius1 < 1 || radius2 < 1) return; Monochrome 693 plot_x = 0; Monochrome 694 plot_y = radius2; Monochrome 695 d1 = radius2*radius2 - radius1*radius1*radius2 + radius1*radius1/4; Monochrome 696 while(radius1*radius1*(plot_y-.5) > radius2*radius2*(plot_x+1)) Monochrome 697 { Monochrome 698 if(d1 < 0) Monochrome 699 { Monochrome 700 d1 += radius2*radius2*(2*plot_x+3); Monochrome 701 plot_x++; Monochrome 702 } else { Monochrome 703 d1 += radius2*radius2*(2*plot_x+3) + radius1*radius1*(-2*plot_y+2); Monochrome 704 ML_horizontal_line(y+plot_y, x-plot_x, x+plot_x, color); Monochrome 705 ML_horizontal_line(y-plot_y, x-plot_x, x+plot_x, color); Monochrome 706 plot_x++; Monochrome 707 plot_y--; Monochrome 708 } Monochrome 709 } Monochrome 710 ML_horizontal_line(y+plot_y, x-plot_x, x+plot_x, color); Monochrome 711 ML_horizontal_line(y-plot_y, x-plot_x, x+plot_x, color); Monochrome 712 d2 = radius2*radius2*(plot_x+.5)*(plot_x+.5) + radius1*radius1*(plot_y-1)*(plot_y-1) - radius1*rad +ius1*radius2*radius2; Monochrome 713 while(plot_y > 0) Monochrome 714 { SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 37 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT Monochrome 715 if(d2 < 0) Monochrome 716 { Monochrome 717 d2 += radius2*radius2*(2*plot_x+2) + radius1*radius1*(-2*plot_y+3); Monochrome 718 plot_y--; Monochrome 719 plot_x++; Monochrome 720 } else { Monochrome 721 d2 += radius1*radius1*(-2*plot_y+3); Monochrome 722 plot_y--; Monochrome 723 } Monochrome 724 ML_horizontal_line(y+plot_y, x-plot_x, x+plot_x, color); Monochrome 725 if(plot_y > 0) Monochrome 726 ML_horizontal_line(y-plot_y, x-plot_x, x+plot_x, color); Monochrome 727 } Monochrome 728 } Monochrome 729 #endif Monochrome 730 Monochrome 731 #ifdef ML_FILLED_ELLIPSE_IN_RECT Monochrome 732 void ML_filled_ellipse_in_rect(int x1, int y1, int x2, int y2, ML_Color color) Monochrome 733 { Monochrome 734 int radius1, radius2; Monochrome 735 if(x1 > x2) Monochrome 736 { Monochrome 737 int tmp = x1; Monochrome 738 x1 = x2; Monochrome 739 x2 = tmp; Monochrome 740 } Monochrome 741 if(y1 > y2) Monochrome 742 { Monochrome 743 int tmp = y1; Monochrome 744 y1 = y2; Monochrome 745 y2 = tmp; Monochrome 746 } Monochrome 747 radius1 = (x2-x1)/2; Monochrome 748 radius2 = (y2-y1)/2; Monochrome 749 ML_filled_ellipse(x1+radius1, y1+radius2, radius1, radius2, color); Monochrome 750 } Monochrome 751 #endif Monochrome 752 Monochrome 753 #ifdef ML_HORIZONTAL_SCROLL Monochrome 754 void ML_horizontal_scroll(int scroll) 00000980 _ML_horizontal_scroll: ; function: ML_horizontal_scroll ; frame size=80 00000980 2FE6 MOV.L R14,@-R15 00000982 2FD6 MOV.L R13,@-R15 00000984 2FC6 MOV.L R12,@-R15 00000986 2FB6 MOV.L R11,@-R15 00000988 2FA6 MOV.L R10,@-R15 0000098A 2F96 MOV.L R9,@-R15 0000098C 2F86 MOV.L R8,@-R15 0000098E 4F22 STS.L PR,@-R15 Monochrome 755 { Monochrome 756 int i, j; Monochrome 757 char line[16], shift, *vram; Monochrome 758 unsigned char next; Monochrome 759 unsigned short word; Monochrome 760 vram = ML_vram_adress(); 00000990 DE60 MOV.L L784,R14 ; _sc0135 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 38 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00000992 7FD0 ADD #-48,R15 00000994 4E0B JSR @R14 00000996 6C43 MOV R4,R12 00000998 6E03 MOV R0,R14 Monochrome 761 scroll %= 128; 0000099A 4C11 CMP/PZ R12 0000099C 8F02 BF/S L661 0000099E E37F MOV #127,R3 000009A0 A005 BRA L662 000009A2 2C39 AND R3,R12 000009A4 L661: 000009A4 6CC7 NOT R12,R12 000009A6 7C01 ADD #1,R12 000009A8 2C39 AND R3,R12 000009AA 6CC7 NOT R12,R12 000009AC 7C01 ADD #1,R12 000009AE L662: Monochrome 762 shift = 8-(scroll&7); 000009AE E107 MOV #7,R1 000009B0 21C9 AND R12,R1 000009B2 E008 MOV #8,R0 000009B4 3018 SUB R1,R0 Monochrome 763 for(i=0 ; i<64 ; i++) 000009B6 E700 MOV #0,R7 000009B8 80F4 MOV.B R0,@(4,R15) 000009BA 6DE3 MOV R14,R13 000009BC 6A73 MOV R7,R10 000009BE 6873 MOV R7,R8 000009C0 69E3 MOV R14,R9 000009C2 790F ADD #15,R9 000009C4 64F3 MOV R15,R4 000009C6 7420 ADD #32,R4 000009C8 6343 MOV R4,R3 000009CA 7310 ADD #16,R3 000009CC 1F32 MOV.L R3,@(8,R15) 000009CE 4C21 SHAR R12 000009D0 4C21 SHAR R12 000009D2 4C21 SHAR R12 000009D4 1FC4 MOV.L R12,@(16,R15) 000009D6 6243 MOV R4,R2 000009D8 1F25 MOV.L R2,@(20,R15) 000009DA 6123 MOV R2,R1 000009DC 710F ADD #15,R1 000009DE EC0F MOV #15,R12 000009E0 1F16 MOV.L R1,@(24,R15) 000009E2 740E ADD #14,R4 000009E4 1F47 MOV.L R4,@(28,R15) 000009E6 L663: Monochrome 764 { Monochrome 765 for(j=0 ; j<16 ; j++) line[j] = vram[(i<<4)+((j-(scroll>>3)+15)&15)]; 000009E6 6473 MOV R7,R4 000009E8 53F4 MOV.L @(16,R15),R3 000009EA 66A3 MOV R10,R6 000009EC 3438 SUB R3,R4 000009EE 6543 MOV R4,R5 000009F0 54F5 MOV.L @(20,R15),R4 000009F2 4608 SHLL2 R6 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 39 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 000009F4 750F ADD #15,R5 000009F6 4608 SHLL2 R6 000009F8 L664: 000009F8 6053 MOV R5,R0 000009FA 20C9 AND R12,R0 000009FC 306C ADD R6,R0 000009FE 03EC MOV.B @(R0,R14),R3 00000A00 2430 MOV.B R3,@R4 00000A02 7401 ADD #1,R4 00000A04 52F2 MOV.L @(8,R15),R2 00000A06 3422 CMP/HS R2,R4 00000A08 8FF6 BF/S L664 00000A0A 7501 ADD #1,R5 Monochrome 766 next = line[15]; 00000A0C 56F6 MOV.L @(24,R15),R6 Monochrome 767 vram[(i<<4)+15] = 0; Monochrome 768 for(j=15 ; j>0 ; j--) 00000A0E 6BC3 MOV R12,R11 00000A10 6660 MOV.B @R6,R6 00000A12 6483 MOV R8,R4 00000A14 2970 MOV.B R7,@R9 00000A16 740F ADD #15,R4 00000A18 55F7 MOV.L @(28,R15),R5 00000A1A L665: Monochrome 769 { Monochrome 770 word = next << shift; 00000A1A 666C EXTU.B R6,R6 00000A1C 84F4 MOV.B @(4,R15),R0 Monochrome 771 next = line[j-1]; Monochrome 772 vram[(i<<4)+j] |= *((char*)&word+1); 00000A1E 63F3 MOV R15,R3 00000A20 460D SHLD R0,R6 00000A22 6043 MOV R4,R0 00000A24 2F61 MOV.W R6,@R15 00000A26 E201 MOV #1,R2 00000A28 6650 MOV.B @R5,R6 00000A2A 7BFF ADD #-1,R11 00000A2C 323C ADD R3,R2 00000A2E 4B15 CMP/PL R11 00000A30 6320 MOV.B @R2,R3 00000A32 02EC MOV.B @(R0,R14),R2 00000A34 223B OR R3,R2 Monochrome 773 vram[(i<<4)+j-1] = *((char*)&word); 00000A36 63F3 MOV R15,R3 00000A38 0E24 MOV.B R2,@(R0,R14) 00000A3A 70FF ADD #-1,R0 00000A3C 1F03 MOV.L R0,@(12,R15) 00000A3E 6230 MOV.B @R3,R2 00000A40 0E24 MOV.B R2,@(R0,R14) 00000A42 54F3 MOV.L @(12,R15),R4 00000A44 8DE9 BT/S L665 00000A46 75FF ADD #-1,R5 Monochrome 774 } Monochrome 775 word = next << shift; 00000A48 84F4 MOV.B @(4,R15),R0 Monochrome 776 vram[(i<<4)] |= *((char*)&word+1); 00000A4A 63F3 MOV R15,R3 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 40 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00000A4C 666C EXTU.B R6,R6 00000A4E 460D SHLD R0,R6 00000A50 2F61 MOV.W R6,@R15 00000A52 7A01 ADD #1,R10 00000A54 8431 MOV.B @(1,R3),R0 00000A56 7810 ADD #16,R8 00000A58 62D0 MOV.B @R13,R2 Monochrome 777 vram[(i<<4)+15] |= *((char*)&word); 00000A5A 63F3 MOV R15,R3 00000A5C 220B OR R0,R2 00000A5E 2D20 MOV.B R2,@R13 00000A60 6330 MOV.B @R3,R3 00000A62 84DF MOV.B @(15,R13),R0 00000A64 203B OR R3,R0 00000A66 E340 MOV #64,R3 00000A68 80DF MOV.B R0,@(15,R13) 00000A6A 3A33 CMP/GE R3,R10 00000A6C 7D10 ADD #16,R13 00000A6E 8FBA BF/S L663 00000A70 7910 ADD #16,R9 Monochrome 778 } Monochrome 779 } 00000A72 7F30 ADD #48,R15 00000A74 4F26 LDS.L @R15+,PR 00000A76 68F6 MOV.L @R15+,R8 00000A78 69F6 MOV.L @R15+,R9 00000A7A 6AF6 MOV.L @R15+,R10 00000A7C 6BF6 MOV.L @R15+,R11 00000A7E 6CF6 MOV.L @R15+,R12 00000A80 6DF6 MOV.L @R15+,R13 00000A82 000B RTS 00000A84 6EF6 MOV.L @R15+,R14 Monochrome 780 #endif Monochrome 781 Monochrome 782 #ifdef ML_VERTICAL_SCROLL Monochrome 783 void ML_vertical_scroll(int scroll) 00000A86 _ML_vertical_scroll: ; function: ML_vertical_scroll ; frame size=104 00000A86 2FE6 MOV.L R14,@-R15 00000A88 2FD6 MOV.L R13,@-R15 00000A8A 2FC6 MOV.L R12,@-R15 00000A8C 2FB6 MOV.L R11,@-R15 00000A8E 2FA6 MOV.L R10,@-R15 00000A90 2F86 MOV.L R8,@-R15 00000A92 4F22 STS.L PR,@-R15 Monochrome 784 { Monochrome 785 int i, j; Monochrome 786 char column[64], *vram = ML_vram_adress(); 00000A94 D31F MOV.L L784,R3 ; _sc0135 00000A96 7FB4 ADD #-76,R15 00000A98 430B JSR @R3 00000A9A 2F42 MOV.L R4,@R15 00000A9C 1F01 MOV.L R0,@(4,R15) Monochrome 787 scroll %= 64; 00000A9E 60F2 MOV.L @R15,R0 00000AA0 4011 CMP/PZ R0 00000AA2 8B01 BF L666 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 41 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00000AA4 A005 BRA L667 00000AA6 C93F AND #63,R0 00000AA8 L666: 00000AA8 6007 NOT R0,R0 00000AAA 7001 ADD #1,R0 00000AAC C93F AND #63,R0 00000AAE 6007 NOT R0,R0 00000AB0 7001 ADD #1,R0 00000AB2 L667: Monochrome 788 for(i=0 ; i<16 ; i++) 00000AB2 EC00 MOV #0,R12 00000AB4 2F02 MOV.L R0,@R15 00000AB6 6EF3 MOV R15,R14 00000AB8 67C3 MOV R12,R7 00000ABA 7E0C ADD #12,R14 00000ABC 68E3 MOV R14,R8 00000ABE 7840 ADD #64,R8 00000AC0 EA10 MOV #16,R10 00000AC2 EB3F MOV #63,R11 00000AC4 ED40 MOV #64,R13 00000AC6 63E3 MOV R14,R3 00000AC8 1F32 MOV.L R3,@(8,R15) 00000ACA L668: 00000ACA 51F1 MOV.L @(4,R15),R1 00000ACC 54F2 MOV.L @(8,R15),R4 00000ACE 317C ADD R7,R1 00000AD0 6513 MOV R1,R5 Monochrome 789 { Monochrome 790 for(j=0 ; j<64 ; j++) column[j] = vram[(j<<4)+i]; 00000AD2 L669: 00000AD2 6250 MOV.B @R5,R2 00000AD4 2420 MOV.B R2,@R4 00000AD6 7401 ADD #1,R4 00000AD8 3482 CMP/HS R8,R4 00000ADA 8FFA BF/S L669 00000ADC 7510 ADD #16,R5 Monochrome 791 for(j=0 ; j<64 ; j++) vram[(j<<4)+i] = column[(j-scroll+64)&63]; 00000ADE 66C3 MOV R12,R6 00000AE0 63F2 MOV.L @R15,R3 00000AE2 64C3 MOV R12,R4 00000AE4 3438 SUB R3,R4 00000AE6 7440 ADD #64,R4 00000AE8 6513 MOV R1,R5 00000AEA L670: 00000AEA 6043 MOV R4,R0 00000AEC 20B9 AND R11,R0 00000AEE 7601 ADD #1,R6 00000AF0 03EC MOV.B @(R0,R14),R3 00000AF2 7401 ADD #1,R4 00000AF4 2530 MOV.B R3,@R5 00000AF6 36D3 CMP/GE R13,R6 00000AF8 8FF7 BF/S L670 00000AFA 7510 ADD #16,R5 00000AFC 7701 ADD #1,R7 00000AFE 37A3 CMP/GE R10,R7 00000B00 8BE3 BF L668 Monochrome 792 } SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 42 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT Monochrome 793 } 00000B02 7F4C ADD #76,R15 00000B04 4F26 LDS.L @R15+,PR 00000B06 68F6 MOV.L @R15+,R8 00000B08 6AF6 MOV.L @R15+,R10 00000B0A 6BF6 MOV.L @R15+,R11 00000B0C 6CF6 MOV.L @R15+,R12 00000B0E 6DF6 MOV.L @R15+,R13 00000B10 000B RTS 00000B12 6EF6 MOV.L @R15+,R14 00000B14 L784: 00000B14 <00000000> .DATA.L _sc0135 Monochrome 794 #endif Monochrome 795 Monochrome 796 #ifdef ML_BMP_OR Monochrome 797 void ML_bmp_or(const unsigned char *bmp, int x, int y, int width, int height) 00000B18 _ML_bmp_or: ; function: ML_bmp_or ; frame size=60 00000B18 2FE6 MOV.L R14,@-R15 00000B1A 6E63 MOV R6,R14 00000B1C 2FD6 MOV.L R13,@-R15 00000B1E 2FC6 MOV.L R12,@-R15 00000B20 2FB6 MOV.L R11,@-R15 00000B22 6B43 MOV R4,R11 00000B24 2FA6 MOV.L R10,@-R15 00000B26 6A53 MOV R5,R10 00000B28 2F96 MOV.L R9,@-R15 00000B2A 6973 MOV R7,R9 00000B2C 2F86 MOV.L R8,@-R15 Monochrome 798 { Monochrome 799 unsigned short line; Monochrome 800 char shift, *screen, *p=(char*)&line; Monochrome 801 int i, j, begin=0, end=height, real_width=(width-1>>3<<3)+8; 00000B2E 6C93 MOV R9,R12 00000B30 4F22 STS.L PR,@-R15 00000B32 E800 MOV #0,R8 00000B34 4F12 STS.L MACL,@-R15 00000B36 7CFF ADD #-1,R12 00000B38 7FE8 ADD #-24,R15 00000B3A 6DF3 MOV R15,R13 00000B3C 54FF MOV.L @(60,R15),R4 00000B3E 4C21 SHAR R12 00000B40 2F82 MOV.L R8,@R15 00000B42 7D04 ADD #4,R13 00000B44 1F45 MOV.L R4,@(20,R15) 00000B46 4C21 SHAR R12 00000B48 4C21 SHAR R12 00000B4A 62C3 MOV R12,R2 00000B4C 4208 SHLL2 R2 00000B4E 4200 SHLL R2 00000B50 7208 ADD #8,R2 Monochrome 802 if(!bmp || x<0 || x>128-width || y<1-height || y>63 || width<1 || height<1) return; 00000B52 2BB8 TST R11,R11 00000B54 8F02 BF/S L785 00000B56 1F23 MOV.L R2,@(12,R15) 00000B58 A085 BRA L673 00000B5A 0009 NOP SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 43 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00000B5C L785: 00000B5C 4A11 CMP/PZ R10 00000B5E 8901 BT L786 00000B60 A081 BRA L673 00000B62 0009 NOP 00000B64 L786: 00000B64 933D MOV.W L787,R3 ; H'0080 00000B66 3398 SUB R9,R3 00000B68 3A37 CMP/GT R3,R10 00000B6A 8B01 BF L788 00000B6C A07B BRA L673 00000B6E 0009 NOP 00000B70 L788: 00000B70 E301 MOV #1,R3 00000B72 3348 SUB R4,R3 00000B74 3E33 CMP/GE R3,R14 00000B76 8B76 BF L673 00000B78 E33F MOV #63,R3 00000B7A 3E37 CMP/GT R3,R14 00000B7C 8973 BT L673 00000B7E E001 MOV #1,R0 00000B80 3903 CMP/GE R0,R9 00000B82 8B70 BF L673 00000B84 3403 CMP/GE R0,R4 00000B86 8B6E BF L673 Monochrome 803 if(y < 0) begin = -y; 00000B88 4E11 CMP/PZ R14 00000B8A 8D02 BT/S L674 Monochrome 804 if(y+height > 64) end = 64-y; 00000B8C E540 MOV #64,R5 00000B8E 62EB NEG R14,R2 00000B90 2F22 MOV.L R2,@R15 00000B92 L674: 00000B92 34EC ADD R14,R4 00000B94 3457 CMP/GT R5,R4 00000B96 8B01 BF L675 00000B98 35E8 SUB R14,R5 00000B9A 1F55 MOV.L R5,@(20,R15) 00000B9C L675: Monochrome 805 shift = 8-(x&7); 00000B9C E307 MOV #7,R3 00000B9E 23A9 AND R10,R3 00000BA0 E208 MOV #8,R2 00000BA2 3238 SUB R3,R2 Monochrome 806 screen = ML_vram_adress()+(y+begin<<4)+(x>>3); 00000BA4 D30F MOV.L L787+2,R3 ; _sc0135 00000BA6 E010 MOV #16,R0 00000BA8 430B JSR @R3 00000BAA 0F24 MOV.B R2,@(R0,R15) 00000BAC 62F2 MOV.L @R15,R2 00000BAE 63A3 MOV R10,R3 00000BB0 3E2C ADD R2,R14 00000BB2 4E08 SHLL2 R14 00000BB4 4E08 SHLL2 R14 00000BB6 30EC ADD R14,R0 00000BB8 4321 SHAR R3 00000BBA 4321 SHAR R3 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 44 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00000BBC 4321 SHAR R3 00000BBE 6503 MOV R0,R5 00000BC0 353C ADD R3,R5 Monochrome 807 for(i=begin ; i .DATA.L _sc0135 00000BE8 L677: 00000BE8 57F2 MOV.L @(8,R15),R7 00000BEA E010 MOV #16,R0 00000BEC 0767 MUL.L R6,R7 00000BEE 4C15 CMP/PL R12 Monochrome 808 { Monochrome 809 for(j=0 ; j>3 ; j++) 00000BF0 6483 MOV R8,R4 00000BF2 071A STS MACL,R7 00000BF4 8F18 BF/S L678 00000BF6 0EFC MOV.B @(R0,R15),R14 00000BF8 L679: Monochrome 810 { Monochrome 811 line = bmp[i*(real_width>>3)+j]<>3)+j] & -1<<(real_width-width))<>3<<3)+8; 00000C92 E800 MOV #0,R8 00000C94 4F22 STS.L PR,@-R15 00000C96 6983 MOV R8,R9 00000C98 4F12 STS.L MACL,@-R15 00000C9A 7FE8 ADD #-24,R15 00000C9C 1F71 MOV.L R7,@(4,R15) 00000C9E 6DF3 MOV R15,R13 00000CA0 54FF MOV.L @(60,R15),R4 00000CA2 1F45 MOV.L R4,@(20,R15) 00000CA4 5CF1 MOV.L @(4,R15),R12 00000CA6 7CFF ADD #-1,R12 00000CA8 4C21 SHAR R12 00000CAA 4C21 SHAR R12 00000CAC 4C21 SHAR R12 00000CAE 62C3 MOV R12,R2 00000CB0 4208 SHLL2 R2 00000CB2 4200 SHLL R2 00000CB4 7208 ADD #8,R2 Monochrome 829 if(!bmp || x<0 || x>128-width || y<1-height || y>63 || width<1 || height<1) return; 00000CB6 2AA8 TST R10,R10 00000CB8 8F02 BF/S L790 00000CBA 1F24 MOV.L R2,@(16,R15) 00000CBC A08E BRA L684 00000CBE 0009 NOP 00000CC0 L790: 00000CC0 4B11 CMP/PZ R11 00000CC2 8901 BT L791 00000CC4 A08A BRA L684 00000CC6 0009 NOP 00000CC8 L791: 00000CC8 53F1 MOV.L @(4,R15),R3 00000CCA 9140 MOV.W L792,R1 ; H'0080 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 47 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00000CCC 3138 SUB R3,R1 00000CCE 3B17 CMP/GT R1,R11 00000CD0 8B01 BF L793 00000CD2 A083 BRA L684 00000CD4 0009 NOP 00000CD6 L793: 00000CD6 E001 MOV #1,R0 00000CD8 3048 SUB R4,R0 00000CDA 3E03 CMP/GE R0,R14 00000CDC 8901 BT L794 00000CDE A07D BRA L684 00000CE0 0009 NOP 00000CE2 L794: 00000CE2 E13F MOV #63,R1 00000CE4 3E17 CMP/GT R1,R14 00000CE6 8979 BT L684 00000CE8 E001 MOV #1,R0 00000CEA 3303 CMP/GE R0,R3 00000CEC 8B76 BF L684 00000CEE E201 MOV #1,R2 00000CF0 3423 CMP/GE R2,R4 00000CF2 8B73 BF L684 Monochrome 830 if(y < 0) begin = -y; 00000CF4 4E11 CMP/PZ R14 00000CF6 8D01 BT/S L685 Monochrome 831 if(y+height > 64) end = 64-y; 00000CF8 E540 MOV #64,R5 00000CFA 69EB NEG R14,R9 00000CFC L685: 00000CFC 34EC ADD R14,R4 00000CFE 3457 CMP/GT R5,R4 00000D00 8F02 BF/S L686 Monochrome 832 shift = 8-(x&7); 00000D02 E307 MOV #7,R3 00000D04 35E8 SUB R14,R5 00000D06 1F55 MOV.L R5,@(20,R15) 00000D08 L686: 00000D08 23B9 AND R11,R3 00000D0A E008 MOV #8,R0 00000D0C 3038 SUB R3,R0 Monochrome 833 screen = ML_vram_adress()+(y+begin<<4)+(x>>3); 00000D0E D311 MOV.L L792+6,R3 ; _sc0135 00000D10 430B JSR @R3 00000D12 80FC MOV.B R0,@(12,R15) 00000D14 3E9C ADD R9,R14 00000D16 4E08 SHLL2 R14 00000D18 4E08 SHLL2 R14 00000D1A 30EC ADD R14,R0 00000D1C 62B3 MOV R11,R2 00000D1E 4221 SHAR R2 00000D20 4221 SHAR R2 00000D22 4221 SHAR R2 00000D24 6503 MOV R0,R5 00000D26 352C ADD R2,R5 00000D28 52F4 MOV.L @(16,R15),R2 00000D2A E308 MOV #8,R3 Monochrome 834 for(i=begin ; i .DATA.L _sc0135 00000D58 L688: 00000D58 57F2 MOV.L @(8,R15),R7 00000D5A 4C15 CMP/PL R12 00000D5C 84FC MOV.B @(12,R15),R0 Monochrome 835 { Monochrome 836 for(j=0 ; j>3 ; j++) 00000D5E 6483 MOV R8,R4 00000D60 0767 MUL.L R6,R7 00000D62 071A STS MACL,R7 00000D64 8F19 BF/S L689 00000D66 6E03 MOV R0,R14 00000D68 L690: Monochrome 837 { Monochrome 838 line = ~((unsigned char)~bmp[i*(real_width>>3)+j]<>3)+j] | (unsigned char)-1>>8-(width&7))<>3<<3)+8; 00000E0A 6C93 MOV R9,R12 00000E0C 4F22 STS.L PR,@-R15 00000E0E E800 MOV #0,R8 00000E10 4F12 STS.L MACL,@-R15 00000E12 7CFF ADD #-1,R12 00000E14 7FE8 ADD #-24,R15 00000E16 6DF3 MOV R15,R13 00000E18 54FF MOV.L @(60,R15),R4 00000E1A 4C21 SHAR R12 00000E1C 2F82 MOV.L R8,@R15 00000E1E 7D04 ADD #4,R13 00000E20 1F45 MOV.L R4,@(20,R15) 00000E22 4C21 SHAR R12 00000E24 4C21 SHAR R12 00000E26 62C3 MOV R12,R2 00000E28 4208 SHLL2 R2 00000E2A 4200 SHLL R2 00000E2C 7208 ADD #8,R2 Monochrome 856 if(!bmp || x<0 || x>128-width || y<1-height || y>63 || width<1 || height<1) return; 00000E2E 2BB8 TST R11,R11 00000E30 8F02 BF/S L796 00000E32 1F23 MOV.L R2,@(12,R15) 00000E34 A085 BRA L695 00000E36 0009 NOP 00000E38 L796: 00000E38 4A11 CMP/PZ R10 00000E3A 8901 BT L797 00000E3C A081 BRA L695 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 51 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00000E3E 0009 NOP 00000E40 L797: 00000E40 933D MOV.W L798,R3 ; H'0080 00000E42 3398 SUB R9,R3 00000E44 3A37 CMP/GT R3,R10 00000E46 8B01 BF L799 00000E48 A07B BRA L695 00000E4A 0009 NOP 00000E4C L799: 00000E4C E301 MOV #1,R3 00000E4E 3348 SUB R4,R3 00000E50 3E33 CMP/GE R3,R14 00000E52 8B76 BF L695 00000E54 E33F MOV #63,R3 00000E56 3E37 CMP/GT R3,R14 00000E58 8973 BT L695 00000E5A E001 MOV #1,R0 00000E5C 3903 CMP/GE R0,R9 00000E5E 8B70 BF L695 00000E60 3403 CMP/GE R0,R4 00000E62 8B6E BF L695 Monochrome 857 if(y < 0) begin = -y; 00000E64 4E11 CMP/PZ R14 00000E66 8D02 BT/S L696 Monochrome 858 if(y+height > 64) end = 64-y; 00000E68 E540 MOV #64,R5 00000E6A 62EB NEG R14,R2 00000E6C 2F22 MOV.L R2,@R15 00000E6E L696: 00000E6E 34EC ADD R14,R4 00000E70 3457 CMP/GT R5,R4 00000E72 8B01 BF L697 00000E74 35E8 SUB R14,R5 00000E76 1F55 MOV.L R5,@(20,R15) 00000E78 L697: Monochrome 859 shift = 8-(x&7); 00000E78 E307 MOV #7,R3 00000E7A 23A9 AND R10,R3 00000E7C E208 MOV #8,R2 00000E7E 3238 SUB R3,R2 Monochrome 860 screen = ML_vram_adress()+(y+begin<<4)+(x>>3); 00000E80 D30F MOV.L L798+2,R3 ; _sc0135 00000E82 E010 MOV #16,R0 00000E84 430B JSR @R3 00000E86 0F24 MOV.B R2,@(R0,R15) 00000E88 62F2 MOV.L @R15,R2 00000E8A 63A3 MOV R10,R3 00000E8C 3E2C ADD R2,R14 00000E8E 4E08 SHLL2 R14 00000E90 4E08 SHLL2 R14 00000E92 30EC ADD R14,R0 00000E94 4321 SHAR R3 00000E96 4321 SHAR R3 00000E98 4321 SHAR R3 00000E9A 6503 MOV R0,R5 00000E9C 353C ADD R3,R5 Monochrome 861 for(i=begin ; i .DATA.L _sc0135 00000EC4 L699: 00000EC4 57F2 MOV.L @(8,R15),R7 00000EC6 E010 MOV #16,R0 00000EC8 0767 MUL.L R6,R7 00000ECA 4C15 CMP/PL R12 Monochrome 862 { Monochrome 863 for(j=0 ; j>3 ; j++) 00000ECC 6483 MOV R8,R4 00000ECE 071A STS MACL,R7 00000ED0 8F18 BF/S L700 00000ED2 0EFC MOV.B @(R0,R15),R14 00000ED4 L701: Monochrome 864 { Monochrome 865 line = bmp[i*(real_width>>3)+j]<>3)+j] & -1<<(real_width-width))<127 || y<1-height || y>63 || height<1 || width<1) return; 00000F80 53F5 MOV.L @(20,R15),R3 00000F82 2338 TST R3,R3 00000F84 8B01 BF L801 00000F86 A103 BRA L706 00000F88 0009 NOP 00000F8A L801: 00000F8A E201 MOV #1,R2 00000F8C 53F2 MOV.L @(8,R15),R3 00000F8E 3238 SUB R3,R2 00000F90 3523 CMP/GE R2,R5 00000F92 8901 BT L802 00000F94 A0FC BRA L706 00000F96 0009 NOP 00000F98 L802: 00000F98 E17F MOV #127,R1 00000F9A 3517 CMP/GT R1,R5 00000F9C 8B01 BF L803 00000F9E A0F7 BRA L706 00000FA0 0009 NOP 00000FA2 L803: 00000FA2 E001 MOV #1,R0 00000FA4 3048 SUB R4,R0 00000FA6 3903 CMP/GE R0,R9 00000FA8 8901 BT L804 00000FAA A0F1 BRA L706 00000FAC 0009 NOP SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 55 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00000FAE L804: 00000FAE E23F MOV #63,R2 00000FB0 3927 CMP/GT R2,R9 00000FB2 8B01 BF L805 00000FB4 A0EC BRA L706 00000FB6 0009 NOP 00000FB8 L805: 00000FB8 E001 MOV #1,R0 00000FBA 3403 CMP/GE R0,R4 00000FBC 8901 BT L806 00000FBE A0E7 BRA L706 00000FC0 0009 NOP 00000FC2 L806: 00000FC2 52F2 MOV.L @(8,R15),R2 00000FC4 3203 CMP/GE R0,R2 00000FC6 8901 BT L807 00000FC8 A0E2 BRA L706 00000FCA 0009 NOP 00000FCC L807: Monochrome 885 p = (char*)&line; Monochrome 886 real_width = (width-1>>3<<3)+8; 00000FCC 52F2 MOV.L @(8,R15),R2 00000FCE 6BF3 MOV R15,R11 00000FD0 72FF ADD #-1,R2 00000FD2 4221 SHAR R2 00000FD4 4221 SHAR R2 00000FD6 4221 SHAR R2 00000FD8 4208 SHLL2 R2 00000FDA 4200 SHLL R2 00000FDC 7208 ADD #8,R2 Monochrome 887 if(y < 0) begin_y = -y; 00000FDE 4911 CMP/PZ R9 00000FE0 1F23 MOV.L R2,@(12,R15) 00000FE2 8D02 BT/S L707 00000FE4 E600 MOV #0,R6 00000FE6 A001 BRA L708 00000FE8 689B NEG R9,R8 00000FEA L707: Monochrome 888 else begin_y = 0; 00000FEA 6863 MOV R6,R8 00000FEC L708: Monochrome 889 if(y+height > 64) end_y = 64-y; 00000FEC E740 MOV #64,R7 00000FEE 6393 MOV R9,R3 00000FF0 334C ADD R4,R3 00000FF2 3377 CMP/GT R7,R3 00000FF4 8B03 BF L709 00000FF6 3798 SUB R9,R7 00000FF8 A002 BRA L710 00000FFA 1F7C MOV.L R7,@(48,R15) 00000FFC L800: 00000FFC 0081 .DATA.W H'0081 00000FFE L709: Monochrome 890 else end_y = height; 00000FFE 1F4C MOV.L R4,@(48,R15) 00001000 L710: Monochrome 891 shift = 8-(x&7); SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 56 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00001000 E307 MOV #7,R3 00001002 2359 AND R5,R3 00001004 E408 MOV #8,R4 00001006 3438 SUB R3,R4 00001008 4511 CMP/PZ R5 0000100A 8D0A BT/S L711 0000100C 6E4E EXTS.B R4,R14 Monochrome 892 if(x<0) Monochrome 893 { Monochrome 894 begin_x = -x>>3; 0000100E 6C5B NEG R5,R12 00001010 4C21 SHAR R12 00001012 4C21 SHAR R12 00001014 4C21 SHAR R12 Monochrome 895 if(shift != 8) bool1 = 0; 00001016 60E3 MOV R14,R0 00001018 8808 CMP/EQ #8,R0 0000101A 8903 BT L713 0000101C E01C MOV #28,R0 0000101E A001 BRA L713 00001020 0F64 MOV.B R6,@(R0,R15) 00001022 L711: Monochrome 896 } else begin_x = 0; 00001022 6C63 MOV R6,R12 00001024 L713: 00001024 9343 MOV.W L808,R3 ; H'0080 00001026 6253 MOV R5,R2 00001028 4221 SHAR R2 0000102A 4221 SHAR R2 0000102C 4221 SHAR R2 0000102E 1F21 MOV.L R2,@(4,R15) 00001030 54F3 MOV.L @(12,R15),R4 00001032 74FF ADD #-1,R4 00001034 51F3 MOV.L @(12,R15),R1 00001036 4421 SHAR R4 00001038 4421 SHAR R4 0000103A 4421 SHAR R4 0000103C 315C ADD R5,R1 0000103E 3137 CMP/GT R3,R1 00001040 8B04 BF L714 Monochrome 897 if(x+real_width > 128) end_x = 15-(x>>3), bool2 = 0; 00001042 ED0F MOV #15,R13 00001044 3D28 SUB R2,R13 00001046 E034 MOV #52,R0 00001048 A001 BRA L715 0000104A 0F64 MOV.B R6,@(R0,R15) 0000104C L714: Monochrome 898 else end_x = real_width-1>>3; 0000104C 6D43 MOV R4,R13 0000104E L715: Monochrome 899 bool3 = (end_x == real_width-1>>3); 0000104E 3D40 CMP/EQ R4,R13 Monochrome 900 screen = ML_vram_adress()+(y+begin_y<<4)+(x>>3); 00001050 DA17 MOV.L L808+2,R10 ; _sc0135 00001052 61F3 MOV R15,R1 00001054 0029 MOVT R0 00001056 712C ADD #44,R1 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 57 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00001058 4A0B JSR @R10 0000105A 2100 MOV.B R0,@R1 0000105C 53F1 MOV.L @(4,R15),R3 0000105E 61B3 MOV R11,R1 Monochrome 901 Monochrome 902 for(i=begin_y ; i .DATA.L _sc0135 000010B4 L717: Monochrome 903 { Monochrome 904 if(begin_x < end_x) 000010B4 3CD3 CMP/GE R13,R12 000010B6 8938 BT L718 Monochrome 905 { Monochrome 906 line = bmp[i*(real_width>>3)+begin_x] << shift; 000010B8 53F8 MOV.L @(32,R15),R3 000010BA 64C3 MOV R12,R4 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 58 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 000010BC 6230 MOV.B @R3,R2 000010BE E01C MOV #28,R0 000010C0 622C EXTU.B R2,R2 000010C2 42ED SHLD R14,R2 000010C4 2F21 MOV.W R2,@R15 000010C6 03FC MOV.B @(R0,R15),R3 000010C8 2338 TST R3,R3 000010CA 8D04 BT/S L719 000010CC 34AC ADD R10,R4 Monochrome 907 if(bool1) screen[begin_x] |= *p; 000010CE 63B0 MOV.B @R11,R3 000010D0 6140 MOV.B @R4,R1 000010D2 213B OR R3,R1 000010D4 2410 MOV.B R1,@R4 000010D6 L719: Monochrome 908 if(shift!=8) screen[begin_x+1] |= *(p+1); 000010D6 60E3 MOV R14,R0 000010D8 8808 CMP/EQ #8,R0 000010DA 8904 BT L720 000010DC 52F1 MOV.L @(4,R15),R2 000010DE 6320 MOV.B @R2,R3 000010E0 8441 MOV.B @(1,R4),R0 000010E2 203B OR R3,R0 000010E4 8041 MOV.B R0,@(1,R4) 000010E6 L720: Monochrome 909 for(j=begin_x+1 ; j>3)+j] << shift; Monochrome 912 screen[j] |= *p; Monochrome 913 if(shift!=8) screen[j+1] |= *(p+1); 000010FE 60E3 MOV R14,R0 00001100 6360 MOV.B @R6,R3 00001102 8808 CMP/EQ #8,R0 00001104 633C EXTU.B R3,R3 00001106 43ED SHLD R14,R3 00001108 2F31 MOV.W R3,@R15 0000110A 62B0 MOV.B @R11,R2 0000110C 6170 MOV.B @R7,R1 0000110E 212B OR R2,R1 00001110 8D05 BT/S L723 00001112 2710 MOV.B R1,@R7 00001114 52F1 MOV.L @(4,R15),R2 00001116 6320 MOV.B @R2,R3 00001118 6150 MOV.B @R5,R1 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 59 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 0000111A 213B OR R3,R1 0000111C 2510 MOV.B R1,@R5 0000111E L723: 0000111E 7401 ADD #1,R4 00001120 7501 ADD #1,R5 00001122 7701 ADD #1,R7 00001124 34D3 CMP/GE R13,R4 00001126 8FEA BF/S L722 00001128 7601 ADD #1,R6 0000112A L718: Monochrome 914 } Monochrome 915 } Monochrome 916 line = bmp[i*(real_width>>3)+end_x]; Monochrome 917 if(bool3) line &= -1<127 || y<1-height || y>63 || height<1 || width<1) return; 000011CE 53F5 MOV.L @(20,R15),R3 000011D0 2338 TST R3,R3 000011D2 8B01 BF L809 000011D4 A109 BRA L730 000011D6 0009 NOP 000011D8 L809: 000011D8 53F2 MOV.L @(8,R15),R3 000011DA E201 MOV #1,R2 000011DC 3238 SUB R3,R2 000011DE 3523 CMP/GE R2,R5 000011E0 8901 BT L810 000011E2 A102 BRA L730 000011E4 0009 NOP 000011E6 L810: 000011E6 E17F MOV #127,R1 000011E8 3517 CMP/GT R1,R5 000011EA 8B01 BF L811 000011EC A0FD BRA L730 000011EE 0009 NOP 000011F0 L811: 000011F0 E001 MOV #1,R0 000011F2 3048 SUB R4,R0 000011F4 3903 CMP/GE R0,R9 000011F6 8901 BT L812 000011F8 A0F7 BRA L730 000011FA 0009 NOP 000011FC L812: 000011FC E23F MOV #63,R2 000011FE 3927 CMP/GT R2,R9 00001200 8B01 BF L813 00001202 A0F2 BRA L730 00001204 0009 NOP 00001206 L813: 00001206 E001 MOV #1,R0 00001208 3403 CMP/GE R0,R4 0000120A 8901 BT L814 0000120C A0ED BRA L730 0000120E 0009 NOP 00001210 L814: 00001210 52F2 MOV.L @(8,R15),R2 00001212 3203 CMP/GE R0,R2 00001214 8901 BT L815 00001216 A0E8 BRA L730 00001218 0009 NOP 0000121A L815: Monochrome 934 p = (char*)&line; 0000121A 6BF3 MOV R15,R11 Monochrome 935 real_width = (width-1>>3<<3)+8; 0000121C 52F2 MOV.L @(8,R15),R2 0000121E 72FF ADD #-1,R2 00001220 4221 SHAR R2 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 62 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00001222 4221 SHAR R2 00001224 4221 SHAR R2 00001226 4208 SHLL2 R2 00001228 4200 SHLL R2 0000122A 7208 ADD #8,R2 0000122C 1F23 MOV.L R2,@(12,R15) Monochrome 936 if(y < 0) begin_y = -y; 0000122E 4911 CMP/PZ R9 00001230 8D02 BT/S L731 00001232 E600 MOV #0,R6 00001234 A001 BRA L732 00001236 689B NEG R9,R8 00001238 L731: Monochrome 937 else begin_y = 0; 00001238 6863 MOV R6,R8 0000123A L732: Monochrome 938 if(y+height > 64) end_y = 64-y; 0000123A E740 MOV #64,R7 0000123C 6393 MOV R9,R3 0000123E 334C ADD R4,R3 00001240 3377 CMP/GT R7,R3 00001242 8B02 BF L733 00001244 3798 SUB R9,R7 00001246 A001 BRA L734 00001248 1F7C MOV.L R7,@(48,R15) 0000124A L733: Monochrome 939 else end_y = height; 0000124A 1F4C MOV.L R4,@(48,R15) 0000124C L734: Monochrome 940 shift = 8-(x&7); 0000124C E307 MOV #7,R3 0000124E 2359 AND R5,R3 00001250 E408 MOV #8,R4 00001252 3438 SUB R3,R4 00001254 4511 CMP/PZ R5 00001256 8D0A BT/S L735 00001258 6E4E EXTS.B R4,R14 Monochrome 941 if(x<0) Monochrome 942 { Monochrome 943 begin_x = -x>>3; 0000125A 6C5B NEG R5,R12 0000125C 4C21 SHAR R12 0000125E 4C21 SHAR R12 00001260 4C21 SHAR R12 Monochrome 944 if(shift != 8) bool1 = 0; 00001262 60E3 MOV R14,R0 00001264 8808 CMP/EQ #8,R0 00001266 8903 BT L737 00001268 E01C MOV #28,R0 0000126A A001 BRA L737 0000126C 0F64 MOV.B R6,@(R0,R15) 0000126E L735: Monochrome 945 } else begin_x = 0; 0000126E 6C63 MOV R6,R12 00001270 L737: 00001270 9343 MOV.W L816,R3 ; H'0080 00001272 6253 MOV R5,R2 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 63 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00001274 4221 SHAR R2 00001276 4221 SHAR R2 00001278 4221 SHAR R2 0000127A 1F21 MOV.L R2,@(4,R15) 0000127C 54F3 MOV.L @(12,R15),R4 0000127E 74FF ADD #-1,R4 00001280 51F3 MOV.L @(12,R15),R1 00001282 4421 SHAR R4 00001284 4421 SHAR R4 00001286 4421 SHAR R4 00001288 315C ADD R5,R1 0000128A 3137 CMP/GT R3,R1 0000128C 8B04 BF L738 Monochrome 946 if(x+real_width > 128) end_x = 15-(x>>3), bool2 = 0; 0000128E ED0F MOV #15,R13 00001290 3D28 SUB R2,R13 00001292 E034 MOV #52,R0 00001294 A001 BRA L739 00001296 0F64 MOV.B R6,@(R0,R15) 00001298 L738: Monochrome 947 else end_x = real_width-1>>3; 00001298 6D43 MOV R4,R13 0000129A L739: Monochrome 948 bool3 = (end_x == real_width-1>>3); 0000129A 3D40 CMP/EQ R4,R13 Monochrome 949 screen = ML_vram_adress()+(y+begin_y<<4)+(x>>3); 0000129C DA17 MOV.L L816+2,R10 ; _sc0135 0000129E 61F3 MOV R15,R1 000012A0 0029 MOVT R0 000012A2 712C ADD #44,R1 000012A4 4A0B JSR @R10 000012A6 2100 MOV.B R0,@R1 000012A8 53F1 MOV.L @(4,R15),R3 000012AA 61B3 MOV R11,R1 Monochrome 950 Monochrome 951 for(i=begin_y ; i .DATA.L _sc0135 00001300 L741: Monochrome 952 { Monochrome 953 if(begin_x < end_x) 00001300 3CD3 CMP/GE R13,R12 00001302 893C BT L742 Monochrome 954 Monochrome 955 { Monochrome 956 line = ~((unsigned char)~bmp[i*(real_width>>3)+begin_x]<>3)+j]<>3)+end_x]; Monochrome 967 if(bool3) line &= -1<127 || y<1-height || y>63 || height<1 || width<1) return; Monochrome 984 p = (char*)&line; Monochrome 985 real_width = (width-1>>3<<3)+8; Monochrome 986 if(y < 0) begin_y = -y; Monochrome 987 else begin_y = 0; Monochrome 988 if(y+height > 64) end_y = 64-y; Monochrome 989 else end_y = height; Monochrome 990 shift = 8-(x&7); Monochrome 991 if(x<0) Monochrome 992 { Monochrome 993 begin_x = -x>>3; Monochrome 994 if(shift != 8) bool1 = 0; Monochrome 995 } else begin_x = 0; Monochrome 996 if(x+real_width > 128) end_x = 15-(x>>3), bool2 = 0; Monochrome 997 else end_x = real_width-1>>3; Monochrome 998 bool3 = (end_x == real_width-1>>3); Monochrome 999 screen = ML_vram_adress()+(y+begin_y<<4)+(x>>3); Monochrome 1000 Monochrome 1001 for(i=begin_y ; i>3)+begin_x] << shift; Monochrome 1006 if(bool1) screen[begin_x] ^= *p; Monochrome 1007 if(shift!=8) screen[begin_x+1] ^= *(p+1); Monochrome 1008 for(j=begin_x+1 ; j>3)+j] << shift; Monochrome 1011 screen[j] ^= *p; Monochrome 1012 if(shift!=8) screen[j+1] ^= *(p+1); Monochrome 1013 } Monochrome 1014 } Monochrome 1015 line = bmp[i*(real_width>>3)+end_x]; Monochrome 1016 if(bool3) line &= -1<120 || y<-7 || y>63) return; Monochrome 1032 if(y < 0) begin = -y; Monochrome 1033 if(y > 56) end = 64-y; Monochrome 1034 shift = 8-(x&7); Monochrome 1035 screen = ML_vram_adress()+(y+begin<<4)+(x>>3); Monochrome 1036 for(i=begin ; i120 || y<-7 || y>63) return; Monochrome 1052 if(y < 0) begin = -y; Monochrome 1053 if(y > 56) end = 64-y; Monochrome 1054 shift = 8-(x&7); Monochrome 1055 screen = ML_vram_adress()+(y+begin<<4)+(x>>3); Monochrome 1056 for(i=begin ; i120 || y<-7 || y>63) return; Monochrome 1072 if(y < 0) begin = -y; Monochrome 1073 if(y > 56) end = 64-y; Monochrome 1074 shift = 8-(x&7); Monochrome 1075 screen = ML_vram_adress()+(y+begin<<4)+(x>>3); SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 69 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT Monochrome 1076 for(i=begin ; i127 || y<-7 || y>63) return; Monochrome 1092 if(y < 0) begin = -y; Monochrome 1093 if(y > 56) end = 64-y; Monochrome 1094 shift = 8-(x&7); Monochrome 1095 if(x < 0) bool1 = 0; Monochrome 1096 if(x>120 || shift==8) bool2 = 0; Monochrome 1097 screen = ML_vram_adress()+(y+begin<<4)+(x>>3); Monochrome 1098 for(i=begin ; i127 || y<-7 || y>63) return; Monochrome 1114 if(y < 0) begin = -y; Monochrome 1115 if(y > 56) end = 64-y; Monochrome 1116 shift = 8-(x&7); Monochrome 1117 if(x < 0) bool1 = 0; Monochrome 1118 if(x>120 || shift==8) bool2 = 0; Monochrome 1119 screen = ML_vram_adress()+(y+begin<<4)+(x>>3); Monochrome 1120 for(i=begin ; i127 || y<-7 || y>63) return; Monochrome 1136 if(y < 0) begin = -y; Monochrome 1137 if(y > 56) end = 64-y; Monochrome 1138 shift = 8-(x&7); Monochrome 1139 if(x < 0) bool1 = 0; Monochrome 1140 if(x>120 || shift==8) bool2 = 0; Monochrome 1141 screen = ML_vram_adress()+(y+begin<<4)+(x>>3); Monochrome 1142 for(i=begin ; i112 || y<-15 || y>63) return; Monochrome 1158 if(y < 0) begin = -y; Monochrome 1159 if(y > 48) end = 64-y; Monochrome 1160 shift = 8-(x&7); Monochrome 1161 screen = ML_vram_adress()+(y+begin<<4)+(x>>3); Monochrome 1162 for(i=begin ; i112 || y<-15 || y>63) return; Monochrome 1179 if(y < 0) begin = -y; Monochrome 1180 if(y > 48) end = 64-y; Monochrome 1181 shift = 8-(x&7); Monochrome 1182 screen = ML_vram_adress()+(y+begin<<4)+(x>>3); Monochrome 1183 for(i=begin ; i112 || y<-15 || y>63) return; Monochrome 1200 if(y < 0) begin = -y; Monochrome 1201 if(y > 48) end = 64-y; Monochrome 1202 shift = 8-(x&7); Monochrome 1203 screen = ML_vram_adress()+(y+begin<<4)+(x>>3); Monochrome 1204 for(i=begin ; i127 || y<-15 || y>63) return; 0000142C 53F1 MOV.L @(4,R15),R3 0000142E 2338 TST R3,R3 SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 72 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT 00001430 8D65 BT/S L754 00001432 7C01 ADD #1,R12 00001434 E3F1 MOV #-15,R3 00001436 3E33 CMP/GE R3,R14 00001438 8B61 BF L754 0000143A E17F MOV #127,R1 0000143C 3E17 CMP/GT R1,R14 0000143E 895E BT L754 00001440 3D33 CMP/GE R3,R13 00001442 8B5C BF L754 00001444 E23F MOV #63,R2 00001446 3D27 CMP/GT R2,R13 00001448 8959 BT L754 Monochrome 1221 if(y < 0) begin = -y; 0000144A 4D11 CMP/PZ R13 0000144C 8D01 BT/S L755 Monochrome 1222 if(y > 48) end = 64-y; 0000144E E230 MOV #48,R2 00001450 6ADB NEG R13,R10 00001452 L755: 00001452 3D27 CMP/GT R2,R13 00001454 8B02 BF L756 00001456 E040 MOV #64,R0 00001458 30D8 SUB R13,R0 0000145A 80FC MOV.B R0,@(12,R15) 0000145C L756: Monochrome 1223 shift = 8-(x&7); 0000145C E307 MOV #7,R3 0000145E 23E9 AND R14,R3 00001460 E808 MOV #8,R8 Monochrome 1224 if(x < 0) bool1 = 0; 00001462 4E11 CMP/PZ R14 00001464 8D01 BT/S L757 00001466 3838 SUB R3,R8 00001468 6943 MOV R4,R9 0000146A L757: Monochrome 1225 if(x<-8 || x>119) bool2 = 0; 0000146A E3F8 MOV #-8,R3 0000146C 3E33 CMP/GE R3,R14 0000146E 8B02 BF L759 00001470 E177 MOV #119,R1 00001472 3E17 CMP/GT R1,R14 00001474 8B01 BF L758 00001476 L759: 00001476 6043 MOV R4,R0 00001478 80F8 MOV.B R0,@(8,R15) 0000147A L758: Monochrome 1226 if(x>111 || shift==8) bool3 = 0; 0000147A E36F MOV #111,R3 0000147C 3E37 CMP/GT R3,R14 0000147E 8902 BT L761 00001480 608E EXTS.B R8,R0 00001482 8808 CMP/EQ #8,R0 00001484 8B00 BF L760 00001486 L761: 00001486 6B43 MOV R4,R11 00001488 L760: SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 73 SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT Monochrome 1227 screen = ML_vram_adress()+(y+begin<<4)+(x>>3); 00001488 D322 MOV.L L817+2,R3 ; _sc0135 0000148A 430B JSR @R3 0000148C 0009 NOP 0000148E 62AE EXTS.B R10,R2 00001490 53F1 MOV.L @(4,R15),R3 00001492 4E21 SHAR R14 00001494 32DC ADD R13,R2 00001496 4208 SHLL2 R2 00001498 4208 SHLL2 R2 0000149A 302C ADD R2,R0 0000149C 4E21 SHAR R14 0000149E 4E21 SHAR R14 000014A0 6403 MOV R0,R4 000014A2 34EC ADD R14,R4 000014A4 84FC MOV.B @(12,R15),R0 Monochrome 1228 for(i=begin ; i .DATA.L _sc0135 Monochrome 1237 #endif Monochrome 1238 Monochrome 1239 #ifdef ML_BMP_16_AND_CL Monochrome 1240 void ML_bmp_16_and_cl(const unsigned short *bmp, int x, int y) Monochrome 1241 { Monochrome 1242 unsigned long line; Monochrome 1243 char i, shift, begin=0, end=16, bool1=1, bool2=1, bool3=1, *screen, *p=(char*)&line+1; Monochrome 1244 if(!bmp || x<-15 || x>127 || y<-15 || y>63) return; Monochrome 1245 if(y < 0) begin = -y; Monochrome 1246 if(y > 48) end = 64-y; Monochrome 1247 shift = 8-(x&7); Monochrome 1248 if(x < 0) bool1 = 0; Monochrome 1249 if(x<-8 || x>119) bool2 = 0; Monochrome 1250 if(x>111 || shift==8) bool3 = 0; Monochrome 1251 screen = ML_vram_adress()+(y+begin<<4)+(x>>3); Monochrome 1252 for(i=begin ; i127 || y<-15 || y>63) return; Monochrome 1269 if(y < 0) begin = -y; Monochrome 1270 if(y > 48) end = 64-y; Monochrome 1271 shift = 8-(x&7); Monochrome 1272 if(x < 0) bool1 = 0; Monochrome 1273 if(x<-8 || x>119) bool2 = 0; Monochrome 1274 if(x>111 || shift==8) bool3 = 0; Monochrome 1275 screen = ML_vram_adress()+(y+begin<<4)+(x>>3); Monochrome 1276 for(i=begin ; i