5022 lines
256 KiB
Plaintext
Executable File
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
|
|
|