FruitNinja/src/Debug/MonochromeLib.lst

5022 lines
256 KiB
Plaintext
Executable File

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 <stdlib.h>
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<end ; i++) pointer_byte[i] = 0;
00000016 E400 MOV #0,R4
00000018 6143 MOV R4,R1
0000001A 4615 CMP/PL R6
0000001C 8F05 BF/S L554
0000001E 6573 MOV R7,R5
00000020 L555:
00000020 2540 MOV.B R4,@R5
00000022 7101 ADD #1,R1
00000024 3163 CMP/GE R6,R1
00000026 8FFB BF/S L555
00000028 7501 ADD #1,R5
0000002A L554:
Monochrome 132 pointer_long = (int*) (vram+end);
0000002A 6163 MOV R6,R1
0000002C 9071 MOV.W L769,R0 ; H'03FC
0000002E 317C ADD R7,R1
00000030 6513 MOV R1,R5
00000032 301C ADD R1,R0
Monochrome 133 for(i=0 ; i<255 ; i++) pointer_long[i] = 0;
00000034 L556:
00000034 2542 MOV.L R4,@R5
00000036 7504 ADD #4,R5
00000038 3502 CMP/HS R0,R5
0000003A 8BFB BF L556
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 4
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 134 pointer_byte += 1020+end;
0000003C 9269 MOV.W L769,R2 ; H'03FC
0000003E 362C ADD R2,R6
00000040 3D6C ADD R6,R13
Monochrome 135 end = vram&3;
00000042 E603 MOV #3,R6
00000044 2679 AND R7,R6
Monochrome 136 for(i=0 ; i<end ; i++) pointer_byte[i] = 0;
00000046 6743 MOV R4,R7
00000048 4615 CMP/PL R6
0000004A 8F05 BF/S L557
0000004C 65D3 MOV R13,R5
0000004E L558:
0000004E 7701 ADD #1,R7
00000050 2540 MOV.B R4,@R5
00000052 3763 CMP/GE R6,R7
00000054 8FFB BF/S L558
00000056 7501 ADD #1,R5
00000058 L557:
Monochrome 137 }
00000058 4F26 LDS.L @R15+,PR
0000005A 000B RTS
0000005C 6DF6 MOV.L @R15+,R13
Monochrome 138 #endif
Monochrome 139
Monochrome 140 #ifdef ML_CLEAR_SCREEN
Monochrome 141 void ML_clear_screen()
Monochrome 142 {
Monochrome 143 char *LCD_register_selector = (char*)0xB4000000, *LCD_data_register = (char*)0xB4010000;
Monochrome 144 int i, j;
Monochrome 145 for(i=0 ; i<64 ; i++)
Monochrome 146 {
Monochrome 147 *LCD_register_selector = 4;
Monochrome 148 *LCD_data_register = i|192;
Monochrome 149 *LCD_register_selector = 4;
Monochrome 150 *LCD_data_register = 0;
Monochrome 151 *LCD_register_selector = 7;
Monochrome 152 for(j=0 ; j<16 ; j++) *LCD_data_register = 0;
Monochrome 153 }
Monochrome 154 }
Monochrome 155 #endif
Monochrome 156
Monochrome 157 #ifdef ML_DISPLAY_VRAM
Monochrome 158 void ML_display_vram()
0000005E _ML_display_vram: ; function: ML_display_vram
; frame size=20
0000005E 2FC6 MOV.L R12,@-R15
00000060 2FB6 MOV.L R11,@-R15
00000062 2FA6 MOV.L R10,@-R15
00000064 2F96 MOV.L R9,@-R15
00000066 4F22 STS.L PR,@-R15
Monochrome 159 {
Monochrome 160 char *LCD_register_selector = (char*)0xB4000000, *LCD_data_register = (char*)0xB4010000, *vram;
Monochrome 161 int i, j;
Monochrome 162 vram = ML_vram_adress();
00000068 DC2B MOV.L L769+6,R12 ; _sc0135
0000006A 4C0B JSR @R12
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 5
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000006C 0009 NOP
0000006E 6C03 MOV R0,R12
Monochrome 163 for(i=0 ; i<64 ; i++)
00000070 D52A MOV.L L769+10,R5 ; H'B4000000
00000072 E940 MOV #64,R9
00000074 D42A MOV.L L769+14,R4 ; H'B4010000
00000076 EA10 MOV #16,R10
00000078 EB07 MOV #7,R11
0000007A E100 MOV #0,R1
0000007C E704 MOV #4,R7
0000007E 6013 MOV R1,R0
00000080 L559:
Monochrome 164 {
Monochrome 165 *LCD_register_selector = 4;
00000080 2570 MOV.B R7,@R5
Monochrome 166 *LCD_data_register = i|192;
00000082 E3C0 MOV #-64,R3
00000084 230B OR R0,R3
Monochrome 167 *LCD_register_selector = 4;
Monochrome 168 *LCD_data_register = 0;
Monochrome 169 *LCD_register_selector = 7;
Monochrome 170 for(j=0 ; j<16 ; j++) *LCD_data_register = *vram++;
00000086 66A3 MOV R10,R6
00000088 2430 MOV.B R3,@R4
0000008A 2570 MOV.B R7,@R5
0000008C 2410 MOV.B R1,@R4
0000008E 25B0 MOV.B R11,@R5
00000090 L560:
00000090 63C4 MOV.B @R12+,R3
00000092 4610 DT R6
00000094 8FFC BF/S L560
00000096 2430 MOV.B R3,@R4
00000098 7001 ADD #1,R0
0000009A 3093 CMP/GE R9,R0
0000009C 8BF0 BF L559
Monochrome 171 }
Monochrome 172 }
0000009E 4F26 LDS.L @R15+,PR
000000A0 69F6 MOV.L @R15+,R9
000000A2 6AF6 MOV.L @R15+,R10
000000A4 6BF6 MOV.L @R15+,R11
000000A6 000B RTS
000000A8 6CF6 MOV.L @R15+,R12
Monochrome 173 #endif
Monochrome 174
Monochrome 175 #ifdef ML_SET_CONTRAST
Monochrome 176 void ML_set_contrast(unsigned char contrast)
Monochrome 177 {
Monochrome 178 char *LCD_register_selector = (char*)0xB4000000, *LCD_data_register = (char*)0xB4010000;
Monochrome 179 *LCD_register_selector = 6;
Monochrome 180 *LCD_data_register = contrast;
Monochrome 181 }
Monochrome 182 #endif
Monochrome 183
Monochrome 184 #ifdef ML_GET_CONTRAST
Monochrome 185 unsigned char ML_get_contrast()
Monochrome 186 {
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 6
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 187 char *LCD_register_selector = (char*)0xB4000000, *LCD_data_register = (char*)0xB4010000;
Monochrome 188 *LCD_register_selector = 6;
Monochrome 189 return *LCD_data_register;
Monochrome 190 }
Monochrome 191 #endif
Monochrome 192
Monochrome 193 #ifdef ML_PIXEL
Monochrome 194 void ML_pixel(int x, int y, ML_Color color)
000000AA _ML_pixel: ; function: ML_pixel
; frame size=16
000000AA 2FE6 MOV.L R14,@-R15
000000AC 2FD6 MOV.L R13,@-R15
000000AE 6E43 MOV R4,R14
Monochrome 195 {
Monochrome 196 char* vram = ML_vram_adress();
000000B0 D319 MOV.L L769+6,R3 ; _sc0135
000000B2 6D53 MOV R5,R13
000000B4 4F22 STS.L PR,@-R15
000000B6 7FFC ADD #-4,R15
000000B8 430B JSR @R3
000000BA 2F62 MOV.L R6,@R15
Monochrome 197 if(x&~127 || y&~63) return;
000000BC E280 MOV #-128,R2
000000BE 22E8 TST R14,R2
000000C0 8F3E BF/S L563
000000C2 6603 MOV R0,R6
000000C4 E1C0 MOV #-64,R1
000000C6 21D8 TST R13,R1
000000C8 8B3A BF L563
000000CA 64D3 MOV R13,R4
000000CC 9522 MOV.W L769+2,R5 ; H'0080
000000CE 63E3 MOV R14,R3
000000D0 60F2 MOV.L @R15,R0
000000D2 4408 SHLL2 R4
000000D4 4408 SHLL2 R4
000000D6 4321 SHAR R3
000000D8 4321 SHAR R3
000000DA 4321 SHAR R3
000000DC 343C ADD R3,R4
000000DE 346C ADD R6,R4
000000E0 E307 MOV #7,R3
000000E2 23E9 AND R14,R3
000000E4 633B NEG R3,R3
000000E6 8801 CMP/EQ #1,R0
000000E8 8D08 BT/S L544
000000EA 453C SHAD R3,R5
000000EC 8800 CMP/EQ #0,R0
000000EE 8908 BT L545
000000F0 8802 CMP/EQ #2,R0
000000F2 890A BT L546
000000F4 8803 CMP/EQ #3,R0
000000F6 8915 BT L547
000000F8 A022 BRA L563
000000FA 0009 NOP
000000FC L544: ; case label
Monochrome 198 switch(color)
Monochrome 199 {
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 7
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 200 case ML_BLACK:
Monochrome 201 vram[(y<<4)+(x>>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 ; i++)
000001A8 6343 MOV R4,R3
000001AA 33D3 CMP/GE R13,R3
000001AC 8D2B BT/S L575
000001AE 2F42 MOV.L R4,@R15
000001B0 L573:
Monochrome 261 {
Monochrome 262 x += sx;
Monochrome 263 cumul += dy;
000001B0 3AEC ADD R14,R10
Monochrome 264 if(cumul > 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 ; i++)
000001DE 6343 MOV R4,R3
000001E0 33E3 CMP/GE R14,R3
000001E2 8D10 BT/S L575
000001E4 2F42 MOV.L R4,@R15
000001E6 L577:
Monochrome 276 {
Monochrome 277 y += sy;
Monochrome 278 cumul += dx;
000001E6 3ADC ADD R13,R10
000001E8 51F1 MOV.L @(4,R15),R1
Monochrome 279 if(cumul > 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<x2>>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<x2>>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<x2>>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<border_width ; i++)
00000544 E300 MOV #0,R3
00000546 6973 MOV R7,R9
00000548 1F31 MOV.L R3,@(4,R15)
0000054A 4E15 CMP/PL R14
0000054C 8F11 BF/S L614
0000054E 6A53 MOV R5,R10
00000550 L615:
Monochrome 428 {
Monochrome 429 ML_horizontal_line(y1+i, x1, x2, border_color);
00000550 67B3 MOV R11,R7
00000552 66C3 MOV R12,R6
00000554 65D3 MOV R13,R5
00000556 BE63 BSR _ML_horizontal_line
00000558 64A3 MOV R10,R4
Monochrome 430 ML_horizontal_line(y2-i, x1, x2, border_color);
0000055A 67B3 MOV R11,R7
0000055C 66C3 MOV R12,R6
0000055E 65D3 MOV R13,R5
00000560 BE5E BSR _ML_horizontal_line
00000562 6493 MOV R9,R4
00000564 52F1 MOV.L @(4,R15),R2
00000566 79FF ADD #-1,R9
00000568 7201 ADD #1,R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 22
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000056A 32E3 CMP/GE R14,R2
0000056C 1F21 MOV.L R2,@(4,R15)
0000056E 8FEF BF/S L615
00000570 7A01 ADD #1,R10
00000572 L614:
Monochrome 431 }
Monochrome 432 for(i=y1+border_width ; i<=y2-border_width ; i++)
00000572 5EF3 MOV.L @(12,R15),R14
00000574 5AF2 MOV.L @(8,R15),R10
00000576 3E87 CMP/GT R8,R14
00000578 69F2 MOV.L @R15,R9
0000057A 7AFF ADD #-1,R10
0000057C 8D0D BT/S L613
0000057E 7901 ADD #1,R9
00000580 L617:
Monochrome 433 {
Monochrome 434 ML_horizontal_line(i, x1, x1+border_width-1, border_color);
00000580 67B3 MOV R11,R7
00000582 66A3 MOV R10,R6
00000584 65D3 MOV R13,R5
00000586 BE4B BSR _ML_horizontal_line
00000588 64E3 MOV R14,R4
Monochrome 435 ML_horizontal_line(i, x2-border_width+1, x2, border_color);
0000058A 67B3 MOV R11,R7
0000058C 66C3 MOV R12,R6
0000058E 6593 MOV R9,R5
00000590 BE46 BSR _ML_horizontal_line
00000592 64E3 MOV R14,R4
00000594 7E01 ADD #1,R14
00000596 3E87 CMP/GT R8,R14
00000598 8BF2 BF L617
0000059A L613:
Monochrome 436 }
Monochrome 437 }
Monochrome 438 if(fill_color != ML_TRANSPARENT)
0000059A 50FE MOV.L @(56,R15),R0
0000059C 88FF CMP/EQ #-1,R0
0000059E 890A BT L618
Monochrome 439 {
Monochrome 440 for(i=y1+border_width ; i<=y2-border_width ; i++)
000005A0 5EF3 MOV.L @(12,R15),R14
000005A2 3E87 CMP/GT R8,R14
000005A4 8907 BT L618
000005A6 L620:
Monochrome 441 ML_horizontal_line(i, x1+border_width, x2-border_width, fill_color);
000005A6 57FE MOV.L @(56,R15),R7
000005A8 66F2 MOV.L @R15,R6
000005AA 55F2 MOV.L @(8,R15),R5
000005AC BE38 BSR _ML_horizontal_line
000005AE 64E3 MOV R14,R4
000005B0 7E01 ADD #1,R14
000005B2 3E87 CMP/GT R8,R14
000005B4 8BF7 BF L620
000005B6 L618:
Monochrome 442 }
Monochrome 443 }
000005B6 7F10 ADD #16,R15
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 23
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000005B8 4F26 LDS.L @R15+,PR
000005BA 68F6 MOV.L @R15+,R8
000005BC 69F6 MOV.L @R15+,R9
000005BE 6AF6 MOV.L @R15+,R10
000005C0 6BF6 MOV.L @R15+,R11
000005C2 6CF6 MOV.L @R15+,R12
000005C4 6DF6 MOV.L @R15+,R13
000005C6 000B RTS
000005C8 6EF6 MOV.L @R15+,R14
Monochrome 444 #endif
Monochrome 445
Monochrome 446 #ifdef ML_POLYGON
Monochrome 447 void ML_polygon(const int *x, const int *y, int nb_vertices, ML_Color color)
Monochrome 448 {
Monochrome 449 int i;
Monochrome 450 if(nb_vertices < 1) return;
Monochrome 451 for(i=0 ; i<nb_vertices-1 ; i++)
Monochrome 452 ML_line(x[i], y[i], x[i+1], y[i+1], color);
Monochrome 453 ML_line(x[i], y[i], x[0], y[0], color);
Monochrome 454 }
Monochrome 455 #endif
Monochrome 456
Monochrome 457 #ifdef ML_FILLED_POLYGON
Monochrome 458 static int ML_filled_polygon_quicksord_partition(int *t, int p, int r)
000005CA __$ML_filled_polygon_quicksord_partition:
; function: ML_filled_polygon_quicksord_partition
; frame size=20
Monochrome 459 {
Monochrome 460 int i, j, x, tmp;
Monochrome 461 j = p - 1;
Monochrome 462 x = t[r];
Monochrome 463 for(i=p ; i<r ; i++)
000005CA 6753 MOV R5,R7
000005CC 2FE6 MOV.L R14,@-R15
000005CE 3763 CMP/GE R6,R7
000005D0 2FD6 MOV.L R13,@-R15
000005D2 6E53 MOV R5,R14
000005D4 2FC6 MOV.L R12,@-R15
000005D6 7EFF ADD #-1,R14
000005D8 7FF8 ADD #-8,R15
000005DA 6C63 MOV R6,R12
000005DC 4C08 SHLL2 R12
000005DE 3C4C ADD R4,R12
000005E0 1FC1 MOV.L R12,@(4,R15)
000005E2 4508 SHLL2 R5
000005E4 6CC2 MOV.L @R12,R12
000005E6 354C ADD R4,R5
000005E8 2F52 MOV.L R5,@R15
000005EA 8D10 BT/S L621
000005EC 6D53 MOV R5,R13
000005EE L622:
Monochrome 464 {
Monochrome 465 if(x > 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<nb_vertices ; i++)
000006A2 E801 MOV #1,R8
000006A4 6EA2 MOV.L @R10,R14
000006A6 E704 MOV #4,R7
000006A8 1FE6 MOV.L R14,@(24,R15)
000006AA 6483 MOV R8,R4
000006AC 37AC ADD R10,R7
000006AE 6573 MOV R7,R5
000006B0 34B3 CMP/GE R11,R4
000006B2 8D12 BT/S L630
000006B4 6673 MOV R7,R6
000006B6 L631:
Monochrome 499 {
Monochrome 500 if(y[i] < ymin) ymin = y[i];
000006B6 6043 MOV R4,R0
000006B8 4008 SHLL2 R0
000006BA 03AE MOV.L @(R0,R10),R3
000006BC 33E3 CMP/GE R14,R3
000006BE 8900 BT L632
000006C0 6E72 MOV.L @R7,R14
000006C2 L632:
Monochrome 501 if(y[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<nb_vertices ; j++)
000006E6 6E93 MOV R9,R14
000006E8 6393 MOV R9,R3
000006EA 4B15 CMP/PL R11
000006EC 2F32 MOV.L R3,@R15
000006EE 1F81 MOV.L R8,@(4,R15)
000006F0 8F73 BF/S L636
000006F2 1F82 MOV.L R8,@(8,R15)
000006F4 L637:
Monochrome 507 {
Monochrome 508 if((y[j]<=i && y[(j+1)%nb_vertices]>=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<nb_cut-2 && cut_in_line[j]==cut_in_line[j+1]) j++;
000007EA A001 BRA L644
000007EC 74FE ADD #-2,R4
000007EE L645:
000007EE 7E01 ADD #1,R14
000007F0 L644:
000007F0 3E43 CMP/GE R4,R14
000007F2 893B BT L647
000007F4 60E3 MOV R14,R0
000007F6 4008 SHLL2 R0
000007F8 03DE MOV.L @(R0,R13),R3
000007FA 62E3 MOV R14,R2
000007FC 4208 SHLL2 R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 30
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000007FE 32DC ADD R13,R2
00000800 5121 MOV.L @(4,R2),R1
00000802 3310 CMP/EQ R1,R3
00000804 89F3 BT L645
Monochrome 522 while(j < nb_cut)
00000806 A031 BRA L647
00000808 0009 NOP
0000080A L648:
0000080A 63E3 MOV R14,R3
0000080C 4308 SHLL2 R3
0000080E 33DC ADD R13,R3
00000810 1F32 MOV.L R3,@(8,R15)
00000812 52F1 MOV.L @(4,R15),R2
00000814 3E20 CMP/EQ R2,R14
00000816 8B0A BF L649
Monochrome 523 {
Monochrome 524 if(j == nb_cut-1) ML_horizontal_line(i, cut_in_line[j-1]+1, cut_in_line[j], color)
+;
00000818 57F3 MOV.L @(12,R15),R7
0000081A 60E3 MOV R14,R0
0000081C 6632 MOV.L @R3,R6
0000081E 70FF ADD #-1,R0
00000820 4008 SHLL2 R0
00000822 05DE MOV.L @(R0,R13),R5
00000824 7501 ADD #1,R5
00000826 BCFB BSR _ML_horizontal_line
00000828 64C3 MOV R12,R4
0000082A A01E BRA L650
0000082C 0009 NOP
0000082E L649:
Monochrome 525 else
Monochrome 526 {
Monochrome 527 dx = 1;
Monochrome 528 while(j+dx<nb_cut-1 && cut_in_line[j+dx]==cut_in_line[j+dx+1]) dx++;
0000082E A003 BRA L651
00000830 2F82 MOV.L R8,@R15
00000832 L652:
00000832 63F2 MOV.L @R15,R3
00000834 7301 ADD #1,R3
00000836 2F32 MOV.L R3,@R15
00000838 L651:
00000838 64F2 MOV.L @R15,R4
0000083A 34EC ADD R14,R4
0000083C 53F1 MOV.L @(4,R15),R3
0000083E 3433 CMP/GE R3,R4
00000840 8908 BT L653
00000842 6043 MOV R4,R0
00000844 4008 SHLL2 R0
00000846 6243 MOV R4,R2
00000848 03DE MOV.L @(R0,R13),R3
0000084A 4208 SHLL2 R2
0000084C 32DC ADD R13,R2
0000084E 5121 MOV.L @(4,R2),R1
00000850 3310 CMP/EQ R1,R3
00000852 89EE BT L652
00000854 L653:
Monochrome 529 ML_horizontal_line(i, cut_in_line[j], cut_in_line[j+dx], color);
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 31
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000854 57F3 MOV.L @(12,R15),R7
00000856 60F2 MOV.L @R15,R0
00000858 55F2 MOV.L @(8,R15),R5
0000085A 30EC ADD R14,R0
0000085C 6552 MOV.L @R5,R5
0000085E 4008 SHLL2 R0
00000860 06DE MOV.L @(R0,R13),R6
00000862 BCDD BSR _ML_horizontal_line
00000864 64C3 MOV R12,R4
Monochrome 530 j += dx;
00000866 62F2 MOV.L @R15,R2
00000868 3E2C ADD R2,R14
0000086A L650:
Monochrome 531 }
Monochrome 532 j++;
0000086A 7E01 ADD #1,R14
0000086C L647:
0000086C 3E93 CMP/GE R9,R14
0000086E 8BCC BF L648
00000870 7C01 ADD #1,R12
00000872 L634:
00000872 52F6 MOV.L @(24,R15),R2
00000874 3C27 CMP/GT R2,R12
00000876 8901 BT L783
00000878 AF34 BRA L635
0000087A 0009 NOP
0000087C L783:
Monochrome 533 }
Monochrome 534 }
Monochrome 535 free(cut_in_line);
0000087C D23F MOV.L L782+30,R2 ; _free
0000087E 64D3 MOV R13,R4
00000880 7F28 ADD #40,R15
00000882 4F16 LDS.L @R15+,MACL
00000884 4F26 LDS.L @R15+,PR
00000886 68F6 MOV.L @R15+,R8
00000888 69F6 MOV.L @R15+,R9
0000088A 6AF6 MOV.L @R15+,R10
0000088C 6BF6 MOV.L @R15+,R11
0000088E 6CF6 MOV.L @R15+,R12
00000890 6DF6 MOV.L @R15+,R13
00000892 422B JMP @R2
00000894 6EF6 MOV.L @R15+,R14
00000896 L628:
Monochrome 536 }
00000896 7F28 ADD #40,R15
00000898 4F16 LDS.L @R15+,MACL
0000089A 4F26 LDS.L @R15+,PR
0000089C 68F6 MOV.L @R15+,R8
0000089E 69F6 MOV.L @R15+,R9
000008A0 6AF6 MOV.L @R15+,R10
000008A2 6BF6 MOV.L @R15+,R11
000008A4 6CF6 MOV.L @R15+,R12
000008A6 6DF6 MOV.L @R15+,R13
000008A8 000B RTS
000008AA 6EF6 MOV.L @R15+,R14
Monochrome 537 #endif
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 32
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 538
Monochrome 539 #ifdef ML_CIRCLE
Monochrome 540 void ML_circle(int x, int y, int radius, ML_Color color)
Monochrome 541 {
Monochrome 542 int plot_x, plot_y, d;
Monochrome 543
Monochrome 544 if(radius < 0) return;
Monochrome 545 plot_x = 0;
Monochrome 546 plot_y = radius;
Monochrome 547 d = 1 - radius;
Monochrome 548
Monochrome 549 ML_pixel(x, y+plot_y, color);
Monochrome 550 if(radius)
Monochrome 551 {
Monochrome 552 ML_pixel(x, y-plot_y, color);
Monochrome 553 ML_pixel(x+plot_y, y, color);
Monochrome 554 ML_pixel(x-plot_y, y, color);
Monochrome 555 }
Monochrome 556 while(plot_y > 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<end ; i++)
00000BC2 6623 MOV R2,R6
00000BC4 63D3 MOV R13,R3
00000BC6 7301 ADD #1,R3
00000BC8 2F32 MOV.L R3,@R15
00000BCA 54F3 MOV.L @(12,R15),R4
00000BCC 6143 MOV R4,R1
00000BCE 4121 SHAR R1
00000BD0 4121 SHAR R1
00000BD2 4121 SHAR R1
00000BD4 1F12 MOV.L R1,@(8,R15)
00000BD6 6243 MOV R4,R2
00000BD8 3298 SUB R9,R2
00000BDA E9FF MOV #-1,R9
00000BDC 492C SHAD R2,R9
00000BDE A03F BRA L676
00000BE0 3A4C ADD R4,R10
00000BE2 L787:
00000BE2 0080 .DATA.W H'0080
00000BE4 <00000000> .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<width-1>>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]<<shift;
00000BF8 6073 MOV R7,R0
00000BFA 304C ADD R4,R0
00000BFC 00BC MOV.B @(R0,R11),R0
00000BFE 600C EXTU.B R0,R0
00000C00 40ED SHLD R14,R0
00000C02 81F2 MOV.W R0,@(4,R15)
Monochrome 812 screen[j] |= *p;
00000C04 63D0 MOV.B @R13,R3
00000C06 6043 MOV R4,R0
00000C08 025C MOV.B @(R0,R5),R2
00000C0A 223B OR R3,R2
00000C0C 0524 MOV.B R2,@(R0,R5)
Monochrome 813 if(shift!=8) screen[j+1] |= *(p+1);
00000C0E 60E3 MOV R14,R0
00000C10 8808 CMP/EQ #8,R0
00000C12 8906 BT L680
00000C14 62F2 MOV.L @R15,R2
00000C16 6343 MOV R4,R3
00000C18 6220 MOV.B @R2,R2
00000C1A 335C ADD R5,R3
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 45
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000C1C 8431 MOV.B @(1,R3),R0
00000C1E 202B OR R2,R0
00000C20 8031 MOV.B R0,@(1,R3)
00000C22 L680:
00000C22 7401 ADD #1,R4
00000C24 34C3 CMP/GE R12,R4
00000C26 8BE7 BF L679
00000C28 L678:
Monochrome 814 }
Monochrome 815 line = (bmp[i*(real_width>>3)+j] & -1<<(real_width-width))<<shift;
00000C28 50F2 MOV.L @(8,R15),R0
Monochrome 816 screen[j] |= *p;
00000C2A 6743 MOV R4,R7
00000C2C 0067 MUL.L R6,R0
00000C2E 375C ADD R5,R7
00000C30 001A STS MACL,R0
00000C32 304C ADD R4,R0
00000C34 00BC MOV.B @(R0,R11),R0
00000C36 600C EXTU.B R0,R0
00000C38 2099 AND R9,R0
00000C3A 40EC SHAD R14,R0
00000C3C 81F2 MOV.W R0,@(4,R15)
Monochrome 817 if(shift!=8 && x+real_width<129) screen[j+1] |= *(p+1);
00000C3E 60E3 MOV R14,R0
00000C40 63D0 MOV.B @R13,R3
00000C42 8808 CMP/EQ #8,R0
00000C44 6270 MOV.B @R7,R2
00000C46 223B OR R3,R2
00000C48 8D08 BT/S L681
00000C4A 2720 MOV.B R2,@R7
00000C4C 9216 MOV.W L789,R2 ; H'0081
00000C4E 3A23 CMP/GE R2,R10
00000C50 8904 BT L681
00000C52 61F2 MOV.L @R15,R1
00000C54 8471 MOV.B @(1,R7),R0
00000C56 6310 MOV.B @R1,R3
00000C58 203B OR R3,R0
00000C5A 8071 MOV.B R0,@(1,R7)
00000C5C L681:
Monochrome 818 screen += 16;
00000C5C 7510 ADD #16,R5
00000C5E 7601 ADD #1,R6
00000C60 L676:
00000C60 53F5 MOV.L @(20,R15),R3
00000C62 3633 CMP/GE R3,R6
00000C64 8BC0 BF L677
00000C66 L673:
Monochrome 819 }
Monochrome 820 }
00000C66 7F18 ADD #24,R15
00000C68 4F16 LDS.L @R15+,MACL
00000C6A 4F26 LDS.L @R15+,PR
00000C6C 68F6 MOV.L @R15+,R8
00000C6E 69F6 MOV.L @R15+,R9
00000C70 6AF6 MOV.L @R15+,R10
00000C72 6BF6 MOV.L @R15+,R11
00000C74 6CF6 MOV.L @R15+,R12
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 46
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000C76 6DF6 MOV.L @R15+,R13
00000C78 000B RTS
00000C7A 6EF6 MOV.L @R15+,R14
00000C7C L789:
00000C7C 0081 .DATA.W H'0081
Monochrome 821 #endif
Monochrome 822
Monochrome 823 #ifdef ML_BMP_AND
Monochrome 824 void ML_bmp_and(const unsigned char *bmp, int x, int y, int width, int height)
00000C7E _ML_bmp_and: ; function: ML_bmp_and
; frame size=60
00000C7E 2FE6 MOV.L R14,@-R15
00000C80 2FD6 MOV.L R13,@-R15
00000C82 6E63 MOV R6,R14
00000C84 2FC6 MOV.L R12,@-R15
00000C86 2FB6 MOV.L R11,@-R15
00000C88 2FA6 MOV.L R10,@-R15
00000C8A 6B53 MOV R5,R11
00000C8C 2F96 MOV.L R9,@-R15
00000C8E 6A43 MOV R4,R10
00000C90 2F86 MOV.L R8,@-R15
Monochrome 825 {
Monochrome 826 unsigned short line;
Monochrome 827 char shift, *screen, *p=(char*)&line;
Monochrome 828 int i, j, begin=0, end=height, real_width=(width-1>>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<end ; i++)
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 48
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000D2C 6693 MOV R9,R6
00000D2E 69D3 MOV R13,R9
00000D30 7901 ADD #1,R9
00000D32 4221 SHAR R2
00000D34 4221 SHAR R2
00000D36 4221 SHAR R2
00000D38 1F22 MOV.L R2,@(8,R15)
00000D3A 50F1 MOV.L @(4,R15),R0
00000D3C C907 AND #7,R0
00000D3E 3308 SUB R0,R3
00000D40 9006 MOV.W L792+2,R0 ; H'00FF
00000D42 633B NEG R3,R3
00000D44 403C SHAD R3,R0
00000D46 80F4 MOV.B R0,@(4,R15)
00000D48 53F4 MOV.L @(16,R15),R3
00000D4A A044 BRA L687
00000D4C 3B3C ADD R3,R11
00000D4E L792:
00000D4E 0080 .DATA.W H'0080
00000D50 00FF .DATA.W H'00FF
00000D52 0000 .DATA.W 0
00000D54 <00000000> .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<width-1>>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]<<shift);
00000D68 6073 MOV R7,R0
00000D6A 304C ADD R4,R0
00000D6C 03AC MOV.B @(R0,R10),R3
Monochrome 839 screen[j] &= *p;
00000D6E 6043 MOV R4,R0
00000D70 6337 NOT R3,R3
00000D72 633C EXTU.B R3,R3
00000D74 43ED SHLD R14,R3
00000D76 6337 NOT R3,R3
00000D78 2F31 MOV.W R3,@R15
00000D7A 62D0 MOV.B @R13,R2
00000D7C 015C MOV.B @(R0,R5),R1
00000D7E 2129 AND R2,R1
00000D80 0514 MOV.B R1,@(R0,R5)
Monochrome 840 if(shift!=8) screen[j+1] &= *(p+1);
00000D82 60E3 MOV R14,R0
00000D84 8808 CMP/EQ #8,R0
00000D86 8905 BT L691
00000D88 6290 MOV.B @R9,R2
00000D8A 6343 MOV R4,R3
00000D8C 335C ADD R5,R3
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 49
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000D8E 8431 MOV.B @(1,R3),R0
00000D90 2029 AND R2,R0
00000D92 8031 MOV.B R0,@(1,R3)
00000D94 L691:
00000D94 7401 ADD #1,R4
00000D96 34C3 CMP/GE R12,R4
00000D98 8BE6 BF L690
00000D9A L689:
Monochrome 841 }
Monochrome 842 line = ~((unsigned char)~(bmp[i*(real_width>>3)+j] | (unsigned char)-1>>8-(width&7))<<shif
+t);
Monochrome 843 screen[j] &= *p;
00000D9A 6743 MOV R4,R7
00000D9C 50F2 MOV.L @(8,R15),R0
00000D9E 375C ADD R5,R7
00000DA0 0067 MUL.L R6,R0
00000DA2 001A STS MACL,R0
00000DA4 304C ADD R4,R0
00000DA6 03AC MOV.B @(R0,R10),R3
00000DA8 84F4 MOV.B @(4,R15),R0
00000DAA 203B OR R3,R0
00000DAC 6007 NOT R0,R0
00000DAE 600C EXTU.B R0,R0
00000DB0 40ED SHLD R14,R0
00000DB2 6007 NOT R0,R0
00000DB4 2F01 MOV.W R0,@R15
Monochrome 844 if(shift!=8 && x+real_width<129) screen[j+1] &= *(p+1);
00000DB6 60E3 MOV R14,R0
00000DB8 63D0 MOV.B @R13,R3
00000DBA 8808 CMP/EQ #8,R0
00000DBC 6270 MOV.B @R7,R2
00000DBE 2239 AND R3,R2
00000DC0 8D07 BT/S L692
00000DC2 2720 MOV.B R2,@R7
00000DC4 9215 MOV.W L795,R2 ; H'0081
00000DC6 3B23 CMP/GE R2,R11
00000DC8 8903 BT L692
00000DCA 6390 MOV.B @R9,R3
00000DCC 8471 MOV.B @(1,R7),R0
00000DCE 2039 AND R3,R0
00000DD0 8071 MOV.B R0,@(1,R7)
00000DD2 L692:
Monochrome 845 screen += 16;
00000DD2 7510 ADD #16,R5
00000DD4 7601 ADD #1,R6
00000DD6 L687:
00000DD6 53F5 MOV.L @(20,R15),R3
00000DD8 3633 CMP/GE R3,R6
00000DDA 8BBD BF L688
00000DDC L684:
Monochrome 846 }
Monochrome 847 }
00000DDC 7F18 ADD #24,R15
00000DDE 4F16 LDS.L @R15+,MACL
00000DE0 4F26 LDS.L @R15+,PR
00000DE2 68F6 MOV.L @R15+,R8
00000DE4 69F6 MOV.L @R15+,R9
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 50
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000DE6 6AF6 MOV.L @R15+,R10
00000DE8 6BF6 MOV.L @R15+,R11
00000DEA 6CF6 MOV.L @R15+,R12
00000DEC 6DF6 MOV.L @R15+,R13
00000DEE 000B RTS
00000DF0 6EF6 MOV.L @R15+,R14
00000DF2 L795:
00000DF2 0081 .DATA.W H'0081
Monochrome 848 #endif
Monochrome 849
Monochrome 850 #ifdef ML_BMP_XOR
Monochrome 851 void ML_bmp_xor(const unsigned char *bmp, int x, int y, int width, int height)
00000DF4 _ML_bmp_xor: ; function: ML_bmp_xor
; frame size=60
00000DF4 2FE6 MOV.L R14,@-R15
00000DF6 6E63 MOV R6,R14
00000DF8 2FD6 MOV.L R13,@-R15
00000DFA 2FC6 MOV.L R12,@-R15
00000DFC 2FB6 MOV.L R11,@-R15
00000DFE 6B43 MOV R4,R11
00000E00 2FA6 MOV.L R10,@-R15
00000E02 6A53 MOV R5,R10
00000E04 2F96 MOV.L R9,@-R15
00000E06 6973 MOV R7,R9
00000E08 2F86 MOV.L R8,@-R15
Monochrome 852 {
Monochrome 853 unsigned short line;
Monochrome 854 char shift, *screen, *p=(char*)&line;
Monochrome 855 int i, j, begin=0, end=height, real_width=(width-1>>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<end ; i++)
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 52
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000E9E 6623 MOV R2,R6
00000EA0 63D3 MOV R13,R3
00000EA2 7301 ADD #1,R3
00000EA4 2F32 MOV.L R3,@R15
00000EA6 54F3 MOV.L @(12,R15),R4
00000EA8 6143 MOV R4,R1
00000EAA 4121 SHAR R1
00000EAC 4121 SHAR R1
00000EAE 4121 SHAR R1
00000EB0 1F12 MOV.L R1,@(8,R15)
00000EB2 6243 MOV R4,R2
00000EB4 3298 SUB R9,R2
00000EB6 E9FF MOV #-1,R9
00000EB8 492C SHAD R2,R9
00000EBA A03F BRA L698
00000EBC 3A4C ADD R4,R10
00000EBE L798:
00000EBE 0080 .DATA.W H'0080
00000EC0 <00000000> .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<width-1>>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]<<shift;
00000ED4 6073 MOV R7,R0
00000ED6 304C ADD R4,R0
00000ED8 00BC MOV.B @(R0,R11),R0
00000EDA 600C EXTU.B R0,R0
00000EDC 40ED SHLD R14,R0
00000EDE 81F2 MOV.W R0,@(4,R15)
Monochrome 866 screen[j] ^= *p;
00000EE0 63D0 MOV.B @R13,R3
00000EE2 6043 MOV R4,R0
00000EE4 025C MOV.B @(R0,R5),R2
00000EE6 223A XOR R3,R2
00000EE8 0524 MOV.B R2,@(R0,R5)
Monochrome 867 if(shift!=8) screen[j+1] ^= *(p+1);
00000EEA 60E3 MOV R14,R0
00000EEC 8808 CMP/EQ #8,R0
00000EEE 8906 BT L702
00000EF0 62F2 MOV.L @R15,R2
00000EF2 6343 MOV R4,R3
00000EF4 6220 MOV.B @R2,R2
00000EF6 335C ADD R5,R3
00000EF8 8431 MOV.B @(1,R3),R0
00000EFA 202A XOR R2,R0
00000EFC 8031 MOV.B R0,@(1,R3)
00000EFE L702:
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 53
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000EFE 7401 ADD #1,R4
00000F00 34C3 CMP/GE R12,R4
00000F02 8BE7 BF L701
00000F04 L700:
Monochrome 868 }
Monochrome 869 line = (bmp[i*(real_width>>3)+j] & -1<<(real_width-width))<<shift;
00000F04 50F2 MOV.L @(8,R15),R0
Monochrome 870 screen[j] ^= *p;
00000F06 6743 MOV R4,R7
00000F08 0067 MUL.L R6,R0
00000F0A 375C ADD R5,R7
00000F0C 001A STS MACL,R0
00000F0E 304C ADD R4,R0
00000F10 00BC MOV.B @(R0,R11),R0
00000F12 600C EXTU.B R0,R0
00000F14 2099 AND R9,R0
00000F16 40EC SHAD R14,R0
00000F18 81F2 MOV.W R0,@(4,R15)
Monochrome 871 if(shift!=8 && x+real_width<129) screen[j+1] ^= *(p+1);
00000F1A 60E3 MOV R14,R0
00000F1C 63D0 MOV.B @R13,R3
00000F1E 8808 CMP/EQ #8,R0
00000F20 6270 MOV.B @R7,R2
00000F22 223A XOR R3,R2
00000F24 8D08 BT/S L703
00000F26 2720 MOV.B R2,@R7
00000F28 9268 MOV.W L800,R2 ; H'0081
00000F2A 3A23 CMP/GE R2,R10
00000F2C 8904 BT L703
00000F2E 61F2 MOV.L @R15,R1
00000F30 8471 MOV.B @(1,R7),R0
00000F32 6310 MOV.B @R1,R3
00000F34 203A XOR R3,R0
00000F36 8071 MOV.B R0,@(1,R7)
00000F38 L703:
Monochrome 872 screen += 16;
00000F38 7510 ADD #16,R5
00000F3A 7601 ADD #1,R6
00000F3C L698:
00000F3C 53F5 MOV.L @(20,R15),R3
00000F3E 3633 CMP/GE R3,R6
00000F40 8BC0 BF L699
00000F42 L695:
Monochrome 873 }
Monochrome 874 }
00000F42 7F18 ADD #24,R15
00000F44 4F16 LDS.L @R15+,MACL
00000F46 4F26 LDS.L @R15+,PR
00000F48 68F6 MOV.L @R15+,R8
00000F4A 69F6 MOV.L @R15+,R9
00000F4C 6AF6 MOV.L @R15+,R10
00000F4E 6BF6 MOV.L @R15+,R11
00000F50 6CF6 MOV.L @R15+,R12
00000F52 6DF6 MOV.L @R15+,R13
00000F54 000B RTS
00000F56 6EF6 MOV.L @R15+,R14
Monochrome 875 #endif
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 54
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 876
Monochrome 877 #ifdef ML_BMP_OR_CL
Monochrome 878 void ML_bmp_or_cl(const unsigned char *bmp, int x, int y, int width, int height)
00000F58 _ML_bmp_or_cl: ; function: ML_bmp_or_cl
; frame size=92
00000F58 2FE6 MOV.L R14,@-R15
00000F5A E05C MOV #92,R0
00000F5C 2FD6 MOV.L R13,@-R15
00000F5E 2FC6 MOV.L R12,@-R15
00000F60 2FB6 MOV.L R11,@-R15
00000F62 2FA6 MOV.L R10,@-R15
00000F64 2F96 MOV.L R9,@-R15
00000F66 6963 MOV R6,R9
00000F68 2F86 MOV.L R8,@-R15
Monochrome 879 {
Monochrome 880 unsigned short line;
Monochrome 881 char shift, *screen, *p;
Monochrome 882 int i, j, real_width, begin_x, end_x, begin_y, end_y;
Monochrome 883 char bool1=1, bool2=1, bool3;
00000F6A E601 MOV #1,R6
00000F6C 4F22 STS.L PR,@-R15
00000F6E 4F12 STS.L MACL,@-R15
00000F70 7FC8 ADD #-56,R15
00000F72 1F45 MOV.L R4,@(20,R15)
00000F74 1F72 MOV.L R7,@(8,R15)
00000F76 04FE MOV.L @(R0,R15),R4
00000F78 E01C MOV #28,R0
00000F7A 0F64 MOV.B R6,@(R0,R15)
00000F7C E034 MOV #52,R0
00000F7E 0F64 MOV.B R6,@(R0,R15)
Monochrome 884 if(!bmp || x<1-width || x>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<end_y ; i++)
00001060 1F86 MOV.L R8,@(24,R15)
00001062 6A93 MOV R9,R10
00001064 54F3 MOV.L @(12,R15),R4
00001066 7101 ADD #1,R1
00001068 3A8C ADD R8,R10
0000106A 4A08 SHLL2 R10
0000106C 4A08 SHLL2 R10
0000106E 3A0C ADD R0,R10
00001070 3A3C ADD R3,R10
00001072 4421 SHAR R4
00001074 4421 SHAR R4
00001076 4421 SHAR R4
00001078 1F44 MOV.L R4,@(16,R15)
0000107A 53F6 MOV.L @(24,R15),R3
0000107C 52F5 MOV.L @(20,R15),R2
0000107E 0437 MUL.L R3,R4
00001080 041A STS MACL,R4
00001082 6843 MOV R4,R8
00001084 38DC ADD R13,R8
00001086 382C ADD R2,R8
00001088 6943 MOV R4,R9
0000108A 34CC ADD R12,R4
0000108C 342C ADD R2,R4
0000108E 63C3 MOV R12,R3
00001090 1F48 MOV.L R4,@(32,R15)
00001092 7301 ADD #1,R3
00001094 1F11 MOV.L R1,@(4,R15)
00001096 1F3A MOV.L R3,@(40,R15)
00001098 52F2 MOV.L @(8,R15),R2
0000109A 50F3 MOV.L @(12,R15),R0
0000109C 3028 SUB R2,R0
0000109E E1FF MOV #-1,R1
000010A0 410C SHAD R0,R1
000010A2 1F13 MOV.L R1,@(12,R15)
000010A4 55F4 MOV.L @(16,R15),R5
000010A6 1F59 MOV.L R5,@(36,R15)
000010A8 1F54 MOV.L R5,@(16,R15)
000010AA A06D BRA L716
000010AC 1F52 MOV.L R5,@(8,R15)
000010AE L808:
000010AE 0080 .DATA.W H'0080
000010B0 <00000000> .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<end_x ; j++)
000010E6 54FA MOV.L @(40,R15),R4
000010E8 53F5 MOV.L @(20,R15),R3
000010EA 34D3 CMP/GE R13,R4
000010EC 6643 MOV R4,R6
000010EE 36AC ADD R10,R6
000010F0 6563 MOV R6,R5
000010F2 7501 ADD #1,R5
000010F4 6763 MOV R6,R7
000010F6 6693 MOV R9,R6
000010F8 364C ADD R4,R6
000010FA 8D16 BT/S L718
000010FC 363C ADD R3,R6
000010FE L722:
Monochrome 910 {
Monochrome 911 line = bmp[i*(real_width>>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<<real_width-width;
0000112A E02C MOV #44,R0
0000112C 6280 MOV.B @R8,R2
0000112E 622C EXTU.B R2,R2
00001130 2F21 MOV.W R2,@R15
00001132 03FC MOV.B @(R0,R15),R3
00001134 2338 TST R3,R3
00001136 8903 BT L724
00001138 53F3 MOV.L @(12,R15),R3
0000113A 61F1 MOV.W @R15,R1
0000113C 2139 AND R3,R1
0000113E 2F11 MOV.W R1,@R15
00001140 L724:
Monochrome 918 line <<= shift;
00001140 62F1 MOV.W @R15,R2
00001142 64D3 MOV R13,R4
00001144 42ED SHLD R14,R2
00001146 3CD3 CMP/GE R13,R12
00001148 2F21 MOV.W R2,@R15
0000114A 8F04 BF/S L726
0000114C 34AC ADD R10,R4
0000114E E01C MOV #28,R0
00001150 01FC MOV.B @(R0,R15),R1
00001152 2118 TST R1,R1
00001154 8903 BT L725
00001156 L726:
Monochrome 919 if(begin_x < end_x || bool1) screen[end_x] |= *p;
00001156 63B0 MOV.B @R11,R3
00001158 6240 MOV.B @R4,R2
0000115A 223B OR R3,R2
0000115C 2420 MOV.B R2,@R4
0000115E L725:
Monochrome 920 if(bool2) screen[end_x+1] |= *(p+1);
0000115E E034 MOV #52,R0
00001160 01FC MOV.B @(R0,R15),R1
00001162 2118 TST R1,R1
00001164 8D05 BT/S L727
Monochrome 921 screen += 16;
00001166 7A10 ADD #16,R10
00001168 51F1 MOV.L @(4,R15),R1
0000116A 6310 MOV.B @R1,R3
0000116C 8441 MOV.B @(1,R4),R0
0000116E 203B OR R3,R0
00001170 8041 MOV.B R0,@(1,R4)
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 60
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001172 L727:
00001172 53F6 MOV.L @(24,R15),R3
00001174 7301 ADD #1,R3
00001176 1F36 MOV.L R3,@(24,R15)
00001178 52F9 MOV.L @(36,R15),R2
0000117A 382C ADD R2,R8
0000117C 51F4 MOV.L @(16,R15),R1
0000117E 391C ADD R1,R9
00001180 53F8 MOV.L @(32,R15),R3
00001182 50F2 MOV.L @(8,R15),R0
00001184 303C ADD R3,R0
00001186 1F08 MOV.L R0,@(32,R15)
00001188 L716:
00001188 53FC MOV.L @(48,R15),R3
0000118A 51F6 MOV.L @(24,R15),R1
0000118C 3133 CMP/GE R3,R1
0000118E 8B91 BF L717
00001190 L706:
Monochrome 922 }
Monochrome 923 }
00001190 7F38 ADD #56,R15
00001192 4F16 LDS.L @R15+,MACL
00001194 4F26 LDS.L @R15+,PR
00001196 68F6 MOV.L @R15+,R8
00001198 69F6 MOV.L @R15+,R9
0000119A 6AF6 MOV.L @R15+,R10
0000119C 6BF6 MOV.L @R15+,R11
0000119E 6CF6 MOV.L @R15+,R12
000011A0 6DF6 MOV.L @R15+,R13
000011A2 000B RTS
000011A4 6EF6 MOV.L @R15+,R14
Monochrome 924 #endif
Monochrome 925
Monochrome 926 #ifdef ML_BMP_AND_CL
Monochrome 927 void ML_bmp_and_cl(const unsigned char *bmp, int x, int y, int width, int height)
000011A6 _ML_bmp_and_cl: ; function: ML_bmp_and_cl
; frame size=92
000011A6 E05C MOV #92,R0
000011A8 2FE6 MOV.L R14,@-R15
000011AA 2FD6 MOV.L R13,@-R15
000011AC 2FC6 MOV.L R12,@-R15
000011AE 2FB6 MOV.L R11,@-R15
000011B0 2FA6 MOV.L R10,@-R15
000011B2 2F96 MOV.L R9,@-R15
000011B4 2F86 MOV.L R8,@-R15
000011B6 6963 MOV R6,R9
000011B8 4F22 STS.L PR,@-R15
Monochrome 928 {
Monochrome 929 unsigned short line;
Monochrome 930 char shift, *screen, *p;
Monochrome 931 int i, j, real_width, begin_x, end_x, begin_y, end_y;
Monochrome 932 char bool1=1, bool2=1, bool3;
000011BA E601 MOV #1,R6
000011BC 4F12 STS.L MACL,@-R15
000011BE 7FC8 ADD #-56,R15
000011C0 1F45 MOV.L R4,@(20,R15)
000011C2 1F72 MOV.L R7,@(8,R15)
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 61
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000011C4 04FE MOV.L @(R0,R15),R4
000011C6 E01C MOV #28,R0
000011C8 0F64 MOV.B R6,@(R0,R15)
000011CA E034 MOV #52,R0
000011CC 0F64 MOV.B R6,@(R0,R15)
Monochrome 933 if(!bmp || x<1-width || x>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<end_y ; i++)
000012AC 1F86 MOV.L R8,@(24,R15)
000012AE 6A93 MOV R9,R10
000012B0 54F3 MOV.L @(12,R15),R4
000012B2 7101 ADD #1,R1
000012B4 3A8C ADD R8,R10
000012B6 4A08 SHLL2 R10
000012B8 4A08 SHLL2 R10
000012BA 3A0C ADD R0,R10
000012BC 3A3C ADD R3,R10
000012BE 4421 SHAR R4
000012C0 4421 SHAR R4
000012C2 4421 SHAR R4
000012C4 1F44 MOV.L R4,@(16,R15)
000012C6 53F6 MOV.L @(24,R15),R3
000012C8 52F5 MOV.L @(20,R15),R2
000012CA 0437 MUL.L R3,R4
000012CC 041A STS MACL,R4
000012CE 6843 MOV R4,R8
000012D0 38DC ADD R13,R8
000012D2 382C ADD R2,R8
000012D4 6943 MOV R4,R9
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 64
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000012D6 34CC ADD R12,R4
000012D8 342C ADD R2,R4
000012DA 63C3 MOV R12,R3
000012DC 1F48 MOV.L R4,@(32,R15)
000012DE 7301 ADD #1,R3
000012E0 1F11 MOV.L R1,@(4,R15)
000012E2 1F3A MOV.L R3,@(40,R15)
000012E4 52F2 MOV.L @(8,R15),R2
000012E6 50F3 MOV.L @(12,R15),R0
000012E8 3028 SUB R2,R0
000012EA E1FF MOV #-1,R1
000012EC 410C SHAD R0,R1
000012EE 1F13 MOV.L R1,@(12,R15)
000012F0 55F4 MOV.L @(16,R15),R5
000012F2 1F59 MOV.L R5,@(36,R15)
000012F4 1F54 MOV.L R5,@(16,R15)
000012F6 A074 BRA L740
000012F8 1F52 MOV.L R5,@(8,R15)
000012FA L816:
000012FA 0080 .DATA.W H'0080
000012FC <00000000> .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]<<shift);
00001304 53F8 MOV.L @(32,R15),R3
00001306 64C3 MOV R12,R4
00001308 6230 MOV.B @R3,R2
0000130A E01C MOV #28,R0
0000130C 6227 NOT R2,R2
0000130E 622C EXTU.B R2,R2
00001310 42ED SHLD R14,R2
00001312 6227 NOT R2,R2
00001314 2F21 MOV.W R2,@R15
00001316 03FC MOV.B @(R0,R15),R3
00001318 2338 TST R3,R3
0000131A 8D04 BT/S L743
0000131C 34AC ADD R10,R4
Monochrome 957 if(bool1) screen[begin_x] &= *p;
0000131E 63B0 MOV.B @R11,R3
00001320 6140 MOV.B @R4,R1
00001322 2139 AND R3,R1
00001324 2410 MOV.B R1,@R4
00001326 L743:
Monochrome 958 if(shift!=8) screen[begin_x+1] &= *(p+1);
00001326 60E3 MOV R14,R0
00001328 8808 CMP/EQ #8,R0
0000132A 8904 BT L744
0000132C 52F1 MOV.L @(4,R15),R2
0000132E 6320 MOV.B @R2,R3
00001330 8441 MOV.B @(1,R4),R0
00001332 2039 AND R3,R0
00001334 8041 MOV.B R0,@(1,R4)
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 65
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001336 L744:
Monochrome 959 for(j=begin_x+1 ; j<end_x ; j++)
00001336 54FA MOV.L @(40,R15),R4
00001338 53F5 MOV.L @(20,R15),R3
0000133A 34D3 CMP/GE R13,R4
0000133C 6643 MOV R4,R6
0000133E 36AC ADD R10,R6
00001340 6563 MOV R6,R5
00001342 7501 ADD #1,R5
00001344 6763 MOV R6,R7
00001346 6693 MOV R9,R6
00001348 364C ADD R4,R6
0000134A 8D18 BT/S L742
0000134C 363C ADD R3,R6
0000134E L746:
Monochrome 960 {
Monochrome 961 line = ~((unsigned char)~bmp[i*(real_width>>3)+j]<<shift);
Monochrome 962 screen[j] &= *p;
Monochrome 963 if(shift!=8) screen[j+1] &= *(p+1);
0000134E 60E3 MOV R14,R0
00001350 6360 MOV.B @R6,R3
00001352 8808 CMP/EQ #8,R0
00001354 6337 NOT R3,R3
00001356 633C EXTU.B R3,R3
00001358 43ED SHLD R14,R3
0000135A 6337 NOT R3,R3
0000135C 2F31 MOV.W R3,@R15
0000135E 62B0 MOV.B @R11,R2
00001360 6170 MOV.B @R7,R1
00001362 2129 AND R2,R1
00001364 8D05 BT/S L747
00001366 2710 MOV.B R1,@R7
00001368 52F1 MOV.L @(4,R15),R2
0000136A 6320 MOV.B @R2,R3
0000136C 6150 MOV.B @R5,R1
0000136E 2139 AND R3,R1
00001370 2510 MOV.B R1,@R5
00001372 L747:
00001372 7401 ADD #1,R4
00001374 7501 ADD #1,R5
00001376 7701 ADD #1,R7
00001378 34D3 CMP/GE R13,R4
0000137A 8FE8 BF/S L746
0000137C 7601 ADD #1,R6
0000137E L742:
Monochrome 964 }
Monochrome 965 }
Monochrome 966 line = (unsigned char)~bmp[i*(real_width>>3)+end_x];
Monochrome 967 if(bool3) line &= -1<<real_width-width;
0000137E E02C MOV #44,R0
00001380 6280 MOV.B @R8,R2
00001382 6227 NOT R2,R2
00001384 622C EXTU.B R2,R2
00001386 2F21 MOV.W R2,@R15
00001388 03FC MOV.B @(R0,R15),R3
0000138A 2338 TST R3,R3
0000138C 8903 BT L748
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 66
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000138E 53F3 MOV.L @(12,R15),R3
00001390 61F1 MOV.W @R15,R1
00001392 2139 AND R3,R1
00001394 2F11 MOV.W R1,@R15
00001396 L748:
00001396 64D3 MOV R13,R4
Monochrome 968 line = ~(line << shift);
00001398 62F1 MOV.W @R15,R2
0000139A 3CD3 CMP/GE R13,R12
0000139C 622D EXTU.W R2,R2
0000139E 42ED SHLD R14,R2
000013A0 6227 NOT R2,R2
000013A2 2F21 MOV.W R2,@R15
000013A4 8F04 BF/S L750
000013A6 34AC ADD R10,R4
000013A8 E01C MOV #28,R0
000013AA 01FC MOV.B @(R0,R15),R1
000013AC 2118 TST R1,R1
000013AE 8903 BT L749
000013B0 L750:
Monochrome 969 if(begin_x < end_x || bool1) screen[end_x] &= *p;
000013B0 63B0 MOV.B @R11,R3
000013B2 6240 MOV.B @R4,R2
000013B4 2239 AND R3,R2
000013B6 2420 MOV.B R2,@R4
000013B8 L749:
Monochrome 970 if(bool2) screen[end_x+1] &= *(p+1);
000013B8 E034 MOV #52,R0
000013BA 01FC MOV.B @(R0,R15),R1
000013BC 2118 TST R1,R1
000013BE 8D05 BT/S L751
Monochrome 971 screen += 16;
000013C0 7A10 ADD #16,R10
000013C2 51F1 MOV.L @(4,R15),R1
000013C4 8441 MOV.B @(1,R4),R0
000013C6 6310 MOV.B @R1,R3
000013C8 2039 AND R3,R0
000013CA 8041 MOV.B R0,@(1,R4)
000013CC L751:
000013CC 53F6 MOV.L @(24,R15),R3
000013CE 7301 ADD #1,R3
000013D0 1F36 MOV.L R3,@(24,R15)
000013D2 52F9 MOV.L @(36,R15),R2
000013D4 51F4 MOV.L @(16,R15),R1
000013D6 382C ADD R2,R8
000013D8 53F8 MOV.L @(32,R15),R3
000013DA 391C ADD R1,R9
000013DC 50F2 MOV.L @(8,R15),R0
000013DE 303C ADD R3,R0
000013E0 1F08 MOV.L R0,@(32,R15)
000013E2 L740:
000013E2 53FC MOV.L @(48,R15),R3
000013E4 51F6 MOV.L @(24,R15),R1
000013E6 3133 CMP/GE R3,R1
000013E8 8B8A BF L741
000013EA L730:
Monochrome 972 }
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 67
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 973 }
000013EA 7F38 ADD #56,R15
000013EC 4F16 LDS.L @R15+,MACL
000013EE 4F26 LDS.L @R15+,PR
000013F0 68F6 MOV.L @R15+,R8
000013F2 69F6 MOV.L @R15+,R9
000013F4 6AF6 MOV.L @R15+,R10
000013F6 6BF6 MOV.L @R15+,R11
000013F8 6CF6 MOV.L @R15+,R12
000013FA 6DF6 MOV.L @R15+,R13
000013FC 000B RTS
000013FE 6EF6 MOV.L @R15+,R14
Monochrome 974 #endif
Monochrome 975
Monochrome 976 #ifdef ML_BMP_XOR_CL
Monochrome 977 void ML_bmp_xor_cl(const unsigned char *bmp, int x, int y, int width, int height)
Monochrome 978 {
Monochrome 979 unsigned short line;
Monochrome 980 char shift, *screen, *p;
Monochrome 981 int i, j, real_width, begin_x, end_x, begin_y, end_y;
Monochrome 982 char bool1=1, bool2=1, bool3;
Monochrome 983 if(!bmp || x<1-width || x>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<end_y ; i++)
Monochrome 1002 {
Monochrome 1003 if(begin_x < end_x)
Monochrome 1004 {
Monochrome 1005 line = bmp[i*(real_width>>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<end_x ; j++)
Monochrome 1009 {
Monochrome 1010 line = bmp[i*(real_width>>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<<real_width-width;
Monochrome 1017 line <<= shift;
Monochrome 1018 if(begin_x < end_x || bool1) screen[end_x] ^= *p;
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 68
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 1019 if(bool2) screen[end_x+1] ^= *(p+1);
Monochrome 1020 screen += 16;
Monochrome 1021 }
Monochrome 1022 }
Monochrome 1023
Monochrome 1024 #endif
Monochrome 1025
Monochrome 1026 #ifdef ML_BMP_8_OR
Monochrome 1027 void ML_bmp_8_or(const unsigned char *bmp, int x, int y)
Monochrome 1028 {
Monochrome 1029 unsigned short line;
Monochrome 1030 char i, shift, begin=0, end=8, *screen, *p=(char*)&line;
Monochrome 1031 if(!bmp || x<0 || x>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 ; i<end ; i++)
Monochrome 1037 {
Monochrome 1038 line = bmp[i]<<shift;
Monochrome 1039 screen[0] |= *p;
Monochrome 1040 if(shift!=8) screen[1] |= *(p+1);
Monochrome 1041 screen += 16;
Monochrome 1042 }
Monochrome 1043 }
Monochrome 1044 #endif
Monochrome 1045
Monochrome 1046 #ifdef ML_BMP_8_AND
Monochrome 1047 void ML_bmp_8_and(const unsigned char *bmp, int x, int y)
Monochrome 1048 {
Monochrome 1049 unsigned short line;
Monochrome 1050 char i, shift, begin=0, end=8, *screen, *p=(char*)&line;
Monochrome 1051 if(!bmp || x<0 || x>120 || 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 ; i<end ; i++)
Monochrome 1057 {
Monochrome 1058 line = ~((unsigned char)~bmp[i]<<shift);
Monochrome 1059 screen[0] &= *p;
Monochrome 1060 if(shift!=8) screen[1] &= *(p+1);
Monochrome 1061 screen += 16;
Monochrome 1062 }
Monochrome 1063 }
Monochrome 1064 #endif
Monochrome 1065
Monochrome 1066 #ifdef ML_BMP_8_XOR
Monochrome 1067 void ML_bmp_8_xor(const unsigned char *bmp, int x, int y)
Monochrome 1068 {
Monochrome 1069 unsigned short line;
Monochrome 1070 char i, shift, begin=0, end=8, *screen, *p=(char*)&line;
Monochrome 1071 if(!bmp || x<0 || x>120 || 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 ; i<end ; i++)
Monochrome 1077 {
Monochrome 1078 line = bmp[i]<<shift;
Monochrome 1079 screen[0] ^= *p;
Monochrome 1080 if(shift<8) screen[1] ^= *(p+1);
Monochrome 1081 screen += 16;
Monochrome 1082 }
Monochrome 1083 }
Monochrome 1084 #endif
Monochrome 1085
Monochrome 1086 #ifdef ML_BMP_8_OR_CL
Monochrome 1087 void ML_bmp_8_or_cl(const unsigned char *bmp, int x, int y)
Monochrome 1088 {
Monochrome 1089 unsigned short line;
Monochrome 1090 char i, shift, begin=0, end=8, bool1=1, bool2=1, *screen, *p=(char*)&line;
Monochrome 1091 if(!bmp || x<-7 || x>127 || 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 ; i<end ; i++)
Monochrome 1099 {
Monochrome 1100 line = bmp[i]<<shift;
Monochrome 1101 if(bool1) screen[0] |= *p;
Monochrome 1102 if(bool2) screen[1] |= *(p+1);
Monochrome 1103 screen += 16;
Monochrome 1104 }
Monochrome 1105 }
Monochrome 1106 #endif
Monochrome 1107
Monochrome 1108 #ifdef ML_BMP_8_AND_CL
Monochrome 1109 void ML_bmp_8_and_cl(const unsigned char *bmp, int x, int y)
Monochrome 1110 {
Monochrome 1111 unsigned short line;
Monochrome 1112 char i, shift, begin=0, end=8, bool1=1, bool2=1, *screen, *p=(char*)&line;
Monochrome 1113 if(!bmp || x<-7 || x>127 || 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 ; i<end ; i++)
Monochrome 1121 {
Monochrome 1122 line = ~((unsigned char)~bmp[i]<<shift);
Monochrome 1123 if(bool1) screen[0] &= *p;
Monochrome 1124 if(bool2) screen[1] &= *(p+1);
Monochrome 1125 screen += 16;
Monochrome 1126 }
Monochrome 1127 }
Monochrome 1128 #endif
Monochrome 1129
Monochrome 1130 #ifdef ML_BMP_8_XOR_CL
Monochrome 1131 void ML_bmp_8_xor_cl(const unsigned char *bmp, int x, int y)
Monochrome 1132 {
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 70
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 1133 unsigned short line;
Monochrome 1134 char i, shift, begin=0, end=8, bool1=1, bool2=1, *screen, *p=(char*)&line;
Monochrome 1135 if(!bmp || x<-7 || x>127 || 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 ; i<end ; i++)
Monochrome 1143 {
Monochrome 1144 line = bmp[i]<<shift;
Monochrome 1145 if(bool1) screen[0] ^= *p;
Monochrome 1146 if(bool2) screen[1] ^= *(p+1);
Monochrome 1147 screen += 16;
Monochrome 1148 }
Monochrome 1149 }
Monochrome 1150 #endif
Monochrome 1151
Monochrome 1152 #ifdef ML_BMP_16_OR
Monochrome 1153 void ML_bmp_16_or(const unsigned short *bmp, int x, int y)
Monochrome 1154 {
Monochrome 1155 unsigned long line;
Monochrome 1156 char i, shift, begin=0, end=16, *screen, *p=(char*)&line+1;
Monochrome 1157 if(!bmp || x<0 || x>112 || 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 ; i<end ; i++)
Monochrome 1163 {
Monochrome 1164 line = bmp[i]<<shift;
Monochrome 1165 screen[0] |= *p;
Monochrome 1166 screen[1] |= *(p+1);
Monochrome 1167 if(shift!=8) screen[2] |= *(p+2);
Monochrome 1168 screen += 16;
Monochrome 1169 }
Monochrome 1170 }
Monochrome 1171 #endif
Monochrome 1172
Monochrome 1173 #ifdef ML_BMP_16_AND
Monochrome 1174 void ML_bmp_16_and(const unsigned short *bmp, int x, int y)
Monochrome 1175 {
Monochrome 1176 unsigned long line;
Monochrome 1177 char i, shift, begin=0, end=16, *screen, *p=(char*)&line+1;
Monochrome 1178 if(!bmp || x<0 || x>112 || 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 ; i<end ; i++)
Monochrome 1184 {
Monochrome 1185 line = ~((unsigned short)~bmp[i]<<shift);
Monochrome 1186 screen[0] &= *p;
Monochrome 1187 screen[1] &= *(p+1);
Monochrome 1188 if(shift!=8) screen[2] &= *(p+2);
Monochrome 1189 screen += 16;
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 71
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 1190 }
Monochrome 1191 }
Monochrome 1192 #endif
Monochrome 1193
Monochrome 1194 #ifdef ML_BMP_16_XOR
Monochrome 1195 void ML_bmp_16_xor(const unsigned short *bmp, int x, int y)
Monochrome 1196 {
Monochrome 1197 unsigned long line;
Monochrome 1198 char i, shift, begin=0, end=16, *screen, *p=(char*)&line+1;
Monochrome 1199 if(!bmp || x<0 || x>112 || 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 ; i<end ; i++)
Monochrome 1205 {
Monochrome 1206 line = bmp[i]<<shift;
Monochrome 1207 screen[0] ^= *p;
Monochrome 1208 screen[1] ^= *(p+1);
Monochrome 1209 if(shift!=8) screen[2] ^= *(p+2);
Monochrome 1210 screen += 16;
Monochrome 1211 }
Monochrome 1212 }
Monochrome 1213 #endif
Monochrome 1214
Monochrome 1215 #ifdef ML_BMP_16_OR_CL
Monochrome 1216 void ML_bmp_16_or_cl(const unsigned short *bmp, int x, int y)
00001400 _ML_bmp_16_or_cl: ; function: ML_bmp_16_or_cl
; frame size=48
00001400 2FE6 MOV.L R14,@-R15
Monochrome 1217 {
Monochrome 1218 unsigned long line;
Monochrome 1219 char i, shift, begin=0, end=16, bool1=1, bool2=1, bool3=1, *screen, *p=(char*)&line+1;
00001402 E010 MOV #16,R0
00001404 2FD6 MOV.L R13,@-R15
00001406 6E53 MOV R5,R14
00001408 2FC6 MOV.L R12,@-R15
0000140A 6D63 MOV R6,R13
0000140C 2FB6 MOV.L R11,@-R15
0000140E E501 MOV #1,R5
00001410 2FA6 MOV.L R10,@-R15
00001412 2F96 MOV.L R9,@-R15
00001414 2F86 MOV.L R8,@-R15
00001416 6953 MOV R5,R9
00001418 4F22 STS.L PR,@-R15
0000141A 6B93 MOV R9,R11
0000141C 7FF0 ADD #-16,R15
0000141E 6CF3 MOV R15,R12
00001420 1F41 MOV.L R4,@(4,R15)
00001422 E400 MOV #0,R4
00001424 80FC MOV.B R0,@(12,R15)
00001426 6A43 MOV R4,R10
00001428 6053 MOV R5,R0
0000142A 80F8 MOV.B R0,@(8,R15)
Monochrome 1220 if(!bmp || x<-15 || x>127 || 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<end ; i++)
000014A6 65A3 MOV R10,R5
000014A8 665E EXTS.B R5,R6
000014AA 4600 SHLL R6
000014AC 363C ADD R3,R6
000014AE 6EC3 MOV R12,R14
000014B0 7E01 ADD #1,R14
000014B2 6DC3 MOV R12,R13
000014B4 6703 MOV R0,R7
000014B6 625E EXTS.B R5,R2
000014B8 3273 CMP/GE R7,R2
000014BA 8D20 BT/S L754
000014BC 7D02 ADD #2,R13
000014BE L763:
Monochrome 1229 {
Monochrome 1230 line = bmp[i]<<shift;
000014BE 628E EXTS.B R8,R2
000014C0 6361 MOV.W @R6,R3
000014C2 633D EXTU.W R3,R3
000014C4 432D SHLD R2,R3
Monochrome 1231 if(bool1) screen[0] |= *p;
000014C6 629E EXTS.B R9,R2
000014C8 2228 TST R2,R2
000014CA 8D04 BT/S L764
000014CC 2F32 MOV.L R3,@R15
000014CE 62C0 MOV.B @R12,R2
000014D0 6140 MOV.B @R4,R1
000014D2 212B OR R2,R1
000014D4 2410 MOV.B R1,@R4
000014D6 L764:
Monochrome 1232 if(bool2) screen[1] |= *(p+1);
000014D6 84F8 MOV.B @(8,R15),R0
000014D8 2008 TST R0,R0
000014DA 8D04 BT/S L765
Monochrome 1233 if(bool3) screen[2] |= *(p+2);
000014DC 62BE EXTS.B R11,R2
000014DE 63E0 MOV.B @R14,R3
000014E0 8441 MOV.B @(1,R4),R0
000014E2 203B OR R3,R0
000014E4 8041 MOV.B R0,@(1,R4)
000014E6 L765:
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 74
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000014E6 2228 TST R2,R2
000014E8 8903 BT L766
000014EA 63D0 MOV.B @R13,R3
000014EC 8442 MOV.B @(2,R4),R0
000014EE 203B OR R3,R0
000014F0 8042 MOV.B R0,@(2,R4)
000014F2 L766:
Monochrome 1234 screen += 16;
000014F2 7410 ADD #16,R4
000014F4 7501 ADD #1,R5
000014F6 635E EXTS.B R5,R3
000014F8 3373 CMP/GE R7,R3
000014FA 8FE0 BF/S L763
000014FC 7602 ADD #2,R6
000014FE L754:
Monochrome 1235 }
Monochrome 1236 }
000014FE 7F10 ADD #16,R15
00001500 4F26 LDS.L @R15+,PR
00001502 68F6 MOV.L @R15+,R8
00001504 69F6 MOV.L @R15+,R9
00001506 6AF6 MOV.L @R15+,R10
00001508 6BF6 MOV.L @R15+,R11
0000150A 6CF6 MOV.L @R15+,R12
0000150C 6DF6 MOV.L @R15+,R13
0000150E 000B RTS
00001510 6EF6 MOV.L @R15+,R14
00001512 L817:
00001512 0000 .DATA.W 0
00001514 <00000000> .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 ; i<end ; i++)
Monochrome 1253 {
Monochrome 1254 line = ~((unsigned short)~bmp[i]<<shift);
Monochrome 1255 if(bool1) screen[0] &= *p;
Monochrome 1256 if(bool2) screen[1] &= *(p+1);
Monochrome 1257 if(bool3) screen[2] &= *(p+2);
Monochrome 1258 screen += 16;
Monochrome 1259 }
Monochrome 1260 }
Monochrome 1261 #endif
Monochrome 1262
Monochrome 1263 #ifdef ML_BMP_16_XOR_CL
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 75
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 1264 void ML_bmp_16_xor_cl(const unsigned short *bmp, int x, int y)
Monochrome 1265 {
Monochrome 1266 unsigned long line;
Monochrome 1267 char i, shift, begin=0, end=16, bool1=1, bool2=1, bool3=1, *screen, *p=(char*)&line+1;
Monochrome 1268 if(!bmp || x<-15 || x>127 || 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<end ; i++)
Monochrome 1277 {
Monochrome 1278 line = bmp[i]<<shift;
Monochrome 1279 if(bool1) screen[0] ^= *p;
Monochrome 1280 if(bool2) screen[1] ^= *(p+1);
Monochrome 1281 if(bool3) screen[2] ^= *(p+2);
Monochrome 1282 screen += 16;
Monochrome 1283 }
Monochrome 1284 }
Monochrome 1285 #endif
Monochrome 1286
C 00000000 _sc0135: ; static: sc0135
00000000 D201D00242 .DATA.L H'D201D002,H'422B0009,H'80010070,H'00000135
2B00098001
0070000001
35
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Sep-2013 10:25:23 PAGE 1
******** STATISTICS INFORMATION ********
********** ERROR INFORMATION ***********
NUMBER OF ERRORS: 0
NUMBER OF WARNINGS: 0
******* SOURCE LINE INFORMATION ********
COMPILED SOURCE LINE: 1286
******* SECTION SIZE INFORMATION *******
PROGRAM SECTION (P): 00001518 Byte(s)
CONSTANT SECTION (C): 00000010 Byte(s)
DATA SECTION (D): 00000000 Byte(s)
BSS SECTION (B): 00000000 Byte(s)
TOTAL PROGRAM SIZE: 00001528 Byte(s)
********** LABEL INFORMATION ***********
NUMBER OF EXTERNAL REFERENCE SYMBOLS: 8
NUMBER OF EXTERNAL DEFINITION SYMBOLS: 17
NUMBER OF INTERNAL/EXTERNAL SYMBOLS: 254
*** COMMAND PARAMETER ***
-subcommand=C:\DOCUME~1\Papa_2\LOCALS~1\Temp\hmkC5.tmp