AldeBasiClib/Debug/MonochromeLib.lst

10632 lines
537 KiB
Plaintext

SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 1
************ OBJECT LISTING ************
FILE NAME: F:\AldTest\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 #include "fxlib.h"
Monochrome 17 #include "mathf.h"
Monochrome 18
Monochrome 19
Monochrome 20 /******************************/
Monochrome 21 /** Dependencies management **/
Monochrome 22 /******************************/
Monochrome 23
Monochrome 24 #ifdef ML_ALL
Monochrome 25 #define ML_CLEAR_VRAM
Monochrome 26 #define ML_CLEAR_SCREEN
Monochrome 27 #define ML_DISPLAY_VRAM
Monochrome 28 #define ML_SET_CONTRAST
Monochrome 29 #define ML_GET_CONTRAST
Monochrome 30 #define ML_PIXEL
Monochrome 31 #define ML_POINT
Monochrome 32 #define ML_PIXEL_TEST
Monochrome 33 #define ML_LINE
Monochrome 34 #define ML_HORIZONTAL_LINE
Monochrome 35 #define ML_VERTICAL_LINE
Monochrome 36 #define ML_RECTANGLE
Monochrome 37 #define ML_POLYGON
Monochrome 38 #define ML_FILLED_POLYGON
Monochrome 39 #define ML_CIRCLE
Monochrome 40 #define ML_FILLED_CIRCLE
Monochrome 41 #define ML_ELLIPSE
Monochrome 42 #define ML_ELLIPSE_IN_RECT
Monochrome 43 #define ML_FILLED_ELLIPSE
Monochrome 44 #define ML_FILLED_ELLIPSE_IN_RECT
Monochrome 45 #define ML_HORIZONTAL_SCROLL
Monochrome 46 #define ML_VERTICAL_SCROLL
Monochrome 47 #define ML_BMP_OR
Monochrome 48 #define ML_BMP_AND
Monochrome 49 #define ML_BMP_XOR
Monochrome 50 #define ML_BMP_OR_CL
Monochrome 51 #define ML_BMP_AND_CL
Monochrome 52 #define ML_BMP_XOR_CL
Monochrome 53 #define ML_BMP_8_OR
Monochrome 54 #define ML_BMP_8_AND
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 2
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 55 #define ML_BMP_8_XOR
Monochrome 56 #define ML_BMP_8_OR_CL
Monochrome 57 #define ML_BMP_8_AND_CL
Monochrome 58 #define ML_BMP_8_XOR_CL
Monochrome 59 #define ML_BMP_16_OR
Monochrome 60 #define ML_BMP_16_AND
Monochrome 61 #define ML_BMP_16_XOR
Monochrome 62 #define ML_BMP_16_OR_CL
Monochrome 63 #define ML_BMP_16_AND_CL
Monochrome 64 #define ML_BMP_16_XOR_CL
Monochrome 65 #define ML_BMP_OR_ZOOM
Monochrome 66 #define ML_BMP_AND_ZOOM
Monochrome 67 #define ML_BMP_XOR_ZOOM
Monochrome 68 #define ML_BMP_OR_ROTATE
Monochrome 69 #define ML_BMP_AND_ROTATE
Monochrome 70 #define ML_BMP_XOR_ROTATE
Monochrome 71 #endif
Monochrome 72
Monochrome 73 #ifdef ML_POLYGON
Monochrome 74 #define ML_LINE
Monochrome 75 #endif
Monochrome 76
Monochrome 77 #ifdef ML_LINE
Monochrome 78 #define ML_PIXEL
Monochrome 79 #endif
Monochrome 80
Monochrome 81 #ifdef ML_POINT
Monochrome 82 #define ML_PIXEL
Monochrome 83 #define ML_RECTANGLE
Monochrome 84 #endif
Monochrome 85
Monochrome 86 #ifdef ML_RECTANGLE
Monochrome 87 #define ML_HORIZONTAL_LINE
Monochrome 88 #endif
Monochrome 89
Monochrome 90 #ifdef ML_FILLED_POLYGON
Monochrome 91 #define ML_HORIZONTAL_LINE
Monochrome 92 #endif
Monochrome 93
Monochrome 94 #ifdef ML_CIRCLE
Monochrome 95 #define ML_PIXEL
Monochrome 96 #endif
Monochrome 97
Monochrome 98 #ifdef ML_FILLED_CIRCLE
Monochrome 99 #define ML_HORIZONTAL_LINE
Monochrome 100 #endif
Monochrome 101
Monochrome 102 #ifdef ML_ELLIPSE_IN_RECT
Monochrome 103 #define ML_ELLIPSE
Monochrome 104 #endif
Monochrome 105
Monochrome 106 #ifdef ML_ELLIPSE
Monochrome 107 #define ML_PIXEL
Monochrome 108 #endif
Monochrome 109
Monochrome 110 #ifdef ML_FILLED_ELLIPSE_IN_RECT
Monochrome 111 #define ML_FILLED_ELLIPSE
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 3
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 112 #endif
Monochrome 113
Monochrome 114 #ifdef ML_FILLED_ELLIPSE
Monochrome 115 #define ML_HORIZONTAL_LINE
Monochrome 116 #endif
Monochrome 117
Monochrome 118
Monochrome 119 /***************/
Monochrome 120 /** Functions **/
Monochrome 121 /***************/
Monochrome 122
Monochrome 123 #define sgn(x) (x<0?-1:1)
Monochrome 124 #define rnd(x) ((int)(x+0.5))
Monochrome 125
Monochrome 126 //Thanks to Simon Lothar for this function
Monochrome 127
Monochrome 128 static int SysCallCode[] = {0xD201422B,0x60F20000,0x80010070};
Monochrome 129 static int (*SysCall)( int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode;
Monochrome 130
Monochrome 131 char* ML_vram_adress()
P 00000000 _ML_vram_adress: ; function: ML_vram_adress
; frame size=8
00000000 4F22 STS.L PR,@-R15
Monochrome 132 {
Monochrome 133 return (char*)((*SysCall)(0, 0, 0, 0, 309));
00000002 E700 MOV #0,R7
00000004 D344 MOV.L L1650+4,R3 ; __$SysCall
00000006 6673 MOV R7,R6
00000008 9284 MOV.W L1650,R2 ; H'0135
0000000A 6573 MOV R7,R5
0000000C 6032 MOV.L @R3,R0
0000000E 2F26 MOV.L R2,@-R15
00000010 400B JSR @R0
00000012 6473 MOV R7,R4
Monochrome 134 }
00000014 7F04 ADD #4,R15
00000016 4F26 LDS.L @R15+,PR
00000018 000B RTS
0000001A 0009 NOP
Monochrome 135
Monochrome 136
Monochrome 137 #ifdef ML_CLEAR_VRAM
Monochrome 138 void ML_clear_vram()
0000001C _ML_clear_vram: ; function: ML_clear_vram
; frame size=8
0000001C 2FD6 MOV.L R13,@-R15
0000001E 4F22 STS.L PR,@-R15
Monochrome 139 {
Monochrome 140 int i, end, *pointer_long, vram;
Monochrome 141 char *pointer_byte;
Monochrome 142 vram = (int)ML_vram_adress();
00000020 BFEE BSR _ML_vram_adress
00000022 0009 NOP
00000024 6703 MOV R0,R7
Monochrome 143 end = 4-vram&3;
00000026 E004 MOV #4,R0
00000028 3078 SUB R7,R0
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 4
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000002A E603 MOV #3,R6
0000002C 2609 AND R0,R6
Monochrome 144 pointer_byte = (char*)vram;
0000002E 6D73 MOV R7,R13
Monochrome 145 for(i=0 ; i<end ; i++) pointer_byte[i] = 0;
00000030 E400 MOV #0,R4
00000032 6143 MOV R4,R1
00000034 4615 CMP/PL R6
00000036 8F05 BF/S L1119
00000038 6573 MOV R7,R5
0000003A L1120:
0000003A 7101 ADD #1,R1
0000003C 2540 MOV.B R4,@R5
0000003E 3163 CMP/GE R6,R1
00000040 8FFB BF/S L1120
00000042 7501 ADD #1,R5
00000044 L1119:
00000044 9067 MOV.W L1650+2,R0 ; H'03FC
Monochrome 146 pointer_long = (int*) (vram+end);
00000046 6163 MOV R6,R1
00000048 317C ADD R7,R1
0000004A 6513 MOV R1,R5
0000004C 301C ADD R1,R0
Monochrome 147 for(i=0 ; i<255 ; i++) pointer_long[i] = 0;
0000004E L1121:
0000004E 2542 MOV.L R4,@R5
00000050 7504 ADD #4,R5
00000052 3502 CMP/HS R0,R5
00000054 8BFB BF L1121
Monochrome 148 pointer_byte += 1020+end;
00000056 925E MOV.W L1650+2,R2 ; H'03FC
00000058 362C ADD R2,R6
0000005A 3D6C ADD R6,R13
Monochrome 149 end = vram&3;
0000005C E603 MOV #3,R6
0000005E 2679 AND R7,R6
Monochrome 150 for(i=0 ; i<end ; i++) pointer_byte[i] = 0;
00000060 6743 MOV R4,R7
00000062 4615 CMP/PL R6
00000064 8F05 BF/S L1122
00000066 65D3 MOV R13,R5
00000068 L1123:
00000068 2540 MOV.B R4,@R5
0000006A 7701 ADD #1,R7
0000006C 3763 CMP/GE R6,R7
0000006E 8FFB BF/S L1123
00000070 7501 ADD #1,R5
00000072 L1122:
Monochrome 151 }
00000072 4F26 LDS.L @R15+,PR
00000074 000B RTS
00000076 6DF6 MOV.L @R15+,R13
Monochrome 152 #endif
Monochrome 153
Monochrome 154 #ifdef ML_CLEAR_SCREEN
Monochrome 155 void ML_clear_screen()
00000078 _ML_clear_screen: ; function: ML_clear_screen
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 5
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
; frame size=12
00000078 2FC6 MOV.L R12,@-R15
Monochrome 156 {
Monochrome 157 char *LCD_register_selector = (char*)0xB4000000, *LCD_data_register = (char*)0xB4010000;
Monochrome 158 int i, j;
Monochrome 159 for(i=0 ; i<64 ; i++)
0000007A E704 MOV #4,R7
0000007C D527 MOV.L L1650+8,R5 ; H'B4000000
0000007E E600 MOV #0,R6
00000080 D427 MOV.L L1650+12,R4; H'B4010000
00000082 EC07 MOV #7,R12
00000084 2FB6 MOV.L R11,@-R15
00000086 6163 MOV R6,R1
00000088 2FA6 MOV.L R10,@-R15
0000008A EB10 MOV #16,R11
0000008C EA40 MOV #64,R10
0000008E L1124:
Monochrome 160 {
Monochrome 161 *LCD_register_selector = 4;
Monochrome 162 *LCD_data_register = i|192;
0000008E E3C0 MOV #-64,R3
00000090 2570 MOV.B R7,@R5
Monochrome 163 *LCD_register_selector = 4;
Monochrome 164 *LCD_data_register = 0;
Monochrome 165 *LCD_register_selector = 7;
Monochrome 166 for(j=0 ; j<16 ; j++) *LCD_data_register = 0;
00000092 60B3 MOV R11,R0
00000094 231B OR R1,R3
00000096 2430 MOV.B R3,@R4
00000098 2570 MOV.B R7,@R5
0000009A 2460 MOV.B R6,@R4
0000009C 25C0 MOV.B R12,@R5
0000009E L1125:
0000009E 4010 DT R0
000000A0 8FFD BF/S L1125
000000A2 2460 MOV.B R6,@R4
000000A4 7101 ADD #1,R1
000000A6 31A3 CMP/GE R10,R1
000000A8 8BF1 BF L1124
Monochrome 167 }
Monochrome 168 }
000000AA 6AF6 MOV.L @R15+,R10
000000AC 6BF6 MOV.L @R15+,R11
000000AE 000B RTS
000000B0 6CF6 MOV.L @R15+,R12
Monochrome 169 #endif
Monochrome 170
Monochrome 171 #ifdef ML_DISPLAY_VRAM
Monochrome 172 void ML_display_vram()
000000B2 _ML_display_vram: ; function: ML_display_vram
; frame size=20
000000B2 2FC6 MOV.L R12,@-R15
000000B4 2FB6 MOV.L R11,@-R15
000000B6 2FA6 MOV.L R10,@-R15
000000B8 2F96 MOV.L R9,@-R15
000000BA 4F22 STS.L PR,@-R15
Monochrome 173 {
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 6
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 174 char *LCD_register_selector = (char*)0xB4000000, *LCD_data_register = (char*)0xB4010000, *vram;
Monochrome 175 int i, j;
Monochrome 176 vram = ML_vram_adress();
000000BC BFA0 BSR _ML_vram_adress
000000BE 0009 NOP
Monochrome 177 for(i=0 ; i<64 ; i++)
000000C0 D516 MOV.L L1650+8,R5 ; H'B4000000
000000C2 6C03 MOV R0,R12
000000C4 D416 MOV.L L1650+12,R4; H'B4010000
000000C6 E940 MOV #64,R9
000000C8 EA10 MOV #16,R10
000000CA EB07 MOV #7,R11
000000CC E100 MOV #0,R1
000000CE E704 MOV #4,R7
000000D0 6013 MOV R1,R0
000000D2 L1126:
Monochrome 178 {
Monochrome 179 *LCD_register_selector = 4;
Monochrome 180 *LCD_data_register = i|192;
000000D2 E2C0 MOV #-64,R2
000000D4 2570 MOV.B R7,@R5
Monochrome 181 *LCD_register_selector = 4;
Monochrome 182 *LCD_data_register = 0;
Monochrome 183 *LCD_register_selector = 7;
Monochrome 184 for(j=0 ; j<16 ; j++) *LCD_data_register = *vram++;
000000D6 66A3 MOV R10,R6
000000D8 220B OR R0,R2
000000DA 2420 MOV.B R2,@R4
000000DC 2570 MOV.B R7,@R5
000000DE 2410 MOV.B R1,@R4
000000E0 25B0 MOV.B R11,@R5
000000E2 L1127:
000000E2 4610 DT R6
000000E4 63C4 MOV.B @R12+,R3
000000E6 8FFC BF/S L1127
000000E8 2430 MOV.B R3,@R4
000000EA 7001 ADD #1,R0
000000EC 3093 CMP/GE R9,R0
000000EE 8BF0 BF L1126
Monochrome 185 }
Monochrome 186 }
000000F0 4F26 LDS.L @R15+,PR
000000F2 69F6 MOV.L @R15+,R9
000000F4 6AF6 MOV.L @R15+,R10
000000F6 6BF6 MOV.L @R15+,R11
000000F8 000B RTS
000000FA 6CF6 MOV.L @R15+,R12
Monochrome 187 #endif
Monochrome 188
Monochrome 189 #ifdef ML_SET_CONTRAST
Monochrome 190 void ML_set_contrast(unsigned char contrast)
000000FC _ML_set_contrast: ; function: ML_set_contrast
; frame size=0
Monochrome 191 {
Monochrome 192 char *LCD_register_selector = (char*)0xB4000000, *LCD_data_register = (char*)0xB4010000;
Monochrome 193 *LCD_register_selector = 6;
000000FC D207 MOV.L L1650+8,R2 ; H'B4000000
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 7
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000000FE E306 MOV #6,R3
Monochrome 194 *LCD_data_register = contrast;
00000100 D107 MOV.L L1650+12,R1; H'B4010000
00000102 2230 MOV.B R3,@R2
Monochrome 195 }
00000104 000B RTS
00000106 2140 MOV.B R4,@R1
Monochrome 196 #endif
Monochrome 197
Monochrome 198 #ifdef ML_GET_CONTRAST
Monochrome 199 unsigned char ML_get_contrast()
00000108 _ML_get_contrast: ; function: ML_get_contrast
; frame size=0
Monochrome 200 {
Monochrome 201 char *LCD_register_selector = (char*)0xB4000000, *LCD_data_register = (char*)0xB4010000;
Monochrome 202 *LCD_register_selector = 6;
00000108 D204 MOV.L L1650+8,R2 ; H'B4000000
0000010A E306 MOV #6,R3
Monochrome 203 return *LCD_data_register;
0000010C D104 MOV.L L1650+12,R1; H'B4010000
0000010E 2230 MOV.B R3,@R2
Monochrome 204 }
00000110 000B RTS
00000112 6010 MOV.B @R1,R0
00000114 L1650:
00000114 0135 .DATA.W H'0135
00000116 03FC .DATA.W H'03FC
00000118 <00000000> .DATA.L __$SysCall
0000011C B4000000 .DATA.L H'B4000000
00000120 B4010000 .DATA.L H'B4010000
Monochrome 205 #endif
Monochrome 206
Monochrome 207 #ifdef ML_PIXEL
Monochrome 208 void ML_pixel(int x, int y, ML_Color color)
00000124 _ML_pixel: ; function: ML_pixel
; frame size=16
00000124 2FE6 MOV.L R14,@-R15
00000126 6E43 MOV R4,R14
00000128 2FD6 MOV.L R13,@-R15
0000012A 6D53 MOV R5,R13
0000012C 4F22 STS.L PR,@-R15
0000012E 7FFC ADD #-4,R15
Monochrome 209 {
Monochrome 210 char* vram = ML_vram_adress();
00000130 BF66 BSR _ML_vram_adress
00000132 2F62 MOV.L R6,@R15
Monochrome 211 if(x&~127 || y&~63) return;
00000134 E280 MOV #-128,R2
00000136 22E8 TST R14,R2
00000138 8F35 BF/S L1131
0000013A 6603 MOV R0,R6
0000013C E1C0 MOV #-64,R1
0000013E 21D8 TST R13,R1
00000140 8B31 BF L1131
00000142 64D3 MOV R13,R4
00000144 957C MOV.W L1651,R5 ; H'0080
00000146 63E3 MOV R14,R3
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 8
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000148 60F2 MOV.L @R15,R0
0000014A 4408 SHLL2 R4
0000014C 4408 SHLL2 R4
0000014E 4321 SHAR R3
00000150 4321 SHAR R3
00000152 4321 SHAR R3
00000154 343C ADD R3,R4
00000156 346C ADD R6,R4
00000158 E307 MOV #7,R3
0000015A 23E9 AND R14,R3
0000015C 633B NEG R3,R3
0000015E 8801 CMP/EQ #1,R0
00000160 8D08 BT/S L1101
00000162 453C SHAD R3,R5
00000164 8800 CMP/EQ #0,R0
00000166 8908 BT L1102
00000168 8802 CMP/EQ #2,R0
0000016A 890A BT L1103
0000016C 8803 CMP/EQ #3,R0
0000016E 890C BT L1104
00000170 A019 BRA L1131
00000172 0009 NOP
00000174 L1101: ; case label
Monochrome 212 switch(color)
Monochrome 213 {
Monochrome 214 case ML_BLACK:
Monochrome 215 vram[(y<<4)+(x>>3)] |= 128>>(x&7);
00000174 6340 MOV.B @R4,R3
Monochrome 216 break;
00000176 A011 BRA L1648
00000178 235B OR R5,R3
0000017A L1102: ; case label
Monochrome 217 case ML_WHITE:
Monochrome 218 vram[(y<<4)+(x>>3)] &= ~(128>>(x&7));
0000017A 6557 NOT R5,R5
0000017C 6340 MOV.B @R4,R3
Monochrome 219 break;
0000017E A00D BRA L1648
00000180 2359 AND R5,R3
00000182 L1103: ; case label
Monochrome 220 case ML_XOR:
Monochrome 221 vram[(y<<4)+(x>>3)] ^= 128>>(x&7);
00000182 6140 MOV.B @R4,R1
00000184 215A XOR R5,R1
Monochrome 222 break;
00000186 A00E BRA L1131
00000188 2410 MOV.B R1,@R4
0000018A L1104: ; case label
Monochrome 223 case ML_CHECKER:
Monochrome 224 if(y&1^x&1) vram[(y<<4)+(x>>3)] &= ~(128>>(x&7));
0000018A E601 MOV #1,R6
0000018C 2D69 AND R6,R13
0000018E 2E69 AND R6,R14
00000190 2DEA XOR R14,R13
00000192 2DD8 TST R13,R13
00000194 8904 BT L1133
00000196 6557 NOT R5,R5
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 9
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000198 6340 MOV.B @R4,R3
0000019A 2359 AND R5,R3
0000019C L1648:
0000019C A003 BRA L1131
0000019E 2430 MOV.B R3,@R4
000001A0 L1133:
Monochrome 225 else vram[(y<<4)+(x>>3)] |= 128>>(x&7);
000001A0 6140 MOV.B @R4,R1
000001A2 215B OR R5,R1
000001A4 2410 MOV.B R1,@R4
Monochrome 226 break;
Monochrome 227 }
Monochrome 228 }
000001A6 L1131:
000001A6 7F04 ADD #4,R15
000001A8 4F26 LDS.L @R15+,PR
000001AA 6DF6 MOV.L @R15+,R13
000001AC 000B RTS
000001AE 6EF6 MOV.L @R15+,R14
Monochrome 229 #endif
Monochrome 230
Monochrome 231 #ifdef ML_POINT
Monochrome 232 void ML_point(int x, int y, int width, ML_Color color)
000001B0 _ML_point: ; function: ML_point
; frame size=36
000001B0 2FE6 MOV.L R14,@-R15
Monochrome 233 {
Monochrome 234 if(width < 1) return;
000001B2 E301 MOV #1,R3
000001B4 2FD6 MOV.L R13,@-R15
000001B6 3633 CMP/GE R3,R6
000001B8 2FC6 MOV.L R12,@-R15
000001BA 6D53 MOV R5,R13
000001BC 2FB6 MOV.L R11,@-R15
000001BE 6C43 MOV R4,R12
000001C0 4F22 STS.L PR,@-R15
000001C2 7FFC ADD #-4,R15
000001C4 8F24 BF/S L1136
000001C6 2F72 MOV.L R7,@R15
Monochrome 235 if(width == 1) ML_pixel(x, y, color);
000001C8 6063 MOV R6,R0
000001CA 8801 CMP/EQ #1,R0
000001CC 8B09 BF L1137
000001CE 65D3 MOV R13,R5
000001D0 66F2 MOV.L @R15,R6
000001D2 64C3 MOV R12,R4
000001D4 7F04 ADD #4,R15
000001D6 4F26 LDS.L @R15+,PR
000001D8 6BF6 MOV.L @R15+,R11
000001DA 6CF6 MOV.L @R15+,R12
000001DC 6DF6 MOV.L @R15+,R13
000001DE AFA1 BRA _ML_pixel
000001E0 6EF6 MOV.L @R15+,R14
000001E2 L1137:
Monochrome 236 else
Monochrome 237 {
Monochrome 238 int padding, pair;
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 10
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 239 padding = width>>1;
000001E2 6E63 MOV R6,R14
Monochrome 240 pair = !(width&1);
Monochrome 241 ML_rectangle(x-padding+pair, y-padding+pair, x+padding, y+padding, 0, 0, color);
000001E4 63F2 MOV.L @R15,R3
000001E6 E200 MOV #0,R2
000001E8 2F36 MOV.L R3,@-R15
000001EA 67D3 MOV R13,R7
000001EC 2F26 MOV.L R2,@-R15
000001EE 65D3 MOV R13,R5
000001F0 2F26 MOV.L R2,@-R15
000001F2 64C3 MOV R12,R4
000001F4 4E21 SHAR R14
000001F6 EB01 MOV #1,R11
000001F8 2B69 AND R6,R11
000001FA 2BB8 TST R11,R11
000001FC 0B29 MOVT R11
000001FE 37EC ADD R14,R7
00000200 66C3 MOV R12,R6
00000202 36EC ADD R14,R6
00000204 35E8 SUB R14,R5
00000206 35BC ADD R11,R5
00000208 34E8 SUB R14,R4
0000020A B293 BSR _ML_rectangle
0000020C 34BC ADD R11,R4
0000020E 7F0C ADD #12,R15
Monochrome 242 }
Monochrome 243 }
00000210 L1136:
00000210 7F04 ADD #4,R15
00000212 4F26 LDS.L @R15+,PR
00000214 6BF6 MOV.L @R15+,R11
00000216 6CF6 MOV.L @R15+,R12
00000218 6DF6 MOV.L @R15+,R13
0000021A 000B RTS
0000021C 6EF6 MOV.L @R15+,R14
Monochrome 244 #endif
Monochrome 245
Monochrome 246 #ifdef ML_PIXEL_TEST
Monochrome 247 ML_Color ML_pixel_test(int x, int y)
0000021E _ML_pixel_test: ; function: ML_pixel_test
; frame size=12
Monochrome 248 {
Monochrome 249 char *vram, byte;
Monochrome 250 if(x&~127 || y&~63) return ML_TRANSPARENT;
0000021E E380 MOV #-128,R3
00000220 2FE6 MOV.L R14,@-R15
00000222 6E43 MOV R4,R14
00000224 4F22 STS.L PR,@-R15
00000226 23E8 TST R14,R3
00000228 7FFC ADD #-4,R15
0000022A 8F04 BF/S L1141
0000022C 2F52 MOV.L R5,@R15
0000022E E3C0 MOV #-64,R3
00000230 62F2 MOV.L @R15,R2
00000232 2238 TST R3,R2
00000234 8905 BT L1140
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 11
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000236 L1141:
00000236 E0FF MOV #-1,R0
00000238 7F04 ADD #4,R15
0000023A 4F26 LDS.L @R15+,PR
0000023C 000B RTS
0000023E 6EF6 MOV.L @R15+,R14
00000240 L1651:
00000240 0080 .DATA.W H'0080
00000242 L1140:
Monochrome 251 vram = ML_vram_adress();
00000242 BEDD BSR _ML_vram_adress
00000244 0009 NOP
00000246 6403 MOV R0,R4
Monochrome 252 byte = 1<<(7-(x&7));
Monochrome 253 return (vram[(y<<4)+(x>>3)] & byte ? ML_BLACK : ML_WHITE);
00000248 60F2 MOV.L @R15,R0
0000024A E507 MOV #7,R5
0000024C E601 MOV #1,R6
0000024E 62E3 MOV R14,R2
00000250 2259 AND R5,R2
00000252 6353 MOV R5,R3
00000254 3328 SUB R2,R3
00000256 6563 MOV R6,R5
00000258 453C SHAD R3,R5
0000025A 4008 SHLL2 R0
0000025C 4008 SHLL2 R0
0000025E 4E21 SHAR R14
00000260 4E21 SHAR R14
00000262 4E21 SHAR R14
00000264 30EC ADD R14,R0
00000266 655E EXTS.B R5,R5
00000268 004C MOV.B @(R0,R4),R0
0000026A 2058 TST R5,R0
0000026C 8904 BT L1143
0000026E 6063 MOV R6,R0
00000270 7F04 ADD #4,R15
00000272 4F26 LDS.L @R15+,PR
00000274 000B RTS
00000276 6EF6 MOV.L @R15+,R14
00000278 L1143:
00000278 E000 MOV #0,R0
Monochrome 254
Monochrome 255 }
0000027A L1142:
0000027A 7F04 ADD #4,R15
0000027C 4F26 LDS.L @R15+,PR
0000027E 000B RTS
00000280 6EF6 MOV.L @R15+,R14
Monochrome 256 #endif
Monochrome 257
Monochrome 258 #ifdef ML_LINE
Monochrome 259 void ML_line(int x1, int y1, int x2, int y2, ML_Color color)
00000282 _ML_line: ; function: ML_line
; frame size=40
00000282 2FE6 MOV.L R14,@-R15
00000284 2FD6 MOV.L R13,@-R15
Monochrome 260 {
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 12
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 261 int i, x, y, dx, dy, sx, sy, cumul;
Monochrome 262 x = x1;
Monochrome 263 y = y1;
Monochrome 264 dx = x2 - x1;
00000286 6E63 MOV R6,R14
00000288 2FC6 MOV.L R12,@-R15
0000028A 3E48 SUB R4,R14
0000028C 2FB6 MOV.L R11,@-R15
0000028E 6C53 MOV R5,R12
00000290 2FA6 MOV.L R10,@-R15
00000292 6B43 MOV R4,R11
00000294 2F96 MOV.L R9,@-R15
Monochrome 265 dy = y2 - y1;
00000296 6A73 MOV R7,R10
00000298 2F86 MOV.L R8,@-R15
Monochrome 266 sx = sgn(dx);
0000029A 4E11 CMP/PZ R14
0000029C 4F22 STS.L PR,@-R15
0000029E 7FF8 ADD #-8,R15
000002A0 59FA MOV.L @(40,R15),R9
000002A2 8D02 BT/S L1145
000002A4 3A58 SUB R5,R10
000002A6 A001 BRA L1146
000002A8 E8FF MOV #-1,R8
000002AA L1145:
000002AA E801 MOV #1,R8
000002AC L1146:
Monochrome 267 sy = sgn(dy);
000002AC 4A11 CMP/PZ R10
000002AE 8901 BT L1147
000002B0 A001 BRA L1148
000002B2 E2FF MOV #-1,R2
000002B4 L1147:
000002B4 E201 MOV #1,R2
000002B6 L1148:
000002B6 1F21 MOV.L R2,@(4,R15)
Monochrome 268 dx = abs(dx);
000002B8 D326 MOV.L L1652+2,R3 ; _abs
000002BA 430B JSR @R3
000002BC 64E3 MOV R14,R4
000002BE 6D03 MOV R0,R13
Monochrome 269 dy = abs(dy);
000002C0 D224 MOV.L L1652+2,R2 ; _abs
000002C2 420B JSR @R2
000002C4 64A3 MOV R10,R4
000002C6 6E03 MOV R0,R14
Monochrome 270 ML_pixel(x, y, color);
000002C8 6693 MOV R9,R6
000002CA 65C3 MOV R12,R5
000002CC BF2A BSR _ML_pixel
000002CE 64B3 MOV R11,R4
Monochrome 271 if(dx > dy)
000002D0 3DE7 CMP/GT R14,R13
000002D2 8F1B BF/S L1149
000002D4 E401 MOV #1,R4
Monochrome 272 {
Monochrome 273 cumul = dx / 2;
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 13
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000002D6 6AD3 MOV R13,R10
000002D8 E300 MOV #0,R3
000002DA 33A7 CMP/GT R10,R3
000002DC 3A3E ADDC R3,R10
000002DE 4A21 SHAR R10
Monochrome 274 for(i=1 ; i<dx ; i++)
000002E0 6343 MOV R4,R3
000002E2 33D3 CMP/GE R13,R3
000002E4 8D2B BT/S L1153
000002E6 2F42 MOV.L R4,@R15
000002E8 L1151:
Monochrome 275 {
Monochrome 276 x += sx;
Monochrome 277 cumul += dy;
000002E8 3AEC ADD R14,R10
Monochrome 278 if(cumul > dx)
000002EA 3AD7 CMP/GT R13,R10
000002EC 8F03 BF/S L1152
000002EE 3B8C ADD R8,R11
Monochrome 279 {
Monochrome 280 cumul -= dx;
Monochrome 281 y += sy;
000002F0 52F1 MOV.L @(4,R15),R2
000002F2 3AD8 SUB R13,R10
000002F4 3C2C ADD R2,R12
000002F6 L1152:
Monochrome 282 }
Monochrome 283 ML_pixel(x, y, color);
000002F6 6693 MOV R9,R6
000002F8 65C3 MOV R12,R5
000002FA BF13 BSR _ML_pixel
000002FC 64B3 MOV R11,R4
000002FE 62F2 MOV.L @R15,R2
00000300 7201 ADD #1,R2
00000302 32D3 CMP/GE R13,R2
00000304 8FF0 BF/S L1151
00000306 2F22 MOV.L R2,@R15
00000308 A019 BRA L1153
0000030A 0009 NOP
0000030C L1149:
Monochrome 284 }
Monochrome 285 }
Monochrome 286 else
Monochrome 287 {
Monochrome 288 cumul = dy / 2;
0000030C 6AE3 MOV R14,R10
0000030E E300 MOV #0,R3
00000310 33A7 CMP/GT R10,R3
00000312 3A3E ADDC R3,R10
00000314 4A21 SHAR R10
Monochrome 289 for(i=1 ; i<dy ; i++)
00000316 6343 MOV R4,R3
00000318 33E3 CMP/GE R14,R3
0000031A 8D10 BT/S L1153
0000031C 2F42 MOV.L R4,@R15
0000031E L1155:
Monochrome 290 {
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 14
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 291 y += sy;
Monochrome 292 cumul += dx;
0000031E 3ADC ADD R13,R10
00000320 51F1 MOV.L @(4,R15),R1
Monochrome 293 if(cumul > dy)
00000322 3AE7 CMP/GT R14,R10
00000324 8F02 BF/S L1156
00000326 3C1C ADD R1,R12
Monochrome 294 {
Monochrome 295 cumul -= dy;
00000328 3AE8 SUB R14,R10
Monochrome 296 x += sx;
0000032A 3B8C ADD R8,R11
0000032C L1156:
Monochrome 297 }
Monochrome 298 ML_pixel(x, y, color);
0000032C 6693 MOV R9,R6
0000032E 65C3 MOV R12,R5
00000330 BEF8 BSR _ML_pixel
00000332 64B3 MOV R11,R4
00000334 63F2 MOV.L @R15,R3
00000336 7301 ADD #1,R3
00000338 33E3 CMP/GE R14,R3
0000033A 8FF0 BF/S L1155
0000033C 2F32 MOV.L R3,@R15
0000033E L1153:
Monochrome 299 }
Monochrome 300 }
Monochrome 301 }
0000033E 7F08 ADD #8,R15
00000340 4F26 LDS.L @R15+,PR
00000342 68F6 MOV.L @R15+,R8
00000344 69F6 MOV.L @R15+,R9
00000346 6AF6 MOV.L @R15+,R10
00000348 6BF6 MOV.L @R15+,R11
0000034A 6CF6 MOV.L @R15+,R12
0000034C 6DF6 MOV.L @R15+,R13
0000034E 000B RTS
00000350 6EF6 MOV.L @R15+,R14
00000352 L1652:
00000352 0000 .DATA.W 0
00000354 <00000000> .DATA.L _abs
Monochrome 302 #endif
Monochrome 303
Monochrome 304 #ifdef ML_HORIZONTAL_LINE
Monochrome 305 void ML_horizontal_line(int y, int x1, int x2, ML_Color color)
00000358 _ML_horizontal_line: ; function: ML_horizontal_line
; frame size=44
00000358 2FE6 MOV.L R14,@-R15
0000035A 2FD6 MOV.L R13,@-R15
0000035C 2FC6 MOV.L R12,@-R15
0000035E 6C53 MOV R5,R12
00000360 2FB6 MOV.L R11,@-R15
00000362 6B63 MOV R6,R11
00000364 2FA6 MOV.L R10,@-R15
00000366 2F96 MOV.L R9,@-R15
00000368 2F86 MOV.L R8,@-R15
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 15
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000036A 4F22 STS.L PR,@-R15
0000036C 7FF4 ADD #-12,R15
0000036E 2F42 MOV.L R4,@R15
Monochrome 306 {
Monochrome 307 int i;
Monochrome 308 char checker;
Monochrome 309 char* vram = ML_vram_adress();
00000370 BE46 BSR _ML_vram_adress
00000372 1F72 MOV.L R7,@(8,R15)
Monochrome 310 if(y&~63 || (x1<0 && x2<0) || (x1>127 && x2>127)) return;
00000374 62F2 MOV.L @R15,R2
00000376 6603 MOV R0,R6
00000378 E3C0 MOV #-64,R3
0000037A 2238 TST R3,R2
0000037C 8901 BT L1653
0000037E A134 BRA L1160
00000380 0009 NOP
00000382 L1653:
00000382 4C11 CMP/PZ R12
00000384 8903 BT L1159
00000386 4B11 CMP/PZ R11
00000388 8901 BT L1654
0000038A A12E BRA L1160
0000038C 0009 NOP
0000038E L1654:
0000038E L1159:
0000038E E37F MOV #127,R3
00000390 3C37 CMP/GT R3,R12
00000392 8B03 BF L1157
00000394 3B37 CMP/GT R3,R11
00000396 8B01 BF L1655
00000398 A127 BRA L1160
0000039A 0009 NOP
0000039C L1655:
0000039C L1157:
Monochrome 311 if(x1 > x2)
0000039C 3CB7 CMP/GT R11,R12
0000039E 8F03 BF/S L1161
Monochrome 312 {
Monochrome 313 i = x1;
Monochrome 314 x1 = x2;
Monochrome 315 x2 = i;
Monochrome 316 }
Monochrome 317 if(x1 < 0) x1 = 0;
000003A0 E800 MOV #0,R8
000003A2 64C3 MOV R12,R4
000003A4 6CB3 MOV R11,R12
000003A6 6B43 MOV R4,R11
000003A8 L1161:
000003A8 4C11 CMP/PZ R12
000003AA 8D01 BT/S L1162
Monochrome 318 if(x2 > 127) x2 = 127;
000003AC E47F MOV #127,R4
000003AE 6C83 MOV R8,R12
000003B0 L1162:
000003B0 3B47 CMP/GT R4,R11
000003B2 8F01 BF/S L1163
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 16
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000003B4 E707 MOV #7,R7
000003B6 6B43 MOV R4,R11
000003B8 L1163:
000003B8 9436 MOV.W L1656,R4 ; H'00FF
000003BA 65C3 MOV R12,R5
000003BC 6DF2 MOV.L @R15,R13
000003BE 69C3 MOV R12,R9
000003C0 4521 SHAR R5
000003C2 4521 SHAR R5
000003C4 4521 SHAR R5
000003C6 6EB3 MOV R11,R14
000003C8 4E21 SHAR R14
000003CA 4E21 SHAR R14
000003CC 4E21 SHAR R14
000003CE 4D08 SHLL2 R13
000003D0 4D08 SHLL2 R13
000003D2 2979 AND R7,R9
000003D4 6AB3 MOV R11,R10
000003D6 60C3 MOV R12,R0
000003D8 4011 CMP/PZ R0
000003DA 8F02 BF/S L1164
000003DC 2A79 AND R7,R10
000003DE A005 BRA L1165
000003E0 C907 AND #7,R0
000003E2 L1164:
000003E2 6007 NOT R0,R0
000003E4 7001 ADD #1,R0
000003E6 C907 AND #7,R0
000003E8 6007 NOT R0,R0
000003EA 7001 ADD #1,R0
000003EC L1165:
000003EC 6303 MOV R0,R3
000003EE 60B3 MOV R11,R0
000003F0 4011 CMP/PZ R0
000003F2 8B01 BF L1166
000003F4 A005 BRA L1167
000003F6 C907 AND #7,R0
000003F8 L1166:
000003F8 6007 NOT R0,R0
000003FA 7001 ADD #1,R0
000003FC C907 AND #7,R0
000003FE 6007 NOT R0,R0
00000400 7001 ADD #1,R0
00000402 L1167:
00000402 3308 SUB R0,R3
00000404 7307 ADD #7,R3
00000406 633B NEG R3,R3
00000408 6043 MOV R4,R0
0000040A 403C SHAD R3,R0
0000040C 1F01 MOV.L R0,@(4,R15)
0000040E 50F2 MOV.L @(8,R15),R0
00000410 8801 CMP/EQ #1,R0
00000412 890A BT L1105
00000414 8800 CMP/EQ #0,R0
00000416 8932 BT L1106
00000418 8802 CMP/EQ #2,R0
0000041A 8963 BT L1107
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 17
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000041C 8803 CMP/EQ #3,R0
0000041E 8B01 BF L1657
00000420 A08F BRA L1108
00000422 0009 NOP
00000424 L1657:
00000424 A0E1 BRA L1160
00000426 0009 NOP
00000428 L1656:
00000428 00FF .DATA.W H'00FF
0000042A L1105: ; case label
Monochrome 319 switch(color)
Monochrome 320 {
Monochrome 321 case ML_BLACK:
Monochrome 322 if(x1>>3 != x2>>3)
0000042A 35E0 CMP/EQ R14,R5
0000042C 891E BT L1169
Monochrome 323 {
Monochrome 324 vram[(y<<4)+(x1>>3)] |= 255 >> (x1&7);
0000042E 60D3 MOV R13,R0
00000430 305C ADD R5,R0
00000432 639B NEG R9,R3
00000434 016C MOV.B @(R0,R6),R1
Monochrome 325 vram[(y<<4)+(x2>>3)] |= 255 << 7-(x2&7);
00000436 37A8 SUB R10,R7
00000438 6243 MOV R4,R2
0000043A 423C SHAD R3,R2
0000043C 212B OR R2,R1
0000043E 447C SHAD R7,R4
00000440 0614 MOV.B R1,@(R0,R6)
Monochrome 326 for(i=(x1>>3)+1 ; i<x2>>3 ; i++)
00000442 7501 ADD #1,R5
00000444 60E3 MOV R14,R0
00000446 30DC ADD R13,R0
00000448 036C MOV.B @(R0,R6),R3
0000044A 35E3 CMP/GE R14,R5
0000044C 234B OR R4,R3
0000044E 64D3 MOV R13,R4
00000450 0634 MOV.B R3,@(R0,R6)
00000452 345C ADD R5,R4
00000454 346C ADD R6,R4
00000456 8F02 BF/S L1658
00000458 E6FF MOV #-1,R6
0000045A A0C6 BRA L1160
0000045C 0009 NOP
0000045E L1658:
0000045E L1171:
0000045E 7501 ADD #1,R5
Monochrome 327 vram[(y<<4) + i] = 255;
00000460 2460 MOV.B R6,@R4
00000462 35E3 CMP/GE R14,R5
00000464 8FFB BF/S L1171
00000466 7401 ADD #1,R4
00000468 A0BF BRA L1160
0000046A 0009 NOP
0000046C L1169:
Monochrome 328 }
Monochrome 329 else vram[(y<<4)+(x1>>3)] |= (255>>(x1%8 + 7-x2%8))<<(7-(x2&7));
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 18
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000046C 53F1 MOV.L @(4,R15),R3
0000046E 60D3 MOV R13,R0
00000470 305C ADD R5,R0
00000472 37A8 SUB R10,R7
00000474 026C MOV.B @(R0,R6),R2
00000476 437C SHAD R7,R3
00000478 223B OR R3,R2
Monochrome 330 break;
0000047A A0B6 BRA L1160
0000047C 0624 MOV.B R2,@(R0,R6)
0000047E L1106: ; case label
Monochrome 331 case ML_WHITE:
Monochrome 332 if(x1>>3 != x2>>3)
0000047E 35E0 CMP/EQ R14,R5
00000480 8920 BT L1173
Monochrome 333 {
Monochrome 334 vram[(y<<4)+(x1>>3)] &= 255 << 8-(x1&7);
00000482 60D3 MOV R13,R0
00000484 305C ADD R5,R0
00000486 E308 MOV #8,R3
00000488 3398 SUB R9,R3
0000048A 6243 MOV R4,R2
0000048C 423C SHAD R3,R2
Monochrome 335 vram[(y<<4)+(x2>>3)] &= 255 >> 1+(x2&7);
Monochrome 336 for(i=(x1>>3)+1 ; i<x2>>3 ; i++)
0000048E 7501 ADD #1,R5
00000490 036C MOV.B @(R0,R6),R3
00000492 35E3 CMP/GE R14,R5
00000494 2329 AND R2,R3
00000496 0634 MOV.B R3,@(R0,R6)
00000498 60E3 MOV R14,R0
0000049A 30DC ADD R13,R0
0000049C 026C MOV.B @(R0,R6),R2
0000049E 63A3 MOV R10,R3
000004A0 7301 ADD #1,R3
000004A2 633B NEG R3,R3
000004A4 443C SHAD R3,R4
000004A6 2249 AND R4,R2
000004A8 0624 MOV.B R2,@(R0,R6)
000004AA 64D3 MOV R13,R4
000004AC 345C ADD R5,R4
000004AE 8F02 BF/S L1659
000004B0 346C ADD R6,R4
000004B2 A09A BRA L1160
000004B4 0009 NOP
000004B6 L1659:
000004B6 L1175:
000004B6 7501 ADD #1,R5
Monochrome 337 vram[(y<<4) + i] = 0;
000004B8 2480 MOV.B R8,@R4
000004BA 35E3 CMP/GE R14,R5
000004BC 8FFB BF/S L1175
000004BE 7401 ADD #1,R4
000004C0 A093 BRA L1160
000004C2 0009 NOP
000004C4 L1173:
Monochrome 338 }
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 19
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 339 else vram[(y<<4)+(x1>>3)] &= (255<<8-(x1&7)) | (255>>1+(x2&7));
000004C4 60D3 MOV R13,R0
000004C6 305C ADD R5,R0
000004C8 E308 MOV #8,R3
000004CA 3398 SUB R9,R3
000004CC 6243 MOV R4,R2
000004CE 423C SHAD R3,R2
000004D0 63A3 MOV R10,R3
000004D2 7301 ADD #1,R3
000004D4 633B NEG R3,R3
000004D6 6143 MOV R4,R1
000004D8 413C SHAD R3,R1
000004DA 221B OR R1,R2
000004DC 036C MOV.B @(R0,R6),R3
000004DE 2329 AND R2,R3
Monochrome 340 break;
000004E0 A083 BRA L1160
000004E2 0634 MOV.B R3,@(R0,R6)
000004E4 L1107: ; case label
Monochrome 341 case ML_XOR:
Monochrome 342 if(x1>>3 != x2>>3)
000004E4 35E0 CMP/EQ R14,R5
000004E6 891E BT L1177
Monochrome 343 {
Monochrome 344 vram[(y<<4)+(x1>>3)] ^= 255 >> (x1&7);
000004E8 60D3 MOV R13,R0
000004EA 305C ADD R5,R0
000004EC 016C MOV.B @(R0,R6),R1
Monochrome 345 vram[(y<<4)+(x2>>3)] ^= 255 << 7-(x2&7);
000004EE 37A8 SUB R10,R7
000004F0 639B NEG R9,R3
000004F2 6243 MOV R4,R2
000004F4 423C SHAD R3,R2
000004F6 212A XOR R2,R1
000004F8 0614 MOV.B R1,@(R0,R6)
000004FA 6343 MOV R4,R3
000004FC 60E3 MOV R14,R0
000004FE 30DC ADD R13,R0
00000500 026C MOV.B @(R0,R6),R2
Monochrome 346 for(i=(x1>>3)+1 ; i<(x2>>3) ; i++)
00000502 7501 ADD #1,R5
00000504 437C SHAD R7,R3
00000506 223A XOR R3,R2
00000508 0624 MOV.B R2,@(R0,R6)
0000050A 63D3 MOV R13,R3
0000050C 335C ADD R5,R3
0000050E 35E3 CMP/GE R14,R5
00000510 8D6B BT/S L1160
00000512 363C ADD R3,R6
00000514 L1179:
Monochrome 347 vram[(y<<4) + i] ^= 255;
00000514 6360 MOV.B @R6,R3
00000516 7501 ADD #1,R5
00000518 234A XOR R4,R3
0000051A 35E3 CMP/GE R14,R5
0000051C 2630 MOV.B R3,@R6
0000051E 8FF9 BF/S L1179
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 20
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000520 7601 ADD #1,R6
00000522 A062 BRA L1160
00000524 0009 NOP
00000526 L1177:
Monochrome 348 }
Monochrome 349 else vram[(y<<4)+(x1>>3)] ^= (255>>((x1&7) + 7-(x2&7)))<<(7-(x2&7));
00000526 60D3 MOV R13,R0
00000528 305C ADD R5,R0
0000052A 6393 MOV R9,R3
0000052C 33A8 SUB R10,R3
0000052E 7307 ADD #7,R3
00000530 633B NEG R3,R3
00000532 443C SHAD R3,R4
00000534 036C MOV.B @(R0,R6),R3
00000536 E207 MOV #7,R2
00000538 32A8 SUB R10,R2
0000053A 442C SHAD R2,R4
0000053C 234A XOR R4,R3
Monochrome 350 break;
0000053E A054 BRA L1160
00000540 0634 MOV.B R3,@(R0,R6)
00000542 L1108: ; case label
Monochrome 351 case ML_CHECKER:
Monochrome 352 checker = (y&1 ? 85 : 170);
00000542 60F2 MOV.L @R15,R0
00000544 C801 TST #1,R0
00000546 8901 BT L1181
00000548 A001 BRA L1182
0000054A EC55 MOV #85,R12
0000054C L1181:
0000054C 9C57 MOV.W L1660,R12 ; H'00AA
0000054E L1182:
Monochrome 353 if(x1>>3 != x2>>3)
0000054E 35E0 CMP/EQ R14,R5
00000550 8932 BT L1183
Monochrome 354 {
Monochrome 355 vram[(y<<4)+(x1>>3)] &= 255 << 8-(x1&7);
00000552 63D3 MOV R13,R3
00000554 335C ADD R5,R3
00000556 336C ADD R6,R3
00000558 1F31 MOV.L R3,@(4,R15)
0000055A 629B NEG R9,R2
0000055C 7208 ADD #8,R2
0000055E 6143 MOV R4,R1
00000560 412C SHAD R2,R1
00000562 6230 MOV.B @R3,R2
00000564 2219 AND R1,R2
Monochrome 356 vram[(y<<4)+(x2>>3)] &= 255 >> 1+(x2&7);
00000566 6143 MOV R4,R1
00000568 2320 MOV.B R2,@R3
0000056A 63E3 MOV R14,R3
0000056C 33DC ADD R13,R3
0000056E 336C ADD R6,R3
00000570 2F32 MOV.L R3,@R15
00000572 62A3 MOV R10,R2
00000574 6030 MOV.B @R3,R0
00000576 7201 ADD #1,R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 21
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000578 622B NEG R2,R2
0000057A 412C SHAD R2,R1
0000057C 2019 AND R1,R0
Monochrome 357 vram[(y<<4)+(x1>>3)] |= checker & 255>>(x1&7);
0000057E 629B NEG R9,R2
00000580 2300 MOV.B R0,@R3
00000582 6143 MOV R4,R1
00000584 53F1 MOV.L @(4,R15),R3
00000586 412C SHAD R2,R1
00000588 6230 MOV.B @R3,R2
0000058A 21C9 AND R12,R1
0000058C 221B OR R1,R2
0000058E 2320 MOV.B R2,@R3
Monochrome 358 vram[(y<<4)+(x2>>3)] |= checker & 255<<7-(x2&7);
00000590 63F2 MOV.L @R15,R3
00000592 37A8 SUB R10,R7
00000594 6230 MOV.B @R3,R2
Monochrome 359 for(i=(x1>>3)+1 ; i<x2>>3 ; i++)
00000596 7501 ADD #1,R5
00000598 447C SHAD R7,R4
0000059A 24C9 AND R12,R4
0000059C 224B OR R4,R2
0000059E 64D3 MOV R13,R4
000005A0 2320 MOV.B R2,@R3
000005A2 35E3 CMP/GE R14,R5
000005A4 345C ADD R5,R4
000005A6 8D20 BT/S L1160
000005A8 346C ADD R6,R4
000005AA L1185:
000005AA 7501 ADD #1,R5
Monochrome 360 vram[(y<<4) + i] = checker;
000005AC 24C0 MOV.B R12,@R4
000005AE 35E3 CMP/GE R14,R5
000005B0 8FFB BF/S L1185
000005B2 7401 ADD #1,R4
000005B4 A019 BRA L1160
000005B6 0009 NOP
000005B8 L1183:
Monochrome 361 }
Monochrome 362 else
Monochrome 363 {
Monochrome 364 vram[(y<<4)+(x1>>3)] &= (255<<8-(x1&7)) | (255>>1+(x2&7));
000005B8 63D3 MOV R13,R3
000005BA 335C ADD R5,R3
000005BC 336C ADD R6,R3
000005BE E208 MOV #8,R2
000005C0 2F32 MOV.L R3,@R15
000005C2 6143 MOV R4,R1
000005C4 3298 SUB R9,R2
000005C6 412C SHAD R2,R1
000005C8 62A3 MOV R10,R2
000005CA 7201 ADD #1,R2
000005CC 622B NEG R2,R2
000005CE 6043 MOV R4,R0
000005D0 402C SHAD R2,R0
000005D2 210B OR R0,R1
000005D4 6230 MOV.B @R3,R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 22
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 365 vram[(y<<4)+(x1>>3)] |= checker & (255>>(x1%8 + 7-x2%8))<<(7-(x2&7));
000005D6 37A8 SUB R10,R7
000005D8 2219 AND R1,R2
000005DA 2320 MOV.B R2,@R3
000005DC 63F2 MOV.L @R15,R3
000005DE 52F1 MOV.L @(4,R15),R2
000005E0 6130 MOV.B @R3,R1
000005E2 427C SHAD R7,R2
000005E4 22C9 AND R12,R2
000005E6 212B OR R2,R1
000005E8 2310 MOV.B R1,@R3
Monochrome 366 }
Monochrome 367 break;
Monochrome 368 }
Monochrome 369 }
000005EA L1160:
000005EA 7F0C ADD #12,R15
000005EC 4F26 LDS.L @R15+,PR
000005EE 68F6 MOV.L @R15+,R8
000005F0 69F6 MOV.L @R15+,R9
000005F2 6AF6 MOV.L @R15+,R10
000005F4 6BF6 MOV.L @R15+,R11
000005F6 6CF6 MOV.L @R15+,R12
000005F8 6DF6 MOV.L @R15+,R13
000005FA 000B RTS
000005FC 6EF6 MOV.L @R15+,R14
000005FE L1660:
000005FE 00AA .DATA.W H'00AA
Monochrome 370
Monochrome 371 #endif
Monochrome 372
Monochrome 373 #ifdef ML_VERTICAL_LINE
Monochrome 374 void ML_vertical_line(int x, int y1, int y2, ML_Color color)
00000600 _ML_vertical_line: ; function: ML_vertical_line
; frame size=24
00000600 2FE6 MOV.L R14,@-R15
00000602 6E53 MOV R5,R14
00000604 2FD6 MOV.L R13,@-R15
00000606 6D63 MOV R6,R13
00000608 2FC6 MOV.L R12,@-R15
0000060A 6C43 MOV R4,R12
0000060C 4F22 STS.L PR,@-R15
0000060E 7FF8 ADD #-8,R15
Monochrome 375 {
Monochrome 376 int i, j;
Monochrome 377 char checker, byte, *vram = ML_vram_adress();
00000610 BCF6 BSR _ML_vram_adress
00000612 2F72 MOV.L R7,@R15
Monochrome 378 if(x&~127 || (y1<0 && y2<0) || (y1>63 && y2>63)) return;
00000614 E380 MOV #-128,R3
00000616 23C8 TST R12,R3
00000618 8D02 BT/S L1661
0000061A 1F01 MOV.L R0,@(4,R15)
0000061C A084 BRA L1190
0000061E 0009 NOP
00000620 L1661:
00000620 4E11 CMP/PZ R14
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 23
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000622 8903 BT L1189
00000624 4D11 CMP/PZ R13
00000626 8901 BT L1662
00000628 A07E BRA L1190
0000062A 0009 NOP
0000062C L1662:
0000062C L1189:
0000062C E33F MOV #63,R3
0000062E 3E37 CMP/GT R3,R14
00000630 8B03 BF L1187
00000632 3D37 CMP/GT R3,R13
00000634 8B01 BF L1663
00000636 A077 BRA L1190
00000638 0009 NOP
0000063A L1663:
0000063A L1187:
Monochrome 379 if(y1 > y2)
0000063A 3ED7 CMP/GT R13,R14
0000063C 8B02 BF L1191
Monochrome 380 {
Monochrome 381 int tmp = y1;
0000063E 64E3 MOV R14,R4
Monochrome 382 y1 = y2;
00000640 6ED3 MOV R13,R14
Monochrome 383 y2 = tmp;
00000642 6D43 MOV R4,R13
00000644 L1191:
Monochrome 384 }
Monochrome 385 if(y1 < 0) y1 = 0;
00000644 4E11 CMP/PZ R14
00000646 8D01 BT/S L1192
Monochrome 386 if(y2 > 63) y2 = 63;
00000648 E43F MOV #63,R4
0000064A EE00 MOV #0,R14
0000064C L1192:
0000064C 3D47 CMP/GT R4,R13
0000064E 8B00 BF L1193
00000650 6D43 MOV R4,R13
00000652 L1193:
Monochrome 387
Monochrome 388 i = (y1<<4)+(x>>3);
00000652 64E3 MOV R14,R4
00000654 9747 MOV.W L1664,R7 ; H'0080
00000656 E607 MOV #7,R6
00000658 60F2 MOV.L @R15,R0
0000065A 65C3 MOV R12,R5
0000065C 4408 SHLL2 R4
0000065E 4408 SHLL2 R4
00000660 4521 SHAR R5
00000662 4521 SHAR R5
00000664 4521 SHAR R5
00000666 345C ADD R5,R4
Monochrome 389 j = (y2<<4)+(x>>3);
00000668 4D08 SHLL2 R13
0000066A 4D08 SHLL2 R13
0000066C 35DC ADD R13,R5
0000066E 8801 CMP/EQ #1,R0
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 24
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000670 5DF1 MOV.L @(4,R15),R13
00000672 8D08 BT/S L1109
00000674 3D4C ADD R4,R13
00000676 8800 CMP/EQ #0,R0
00000678 8915 BT L1110
0000067A 8802 CMP/EQ #2,R0
0000067C 8923 BT L1111
0000067E 8803 CMP/EQ #3,R0
00000680 8932 BT L1112
00000682 A051 BRA L1190
00000684 0009 NOP
00000686 L1109: ; case label
Monochrome 390 switch(color)
Monochrome 391 {
Monochrome 392 case ML_BLACK:
Monochrome 393 byte = 128>>(x&7);
00000686 2C69 AND R6,R12
00000688 6CCB NEG R12,R12
0000068A 6E73 MOV R7,R14
0000068C 4ECC SHAD R12,R14
Monochrome 394 for( ; i<=j ; i+=16)
0000068E 3457 CMP/GT R5,R4
00000690 8D4A BT/S L1190
00000692 66D3 MOV R13,R6
00000694 L1196:
Monochrome 395 vram[i] |= byte;
00000694 6260 MOV.B @R6,R2
00000696 7410 ADD #16,R4
00000698 22EB OR R14,R2
0000069A 3457 CMP/GT R5,R4
0000069C 2620 MOV.B R2,@R6
0000069E 8FF9 BF/S L1196
000006A0 7610 ADD #16,R6
Monochrome 396 break;
000006A2 A041 BRA L1190
000006A4 0009 NOP
000006A6 L1110: ; case label
Monochrome 397 case ML_WHITE:
Monochrome 398 byte = ~(128>>(x&7));
000006A6 2C69 AND R6,R12
000006A8 6CCB NEG R12,R12
000006AA 47CC SHAD R12,R7
000006AC 6E77 NOT R7,R14
Monochrome 399 for( ; i<=j ; i+=16)
000006AE 3457 CMP/GT R5,R4
000006B0 8D3A BT/S L1190
000006B2 66D3 MOV R13,R6
000006B4 L1198:
Monochrome 400 vram[i] &= byte;
000006B4 6260 MOV.B @R6,R2
000006B6 7410 ADD #16,R4
000006B8 22E9 AND R14,R2
000006BA 3457 CMP/GT R5,R4
000006BC 2620 MOV.B R2,@R6
000006BE 8FF9 BF/S L1198
000006C0 7610 ADD #16,R6
Monochrome 401 break;
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 25
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000006C2 A031 BRA L1190
000006C4 0009 NOP
000006C6 L1111: ; case label
Monochrome 402 case ML_XOR:
Monochrome 403 byte = 128>>(x&7);
000006C6 2C69 AND R6,R12
000006C8 6CCB NEG R12,R12
000006CA 6E73 MOV R7,R14
000006CC 4ECC SHAD R12,R14
Monochrome 404 for( ; i<=j ; i+=16)
000006CE 3457 CMP/GT R5,R4
000006D0 8D2A BT/S L1190
000006D2 66D3 MOV R13,R6
000006D4 L1200:
Monochrome 405 vram[i] ^= byte;
000006D4 6260 MOV.B @R6,R2
000006D6 7410 ADD #16,R4
000006D8 22EA XOR R14,R2
000006DA 3457 CMP/GT R5,R4
000006DC 2620 MOV.B R2,@R6
000006DE 8FF9 BF/S L1200
000006E0 7610 ADD #16,R6
Monochrome 406 break;
000006E2 A021 BRA L1190
000006E4 0009 NOP
000006E6 L1664:
000006E6 0080 .DATA.W H'0080
000006E8 L1112: ; case label
Monochrome 407 case ML_CHECKER:
Monochrome 408 byte = 128>>(x&7);
000006E8 26C9 AND R12,R6
000006EA 666B NEG R6,R6
000006EC 6073 MOV R7,R0
000006EE 406C SHAD R6,R0
Monochrome 409 checker = y1&1^x&1;
000006F0 E701 MOV #1,R7
000006F2 27E9 AND R14,R7
000006F4 E301 MOV #1,R3
000006F6 2C39 AND R3,R12
000006F8 27CA XOR R12,R7
000006FA 66D3 MOV R13,R6
000006FC 6ED3 MOV R13,R14
Monochrome 410 for( ; i<=j ; i+=16)
000006FE 3457 CMP/GT R5,R4
00000700 8D12 BT/S L1190
00000702 6D07 NOT R0,R13
00000704 L1202:
Monochrome 411 {
Monochrome 412 if(checker) vram[i] &= ~byte;
00000704 637E EXTS.B R7,R3
00000706 2338 TST R3,R3
00000708 8D04 BT/S L1203
Monochrome 413 else vram[i] |= byte;
Monochrome 414 checker = !checker;
0000070A 677E EXTS.B R7,R7
0000070C 62E0 MOV.B @R14,R2
0000070E 22D9 AND R13,R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 26
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000710 A003 BRA L1204
00000712 2E20 MOV.B R2,@R14
00000714 L1203:
00000714 6160 MOV.B @R6,R1
00000716 210B OR R0,R1
00000718 2610 MOV.B R1,@R6
0000071A L1204:
0000071A 2778 TST R7,R7
0000071C 0729 MOVT R7
0000071E 7410 ADD #16,R4
00000720 7610 ADD #16,R6
00000722 3457 CMP/GT R5,R4
00000724 8FEE BF/S L1202
00000726 7E10 ADD #16,R14
00000728 L1190:
Monochrome 415 }
Monochrome 416 break;
Monochrome 417 }
Monochrome 418 }
00000728 7F08 ADD #8,R15
0000072A 4F26 LDS.L @R15+,PR
0000072C 6CF6 MOV.L @R15+,R12
0000072E 6DF6 MOV.L @R15+,R13
00000730 000B RTS
00000732 6EF6 MOV.L @R15+,R14
Monochrome 419 #endif
Monochrome 420
Monochrome 421 #ifdef ML_RECTANGLE
Monochrome 422 void ML_rectangle(int x1, int y1, int x2, int y2, int border_width, ML_Color border_color, ML_Color fill_c
+olor)
00000734 _ML_rectangle: ; function: ML_rectangle
; frame size=48
00000734 2FE6 MOV.L R14,@-R15
00000736 2FD6 MOV.L R13,@-R15
00000738 2FC6 MOV.L R12,@-R15
0000073A 6D43 MOV R4,R13
0000073C 2FB6 MOV.L R11,@-R15
0000073E 6C63 MOV R6,R12
00000740 2FA6 MOV.L R10,@-R15
Monochrome 423 {
Monochrome 424 int i;
Monochrome 425 if(x1 > x2)
00000742 3DC7 CMP/GT R12,R13
00000744 2F96 MOV.L R9,@-R15
00000746 2F86 MOV.L R8,@-R15
00000748 4F22 STS.L PR,@-R15
0000074A 7FF0 ADD #-16,R15
0000074C 5EFC MOV.L @(48,R15),R14
0000074E 8F03 BF/S L1206
00000750 5BFD MOV.L @(52,R15),R11
Monochrome 426 {
Monochrome 427 i = x1;
00000752 64D3 MOV R13,R4
Monochrome 428 x1 = x2;
00000754 6DC3 MOV R12,R13
Monochrome 429 x2 = i;
00000756 6C43 MOV R4,R12
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 27
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000758 L1206:
Monochrome 430 }
Monochrome 431 if(y1 > y2)
00000758 3577 CMP/GT R7,R5
0000075A 8B02 BF L1207
Monochrome 432 {
Monochrome 433 i = y1;
0000075C 6453 MOV R5,R4
Monochrome 434 y1 = y2;
0000075E 6573 MOV R7,R5
Monochrome 435 y2 = i;
00000760 6743 MOV R4,R7
00000762 L1207:
00000762 64C3 MOV R12,R4
00000764 34D8 SUB R13,R4
00000766 E300 MOV #0,R3
00000768 3347 CMP/GT R4,R3
0000076A 343E ADDC R3,R4
0000076C 4421 SHAR R4
0000076E 7401 ADD #1,R4
00000770 3E47 CMP/GT R4,R14
00000772 8B00 BF L1208
Monochrome 436 }
Monochrome 437 if(border_width > (x2-x1)/2+1) border_width = (x2-x1)/2+1;
00000774 6E43 MOV R4,R14
00000776 L1208:
00000776 6473 MOV R7,R4
00000778 3458 SUB R5,R4
0000077A E300 MOV #0,R3
0000077C 3347 CMP/GT R4,R3
0000077E 343E ADDC R3,R4
00000780 4421 SHAR R4
00000782 7401 ADD #1,R4
00000784 3E47 CMP/GT R4,R14
00000786 8F01 BF/S L1209
00000788 6353 MOV R5,R3
Monochrome 438 if(border_width > (y2-y1)/2+1) border_width = (y2-y1)/2+1;
0000078A 6E43 MOV R4,R14
0000078C L1209:
0000078C 33EC ADD R14,R3
0000078E 6873 MOV R7,R8
00000790 1F33 MOV.L R3,@(12,R15)
00000792 62D3 MOV R13,R2
00000794 32EC ADD R14,R2
00000796 61C3 MOV R12,R1
00000798 1F22 MOV.L R2,@(8,R15)
0000079A 60B3 MOV R11,R0
0000079C 31E8 SUB R14,R1
0000079E 88FF CMP/EQ #-1,R0
000007A0 2F12 MOV.L R1,@R15
000007A2 8D2D BT/S L1210
000007A4 38E8 SUB R14,R8
000007A6 4E15 CMP/PL R14
000007A8 8B2A BF L1210
Monochrome 439 if(border_color != ML_TRANSPARENT && border_width > 0)
Monochrome 440 {
Monochrome 441 for(i=0 ; i<border_width ; i++)
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 28
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000007AA E300 MOV #0,R3
000007AC 1F31 MOV.L R3,@(4,R15)
000007AE 6973 MOV R7,R9
000007B0 4E15 CMP/PL R14
000007B2 8F11 BF/S L1211
000007B4 6A53 MOV R5,R10
000007B6 L1212:
Monochrome 442 {
Monochrome 443 ML_horizontal_line(y1+i, x1, x2, border_color);
000007B6 67B3 MOV R11,R7
000007B8 66C3 MOV R12,R6
000007BA 65D3 MOV R13,R5
000007BC BDCC BSR _ML_horizontal_line
000007BE 64A3 MOV R10,R4
Monochrome 444 ML_horizontal_line(y2-i, x1, x2, border_color);
000007C0 67B3 MOV R11,R7
000007C2 66C3 MOV R12,R6
000007C4 65D3 MOV R13,R5
000007C6 BDC7 BSR _ML_horizontal_line
000007C8 6493 MOV R9,R4
000007CA 79FF ADD #-1,R9
000007CC 52F1 MOV.L @(4,R15),R2
000007CE 7201 ADD #1,R2
000007D0 1F21 MOV.L R2,@(4,R15)
000007D2 32E3 CMP/GE R14,R2
000007D4 8FEF BF/S L1212
000007D6 7A01 ADD #1,R10
000007D8 L1211:
Monochrome 445 }
Monochrome 446 for(i=y1+border_width ; i<=y2-border_width ; i++)
000007D8 5EF3 MOV.L @(12,R15),R14
000007DA 5AF2 MOV.L @(8,R15),R10
000007DC 69F2 MOV.L @R15,R9
000007DE 3E87 CMP/GT R8,R14
000007E0 7AFF ADD #-1,R10
000007E2 8D0D BT/S L1210
000007E4 7901 ADD #1,R9
000007E6 L1214:
Monochrome 447 {
Monochrome 448 ML_horizontal_line(i, x1, x1+border_width-1, border_color);
000007E6 67B3 MOV R11,R7
000007E8 66A3 MOV R10,R6
000007EA 65D3 MOV R13,R5
000007EC BDB4 BSR _ML_horizontal_line
000007EE 64E3 MOV R14,R4
Monochrome 449 ML_horizontal_line(i, x2-border_width+1, x2, border_color);
000007F0 67B3 MOV R11,R7
000007F2 66C3 MOV R12,R6
000007F4 6593 MOV R9,R5
000007F6 BDAF BSR _ML_horizontal_line
000007F8 64E3 MOV R14,R4
000007FA 7E01 ADD #1,R14
000007FC 3E87 CMP/GT R8,R14
000007FE 8BF2 BF L1214
00000800 L1210:
Monochrome 450 }
Monochrome 451 }
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 29
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 452 if(fill_color != ML_TRANSPARENT)
00000800 50FE MOV.L @(56,R15),R0
00000802 88FF CMP/EQ #-1,R0
00000804 890A BT L1215
Monochrome 453 {
Monochrome 454 for(i=y1+border_width ; i<=y2-border_width ; i++)
00000806 5EF3 MOV.L @(12,R15),R14
00000808 3E87 CMP/GT R8,R14
0000080A 8907 BT L1215
0000080C L1217:
Monochrome 455 ML_horizontal_line(i, x1+border_width, x2-border_width, fill_color);
0000080C 57FE MOV.L @(56,R15),R7
0000080E 66F2 MOV.L @R15,R6
00000810 55F2 MOV.L @(8,R15),R5
00000812 BDA1 BSR _ML_horizontal_line
00000814 64E3 MOV R14,R4
00000816 7E01 ADD #1,R14
00000818 3E87 CMP/GT R8,R14
0000081A 8BF7 BF L1217
0000081C L1215:
Monochrome 456 }
Monochrome 457 }
0000081C 7F10 ADD #16,R15
0000081E 4F26 LDS.L @R15+,PR
00000820 68F6 MOV.L @R15+,R8
00000822 69F6 MOV.L @R15+,R9
00000824 6AF6 MOV.L @R15+,R10
00000826 6BF6 MOV.L @R15+,R11
00000828 6CF6 MOV.L @R15+,R12
0000082A 6DF6 MOV.L @R15+,R13
0000082C 000B RTS
0000082E 6EF6 MOV.L @R15+,R14
Monochrome 458 #endif
Monochrome 459
Monochrome 460 #ifdef ML_POLYGON
Monochrome 461 void ML_polygon(const int *x, const int *y, int nb_vertices, ML_Color color)
00000830 _ML_polygon: ; function: ML_polygon
; frame size=44
00000830 2FE6 MOV.L R14,@-R15
Monochrome 462 {
Monochrome 463 int i;
Monochrome 464 if(nb_vertices < 1) return;
00000832 E301 MOV #1,R3
00000834 2FD6 MOV.L R13,@-R15
00000836 3633 CMP/GE R3,R6
00000838 2FC6 MOV.L R12,@-R15
0000083A 6D43 MOV R4,R13
0000083C 2FB6 MOV.L R11,@-R15
0000083E 6C53 MOV R5,R12
00000840 2FA6 MOV.L R10,@-R15
00000842 2F96 MOV.L R9,@-R15
00000844 2F86 MOV.L R8,@-R15
00000846 4F22 STS.L PR,@-R15
00000848 7FF8 ADD #-8,R15
0000084A 8F21 BF/S L1219
0000084C 2F72 MOV.L R7,@R15
0000084E 6863 MOV R6,R8
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 30
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000850 78FF ADD #-1,R8
Monochrome 465 for(i=0 ; i<nb_vertices-1 ; i++)
00000852 4815 CMP/PL R8
00000854 8F11 BF/S L1220
00000856 EE00 MOV #0,R14
00000858 L1221:
Monochrome 466 ML_line(x[i], y[i], x[i+1], y[i+1], color);
00000858 62F2 MOV.L @R15,R2
0000085A 69E3 MOV R14,R9
0000085C 2F26 MOV.L R2,@-R15
0000085E 4908 SHLL2 R9
00000860 6A93 MOV R9,R10
00000862 3ACC ADD R12,R10
00000864 57A1 MOV.L @(4,R10),R7
00000866 6B93 MOV R9,R11
00000868 65A2 MOV.L @R10,R5
0000086A 3BDC ADD R13,R11
0000086C 56B1 MOV.L @(4,R11),R6
0000086E BD08 BSR _ML_line
00000870 64B2 MOV.L @R11,R4
00000872 7E01 ADD #1,R14
00000874 3E83 CMP/GE R8,R14
00000876 8FEF BF/S L1221
00000878 7F04 ADD #4,R15
0000087A L1220:
Monochrome 467 ML_line(x[i], y[i], x[0], y[0], color);
0000087A 60E3 MOV R14,R0
0000087C 63F2 MOV.L @R15,R3
0000087E 4008 SHLL2 R0
00000880 2F36 MOV.L R3,@-R15
00000882 67C2 MOV.L @R12,R7
00000884 66D2 MOV.L @R13,R6
00000886 1F02 MOV.L R0,@(8,R15)
00000888 05CE MOV.L @(R0,R12),R5
0000088A BCFA BSR _ML_line
0000088C 04DE MOV.L @(R0,R13),R4
0000088E 7F04 ADD #4,R15
Monochrome 468 }
00000890 L1219:
00000890 7F08 ADD #8,R15
00000892 4F26 LDS.L @R15+,PR
00000894 68F6 MOV.L @R15+,R8
00000896 69F6 MOV.L @R15+,R9
00000898 6AF6 MOV.L @R15+,R10
0000089A 6BF6 MOV.L @R15+,R11
0000089C 6CF6 MOV.L @R15+,R12
0000089E 6DF6 MOV.L @R15+,R13
000008A0 000B RTS
000008A2 6EF6 MOV.L @R15+,R14
Monochrome 469 #endif
Monochrome 470
Monochrome 471 #ifdef ML_FILLED_POLYGON
Monochrome 472 static int ML_filled_polygon_quicksord_partition(int *t, int p, int r)
000008A4 __$ML_filled_polygon_quicksord_partition:
; function: ML_filled_polygon_quicksord_partition
; frame size=20
000008A4 2FE6 MOV.L R14,@-R15
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 31
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 473 {
Monochrome 474 int i, j, x, tmp;
Monochrome 475 j = p - 1;
Monochrome 476 x = t[r];
Monochrome 477 for(i=p ; i<r ; i++)
000008A6 6753 MOV R5,R7
000008A8 2FD6 MOV.L R13,@-R15
000008AA 6E53 MOV R5,R14
000008AC 2FC6 MOV.L R12,@-R15
000008AE 3763 CMP/GE R6,R7
000008B0 7FF8 ADD #-8,R15
000008B2 7EFF ADD #-1,R14
000008B4 6C63 MOV R6,R12
000008B6 4C08 SHLL2 R12
000008B8 3C4C ADD R4,R12
000008BA 4508 SHLL2 R5
000008BC 1FC1 MOV.L R12,@(4,R15)
000008BE 354C ADD R4,R5
000008C0 6CC2 MOV.L @R12,R12
000008C2 2F52 MOV.L R5,@R15
000008C4 8D10 BT/S L1222
000008C6 6D53 MOV R5,R13
000008C8 L1223:
Monochrome 478 {
Monochrome 479 if(x > t[i])
000008C8 62D2 MOV.L @R13,R2
000008CA 3C27 CMP/GT R2,R12
000008CC 8F08 BF/S L1224
000008CE 7701 ADD #1,R7
Monochrome 480 {
Monochrome 481 j++;
Monochrome 482 tmp = t[j];
Monochrome 483 t[j] = t[i];
000008D0 6352 MOV.L @R5,R3
000008D2 7E01 ADD #1,R14
000008D4 60E3 MOV R14,R0
000008D6 4008 SHLL2 R0
000008D8 304C ADD R4,R0
000008DA 6102 MOV.L @R0,R1
000008DC 2032 MOV.L R3,@R0
Monochrome 484 t[i] = tmp;
000008DE 2512 MOV.L R1,@R5
000008E0 L1224:
000008E0 7504 ADD #4,R5
000008E2 3763 CMP/GE R6,R7
000008E4 8FF0 BF/S L1223
000008E6 7D04 ADD #4,R13
000008E8 L1222:
Monochrome 485 }
Monochrome 486 }
Monochrome 487 t[r] = t[j+1];
000008E8 53F1 MOV.L @(4,R15),R3
000008EA 65E3 MOV R14,R5
000008EC 4508 SHLL2 R5
000008EE 354C ADD R4,R5
000008F0 7504 ADD #4,R5
Monochrome 488 t[j+1] = x;
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 32
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 489 return j + 1;
000008F2 60E3 MOV R14,R0
000008F4 6252 MOV.L @R5,R2
000008F6 7001 ADD #1,R0
000008F8 2322 MOV.L R2,@R3
000008FA 25C2 MOV.L R12,@R5
Monochrome 490 }
000008FC 7F08 ADD #8,R15
000008FE 6CF6 MOV.L @R15+,R12
00000900 6DF6 MOV.L @R15+,R13
00000902 000B RTS
00000904 6EF6 MOV.L @R15+,R14
Monochrome 491
Monochrome 492 static void ML_filled_polygon_quicksord(int* t, int p, int r)
00000906 __$ML_filled_polygon_quicksord: ; function: ML_filled_polygon_quicksord
; frame size=20
00000906 2FE6 MOV.L R14,@-R15
00000908 2FD6 MOV.L R13,@-R15
0000090A 6E53 MOV R5,R14
0000090C 2FC6 MOV.L R12,@-R15
0000090E 6D63 MOV R6,R13
00000910 4F22 STS.L PR,@-R15
00000912 7FFC ADD #-4,R15
00000914 2F42 MOV.L R4,@R15
00000916 L1226:
Monochrome 493 {
Monochrome 494 int q;
Monochrome 495 if(p < r)
00000916 3ED3 CMP/GE R13,R14
00000918 890E BT L1227
Monochrome 496 {
Monochrome 497 q = ML_filled_polygon_quicksord_partition(t, p, r);
0000091A 66D3 MOV R13,R6
0000091C 65E3 MOV R14,R5
0000091E BFC1 BSR __$ML_filled_polygon_quicksord_partition
00000920 64F2 MOV.L @R15,R4
00000922 6C03 MOV R0,R12
Monochrome 498 ML_filled_polygon_quicksord(t, p, q-1);
00000924 6603 MOV R0,R6
00000926 76FF ADD #-1,R6
00000928 65E3 MOV R14,R5
0000092A BFEC BSR __$ML_filled_polygon_quicksord
0000092C 64F2 MOV.L @R15,R4
Monochrome 499 ML_filled_polygon_quicksord(t, q+1, r);
0000092E 65D3 MOV R13,R5
00000930 64C3 MOV R12,R4
00000932 7401 ADD #1,R4
00000934 AFEF BRA L1226
00000936 6E43 MOV R4,R14
00000938 L1227:
Monochrome 500 }
Monochrome 501 }
00000938 7F04 ADD #4,R15
0000093A 4F26 LDS.L @R15+,PR
0000093C 6CF6 MOV.L @R15+,R12
0000093E 6DF6 MOV.L @R15+,R13
00000940 000B RTS
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 33
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000942 6EF6 MOV.L @R15+,R14
Monochrome 502
Monochrome 503
Monochrome 504 void ML_filled_polygon(const int *x, const int *y, int nb_vertices, ML_Color color)
00000944 _ML_filled_polygon: ; function: ML_filled_polygon
; frame size=108
; used runtime library name:
; __divls, __modls, __addd, __dtoi, __itod
00000944 2FE6 MOV.L R14,@-R15
Monochrome 505 {
Monochrome 506 int i, j, dx, dy, ymin, ymax;
Monochrome 507 int *cut_in_line, nb_cut;
Monochrome 508 if(nb_vertices < 3) return;
00000946 E303 MOV #3,R3
00000948 2FD6 MOV.L R13,@-R15
0000094A 2FC6 MOV.L R12,@-R15
0000094C 2FB6 MOV.L R11,@-R15
0000094E 6B63 MOV R6,R11
00000950 2FA6 MOV.L R10,@-R15
00000952 3B33 CMP/GE R3,R11
00000954 2F96 MOV.L R9,@-R15
00000956 6A53 MOV R5,R10
00000958 2F86 MOV.L R8,@-R15
0000095A 4F22 STS.L PR,@-R15
0000095C 4F12 STS.L MACL,@-R15
0000095E 7FD8 ADD #-40,R15
00000960 1F44 MOV.L R4,@(16,R15)
00000962 8D02 BT/S L1665
00000964 1F73 MOV.L R7,@(12,R15)
00000966 A100 BRA L1229
00000968 0009 NOP
0000096A L1665:
Monochrome 509 cut_in_line = malloc(nb_vertices*sizeof(int));
0000096A 64B3 MOV R11,R4
0000096C D384 MOV.L L1666,R3 ; _malloc
0000096E 430B JSR @R3
00000970 4408 SHLL2 R4
00000972 6D03 MOV R0,R13
Monochrome 510 if(!cut_in_line) return;
00000974 2DD8 TST R13,R13
00000976 8B01 BF L1667
00000978 A0F7 BRA L1229
0000097A 0009 NOP
0000097C L1667:
Monochrome 511 ymin = ymax = y[0];
0000097C 6EA2 MOV.L @R10,R14
Monochrome 512 for(i=1 ; i<nb_vertices ; i++)
0000097E E801 MOV #1,R8
00000980 1FE6 MOV.L R14,@(24,R15)
00000982 E704 MOV #4,R7
00000984 6483 MOV R8,R4
00000986 37AC ADD R10,R7
00000988 6573 MOV R7,R5
0000098A 34B3 CMP/GE R11,R4
0000098C 8D12 BT/S L1231
0000098E 6673 MOV R7,R6
00000990 L1232:
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 34
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 513 {
Monochrome 514 if(y[i] < ymin) ymin = y[i];
00000990 6043 MOV R4,R0
00000992 4008 SHLL2 R0
00000994 03AE MOV.L @(R0,R10),R3
00000996 33E3 CMP/GE R14,R3
00000998 8900 BT L1233
0000099A 6E72 MOV.L @R7,R14
0000099C L1233:
Monochrome 515 if(y[i] > ymax) ymax = y[i];
0000099C 53F6 MOV.L @(24,R15),R3
0000099E 6262 MOV.L @R6,R2
000009A0 3237 CMP/GT R3,R2
000009A2 8F02 BF/S L1234
000009A4 7401 ADD #1,R4
000009A6 6252 MOV.L @R5,R2
000009A8 1F26 MOV.L R2,@(24,R15)
000009AA L1234:
000009AA 7504 ADD #4,R5
000009AC 7604 ADD #4,R6
000009AE 34B3 CMP/GE R11,R4
000009B0 8FEE BF/S L1232
000009B2 7704 ADD #4,R7
000009B4 L1231:
Monochrome 516 }
Monochrome 517 for(i=ymin ; i<=ymax ; i++)
000009B4 A0C7 BRA L1235
000009B6 6CE3 MOV R14,R12
000009B8 L1236:
Monochrome 518 {
Monochrome 519 nb_cut = 0;
000009B8 E900 MOV #0,R9
Monochrome 520 for(j=0 ; j<nb_vertices ; j++)
000009BA 6E93 MOV R9,R14
000009BC 6393 MOV R9,R3
000009BE 4B15 CMP/PL R11
000009C0 2F32 MOV.L R3,@R15
000009C2 1F81 MOV.L R8,@(4,R15)
000009C4 8F73 BF/S L1237
000009C6 1F82 MOV.L R8,@(8,R15)
000009C8 L1238:
Monochrome 521 {
Monochrome 522 if((y[j]<=i && y[(j+1)%nb_vertices]>=i) || (y[j]>=i && y[(j+1)%nb_vertices]<=i))
000009C8 60E3 MOV R14,R0
000009CA 4008 SHLL2 R0
000009CC 04AE MOV.L @(R0,R10),R4
000009CE 34C7 CMP/GT R12,R4
000009D0 8908 BT L1241
000009D2 61E3 MOV R14,R1
000009D4 D36B MOV.L L1666+4,R3 ; __modls
000009D6 7101 ADD #1,R1
000009D8 430B JSR @R3
000009DA 60B3 MOV R11,R0
000009DC 4008 SHLL2 R0
000009DE 02AE MOV.L @(R0,R10),R2
000009E0 32C3 CMP/GE R12,R2
000009E2 890A BT L1240
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 35
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000009E4 L1241:
000009E4 34C3 CMP/GE R12,R4
000009E6 8B56 BF L1239
000009E8 D366 MOV.L L1666+4,R3 ; __modls
000009EA 61E3 MOV R14,R1
000009EC 7101 ADD #1,R1
000009EE 430B JSR @R3
000009F0 60B3 MOV R11,R0
000009F2 4008 SHLL2 R0
000009F4 02AE MOV.L @(R0,R10),R2
000009F6 32C7 CMP/GT R12,R2
000009F8 894D BT L1239
000009FA L1240:
Monochrome 523 {
Monochrome 524 dy = abs(y[j]-y[(j+1)%nb_vertices]);
000009FA 60E3 MOV R14,R0
000009FC 51F2 MOV.L @(8,R15),R1
000009FE 4008 SHLL2 R0
00000A00 D360 MOV.L L1666+4,R3 ; __modls
00000A02 04AE MOV.L @(R0,R10),R4
00000A04 430B JSR @R3
00000A06 60B3 MOV R11,R0
00000A08 D25F MOV.L L1666+8,R2 ; _abs
00000A0A 4008 SHLL2 R0
00000A0C 03AE MOV.L @(R0,R10),R3
00000A0E 420B JSR @R2
00000A10 3438 SUB R3,R4
Monochrome 525 if(dy)
00000A12 2008 TST R0,R0
00000A14 8D3F BT/S L1239
00000A16 1F05 MOV.L R0,@(20,R15)
Monochrome 526 {
Monochrome 527 dx = x[(j+1)%nb_vertices]-x[j];
00000A18 51F1 MOV.L @(4,R15),R1
00000A1A D25A MOV.L L1666+4,R2 ; __modls
00000A1C 420B JSR @R2
00000A1E 60B3 MOV R11,R0
00000A20 53F4 MOV.L @(16,R15),R3
Monochrome 528 cut_in_line[nb_cut] = x[j] + rnd(abs(i-y[j]+sgn(i-y[j])/2)*dx/dy);
00000A22 64C3 MOV R12,R4
00000A24 4008 SHLL2 R0
00000A26 023E MOV.L @(R0,R3),R2
00000A28 60F2 MOV.L @R15,R0
00000A2A 013E MOV.L @(R0,R3),R1
00000A2C 1F18 MOV.L R1,@(32,R15)
00000A2E 3218 SUB R1,R2
00000A30 1F27 MOV.L R2,@(28,R15)
00000A32 6193 MOV R9,R1
00000A34 4108 SHLL2 R1
00000A36 31DC ADD R13,R1
00000A38 2F16 MOV.L R1,@-R15
00000A3A 7FF8 ADD #-8,R15
00000A3C 50F3 MOV.L @(12,R15),R0
00000A3E 02AE MOV.L @(R0,R10),R2
00000A40 3428 SUB R2,R4
00000A42 4411 CMP/PZ R4
00000A44 8D02 BT/S L1243
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 36
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000A46 1F2C MOV.L R2,@(48,R15)
00000A48 A001 BRA L1244
00000A4A E4FF MOV #-1,R4
00000A4C L1243:
00000A4C E401 MOV #1,R4
00000A4E L1244:
00000A4E E300 MOV #0,R3
00000A50 52FC MOV.L @(48,R15),R2
00000A52 3347 CMP/GT R4,R3
00000A54 343E ADDC R3,R4
00000A56 4421 SHAR R4
00000A58 D34B MOV.L L1666+8,R3 ; _abs
00000A5A 3428 SUB R2,R4
00000A5C 430B JSR @R3
00000A5E 34CC ADD R12,R4
00000A60 51FA MOV.L @(40,R15),R1
00000A62 0017 MUL.L R1,R0
00000A64 D349 MOV.L L1666+12,R3; __divls
00000A66 011A STS MACL,R1
00000A68 430B JSR @R3
00000A6A 50F8 MOV.L @(32,R15),R0
00000A6C D248 MOV.L L1666+16,R2; __itod
00000A6E 7FF8 ADD #-8,R15
00000A70 420B JSR @R2
00000A72 2FF6 MOV.L R15,@-R15
00000A74 D148 MOV.L L1666+24,R1; __addd
00000A76 E300 MOV #0,R3
00000A78 2F36 MOV.L R3,@-R15
00000A7A D346 MOV.L L1666+20,R3; H'3FE00000
00000A7C 2F36 MOV.L R3,@-R15
00000A7E 62F3 MOV R15,R2
00000A80 7210 ADD #16,R2
00000A82 410B JSR @R1
00000A84 2F26 MOV.L R2,@-R15
00000A86 D345 MOV.L L1666+28,R3; __dtoi
00000A88 430B JSR @R3
00000A8A 0009 NOP
00000A8C 52F9 MOV.L @(36,R15),R2
Monochrome 529 nb_cut++;
00000A8E 7901 ADD #1,R9
00000A90 63F6 MOV.L @R15+,R3
00000A92 302C ADD R2,R0
00000A94 2302 MOV.L R0,@R3
00000A96 L1239:
00000A96 7E01 ADD #1,R14
00000A98 62F2 MOV.L @R15,R2
00000A9A 3EB3 CMP/GE R11,R14
00000A9C 7204 ADD #4,R2
00000A9E 2F22 MOV.L R2,@R15
00000AA0 53F1 MOV.L @(4,R15),R3
00000AA2 7301 ADD #1,R3
00000AA4 1F31 MOV.L R3,@(4,R15)
00000AA6 51F2 MOV.L @(8,R15),R1
00000AA8 7101 ADD #1,R1
00000AAA 8F8D BF/S L1238
00000AAC 1F12 MOV.L R1,@(8,R15)
00000AAE L1237:
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 37
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 530 }
Monochrome 531 }
Monochrome 532 }
Monochrome 533 ML_filled_polygon_quicksord(cut_in_line, 0, nb_cut-1);
00000AAE 6693 MOV R9,R6
00000AB0 76FF ADD #-1,R6
00000AB2 E500 MOV #0,R5
00000AB4 1F61 MOV.L R6,@(4,R15)
00000AB6 BF26 BSR __$ML_filled_polygon_quicksord
00000AB8 64D3 MOV R13,R4
Monochrome 534 j = 0;
00000ABA EE00 MOV #0,R14
00000ABC 6493 MOV R9,R4
Monochrome 535 while(j<nb_cut-2 && cut_in_line[j]==cut_in_line[j+1]) j++;
00000ABE A001 BRA L1245
00000AC0 74FE ADD #-2,R4
00000AC2 L1246:
00000AC2 7E01 ADD #1,R14
00000AC4 L1245:
00000AC4 3E43 CMP/GE R4,R14
00000AC6 893B BT L1248
00000AC8 60E3 MOV R14,R0
00000ACA 4008 SHLL2 R0
00000ACC 03DE MOV.L @(R0,R13),R3
00000ACE 62E3 MOV R14,R2
00000AD0 4208 SHLL2 R2
00000AD2 32DC ADD R13,R2
00000AD4 5121 MOV.L @(4,R2),R1
00000AD6 3310 CMP/EQ R1,R3
00000AD8 89F3 BT L1246
Monochrome 536 while(j < nb_cut)
00000ADA A031 BRA L1248
00000ADC 0009 NOP
00000ADE L1249:
00000ADE 63E3 MOV R14,R3
00000AE0 4308 SHLL2 R3
00000AE2 33DC ADD R13,R3
00000AE4 1F32 MOV.L R3,@(8,R15)
00000AE6 52F1 MOV.L @(4,R15),R2
00000AE8 3E20 CMP/EQ R2,R14
00000AEA 8B0A BF L1250
Monochrome 537 {
Monochrome 538 if(j == nb_cut-1) ML_horizontal_line(i, cut_in_line[j-1]+1, cut_in_line[j], color)
+;
00000AEC 57F3 MOV.L @(12,R15),R7
00000AEE 60E3 MOV R14,R0
00000AF0 6632 MOV.L @R3,R6
00000AF2 70FF ADD #-1,R0
00000AF4 4008 SHLL2 R0
00000AF6 05DE MOV.L @(R0,R13),R5
00000AF8 7501 ADD #1,R5
00000AFA BC2D BSR _ML_horizontal_line
00000AFC 64C3 MOV R12,R4
00000AFE A01E BRA L1251
00000B00 0009 NOP
00000B02 L1250:
Monochrome 539 else
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 38
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 540 {
Monochrome 541 dx = 1;
Monochrome 542 while(j+dx<nb_cut-1 && cut_in_line[j+dx]==cut_in_line[j+dx+1]) dx++;
00000B02 A003 BRA L1252
00000B04 2F82 MOV.L R8,@R15
00000B06 L1253:
00000B06 63F2 MOV.L @R15,R3
00000B08 7301 ADD #1,R3
00000B0A 2F32 MOV.L R3,@R15
00000B0C L1252:
00000B0C 64F2 MOV.L @R15,R4
00000B0E 34EC ADD R14,R4
00000B10 53F1 MOV.L @(4,R15),R3
00000B12 3433 CMP/GE R3,R4
00000B14 8908 BT L1254
00000B16 6043 MOV R4,R0
00000B18 4008 SHLL2 R0
00000B1A 6243 MOV R4,R2
00000B1C 03DE MOV.L @(R0,R13),R3
00000B1E 4208 SHLL2 R2
00000B20 32DC ADD R13,R2
00000B22 5121 MOV.L @(4,R2),R1
00000B24 3310 CMP/EQ R1,R3
00000B26 89EE BT L1253
00000B28 L1254:
Monochrome 543 ML_horizontal_line(i, cut_in_line[j], cut_in_line[j+dx], color);
00000B28 57F3 MOV.L @(12,R15),R7
00000B2A 60F2 MOV.L @R15,R0
00000B2C 55F2 MOV.L @(8,R15),R5
00000B2E 30EC ADD R14,R0
00000B30 6552 MOV.L @R5,R5
00000B32 4008 SHLL2 R0
00000B34 06DE MOV.L @(R0,R13),R6
00000B36 BC0F BSR _ML_horizontal_line
00000B38 64C3 MOV R12,R4
Monochrome 544 j += dx;
00000B3A 62F2 MOV.L @R15,R2
00000B3C 3E2C ADD R2,R14
00000B3E L1251:
Monochrome 545 }
Monochrome 546 j++;
00000B3E 7E01 ADD #1,R14
00000B40 L1248:
00000B40 3E93 CMP/GE R9,R14
00000B42 8BCC BF L1249
00000B44 7C01 ADD #1,R12
00000B46 L1235:
00000B46 52F6 MOV.L @(24,R15),R2
00000B48 3C27 CMP/GT R2,R12
00000B4A 8901 BT L1668
00000B4C AF34 BRA L1236
00000B4E 0009 NOP
00000B50 L1668:
Monochrome 547 }
Monochrome 548 }
Monochrome 549 free(cut_in_line);
00000B50 D213 MOV.L L1666+32,R2; _free
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 39
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000B52 64D3 MOV R13,R4
00000B54 7F28 ADD #40,R15
00000B56 4F16 LDS.L @R15+,MACL
00000B58 4F26 LDS.L @R15+,PR
00000B5A 68F6 MOV.L @R15+,R8
00000B5C 69F6 MOV.L @R15+,R9
00000B5E 6AF6 MOV.L @R15+,R10
00000B60 6BF6 MOV.L @R15+,R11
00000B62 6CF6 MOV.L @R15+,R12
00000B64 6DF6 MOV.L @R15+,R13
00000B66 422B JMP @R2
00000B68 6EF6 MOV.L @R15+,R14
00000B6A L1229:
Monochrome 550 }
00000B6A 7F28 ADD #40,R15
00000B6C 4F16 LDS.L @R15+,MACL
00000B6E 4F26 LDS.L @R15+,PR
00000B70 68F6 MOV.L @R15+,R8
00000B72 69F6 MOV.L @R15+,R9
00000B74 6AF6 MOV.L @R15+,R10
00000B76 6BF6 MOV.L @R15+,R11
00000B78 6CF6 MOV.L @R15+,R12
00000B7A 6DF6 MOV.L @R15+,R13
00000B7C 000B RTS
00000B7E 6EF6 MOV.L @R15+,R14
00000B80 L1666:
00000B80 <00000000> .DATA.L _malloc
00000B84 <00000000> .DATA.L __modls
00000B88 <00000000> .DATA.L _abs
00000B8C <00000000> .DATA.L __divls
00000B90 <00000000> .DATA.L __itod
00000B94 3FE00000 .DATA.L H'3FE00000
00000B98 <00000000> .DATA.L __addd
00000B9C <00000000> .DATA.L __dtoi
00000BA0 <00000000> .DATA.L _free
Monochrome 551 #endif
Monochrome 552
Monochrome 553 #ifdef ML_CIRCLE
Monochrome 554 void ML_circle(int x, int y, int radius, ML_Color color)
00000BA4 _ML_circle: ; function: ML_circle
; frame size=40
00000BA4 2FE6 MOV.L R14,@-R15
00000BA6 2FD6 MOV.L R13,@-R15
00000BA8 2FC6 MOV.L R12,@-R15
00000BAA 2FB6 MOV.L R11,@-R15
00000BAC 2FA6 MOV.L R10,@-R15
00000BAE 6B53 MOV R5,R11
00000BB0 2F96 MOV.L R9,@-R15
00000BB2 6A43 MOV R4,R10
00000BB4 2F86 MOV.L R8,@-R15
00000BB6 6863 MOV R6,R8
00000BB8 4F22 STS.L PR,@-R15
Monochrome 555 {
Monochrome 556 int plot_x, plot_y, d;
Monochrome 557
Monochrome 558 if(radius < 0) return;
00000BBA 4811 CMP/PZ R8
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 40
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000BBC 7FF8 ADD #-8,R15
00000BBE 8F60 BF/S L1256
00000BC0 6C73 MOV R7,R12
Monochrome 559 plot_x = 0;
00000BC2 ED00 MOV #0,R13
Monochrome 560 plot_y = radius;
00000BC4 6E83 MOV R8,R14
Monochrome 561 d = 1 - radius;
00000BC6 E901 MOV #1,R9
00000BC8 3988 SUB R8,R9
Monochrome 562
Monochrome 563 ML_pixel(x, y+plot_y, color);
00000BCA 66C3 MOV R12,R6
00000BCC 65B3 MOV R11,R5
00000BCE 35EC ADD R14,R5
00000BD0 BAA8 BSR _ML_pixel
00000BD2 64A3 MOV R10,R4
Monochrome 564 if(radius)
00000BD4 2888 TST R8,R8
00000BD6 890E BT L1257
Monochrome 565 {
Monochrome 566 ML_pixel(x, y-plot_y, color);
00000BD8 66C3 MOV R12,R6
00000BDA 65B3 MOV R11,R5
00000BDC 35E8 SUB R14,R5
00000BDE BAA1 BSR _ML_pixel
00000BE0 64A3 MOV R10,R4
Monochrome 567 ML_pixel(x+plot_y, y, color);
00000BE2 66C3 MOV R12,R6
00000BE4 65B3 MOV R11,R5
00000BE6 64A3 MOV R10,R4
00000BE8 BA9C BSR _ML_pixel
00000BEA 34EC ADD R14,R4
Monochrome 568 ML_pixel(x-plot_y, y, color);
00000BEC 66C3 MOV R12,R6
00000BEE 65B3 MOV R11,R5
00000BF0 64A3 MOV R10,R4
00000BF2 BA97 BSR _ML_pixel
00000BF4 34E8 SUB R14,R4
00000BF6 L1257:
Monochrome 569 }
Monochrome 570 while(plot_y > plot_x)
00000BF6 4E15 CMP/PL R14
00000BF8 8B43 BF L1256
00000BFA L1259:
Monochrome 571 {
Monochrome 572 if(d < 0)
00000BFA 4911 CMP/PZ R9
00000BFC 8904 BT L1260
Monochrome 573 d += 2*plot_x+3;
00000BFE 63D3 MOV R13,R3
00000C00 4300 SHLL R3
00000C02 7303 ADD #3,R3
00000C04 A006 BRA L1261
00000C06 393C ADD R3,R9
00000C08 L1260:
Monochrome 574 else
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 41
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 575 {
Monochrome 576 d += 2*(plot_x-plot_y)+5;
00000C08 63D3 MOV R13,R3
00000C0A 33E8 SUB R14,R3
00000C0C 4300 SHLL R3
00000C0E 7305 ADD #5,R3
00000C10 393C ADD R3,R9
Monochrome 577 plot_y--;
00000C12 7EFF ADD #-1,R14
00000C14 L1261:
Monochrome 578 }
Monochrome 579 plot_x++;
00000C14 7D01 ADD #1,R13
Monochrome 580 if(plot_y >= plot_x)
00000C16 3ED3 CMP/GE R13,R14
00000C18 8B17 BF L1262
Monochrome 581 {
Monochrome 582 ML_pixel(x+plot_x, y+plot_y, color);
00000C1A 66C3 MOV R12,R6
00000C1C 65B3 MOV R11,R5
00000C1E 35EC ADD R14,R5
00000C20 2F52 MOV.L R5,@R15
00000C22 64A3 MOV R10,R4
00000C24 34DC ADD R13,R4
00000C26 BA7D BSR _ML_pixel
00000C28 1F41 MOV.L R4,@(4,R15)
Monochrome 583 ML_pixel(x-plot_x, y+plot_y, color);
00000C2A 66C3 MOV R12,R6
00000C2C 65F2 MOV.L @R15,R5
00000C2E 68A3 MOV R10,R8
00000C30 38D8 SUB R13,R8
00000C32 BA77 BSR _ML_pixel
00000C34 6483 MOV R8,R4
Monochrome 584 ML_pixel(x+plot_x, y-plot_y, color);
00000C36 66C3 MOV R12,R6
00000C38 65B3 MOV R11,R5
00000C3A 35E8 SUB R14,R5
00000C3C 2F52 MOV.L R5,@R15
00000C3E BA71 BSR _ML_pixel
00000C40 54F1 MOV.L @(4,R15),R4
Monochrome 585 ML_pixel(x-plot_x, y-plot_y, color);
00000C42 66C3 MOV R12,R6
00000C44 65F2 MOV.L @R15,R5
00000C46 BA6D BSR _ML_pixel
00000C48 6483 MOV R8,R4
00000C4A L1262:
Monochrome 586 }
Monochrome 587 if(plot_y > plot_x)
00000C4A 3ED7 CMP/GT R13,R14
00000C4C 8B17 BF L1263
Monochrome 588 {
Monochrome 589 ML_pixel(x+plot_y, y+plot_x, color);
00000C4E 66C3 MOV R12,R6
00000C50 65B3 MOV R11,R5
00000C52 35DC ADD R13,R5
00000C54 2F52 MOV.L R5,@R15
00000C56 64A3 MOV R10,R4
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 42
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000C58 34EC ADD R14,R4
00000C5A BA63 BSR _ML_pixel
00000C5C 1F41 MOV.L R4,@(4,R15)
Monochrome 590 ML_pixel(x-plot_y, y+plot_x, color);
00000C5E 66C3 MOV R12,R6
00000C60 65F2 MOV.L @R15,R5
00000C62 68A3 MOV R10,R8
00000C64 38E8 SUB R14,R8
00000C66 BA5D BSR _ML_pixel
00000C68 6483 MOV R8,R4
Monochrome 591 ML_pixel(x+plot_y, y-plot_x, color);
00000C6A 66C3 MOV R12,R6
00000C6C 65B3 MOV R11,R5
00000C6E 35D8 SUB R13,R5
00000C70 2F52 MOV.L R5,@R15
00000C72 BA57 BSR _ML_pixel
00000C74 54F1 MOV.L @(4,R15),R4
Monochrome 592 ML_pixel(x-plot_y, y-plot_x, color);
00000C76 66C3 MOV R12,R6
00000C78 65F2 MOV.L @R15,R5
00000C7A BA53 BSR _ML_pixel
00000C7C 6483 MOV R8,R4
00000C7E L1263:
00000C7E 3ED7 CMP/GT R13,R14
00000C80 89BB BT L1259
00000C82 L1256:
Monochrome 593 }
Monochrome 594 }
Monochrome 595 }
00000C82 7F08 ADD #8,R15
00000C84 4F26 LDS.L @R15+,PR
00000C86 68F6 MOV.L @R15+,R8
00000C88 69F6 MOV.L @R15+,R9
00000C8A 6AF6 MOV.L @R15+,R10
00000C8C 6BF6 MOV.L @R15+,R11
00000C8E 6CF6 MOV.L @R15+,R12
00000C90 6DF6 MOV.L @R15+,R13
00000C92 000B RTS
00000C94 6EF6 MOV.L @R15+,R14
Monochrome 596 #endif
Monochrome 597
Monochrome 598 #ifdef ML_FILLED_CIRCLE
Monochrome 599 void ML_filled_circle(int x, int y, int radius, ML_Color color)
00000C96 _ML_filled_circle: ; function: ML_filled_circle
; frame size=36
Monochrome 600 {
Monochrome 601 int plot_x, plot_y, d;
Monochrome 602
Monochrome 603 if(radius < 0) return;
00000C96 4611 CMP/PZ R6
00000C98 2FE6 MOV.L R14,@-R15
00000C9A 2FD6 MOV.L R13,@-R15
00000C9C 2FC6 MOV.L R12,@-R15
00000C9E 6C43 MOV R4,R12
00000CA0 2FB6 MOV.L R11,@-R15
00000CA2 2FA6 MOV.L R10,@-R15
00000CA4 2F96 MOV.L R9,@-R15
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 43
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000CA6 6A53 MOV R5,R10
00000CA8 2F86 MOV.L R8,@-R15
00000CAA 4F22 STS.L PR,@-R15
00000CAC 7FFC ADD #-4,R15
00000CAE 8F41 BF/S L1265
00000CB0 6B73 MOV R7,R11
Monochrome 604 plot_x = 0;
00000CB2 ED00 MOV #0,R13
Monochrome 605 plot_y = radius;
00000CB4 6E63 MOV R6,R14
Monochrome 606 d = 1 - radius;
00000CB6 E901 MOV #1,R9
00000CB8 3968 SUB R6,R9
Monochrome 607
Monochrome 608 ML_horizontal_line(y, x-plot_y, x+plot_y, color);
00000CBA 67B3 MOV R11,R7
00000CBC 66C3 MOV R12,R6
00000CBE 36EC ADD R14,R6
00000CC0 65C3 MOV R12,R5
00000CC2 35E8 SUB R14,R5
00000CC4 BB48 BSR _ML_horizontal_line
00000CC6 64A3 MOV R10,R4
Monochrome 609 while(plot_y > plot_x)
00000CC8 4E15 CMP/PL R14
00000CCA 8B33 BF L1265
00000CCC L1267:
Monochrome 610 {
Monochrome 611 if(d < 0)
00000CCC 4911 CMP/PZ R9
00000CCE 8904 BT L1268
Monochrome 612 d += 2*plot_x+3;
00000CD0 63D3 MOV R13,R3
00000CD2 4300 SHLL R3
00000CD4 7303 ADD #3,R3
00000CD6 A018 BRA L1269
00000CD8 393C ADD R3,R9
00000CDA L1268:
Monochrome 613 else {
Monochrome 614 d += 2*(plot_x-plot_y)+5;
00000CDA 63D3 MOV R13,R3
00000CDC 33E8 SUB R14,R3
00000CDE 4300 SHLL R3
00000CE0 7305 ADD #5,R3
00000CE2 393C ADD R3,R9
Monochrome 615 plot_y--;
00000CE4 7EFF ADD #-1,R14
Monochrome 616 ML_horizontal_line(y+plot_y+1, x-plot_x, x+plot_x, color);
00000CE6 67B3 MOV R11,R7
00000CE8 68C3 MOV R12,R8
00000CEA 38DC ADD R13,R8
00000CEC 6683 MOV R8,R6
00000CEE 65C3 MOV R12,R5
00000CF0 35D8 SUB R13,R5
00000CF2 64A3 MOV R10,R4
00000CF4 2F52 MOV.L R5,@R15
00000CF6 34EC ADD R14,R4
00000CF8 BB2E BSR _ML_horizontal_line
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 44
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000CFA 7401 ADD #1,R4
Monochrome 617 ML_horizontal_line(y-plot_y-1, x-plot_x, x+plot_x, color);
00000CFC 65F2 MOV.L @R15,R5
00000CFE 64A3 MOV R10,R4
00000D00 67B3 MOV R11,R7
00000D02 6683 MOV R8,R6
00000D04 34E8 SUB R14,R4
00000D06 BB27 BSR _ML_horizontal_line
00000D08 74FF ADD #-1,R4
00000D0A L1269:
Monochrome 618 }
Monochrome 619 plot_x++;
00000D0A 7D01 ADD #1,R13
Monochrome 620 if(plot_y >= plot_x)
00000D0C 3ED3 CMP/GE R13,R14
00000D0E 8B0F BF L1270
Monochrome 621 {
Monochrome 622 ML_horizontal_line(y+plot_x, x-plot_y, x+plot_y, color);
00000D10 67B3 MOV R11,R7
00000D12 66C3 MOV R12,R6
00000D14 36EC ADD R14,R6
00000D16 68C3 MOV R12,R8
00000D18 2F62 MOV.L R6,@R15
00000D1A 64A3 MOV R10,R4
00000D1C 38E8 SUB R14,R8
00000D1E 6583 MOV R8,R5
00000D20 BB1A BSR _ML_horizontal_line
00000D22 34DC ADD R13,R4
Monochrome 623 ML_horizontal_line(y-plot_x, x-plot_y, x+plot_y, color);
00000D24 66F2 MOV.L @R15,R6
00000D26 6583 MOV R8,R5
00000D28 67B3 MOV R11,R7
00000D2A 64A3 MOV R10,R4
00000D2C BB14 BSR _ML_horizontal_line
00000D2E 34D8 SUB R13,R4
00000D30 L1270:
00000D30 3ED7 CMP/GT R13,R14
00000D32 89CB BT L1267
00000D34 L1265:
Monochrome 624 }
Monochrome 625 }
Monochrome 626 }
00000D34 7F04 ADD #4,R15
00000D36 4F26 LDS.L @R15+,PR
00000D38 68F6 MOV.L @R15+,R8
00000D3A 69F6 MOV.L @R15+,R9
00000D3C 6AF6 MOV.L @R15+,R10
00000D3E 6BF6 MOV.L @R15+,R11
00000D40 6CF6 MOV.L @R15+,R12
00000D42 6DF6 MOV.L @R15+,R13
00000D44 000B RTS
00000D46 6EF6 MOV.L @R15+,R14
Monochrome 627 #endif
Monochrome 628
Monochrome 629 #ifdef ML_ELLIPSE
Monochrome 630 void ML_ellipse(int x, int y, int radius1, int radius2, ML_Color color)
00000D48 _ML_ellipse: ; function: ML_ellipse
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 45
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
; frame size=128
; used runtime library name:
; __adds, __addd, __subdr, __muld, __dtos, __itos, __itod, __gtd, __lts
00000D48 2FE6 MOV.L R14,@-R15
00000D4A 2FD6 MOV.L R13,@-R15
00000D4C 2FC6 MOV.L R12,@-R15
00000D4E 6C73 MOV R7,R12
00000D50 2FB6 MOV.L R11,@-R15
00000D52 2FA6 MOV.L R10,@-R15
00000D54 2F96 MOV.L R9,@-R15
00000D56 6A63 MOV R6,R10
00000D58 2F86 MOV.L R8,@-R15
00000D5A 6953 MOV R5,R9
00000D5C 4F22 STS.L PR,@-R15
00000D5E 6843 MOV R4,R8
00000D60 4F12 STS.L MACL,@-R15
Monochrome 631 {
Monochrome 632 int plot_x, plot_y;
Monochrome 633 float d1, d2;
Monochrome 634 if(radius1 < 1 || radius2 < 1) return;
00000D62 E401 MOV #1,R4
00000D64 7FE8 ADD #-24,R15
00000D66 3A43 CMP/GE R4,R10
00000D68 8D02 BT/S L1669
00000D6A 5BFF MOV.L @(60,R15),R11
00000D6C A13A BRA L1273
00000D6E 0009 NOP
00000D70 L1669:
00000D70 3C43 CMP/GE R4,R12
00000D72 8901 BT L1670
00000D74 A136 BRA L1273
00000D76 0009 NOP
00000D78 L1670:
Monochrome 635 plot_x = 0;
Monochrome 636 plot_y = radius2;
Monochrome 637 d1 = radius2*radius2 - radius1*radius1*radius2 + radius1*radius1/4;
00000D78 0AA7 MUL.L R10,R10
00000D7A ED00 MOV #0,R13
00000D7C 6EC3 MOV R12,R14
00000D7E 001A STS MACL,R0
00000D80 4011 CMP/PZ R0
00000D82 8D01 BT/S L1274
00000D84 1F02 MOV.L R0,@(8,R15)
00000D86 7003 ADD #3,R0
00000D88 L1274:
00000D88 52F2 MOV.L @(8,R15),R2
00000D8A 4021 SHAR R0
00000D8C 02C7 MUL.L R12,R2
00000D8E 4021 SHAR R0
00000D90 021A STS MACL,R2
00000D92 3028 SUB R2,R0
00000D94 0CC7 MUL.L R12,R12
00000D96 031A STS MACL,R3
00000D98 1F35 MOV.L R3,@(20,R15)
00000D9A D212 MOV.L L1671+2,R2 ; __itos
00000D9C 420B JSR @R2
00000D9E 303C ADD R3,R0
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 46
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000DA0 2F02 MOV.L R0,@R15
Monochrome 638 ML_pixel(x, y+plot_y, color);
00000DA2 66B3 MOV R11,R6
00000DA4 6593 MOV R9,R5
00000DA6 35EC ADD R14,R5
00000DA8 B9BC BSR _ML_pixel
00000DAA 6483 MOV R8,R4
Monochrome 639 ML_pixel(x, y-plot_y, color);
00000DAC 66B3 MOV R11,R6
00000DAE 6593 MOV R9,R5
00000DB0 35E8 SUB R14,R5
Monochrome 640 while(radius1*radius1*(plot_y-.5) > radius2*radius2*(plot_x+1))
00000DB2 A045 BRA L1649
00000DB4 6483 MOV R8,R4
00000DB6 L1276:
00000DB6 64D3 MOV R13,R4
00000DB8 61F2 MOV.L @R15,R1
00000DBA 4400 SHLL R4
00000DBC D30A MOV.L L1671+6,R3 ; __lts
00000DBE 7403 ADD #3,R4
00000DC0 04C7 MUL.L R12,R4
00000DC2 041A STS MACL,R4
00000DC4 04C7 MUL.L R12,R4
00000DC6 041A STS MACL,R4
00000DC8 430B JSR @R3
00000DCA E000 MOV #0,R0
00000DCC 8800 CMP/EQ #0,R0
00000DCE 890F BT L1277
Monochrome 641 {
Monochrome 642 if(d1 < 0)
Monochrome 643 {
Monochrome 644 d1 += radius2*radius2*(2*plot_x+3);
00000DD0 D204 MOV.L L1671+2,R2 ; __itos
00000DD2 420B JSR @R2
00000DD4 6043 MOV R4,R0
00000DD6 D305 MOV.L L1671+10,R3; __adds
00000DD8 430B JSR @R3
00000DDA 61F2 MOV.L @R15,R1
00000DDC 2F02 MOV.L R0,@R15
Monochrome 645 plot_x++;
00000DDE A018 BRA L1278
00000DE0 7D01 ADD #1,R13
00000DE2 L1671:
00000DE2 0000 .DATA.W 0
00000DE4 <00000000> .DATA.L __itos
00000DE8 <00000000> .DATA.L __lts
00000DEC <00000000> .DATA.L __adds
00000DF0 L1277:
Monochrome 646 } else {
Monochrome 647 d1 += radius2*radius2*(2*plot_x+3) + radius1*radius1*(-2*plot_y+2);
00000DF0 D3BA MOV.L L1672+2,R3 ; __itos
00000DF2 62E3 MOV R14,R2
00000DF4 4200 SHLL R2
00000DF6 E002 MOV #2,R0
00000DF8 3028 SUB R2,R0
00000DFA 00A7 MUL.L R10,R0
00000DFC 001A STS MACL,R0
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 47
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000DFE 00A7 MUL.L R10,R0
00000E00 001A STS MACL,R0
00000E02 430B JSR @R3
00000E04 304C ADD R4,R0
00000E06 D2B6 MOV.L L1672+6,R2 ; __adds
00000E08 420B JSR @R2
00000E0A 61F2 MOV.L @R15,R1
00000E0C 2F02 MOV.L R0,@R15
Monochrome 648 plot_x++;
00000E0E 7D01 ADD #1,R13
Monochrome 649 plot_y--;
00000E10 7EFF ADD #-1,R14
00000E12 L1278:
Monochrome 650 }
Monochrome 651 ML_pixel(x+plot_x, y+plot_y, color);
00000E12 66B3 MOV R11,R6
00000E14 6593 MOV R9,R5
00000E16 35EC ADD R14,R5
00000E18 1F51 MOV.L R5,@(4,R15)
00000E1A 6483 MOV R8,R4
00000E1C 34DC ADD R13,R4
00000E1E B981 BSR _ML_pixel
00000E20 1F43 MOV.L R4,@(12,R15)
Monochrome 652 ML_pixel(x-plot_x, y+plot_y, color);
00000E22 66B3 MOV R11,R6
00000E24 55F1 MOV.L @(4,R15),R5
00000E26 6483 MOV R8,R4
00000E28 34D8 SUB R13,R4
00000E2A B97B BSR _ML_pixel
00000E2C 1F44 MOV.L R4,@(16,R15)
Monochrome 653 ML_pixel(x+plot_x, y-plot_y, color);
00000E2E 66B3 MOV R11,R6
00000E30 6593 MOV R9,R5
00000E32 35E8 SUB R14,R5
00000E34 1F51 MOV.L R5,@(4,R15)
00000E36 B975 BSR _ML_pixel
00000E38 54F3 MOV.L @(12,R15),R4
Monochrome 654 ML_pixel(x-plot_x, y-plot_y, color);
00000E3A 66B3 MOV R11,R6
00000E3C 55F1 MOV.L @(4,R15),R5
00000E3E 54F4 MOV.L @(16,R15),R4
00000E40 L1649:
00000E40 B970 BSR _ML_pixel
00000E42 0009 NOP
00000E44 D2A7 MOV.L L1672+10,R2; __itod
00000E46 7FF8 ADD #-8,R15
00000E48 50F4 MOV.L @(16,R15),R0
00000E4A 7FF8 ADD #-8,R15
00000E4C 420B JSR @R2
00000E4E 2FF6 MOV.L R15,@-R15
00000E50 D3A4 MOV.L L1672+10,R3; __itod
00000E52 60E3 MOV R14,R0
00000E54 7FF0 ADD #-16,R15
00000E56 430B JSR @R3
00000E58 2FF6 MOV.L R15,@-R15
00000E5A E200 MOV #0,R2
00000E5C D1A3 MOV.L L1672+18,R1; __addd
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 48
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000E5E 2F26 MOV.L R2,@-R15
00000E60 D2A1 MOV.L L1672+14,R2; H'BFE00000
00000E62 2F26 MOV.L R2,@-R15
00000E64 63F3 MOV R15,R3
00000E66 7310 ADD #16,R3
00000E68 410B JSR @R1
00000E6A 2F36 MOV.L R3,@-R15
00000E6C D0A0 MOV.L L1672+22,R0; __muld
00000E6E 62F3 MOV R15,R2
00000E70 7210 ADD #16,R2
00000E72 400B JSR @R0
00000E74 2F26 MOV.L R2,@-R15
00000E76 60D3 MOV R13,R0
00000E78 D39A MOV.L L1672+10,R3; __itod
00000E7A 7FF8 ADD #-8,R15
00000E7C 7001 ADD #1,R0
00000E7E 00C7 MUL.L R12,R0
00000E80 001A STS MACL,R0
00000E82 00C7 MUL.L R12,R0
00000E84 001A STS MACL,R0
00000E86 430B JSR @R3
00000E88 2FF6 MOV.L R15,@-R15
00000E8A D29A MOV.L L1672+26,R2; __gtd
00000E8C 420B JSR @R2
00000E8E 0009 NOP
00000E90 8800 CMP/EQ #0,R0
00000E92 8B90 BF L1276
Monochrome 655 }
Monochrome 656 d2 = radius2*radius2*(plot_x+.5)*(plot_x+.5) + radius1*radius1*(plot_y-1)*(plot_y-1) - radius1*rad
+ius1*radius2*radius2;
00000E94 D393 MOV.L L1672+10,R3; __itod
00000E96 7FE0 ADD #-32,R15
00000E98 50FD MOV.L @(52,R15),R0
00000E9A 7FF8 ADD #-8,R15
00000E9C 430B JSR @R3
00000E9E 2FF6 MOV.L R15,@-R15
00000EA0 D290 MOV.L L1672+10,R2; __itod
00000EA2 60D3 MOV R13,R0
00000EA4 7FF0 ADD #-16,R15
00000EA6 420B JSR @R2
00000EA8 2FF6 MOV.L R15,@-R15
00000EAA E300 MOV #0,R3
00000EAC D18F MOV.L L1672+18,R1; __addd
00000EAE 2F36 MOV.L R3,@-R15
00000EB0 D391 MOV.L L1672+30,R3; H'3FE00000
00000EB2 2F36 MOV.L R3,@-R15
00000EB4 62F3 MOV R15,R2
00000EB6 7210 ADD #16,R2
00000EB8 410B JSR @R1
00000EBA 2F26 MOV.L R2,@-R15
00000EBC D08C MOV.L L1672+22,R0; __muld
00000EBE 63F3 MOV R15,R3
00000EC0 7310 ADD #16,R3
00000EC2 400B JSR @R0
00000EC4 2F36 MOV.L R3,@-R15
00000EC6 60D3 MOV R13,R0
00000EC8 D286 MOV.L L1672+10,R2; __itod
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 49
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000ECA 7FF0 ADD #-16,R15
00000ECC 420B JSR @R2
00000ECE 2FF6 MOV.L R15,@-R15
00000ED0 D186 MOV.L L1672+18,R1; __addd
00000ED2 E300 MOV #0,R3
00000ED4 2F36 MOV.L R3,@-R15
00000ED6 D388 MOV.L L1672+30,R3; H'3FE00000
00000ED8 2F36 MOV.L R3,@-R15
00000EDA 62F3 MOV R15,R2
00000EDC 7210 ADD #16,R2
00000EDE 410B JSR @R1
00000EE0 2F26 MOV.L R2,@-R15
00000EE2 63F3 MOV R15,R3
00000EE4 D082 MOV.L L1672+22,R0; __muld
00000EE6 7310 ADD #16,R3
00000EE8 400B JSR @R0
00000EEA 2F36 MOV.L R3,@-R15
00000EEC D37D MOV.L L1672+10,R3; __itod
00000EEE 64E3 MOV R14,R4
00000EF0 74FF ADD #-1,R4
00000EF2 7FF8 ADD #-8,R15
00000EF4 0447 MUL.L R4,R4
00000EF6 001A STS MACL,R0
00000EF8 00A7 MUL.L R10,R0
00000EFA 001A STS MACL,R0
00000EFC 00A7 MUL.L R10,R0
00000EFE 001A STS MACL,R0
00000F00 430B JSR @R3
00000F02 2FF6 MOV.L R15,@-R15
00000F04 D179 MOV.L L1672+18,R1; __addd
00000F06 62F3 MOV R15,R2
00000F08 7210 ADD #16,R2
00000F0A 410B JSR @R1
00000F0C 2F26 MOV.L R2,@-R15
00000F0E 50F6 MOV.L @(24,R15),R0
00000F10 D374 MOV.L L1672+10,R3; __itod
00000F12 7FF8 ADD #-8,R15
00000F14 00C7 MUL.L R12,R0
00000F16 001A STS MACL,R0
00000F18 00C7 MUL.L R12,R0
00000F1A 001A STS MACL,R0
00000F1C 430B JSR @R3
00000F1E 2FF6 MOV.L R15,@-R15
00000F20 D176 MOV.L L1672+34,R1; __subdr
00000F22 62F3 MOV R15,R2
00000F24 7210 ADD #16,R2
00000F26 410B JSR @R1
00000F28 2F26 MOV.L R2,@-R15
00000F2A D375 MOV.L L1672+38,R3; __dtos
00000F2C 430B JSR @R3
00000F2E 0009 NOP
00000F30 2F02 MOV.L R0,@R15
00000F32 6483 MOV R8,R4
00000F34 34D8 SUB R13,R4
00000F36 6383 MOV R8,R3
00000F38 1F42 MOV.L R4,@(8,R15)
Monochrome 657 while(plot_y > 0)
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 50
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000F3A 4E15 CMP/PL R14
00000F3C 33DC ADD R13,R3
00000F3E 1F31 MOV.L R3,@(4,R15)
00000F40 8F50 BF/S L1273
00000F42 1F44 MOV.L R4,@(16,R15)
00000F44 L1280:
Monochrome 658 {
Monochrome 659 if(d2 < 0)
00000F44 61F2 MOV.L @R15,R1
00000F46 D36F MOV.L L1672+42,R3; __lts
00000F48 430B JSR @R3
00000F4A E000 MOV #0,R0
00000F4C 8800 CMP/EQ #0,R0
00000F4E 8921 BT L1281
Monochrome 660 {
Monochrome 661 d2 += radius2*radius2*(2*plot_x+2) + radius1*radius1*(-2*plot_y+3);
00000F50 60D3 MOV R13,R0
00000F52 4000 SHLL R0
00000F54 7002 ADD #2,R0
00000F56 63E3 MOV R14,R3
00000F58 00C7 MUL.L R12,R0
00000F5A E203 MOV #3,R2
00000F5C 001A STS MACL,R0
00000F5E 4300 SHLL R3
00000F60 00C7 MUL.L R12,R0
00000F62 3238 SUB R3,R2
00000F64 D35D MOV.L L1672+2,R3 ; __itos
00000F66 001A STS MACL,R0
00000F68 02A7 MUL.L R10,R2
00000F6A 021A STS MACL,R2
00000F6C 02A7 MUL.L R10,R2
00000F6E 021A STS MACL,R2
00000F70 430B JSR @R3
00000F72 302C ADD R2,R0
00000F74 D25A MOV.L L1672+6,R2 ; __adds
00000F76 420B JSR @R2
00000F78 61F2 MOV.L @R15,R1
Monochrome 662 plot_y--;
00000F7A 7EFF ADD #-1,R14
00000F7C 2F02 MOV.L R0,@R15
Monochrome 663 plot_x++;
00000F7E 7D01 ADD #1,R13
00000F80 53F2 MOV.L @(8,R15),R3
00000F82 73FF ADD #-1,R3
00000F84 1F32 MOV.L R3,@(8,R15)
00000F86 52F1 MOV.L @(4,R15),R2
00000F88 7201 ADD #1,R2
00000F8A 1F21 MOV.L R2,@(4,R15)
00000F8C 51F4 MOV.L @(16,R15),R1
00000F8E 71FF ADD #-1,R1
00000F90 A00F BRA L1282
00000F92 1F14 MOV.L R1,@(16,R15)
00000F94 L1281:
Monochrome 664 } else {
Monochrome 665 d2 += radius1*radius1*(-2*plot_y+3);
00000F94 D351 MOV.L L1672+2,R3 ; __itos
00000F96 62E3 MOV R14,R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 51
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000F98 4200 SHLL R2
00000F9A E003 MOV #3,R0
00000F9C 3028 SUB R2,R0
00000F9E 00A7 MUL.L R10,R0
00000FA0 001A STS MACL,R0
00000FA2 00A7 MUL.L R10,R0
00000FA4 430B JSR @R3
00000FA6 001A STS MACL,R0
00000FA8 D24D MOV.L L1672+6,R2 ; __adds
00000FAA 420B JSR @R2
00000FAC 61F2 MOV.L @R15,R1
Monochrome 666 plot_y--;
00000FAE 7EFF ADD #-1,R14
00000FB0 2F02 MOV.L R0,@R15
00000FB2 L1282:
Monochrome 667 }
Monochrome 668 ML_pixel(x+plot_x, y+plot_y, color);
00000FB2 66B3 MOV R11,R6
00000FB4 6593 MOV R9,R5
00000FB6 35EC ADD R14,R5
00000FB8 1F53 MOV.L R5,@(12,R15)
00000FBA 6483 MOV R8,R4
00000FBC B8B2 BSR _ML_pixel
00000FBE 34DC ADD R13,R4
Monochrome 669 ML_pixel(x-plot_x, y+plot_y, color);
00000FC0 55F3 MOV.L @(12,R15),R5
00000FC2 66B3 MOV R11,R6
00000FC4 B8AE BSR _ML_pixel
00000FC6 54F4 MOV.L @(16,R15),R4
Monochrome 670 if(plot_y > 0)
00000FC8 4E15 CMP/PL R14
00000FCA 8B09 BF L1283
Monochrome 671 {
Monochrome 672 ML_pixel(x+plot_x, y-plot_y, color);
00000FCC 66B3 MOV R11,R6
00000FCE 6593 MOV R9,R5
00000FD0 35E8 SUB R14,R5
00000FD2 1F53 MOV.L R5,@(12,R15)
00000FD4 B8A6 BSR _ML_pixel
00000FD6 54F1 MOV.L @(4,R15),R4
Monochrome 673 ML_pixel(x-plot_x, y-plot_y, color);
00000FD8 55F3 MOV.L @(12,R15),R5
00000FDA 66B3 MOV R11,R6
00000FDC B8A2 BSR _ML_pixel
00000FDE 54F2 MOV.L @(8,R15),R4
00000FE0 L1283:
00000FE0 4E15 CMP/PL R14
00000FE2 89AF BT L1280
00000FE4 L1273:
Monochrome 674 }
Monochrome 675 }
Monochrome 676 }
00000FE4 7F18 ADD #24,R15
00000FE6 4F16 LDS.L @R15+,MACL
00000FE8 4F26 LDS.L @R15+,PR
00000FEA 68F6 MOV.L @R15+,R8
00000FEC 69F6 MOV.L @R15+,R9
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 52
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000FEE 6AF6 MOV.L @R15+,R10
00000FF0 6BF6 MOV.L @R15+,R11
00000FF2 6CF6 MOV.L @R15+,R12
00000FF4 6DF6 MOV.L @R15+,R13
00000FF6 000B RTS
00000FF8 6EF6 MOV.L @R15+,R14
Monochrome 677 #endif
Monochrome 678
Monochrome 679 #ifdef ML_ELLIPSE_IN_RECT
Monochrome 680 void ML_ellipse_in_rect(int x1, int y1, int x2, int y2, ML_Color color)
00000FFA _ML_ellipse_in_rect: ; function: ML_ellipse_in_rect
; frame size=24
00000FFA 2FE6 MOV.L R14,@-R15
00000FFC 2FD6 MOV.L R13,@-R15
00000FFE 6E43 MOV R4,R14
00001000 2FC6 MOV.L R12,@-R15
Monochrome 681 {
Monochrome 682 int radius1, radius2;
Monochrome 683 if(x1 > x2)
00001002 3E67 CMP/GT R6,R14
00001004 2FB6 MOV.L R11,@-R15
00001006 4F22 STS.L PR,@-R15
00001008 8F03 BF/S L1284
0000100A 6D53 MOV R5,R13
Monochrome 684 {
Monochrome 685 int tmp = x1;
0000100C 64E3 MOV R14,R4
Monochrome 686 x1 = x2;
0000100E 6E63 MOV R6,R14
Monochrome 687 x2 = tmp;
00001010 6643 MOV R4,R6
00001012 L1284:
Monochrome 688 }
Monochrome 689 if(y1 > y2)
00001012 3D77 CMP/GT R7,R13
00001014 8F03 BF/S L1285
Monochrome 690 {
Monochrome 691 int tmp = y1;
Monochrome 692 y1 = y2;
Monochrome 693 y2 = tmp;
Monochrome 694 }
Monochrome 695 radius1 = (x2-x1)/2;
00001016 36E8 SUB R14,R6
00001018 64D3 MOV R13,R4
0000101A 6D73 MOV R7,R13
0000101C 6743 MOV R4,R7
0000101E L1285:
0000101E 6B63 MOV R6,R11
Monochrome 696 radius2 = (y2-y1)/2;
Monochrome 697 ML_ellipse(x1+radius1, y1+radius2, radius1, radius2, color);
00001020 52F5 MOV.L @(20,R15),R2
00001022 65D3 MOV R13,R5
00001024 2F26 MOV.L R2,@-R15
00001026 64E3 MOV R14,R4
00001028 E300 MOV #0,R3
0000102A 33B7 CMP/GT R11,R3
0000102C 3B3E ADDC R3,R11
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 53
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000102E 4B21 SHAR R11
00001030 37D8 SUB R13,R7
00001032 6C73 MOV R7,R12
00001034 33C7 CMP/GT R12,R3
00001036 3C3E ADDC R3,R12
00001038 4C21 SHAR R12
0000103A 67C3 MOV R12,R7
0000103C 66B3 MOV R11,R6
0000103E 35CC ADD R12,R5
00001040 BE82 BSR _ML_ellipse
00001042 34BC ADD R11,R4
Monochrome 698 }
00001044 7F04 ADD #4,R15
00001046 4F26 LDS.L @R15+,PR
00001048 6BF6 MOV.L @R15+,R11
0000104A 6CF6 MOV.L @R15+,R12
0000104C 6DF6 MOV.L @R15+,R13
0000104E 000B RTS
00001050 6EF6 MOV.L @R15+,R14
Monochrome 699 #endif
Monochrome 700
Monochrome 701 #ifdef ML_FILLED_ELLIPSE
Monochrome 702 void ML_filled_ellipse(int x, int y, int radius1, int radius2, ML_Color color)
00001052 _ML_filled_ellipse: ; function: ML_filled_ellipse
; frame size=124
; used runtime library name:
; __adds, __addd, __subdr, __muld, __dtos, __itos, __itod, __gtd, __lts
00001052 2FE6 MOV.L R14,@-R15
00001054 2FD6 MOV.L R13,@-R15
00001056 2FC6 MOV.L R12,@-R15
00001058 2FB6 MOV.L R11,@-R15
0000105A 6C73 MOV R7,R12
0000105C 2FA6 MOV.L R10,@-R15
0000105E 6B63 MOV R6,R11
00001060 2F96 MOV.L R9,@-R15
00001062 6953 MOV R5,R9
00001064 2F86 MOV.L R8,@-R15
00001066 6843 MOV R4,R8
00001068 4F22 STS.L PR,@-R15
Monochrome 703 {
Monochrome 704 int plot_x, plot_y;
Monochrome 705 float d1, d2;
Monochrome 706 if(radius1 < 1 || radius2 < 1) return;
0000106A E401 MOV #1,R4
0000106C 4F12 STS.L MACL,@-R15
0000106E 3B43 CMP/GE R4,R11
00001070 7FEC ADD #-20,R15
00001072 8D02 BT/S L1673
00001074 5AFE MOV.L @(56,R15),R10
00001076 A13F BRA L1288
00001078 0009 NOP
0000107A L1673:
0000107A 3C43 CMP/GE R4,R12
0000107C 8901 BT L1674
0000107E A13B BRA L1288
00001080 0009 NOP
00001082 L1674:
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 54
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 707 plot_x = 0;
00001082 ED00 MOV #0,R13
Monochrome 708 plot_y = radius2;
Monochrome 709 d1 = radius2*radius2 - radius1*radius1*radius2 + radius1*radius1/4;
00001084 0BB7 MUL.L R11,R11
00001086 6EC3 MOV R12,R14
00001088 001A STS MACL,R0
0000108A 4011 CMP/PZ R0
0000108C 8D01 BT/S L1289
0000108E 1F02 MOV.L R0,@(8,R15)
00001090 7003 ADD #3,R0
00001092 L1289:
00001092 4021 SHAR R0
00001094 52F2 MOV.L @(8,R15),R2
00001096 4021 SHAR R0
00001098 02C7 MUL.L R12,R2
0000109A 021A STS MACL,R2
0000109C 0CC7 MUL.L R12,R12
0000109E 3028 SUB R2,R0
000010A0 D20E MOV.L L1672+2,R2 ; __itos
000010A2 031A STS MACL,R3
000010A4 1F34 MOV.L R3,@(16,R15)
000010A6 420B JSR @R2
000010A8 303C ADD R3,R0
Monochrome 710 while(radius1*radius1*(plot_y-.5) > radius2*radius2*(plot_x+1))
000010AA A04E BRA L1290
000010AC 2F02 MOV.L R0,@R15
000010AE L1291:
000010AE 64D3 MOV R13,R4
000010B0 61F2 MOV.L @R15,R1
000010B2 4400 SHLL R4
000010B4 D313 MOV.L L1672+42,R3; __lts
000010B6 7403 ADD #3,R4
000010B8 04C7 MUL.L R12,R4
000010BA 041A STS MACL,R4
000010BC 04C7 MUL.L R12,R4
000010BE 041A STS MACL,R4
000010C0 430B JSR @R3
000010C2 E000 MOV #0,R0
000010C4 8800 CMP/EQ #0,R0
000010C6 891F BT L1292
Monochrome 711 {
Monochrome 712 if(d1 < 0)
Monochrome 713 {
Monochrome 714 d1 += radius2*radius2*(2*plot_x+3);
000010C8 D204 MOV.L L1672+2,R2 ; __itos
000010CA 420B JSR @R2
000010CC 6043 MOV R4,R0
000010CE D304 MOV.L L1672+6,R3 ; __adds
000010D0 430B JSR @R3
000010D2 61F2 MOV.L @R15,R1
000010D4 2F02 MOV.L R0,@R15
Monochrome 715 plot_x++;
000010D6 A038 BRA L1290
000010D8 7D01 ADD #1,R13
000010DA L1672:
000010DA 0000 .DATA.W 0
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 55
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000010DC <00000000> .DATA.L __itos
000010E0 <00000000> .DATA.L __adds
000010E4 <00000000> .DATA.L __itod
000010E8 BFE00000 .DATA.L H'BFE00000
000010EC <00000000> .DATA.L __addd
000010F0 <00000000> .DATA.L __muld
000010F4 <00000000> .DATA.L __gtd
000010F8 3FE00000 .DATA.L H'3FE00000
000010FC <00000000> .DATA.L __subdr
00001100 <00000000> .DATA.L __dtos
00001104 <00000000> .DATA.L __lts
00001108 L1292:
Monochrome 716 } else {
Monochrome 717 d1 += radius2*radius2*(2*plot_x+3) + radius1*radius1*(-2*plot_y+2);
00001108 D3A0 MOV.L L1675+2,R3 ; __itos
0000110A 62E3 MOV R14,R2
0000110C 4200 SHLL R2
0000110E E002 MOV #2,R0
00001110 3028 SUB R2,R0
00001112 00B7 MUL.L R11,R0
00001114 001A STS MACL,R0
00001116 00B7 MUL.L R11,R0
00001118 001A STS MACL,R0
0000111A 430B JSR @R3
0000111C 304C ADD R4,R0
0000111E D29C MOV.L L1675+6,R2 ; __adds
00001120 420B JSR @R2
00001122 61F2 MOV.L @R15,R1
00001124 2F02 MOV.L R0,@R15
Monochrome 718 ML_horizontal_line(y+plot_y, x-plot_x, x+plot_x, color);
00001126 67A3 MOV R10,R7
00001128 6683 MOV R8,R6
0000112A 36DC ADD R13,R6
0000112C 1F61 MOV.L R6,@(4,R15)
0000112E 6583 MOV R8,R5
00001130 35D8 SUB R13,R5
00001132 6493 MOV R9,R4
00001134 1F53 MOV.L R5,@(12,R15)
00001136 B90F BSR _ML_horizontal_line
00001138 34EC ADD R14,R4
Monochrome 719 ML_horizontal_line(y-plot_y, x-plot_x, x+plot_x, color);
0000113A 67A3 MOV R10,R7
0000113C 56F1 MOV.L @(4,R15),R6
0000113E 6493 MOV R9,R4
00001140 55F3 MOV.L @(12,R15),R5
00001142 B909 BSR _ML_horizontal_line
00001144 34E8 SUB R14,R4
Monochrome 720 plot_x++;
00001146 7D01 ADD #1,R13
Monochrome 721 plot_y--;
00001148 7EFF ADD #-1,R14
0000114A L1290:
0000114A 7FF8 ADD #-8,R15
0000114C D291 MOV.L L1675+10,R2; __itod
0000114E 50F4 MOV.L @(16,R15),R0
00001150 7FF8 ADD #-8,R15
00001152 420B JSR @R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 56
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001154 2FF6 MOV.L R15,@-R15
00001156 60E3 MOV R14,R0
00001158 D38E MOV.L L1675+10,R3; __itod
0000115A 7FF0 ADD #-16,R15
0000115C 430B JSR @R3
0000115E 2FF6 MOV.L R15,@-R15
00001160 D18E MOV.L L1675+18,R1; __addd
00001162 E200 MOV #0,R2
00001164 2F26 MOV.L R2,@-R15
00001166 D28C MOV.L L1675+14,R2; H'BFE00000
00001168 2F26 MOV.L R2,@-R15
0000116A 63F3 MOV R15,R3
0000116C 7310 ADD #16,R3
0000116E 410B JSR @R1
00001170 2F36 MOV.L R3,@-R15
00001172 62F3 MOV R15,R2
00001174 D08A MOV.L L1675+22,R0; __muld
00001176 7210 ADD #16,R2
00001178 400B JSR @R0
0000117A 2F26 MOV.L R2,@-R15
0000117C D385 MOV.L L1675+10,R3; __itod
0000117E 60D3 MOV R13,R0
00001180 7001 ADD #1,R0
00001182 7FF8 ADD #-8,R15
00001184 00C7 MUL.L R12,R0
00001186 001A STS MACL,R0
00001188 00C7 MUL.L R12,R0
0000118A 001A STS MACL,R0
0000118C 430B JSR @R3
0000118E 2FF6 MOV.L R15,@-R15
00001190 D284 MOV.L L1675+26,R2; __gtd
00001192 420B JSR @R2
00001194 0009 NOP
00001196 8800 CMP/EQ #0,R0
00001198 8B89 BF L1291
Monochrome 722 }
Monochrome 723 }
Monochrome 724 ML_horizontal_line(y+plot_y, x-plot_x, x+plot_x, color);
0000119A 67A3 MOV R10,R7
0000119C 6683 MOV R8,R6
0000119E 36DC ADD R13,R6
000011A0 1F61 MOV.L R6,@(4,R15)
000011A2 6583 MOV R8,R5
000011A4 35D8 SUB R13,R5
000011A6 6493 MOV R9,R4
000011A8 1F53 MOV.L R5,@(12,R15)
000011AA B8D5 BSR _ML_horizontal_line
000011AC 34EC ADD R14,R4
Monochrome 725 ML_horizontal_line(y-plot_y, x-plot_x, x+plot_x, color);
000011AE 67A3 MOV R10,R7
000011B0 56F1 MOV.L @(4,R15),R6
000011B2 6493 MOV R9,R4
000011B4 55F3 MOV.L @(12,R15),R5
000011B6 B8CF BSR _ML_horizontal_line
000011B8 34E8 SUB R14,R4
Monochrome 726 d2 = radius2*radius2*(plot_x+.5)*(plot_x+.5) + radius1*radius1*(plot_y-1)*(plot_y-1) - radius1*rad
+ius1*radius2*radius2;
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 57
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000011BA 7FE0 ADD #-32,R15
000011BC D275 MOV.L L1675+10,R2; __itod
000011BE 50FC MOV.L @(48,R15),R0
000011C0 7FF8 ADD #-8,R15
000011C2 420B JSR @R2
000011C4 2FF6 MOV.L R15,@-R15
000011C6 60D3 MOV R13,R0
000011C8 D372 MOV.L L1675+10,R3; __itod
000011CA 7FF0 ADD #-16,R15
000011CC 430B JSR @R3
000011CE 2FF6 MOV.L R15,@-R15
000011D0 D172 MOV.L L1675+18,R1; __addd
000011D2 E200 MOV #0,R2
000011D4 2F26 MOV.L R2,@-R15
000011D6 D274 MOV.L L1675+30,R2; H'3FE00000
000011D8 2F26 MOV.L R2,@-R15
000011DA 63F3 MOV R15,R3
000011DC 7310 ADD #16,R3
000011DE 410B JSR @R1
000011E0 2F36 MOV.L R3,@-R15
000011E2 62F3 MOV R15,R2
000011E4 D06E MOV.L L1675+22,R0; __muld
000011E6 7210 ADD #16,R2
000011E8 400B JSR @R0
000011EA 2F26 MOV.L R2,@-R15
000011EC D369 MOV.L L1675+10,R3; __itod
000011EE 60D3 MOV R13,R0
000011F0 7FF0 ADD #-16,R15
000011F2 430B JSR @R3
000011F4 2FF6 MOV.L R15,@-R15
000011F6 E200 MOV #0,R2
000011F8 D168 MOV.L L1675+18,R1; __addd
000011FA 2F26 MOV.L R2,@-R15
000011FC D26A MOV.L L1675+30,R2; H'3FE00000
000011FE 2F26 MOV.L R2,@-R15
00001200 63F3 MOV R15,R3
00001202 7310 ADD #16,R3
00001204 410B JSR @R1
00001206 2F36 MOV.L R3,@-R15
00001208 D065 MOV.L L1675+22,R0; __muld
0000120A 62F3 MOV R15,R2
0000120C 7210 ADD #16,R2
0000120E 400B JSR @R0
00001210 2F26 MOV.L R2,@-R15
00001212 64E3 MOV R14,R4
00001214 D35F MOV.L L1675+10,R3; __itod
00001216 7FF8 ADD #-8,R15
00001218 74FF ADD #-1,R4
0000121A 0447 MUL.L R4,R4
0000121C 001A STS MACL,R0
0000121E 00B7 MUL.L R11,R0
00001220 001A STS MACL,R0
00001222 00B7 MUL.L R11,R0
00001224 001A STS MACL,R0
00001226 430B JSR @R3
00001228 2FF6 MOV.L R15,@-R15
0000122A 62F3 MOV R15,R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 58
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000122C D15B MOV.L L1675+18,R1; __addd
0000122E 7210 ADD #16,R2
00001230 410B JSR @R1
00001232 2F26 MOV.L R2,@-R15
00001234 50F6 MOV.L @(24,R15),R0
00001236 7FF8 ADD #-8,R15
00001238 D356 MOV.L L1675+10,R3; __itod
0000123A 00C7 MUL.L R12,R0
0000123C 001A STS MACL,R0
0000123E 00C7 MUL.L R12,R0
00001240 001A STS MACL,R0
00001242 430B JSR @R3
00001244 2FF6 MOV.L R15,@-R15
00001246 62F3 MOV R15,R2
00001248 D158 MOV.L L1675+34,R1; __subdr
0000124A 7210 ADD #16,R2
0000124C 410B JSR @R1
0000124E 2F26 MOV.L R2,@-R15
00001250 D357 MOV.L L1675+38,R3; __dtos
00001252 430B JSR @R3
00001254 0009 NOP
Monochrome 727 while(plot_y > 0)
00001256 4E15 CMP/PL R14
00001258 2F02 MOV.L R0,@R15
0000125A 53F3 MOV.L @(12,R15),R3
0000125C 1F32 MOV.L R3,@(8,R15)
0000125E 52F1 MOV.L @(4,R15),R2
00001260 1F24 MOV.L R2,@(16,R15)
00001262 53F3 MOV.L @(12,R15),R3
00001264 1F31 MOV.L R3,@(4,R15)
00001266 8B47 BF L1288
00001268 L1295:
Monochrome 728 {
Monochrome 729 if(d2 < 0)
00001268 61F2 MOV.L @R15,R1
0000126A D252 MOV.L L1675+42,R2; __lts
0000126C 420B JSR @R2
0000126E E000 MOV #0,R0
00001270 8800 CMP/EQ #0,R0
00001272 8921 BT L1296
Monochrome 730 {
Monochrome 731 d2 += radius2*radius2*(2*plot_x+2) + radius1*radius1*(-2*plot_y+3);
00001274 60D3 MOV R13,R0
00001276 4000 SHLL R0
00001278 7002 ADD #2,R0
0000127A 63E3 MOV R14,R3
0000127C 00C7 MUL.L R12,R0
0000127E E203 MOV #3,R2
00001280 001A STS MACL,R0
00001282 4300 SHLL R3
00001284 00C7 MUL.L R12,R0
00001286 3238 SUB R3,R2
00001288 D340 MOV.L L1675+2,R3 ; __itos
0000128A 001A STS MACL,R0
0000128C 02B7 MUL.L R11,R2
0000128E 021A STS MACL,R2
00001290 02B7 MUL.L R11,R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 59
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001292 021A STS MACL,R2
00001294 430B JSR @R3
00001296 302C ADD R2,R0
00001298 D23D MOV.L L1675+6,R2 ; __adds
0000129A 420B JSR @R2
0000129C 61F2 MOV.L @R15,R1
Monochrome 732 plot_y--;
0000129E 7EFF ADD #-1,R14
000012A0 2F02 MOV.L R0,@R15
Monochrome 733 plot_x++;
000012A2 7D01 ADD #1,R13
000012A4 53F2 MOV.L @(8,R15),R3
000012A6 73FF ADD #-1,R3
000012A8 1F32 MOV.L R3,@(8,R15)
000012AA 52F4 MOV.L @(16,R15),R2
000012AC 7201 ADD #1,R2
000012AE 1F24 MOV.L R2,@(16,R15)
000012B0 51F1 MOV.L @(4,R15),R1
000012B2 71FF ADD #-1,R1
000012B4 A00F BRA L1297
000012B6 1F11 MOV.L R1,@(4,R15)
000012B8 L1296:
Monochrome 734 } else {
Monochrome 735 d2 += radius1*radius1*(-2*plot_y+3);
000012B8 D334 MOV.L L1675+2,R3 ; __itos
000012BA 62E3 MOV R14,R2
000012BC 4200 SHLL R2
000012BE E003 MOV #3,R0
000012C0 3028 SUB R2,R0
000012C2 00B7 MUL.L R11,R0
000012C4 001A STS MACL,R0
000012C6 00B7 MUL.L R11,R0
000012C8 430B JSR @R3
000012CA 001A STS MACL,R0
000012CC D230 MOV.L L1675+6,R2 ; __adds
000012CE 420B JSR @R2
000012D0 61F2 MOV.L @R15,R1
Monochrome 736 plot_y--;
000012D2 7EFF ADD #-1,R14
000012D4 2F02 MOV.L R0,@R15
000012D6 L1297:
Monochrome 737 }
Monochrome 738 ML_horizontal_line(y+plot_y, x-plot_x, x+plot_x, color);
000012D6 67A3 MOV R10,R7
000012D8 55F1 MOV.L @(4,R15),R5
000012DA 6493 MOV R9,R4
000012DC 6683 MOV R8,R6
000012DE 36DC ADD R13,R6
000012E0 B83A BSR _ML_horizontal_line
000012E2 34EC ADD R14,R4
Monochrome 739 if(plot_y > 0)
000012E4 4E15 CMP/PL R14
000012E6 8B05 BF L1298
Monochrome 740 ML_horizontal_line(y-plot_y, x-plot_x, x+plot_x, color);
000012E8 56F4 MOV.L @(16,R15),R6
000012EA 6493 MOV R9,R4
000012EC 55F2 MOV.L @(8,R15),R5
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 60
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000012EE 67A3 MOV R10,R7
000012F0 B832 BSR _ML_horizontal_line
000012F2 34E8 SUB R14,R4
000012F4 L1298:
000012F4 4E15 CMP/PL R14
000012F6 89B7 BT L1295
000012F8 L1288:
Monochrome 741 }
Monochrome 742 }
000012F8 7F14 ADD #20,R15
000012FA 4F16 LDS.L @R15+,MACL
000012FC 4F26 LDS.L @R15+,PR
000012FE 68F6 MOV.L @R15+,R8
00001300 69F6 MOV.L @R15+,R9
00001302 6AF6 MOV.L @R15+,R10
00001304 6BF6 MOV.L @R15+,R11
00001306 6CF6 MOV.L @R15+,R12
00001308 6DF6 MOV.L @R15+,R13
0000130A 000B RTS
0000130C 6EF6 MOV.L @R15+,R14
Monochrome 743 #endif
Monochrome 744
Monochrome 745 #ifdef ML_FILLED_ELLIPSE_IN_RECT
Monochrome 746 void ML_filled_ellipse_in_rect(int x1, int y1, int x2, int y2, ML_Color color)
0000130E _ML_filled_ellipse_in_rect: ; function: ML_filled_ellipse_in_rect
; frame size=24
0000130E 2FE6 MOV.L R14,@-R15
00001310 2FD6 MOV.L R13,@-R15
00001312 6E43 MOV R4,R14
00001314 2FC6 MOV.L R12,@-R15
Monochrome 747 {
Monochrome 748 int radius1, radius2;
Monochrome 749 if(x1 > x2)
00001316 3E67 CMP/GT R6,R14
00001318 2FB6 MOV.L R11,@-R15
0000131A 4F22 STS.L PR,@-R15
0000131C 8F03 BF/S L1299
0000131E 6D53 MOV R5,R13
Monochrome 750 {
Monochrome 751 int tmp = x1;
00001320 64E3 MOV R14,R4
Monochrome 752 x1 = x2;
00001322 6E63 MOV R6,R14
Monochrome 753 x2 = tmp;
00001324 6643 MOV R4,R6
00001326 L1299:
Monochrome 754 }
Monochrome 755 if(y1 > y2)
00001326 3D77 CMP/GT R7,R13
00001328 8F03 BF/S L1300
Monochrome 756 {
Monochrome 757 int tmp = y1;
Monochrome 758 y1 = y2;
Monochrome 759 y2 = tmp;
Monochrome 760 }
Monochrome 761 radius1 = (x2-x1)/2;
0000132A 36E8 SUB R14,R6
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 61
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000132C 64D3 MOV R13,R4
0000132E 6D73 MOV R7,R13
00001330 6743 MOV R4,R7
00001332 L1300:
00001332 6B63 MOV R6,R11
Monochrome 762 radius2 = (y2-y1)/2;
Monochrome 763 ML_filled_ellipse(x1+radius1, y1+radius2, radius1, radius2, color);
00001334 52F5 MOV.L @(20,R15),R2
00001336 65D3 MOV R13,R5
00001338 2F26 MOV.L R2,@-R15
0000133A 64E3 MOV R14,R4
0000133C E300 MOV #0,R3
0000133E 33B7 CMP/GT R11,R3
00001340 3B3E ADDC R3,R11
00001342 4B21 SHAR R11
00001344 37D8 SUB R13,R7
00001346 6C73 MOV R7,R12
00001348 33C7 CMP/GT R12,R3
0000134A 3C3E ADDC R3,R12
0000134C 4C21 SHAR R12
0000134E 67C3 MOV R12,R7
00001350 66B3 MOV R11,R6
00001352 35CC ADD R12,R5
00001354 BE7D BSR _ML_filled_ellipse
00001356 34BC ADD R11,R4
Monochrome 764 }
00001358 7F04 ADD #4,R15
0000135A 4F26 LDS.L @R15+,PR
0000135C 6BF6 MOV.L @R15+,R11
0000135E 6CF6 MOV.L @R15+,R12
00001360 6DF6 MOV.L @R15+,R13
00001362 000B RTS
00001364 6EF6 MOV.L @R15+,R14
Monochrome 765 #endif
Monochrome 766
Monochrome 767 #ifdef ML_HORIZONTAL_SCROLL
Monochrome 768 void ML_horizontal_scroll(int scroll)
00001366 _ML_horizontal_scroll: ; function: ML_horizontal_scroll
; frame size=80
00001366 2FE6 MOV.L R14,@-R15
00001368 2FD6 MOV.L R13,@-R15
0000136A 2FC6 MOV.L R12,@-R15
0000136C 2FB6 MOV.L R11,@-R15
0000136E 2FA6 MOV.L R10,@-R15
00001370 2F96 MOV.L R9,@-R15
00001372 2F86 MOV.L R8,@-R15
00001374 4F22 STS.L PR,@-R15
00001376 7FD0 ADD #-48,R15
Monochrome 769 {
Monochrome 770 int i, j;
Monochrome 771 char line[16], shift, *vram;
Monochrome 772 unsigned char next;
Monochrome 773 unsigned short word;
Monochrome 774 vram = ML_vram_adress();
00001378 D30F MOV.L L1675+46,R3; _ML_vram_adress
0000137A 430B JSR @R3
0000137C 6C43 MOV R4,R12
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 62
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000137E 6E03 MOV R0,R14
Monochrome 775 scroll %= 128;
00001380 4C11 CMP/PZ R12
00001382 8F1B BF/S L1301
00001384 E37F MOV #127,R3
00001386 A01E BRA L1302
00001388 2C39 AND R3,R12
0000138A L1675:
0000138A 0000 .DATA.W 0
0000138C <00000000> .DATA.L __itos
00001390 <00000000> .DATA.L __adds
00001394 <00000000> .DATA.L __itod
00001398 BFE00000 .DATA.L H'BFE00000
0000139C <00000000> .DATA.L __addd
000013A0 <00000000> .DATA.L __muld
000013A4 <00000000> .DATA.L __gtd
000013A8 3FE00000 .DATA.L H'3FE00000
000013AC <00000000> .DATA.L __subdr
000013B0 <00000000> .DATA.L __dtos
000013B4 <00000000> .DATA.L __lts
000013B8 <00000000> .DATA.L _ML_vram_adress
000013BC L1301:
000013BC 6CC7 NOT R12,R12
000013BE 7C01 ADD #1,R12
000013C0 2C39 AND R3,R12
000013C2 6CC7 NOT R12,R12
000013C4 7C01 ADD #1,R12
000013C6 L1302:
Monochrome 776 shift = 8-(scroll&7);
000013C6 E107 MOV #7,R1
000013C8 21C9 AND R12,R1
000013CA E008 MOV #8,R0
000013CC 3018 SUB R1,R0
Monochrome 777 for(i=0 ; i<64 ; i++)
000013CE E700 MOV #0,R7
000013D0 80F4 MOV.B R0,@(4,R15)
000013D2 6DE3 MOV R14,R13
000013D4 6A73 MOV R7,R10
000013D6 6873 MOV R7,R8
000013D8 69E3 MOV R14,R9
000013DA 790F ADD #15,R9
000013DC 64F3 MOV R15,R4
000013DE 7420 ADD #32,R4
000013E0 6343 MOV R4,R3
000013E2 7310 ADD #16,R3
000013E4 1F32 MOV.L R3,@(8,R15)
000013E6 4C21 SHAR R12
000013E8 4C21 SHAR R12
000013EA 4C21 SHAR R12
000013EC 1FC4 MOV.L R12,@(16,R15)
000013EE 6243 MOV R4,R2
000013F0 1F25 MOV.L R2,@(20,R15)
000013F2 6123 MOV R2,R1
000013F4 710F ADD #15,R1
000013F6 EC0F MOV #15,R12
000013F8 1F16 MOV.L R1,@(24,R15)
000013FA 740E ADD #14,R4
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 63
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000013FC 1F47 MOV.L R4,@(28,R15)
000013FE L1303:
Monochrome 778 {
Monochrome 779 for(j=0 ; j<16 ; j++) line[j] = vram[(i<<4)+((j-(scroll>>3)+15)&15)];
000013FE 6473 MOV R7,R4
00001400 53F4 MOV.L @(16,R15),R3
00001402 66A3 MOV R10,R6
00001404 3438 SUB R3,R4
00001406 6543 MOV R4,R5
00001408 54F5 MOV.L @(20,R15),R4
0000140A 4608 SHLL2 R6
0000140C 750F ADD #15,R5
0000140E 4608 SHLL2 R6
00001410 L1304:
00001410 6053 MOV R5,R0
00001412 20C9 AND R12,R0
00001414 306C ADD R6,R0
00001416 03EC MOV.B @(R0,R14),R3
00001418 2430 MOV.B R3,@R4
0000141A 7401 ADD #1,R4
0000141C 52F2 MOV.L @(8,R15),R2
0000141E 3422 CMP/HS R2,R4
00001420 8FF6 BF/S L1304
00001422 7501 ADD #1,R5
Monochrome 780 next = line[15];
00001424 56F6 MOV.L @(24,R15),R6
Monochrome 781 vram[(i<<4)+15] = 0;
Monochrome 782 for(j=15 ; j>0 ; j--)
00001426 6BC3 MOV R12,R11
00001428 6660 MOV.B @R6,R6
0000142A 6483 MOV R8,R4
0000142C 2970 MOV.B R7,@R9
0000142E 740F ADD #15,R4
00001430 55F7 MOV.L @(28,R15),R5
00001432 L1305:
Monochrome 783 {
Monochrome 784 word = next << shift;
00001432 666C EXTU.B R6,R6
00001434 84F4 MOV.B @(4,R15),R0
Monochrome 785 next = line[j-1];
Monochrome 786 vram[(i<<4)+j] |= *((char*)&word+1);
00001436 63F3 MOV R15,R3
00001438 460D SHLD R0,R6
0000143A 6043 MOV R4,R0
0000143C 2F61 MOV.W R6,@R15
0000143E E201 MOV #1,R2
00001440 6650 MOV.B @R5,R6
00001442 7BFF ADD #-1,R11
00001444 323C ADD R3,R2
00001446 4B15 CMP/PL R11
00001448 6320 MOV.B @R2,R3
0000144A 02EC MOV.B @(R0,R14),R2
0000144C 223B OR R3,R2
Monochrome 787 vram[(i<<4)+j-1] = *((char*)&word);
0000144E 63F3 MOV R15,R3
00001450 0E24 MOV.B R2,@(R0,R14)
00001452 70FF ADD #-1,R0
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 64
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001454 1F03 MOV.L R0,@(12,R15)
00001456 6230 MOV.B @R3,R2
00001458 0E24 MOV.B R2,@(R0,R14)
0000145A 54F3 MOV.L @(12,R15),R4
0000145C 8DE9 BT/S L1305
0000145E 75FF ADD #-1,R5
Monochrome 788 }
Monochrome 789 word = next << shift;
00001460 84F4 MOV.B @(4,R15),R0
Monochrome 790 vram[(i<<4)] |= *((char*)&word+1);
00001462 63F3 MOV R15,R3
00001464 666C EXTU.B R6,R6
00001466 460D SHLD R0,R6
00001468 2F61 MOV.W R6,@R15
0000146A 7A01 ADD #1,R10
0000146C 8431 MOV.B @(1,R3),R0
0000146E 7810 ADD #16,R8
00001470 62D0 MOV.B @R13,R2
Monochrome 791 vram[(i<<4)+15] |= *((char*)&word);
00001472 63F3 MOV R15,R3
00001474 220B OR R0,R2
00001476 2D20 MOV.B R2,@R13
00001478 6330 MOV.B @R3,R3
0000147A 84DF MOV.B @(15,R13),R0
0000147C 203B OR R3,R0
0000147E E340 MOV #64,R3
00001480 80DF MOV.B R0,@(15,R13)
00001482 3A33 CMP/GE R3,R10
00001484 7D10 ADD #16,R13
00001486 8FBA BF/S L1303
00001488 7910 ADD #16,R9
Monochrome 792 }
Monochrome 793 }
0000148A 7F30 ADD #48,R15
0000148C 4F26 LDS.L @R15+,PR
0000148E 68F6 MOV.L @R15+,R8
00001490 69F6 MOV.L @R15+,R9
00001492 6AF6 MOV.L @R15+,R10
00001494 6BF6 MOV.L @R15+,R11
00001496 6CF6 MOV.L @R15+,R12
00001498 6DF6 MOV.L @R15+,R13
0000149A 000B RTS
0000149C 6EF6 MOV.L @R15+,R14
Monochrome 794 #endif
Monochrome 795
Monochrome 796 #ifdef ML_VERTICAL_SCROLL
Monochrome 797 void ML_vertical_scroll(int scroll)
0000149E _ML_vertical_scroll: ; function: ML_vertical_scroll
; frame size=104
0000149E 2FE6 MOV.L R14,@-R15
000014A0 2FD6 MOV.L R13,@-R15
000014A2 2FC6 MOV.L R12,@-R15
000014A4 2FB6 MOV.L R11,@-R15
000014A6 2FA6 MOV.L R10,@-R15
000014A8 2F86 MOV.L R8,@-R15
000014AA 4F22 STS.L PR,@-R15
Monochrome 798 {
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 65
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 799 int i, j;
Monochrome 800 char column[64], *vram = ML_vram_adress();
000014AC D31F MOV.L L1676,R3 ; _ML_vram_adress
000014AE 7FB4 ADD #-76,R15
000014B0 430B JSR @R3
000014B2 2F42 MOV.L R4,@R15
000014B4 1F01 MOV.L R0,@(4,R15)
Monochrome 801 scroll %= 64;
000014B6 60F2 MOV.L @R15,R0
000014B8 4011 CMP/PZ R0
000014BA 8B01 BF L1306
000014BC A005 BRA L1307
000014BE C93F AND #63,R0
000014C0 L1306:
000014C0 6007 NOT R0,R0
000014C2 7001 ADD #1,R0
000014C4 C93F AND #63,R0
000014C6 6007 NOT R0,R0
000014C8 7001 ADD #1,R0
000014CA L1307:
Monochrome 802 for(i=0 ; i<16 ; i++)
000014CA EC00 MOV #0,R12
000014CC 2F02 MOV.L R0,@R15
000014CE 6EF3 MOV R15,R14
000014D0 67C3 MOV R12,R7
000014D2 7E0C ADD #12,R14
000014D4 68E3 MOV R14,R8
000014D6 7840 ADD #64,R8
000014D8 EA10 MOV #16,R10
000014DA EB3F MOV #63,R11
000014DC ED40 MOV #64,R13
000014DE 63E3 MOV R14,R3
000014E0 1F32 MOV.L R3,@(8,R15)
000014E2 L1308:
000014E2 51F1 MOV.L @(4,R15),R1
000014E4 54F2 MOV.L @(8,R15),R4
000014E6 317C ADD R7,R1
000014E8 6513 MOV R1,R5
Monochrome 803 {
Monochrome 804 for(j=0 ; j<64 ; j++) column[j] = vram[(j<<4)+i];
000014EA L1309:
000014EA 6250 MOV.B @R5,R2
000014EC 2420 MOV.B R2,@R4
000014EE 7401 ADD #1,R4
000014F0 3482 CMP/HS R8,R4
000014F2 8FFA BF/S L1309
000014F4 7510 ADD #16,R5
Monochrome 805 for(j=0 ; j<64 ; j++) vram[(j<<4)+i] = column[(j-scroll+64)&63];
000014F6 66C3 MOV R12,R6
000014F8 63F2 MOV.L @R15,R3
000014FA 64C3 MOV R12,R4
000014FC 3438 SUB R3,R4
000014FE 7440 ADD #64,R4
00001500 6513 MOV R1,R5
00001502 L1310:
00001502 6043 MOV R4,R0
00001504 20B9 AND R11,R0
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 66
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001506 7601 ADD #1,R6
00001508 03EC MOV.B @(R0,R14),R3
0000150A 7401 ADD #1,R4
0000150C 2530 MOV.B R3,@R5
0000150E 36D3 CMP/GE R13,R6
00001510 8FF7 BF/S L1310
00001512 7510 ADD #16,R5
00001514 7701 ADD #1,R7
00001516 37A3 CMP/GE R10,R7
00001518 8BE3 BF L1308
Monochrome 806 }
Monochrome 807 }
0000151A 7F4C ADD #76,R15
0000151C 4F26 LDS.L @R15+,PR
0000151E 68F6 MOV.L @R15+,R8
00001520 6AF6 MOV.L @R15+,R10
00001522 6BF6 MOV.L @R15+,R11
00001524 6CF6 MOV.L @R15+,R12
00001526 6DF6 MOV.L @R15+,R13
00001528 000B RTS
0000152A 6EF6 MOV.L @R15+,R14
0000152C L1676:
0000152C <00000000> .DATA.L _ML_vram_adress
Monochrome 808 #endif
Monochrome 809
Monochrome 810 #ifdef ML_BMP_OR
Monochrome 811 void ML_bmp_or(const unsigned char *bmp, int x, int y, int width, int height)
00001530 _ML_bmp_or: ; function: ML_bmp_or
; frame size=60
00001530 2FE6 MOV.L R14,@-R15
00001532 6E63 MOV R6,R14
00001534 2FD6 MOV.L R13,@-R15
00001536 2FC6 MOV.L R12,@-R15
00001538 2FB6 MOV.L R11,@-R15
0000153A 6B43 MOV R4,R11
0000153C 2FA6 MOV.L R10,@-R15
0000153E 6A53 MOV R5,R10
00001540 2F96 MOV.L R9,@-R15
00001542 6973 MOV R7,R9
00001544 2F86 MOV.L R8,@-R15
Monochrome 812 {
Monochrome 813 unsigned short line;
Monochrome 814 char shift, *screen, *p=(char*)&line;
Monochrome 815 int i, j, begin=0, end=height, real_width=(width-1>>3<<3)+8;
00001546 6C93 MOV R9,R12
00001548 4F22 STS.L PR,@-R15
0000154A E800 MOV #0,R8
0000154C 4F12 STS.L MACL,@-R15
0000154E 7CFF ADD #-1,R12
00001550 7FE8 ADD #-24,R15
00001552 6DF3 MOV R15,R13
00001554 54FF MOV.L @(60,R15),R4
00001556 4C21 SHAR R12
00001558 2F82 MOV.L R8,@R15
0000155A 7D04 ADD #4,R13
0000155C 1F45 MOV.L R4,@(20,R15)
0000155E 4C21 SHAR R12
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 67
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001560 4C21 SHAR R12
00001562 62C3 MOV R12,R2
00001564 4208 SHLL2 R2
00001566 4200 SHLL R2
00001568 7208 ADD #8,R2
Monochrome 816 if(!bmp || x<0 || x>128-width || y<1-height || y>63 || width<1 || height<1) return;
0000156A 2BB8 TST R11,R11
0000156C 8F02 BF/S L1677
0000156E 1F23 MOV.L R2,@(12,R15)
00001570 A085 BRA L1313
00001572 0009 NOP
00001574 L1677:
00001574 4A11 CMP/PZ R10
00001576 8901 BT L1678
00001578 A081 BRA L1313
0000157A 0009 NOP
0000157C L1678:
0000157C 933D MOV.W L1679,R3 ; H'0080
0000157E 3398 SUB R9,R3
00001580 3A37 CMP/GT R3,R10
00001582 8B01 BF L1680
00001584 A07B BRA L1313
00001586 0009 NOP
00001588 L1680:
00001588 E301 MOV #1,R3
0000158A 3348 SUB R4,R3
0000158C 3E33 CMP/GE R3,R14
0000158E 8B76 BF L1313
00001590 E33F MOV #63,R3
00001592 3E37 CMP/GT R3,R14
00001594 8973 BT L1313
00001596 E001 MOV #1,R0
00001598 3903 CMP/GE R0,R9
0000159A 8B70 BF L1313
0000159C 3403 CMP/GE R0,R4
0000159E 8B6E BF L1313
Monochrome 817 if(y < 0) begin = -y;
000015A0 4E11 CMP/PZ R14
000015A2 8D02 BT/S L1314
Monochrome 818 if(y+height > 64) end = 64-y;
000015A4 E540 MOV #64,R5
000015A6 62EB NEG R14,R2
000015A8 2F22 MOV.L R2,@R15
000015AA L1314:
000015AA 34EC ADD R14,R4
000015AC 3457 CMP/GT R5,R4
000015AE 8B01 BF L1315
000015B0 35E8 SUB R14,R5
000015B2 1F55 MOV.L R5,@(20,R15)
000015B4 L1315:
Monochrome 819 shift = 8-(x&7);
000015B4 E307 MOV #7,R3
000015B6 23A9 AND R10,R3
000015B8 E208 MOV #8,R2
000015BA 3238 SUB R3,R2
Monochrome 820 screen = ML_vram_adress()+(y+begin<<4)+(x>>3);
000015BC D30F MOV.L L1679+2,R3 ; _ML_vram_adress
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 68
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000015BE E010 MOV #16,R0
000015C0 430B JSR @R3
000015C2 0F24 MOV.B R2,@(R0,R15)
000015C4 61F2 MOV.L @R15,R1
000015C6 63A3 MOV R10,R3
000015C8 3E1C ADD R1,R14
000015CA 4E08 SHLL2 R14
000015CC 4E08 SHLL2 R14
000015CE 30EC ADD R14,R0
000015D0 4321 SHAR R3
000015D2 4321 SHAR R3
000015D4 4321 SHAR R3
000015D6 6503 MOV R0,R5
000015D8 353C ADD R3,R5
Monochrome 821 for(i=begin ; i<end ; i++)
000015DA 6613 MOV R1,R6
000015DC 63D3 MOV R13,R3
000015DE 7301 ADD #1,R3
000015E0 2F32 MOV.L R3,@R15
000015E2 54F3 MOV.L @(12,R15),R4
000015E4 6243 MOV R4,R2
000015E6 4221 SHAR R2
000015E8 4221 SHAR R2
000015EA 4221 SHAR R2
000015EC 1F22 MOV.L R2,@(8,R15)
000015EE 6143 MOV R4,R1
000015F0 3198 SUB R9,R1
000015F2 E9FF MOV #-1,R9
000015F4 491C SHAD R1,R9
000015F6 A03F BRA L1316
000015F8 3A4C ADD R4,R10
000015FA L1679:
000015FA 0080 .DATA.W H'0080
000015FC <00000000> .DATA.L _ML_vram_adress
00001600 L1317:
00001600 57F2 MOV.L @(8,R15),R7
00001602 E010 MOV #16,R0
00001604 0767 MUL.L R6,R7
00001606 4C15 CMP/PL R12
Monochrome 822 {
Monochrome 823 for(j=0 ; j<width-1>>3 ; j++)
00001608 6483 MOV R8,R4
0000160A 071A STS MACL,R7
0000160C 8F18 BF/S L1318
0000160E 0EFC MOV.B @(R0,R15),R14
00001610 L1319:
Monochrome 824 {
Monochrome 825 line = bmp[i*(real_width>>3)+j]<<shift;
00001610 6073 MOV R7,R0
00001612 304C ADD R4,R0
00001614 00BC MOV.B @(R0,R11),R0
00001616 600C EXTU.B R0,R0
00001618 40ED SHLD R14,R0
0000161A 81F2 MOV.W R0,@(4,R15)
Monochrome 826 screen[j] |= *p;
0000161C 63D0 MOV.B @R13,R3
0000161E 6043 MOV R4,R0
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 69
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001620 025C MOV.B @(R0,R5),R2
00001622 223B OR R3,R2
00001624 0524 MOV.B R2,@(R0,R5)
Monochrome 827 if(shift!=8) screen[j+1] |= *(p+1);
00001626 60E3 MOV R14,R0
00001628 8808 CMP/EQ #8,R0
0000162A 8906 BT L1320
0000162C 62F2 MOV.L @R15,R2
0000162E 6343 MOV R4,R3
00001630 6220 MOV.B @R2,R2
00001632 335C ADD R5,R3
00001634 8431 MOV.B @(1,R3),R0
00001636 202B OR R2,R0
00001638 8031 MOV.B R0,@(1,R3)
0000163A L1320:
0000163A 7401 ADD #1,R4
0000163C 34C3 CMP/GE R12,R4
0000163E 8BE7 BF L1319
00001640 L1318:
Monochrome 828 }
Monochrome 829 line = (bmp[i*(real_width>>3)+j] & -1<<(real_width-width))<<shift;
00001640 50F2 MOV.L @(8,R15),R0
Monochrome 830 screen[j] |= *p;
00001642 6743 MOV R4,R7
00001644 0067 MUL.L R6,R0
00001646 375C ADD R5,R7
00001648 001A STS MACL,R0
0000164A 304C ADD R4,R0
0000164C 00BC MOV.B @(R0,R11),R0
0000164E 600C EXTU.B R0,R0
00001650 2099 AND R9,R0
00001652 40EC SHAD R14,R0
00001654 81F2 MOV.W R0,@(4,R15)
Monochrome 831 if(shift!=8 && x+real_width<129) screen[j+1] |= *(p+1);
00001656 60E3 MOV R14,R0
00001658 63D0 MOV.B @R13,R3
0000165A 8808 CMP/EQ #8,R0
0000165C 6270 MOV.B @R7,R2
0000165E 223B OR R3,R2
00001660 8D08 BT/S L1321
00001662 2720 MOV.B R2,@R7
00001664 9216 MOV.W L1681,R2 ; H'0081
00001666 3A23 CMP/GE R2,R10
00001668 8904 BT L1321
0000166A 61F2 MOV.L @R15,R1
0000166C 8471 MOV.B @(1,R7),R0
0000166E 6310 MOV.B @R1,R3
00001670 203B OR R3,R0
00001672 8071 MOV.B R0,@(1,R7)
00001674 L1321:
Monochrome 832 screen += 16;
00001674 7510 ADD #16,R5
00001676 7601 ADD #1,R6
00001678 L1316:
00001678 53F5 MOV.L @(20,R15),R3
0000167A 3633 CMP/GE R3,R6
0000167C 8BC0 BF L1317
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 70
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000167E L1313:
Monochrome 833 }
Monochrome 834 }
0000167E 7F18 ADD #24,R15
00001680 4F16 LDS.L @R15+,MACL
00001682 4F26 LDS.L @R15+,PR
00001684 68F6 MOV.L @R15+,R8
00001686 69F6 MOV.L @R15+,R9
00001688 6AF6 MOV.L @R15+,R10
0000168A 6BF6 MOV.L @R15+,R11
0000168C 6CF6 MOV.L @R15+,R12
0000168E 6DF6 MOV.L @R15+,R13
00001690 000B RTS
00001692 6EF6 MOV.L @R15+,R14
00001694 L1681:
00001694 0081 .DATA.W H'0081
Monochrome 835 #endif
Monochrome 836
Monochrome 837 #ifdef ML_BMP_AND
Monochrome 838 void ML_bmp_and(const unsigned char *bmp, int x, int y, int width, int height)
00001696 _ML_bmp_and: ; function: ML_bmp_and
; frame size=60
00001696 2FE6 MOV.L R14,@-R15
00001698 2FD6 MOV.L R13,@-R15
0000169A 6E63 MOV R6,R14
0000169C 2FC6 MOV.L R12,@-R15
0000169E 2FB6 MOV.L R11,@-R15
000016A0 2FA6 MOV.L R10,@-R15
000016A2 6B53 MOV R5,R11
000016A4 2F96 MOV.L R9,@-R15
000016A6 6A43 MOV R4,R10
000016A8 2F86 MOV.L R8,@-R15
Monochrome 839 {
Monochrome 840 unsigned short line;
Monochrome 841 char shift, *screen, *p=(char*)&line;
Monochrome 842 int i, j, begin=0, end=height, real_width=(width-1>>3<<3)+8;
000016AA E800 MOV #0,R8
000016AC 4F22 STS.L PR,@-R15
000016AE 6983 MOV R8,R9
000016B0 4F12 STS.L MACL,@-R15
000016B2 7FE8 ADD #-24,R15
000016B4 1F71 MOV.L R7,@(4,R15)
000016B6 6DF3 MOV R15,R13
000016B8 54FF MOV.L @(60,R15),R4
000016BA 1F45 MOV.L R4,@(20,R15)
000016BC 5CF1 MOV.L @(4,R15),R12
000016BE 7CFF ADD #-1,R12
000016C0 4C21 SHAR R12
000016C2 4C21 SHAR R12
000016C4 4C21 SHAR R12
000016C6 62C3 MOV R12,R2
000016C8 4208 SHLL2 R2
000016CA 4200 SHLL R2
000016CC 7208 ADD #8,R2
Monochrome 843 if(!bmp || x<0 || x>128-width || y<1-height || y>63 || width<1 || height<1) return;
000016CE 2AA8 TST R10,R10
000016D0 8F02 BF/S L1682
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 71
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000016D2 1F24 MOV.L R2,@(16,R15)
000016D4 A08E BRA L1324
000016D6 0009 NOP
000016D8 L1682:
000016D8 4B11 CMP/PZ R11
000016DA 8901 BT L1683
000016DC A08A BRA L1324
000016DE 0009 NOP
000016E0 L1683:
000016E0 53F1 MOV.L @(4,R15),R3
000016E2 9140 MOV.W L1684,R1 ; H'0080
000016E4 3138 SUB R3,R1
000016E6 3B17 CMP/GT R1,R11
000016E8 8B01 BF L1685
000016EA A083 BRA L1324
000016EC 0009 NOP
000016EE L1685:
000016EE E001 MOV #1,R0
000016F0 3048 SUB R4,R0
000016F2 3E03 CMP/GE R0,R14
000016F4 8901 BT L1686
000016F6 A07D BRA L1324
000016F8 0009 NOP
000016FA L1686:
000016FA E13F MOV #63,R1
000016FC 3E17 CMP/GT R1,R14
000016FE 8979 BT L1324
00001700 E001 MOV #1,R0
00001702 3303 CMP/GE R0,R3
00001704 8B76 BF L1324
00001706 E201 MOV #1,R2
00001708 3423 CMP/GE R2,R4
0000170A 8B73 BF L1324
Monochrome 844 if(y < 0) begin = -y;
0000170C 4E11 CMP/PZ R14
0000170E 8D01 BT/S L1325
Monochrome 845 if(y+height > 64) end = 64-y;
00001710 E540 MOV #64,R5
00001712 69EB NEG R14,R9
00001714 L1325:
00001714 34EC ADD R14,R4
00001716 3457 CMP/GT R5,R4
00001718 8F02 BF/S L1326
Monochrome 846 shift = 8-(x&7);
0000171A E307 MOV #7,R3
0000171C 35E8 SUB R14,R5
0000171E 1F55 MOV.L R5,@(20,R15)
00001720 L1326:
00001720 23B9 AND R11,R3
00001722 E008 MOV #8,R0
00001724 3038 SUB R3,R0
Monochrome 847 screen = ML_vram_adress()+(y+begin<<4)+(x>>3);
00001726 D311 MOV.L L1684+6,R3 ; _ML_vram_adress
00001728 430B JSR @R3
0000172A 80FC MOV.B R0,@(12,R15)
0000172C 3E9C ADD R9,R14
0000172E 4E08 SHLL2 R14
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 72
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001730 4E08 SHLL2 R14
00001732 30EC ADD R14,R0
00001734 62B3 MOV R11,R2
00001736 4221 SHAR R2
00001738 4221 SHAR R2
0000173A 4221 SHAR R2
0000173C 6503 MOV R0,R5
0000173E 352C ADD R2,R5
00001740 52F4 MOV.L @(16,R15),R2
00001742 E308 MOV #8,R3
Monochrome 848 for(i=begin ; i<end ; i++)
00001744 6693 MOV R9,R6
00001746 69D3 MOV R13,R9
00001748 7901 ADD #1,R9
0000174A 4221 SHAR R2
0000174C 4221 SHAR R2
0000174E 4221 SHAR R2
00001750 1F22 MOV.L R2,@(8,R15)
00001752 50F1 MOV.L @(4,R15),R0
00001754 C907 AND #7,R0
00001756 3308 SUB R0,R3
00001758 9006 MOV.W L1684+2,R0 ; H'00FF
0000175A 633B NEG R3,R3
0000175C 403C SHAD R3,R0
0000175E 80F4 MOV.B R0,@(4,R15)
00001760 53F4 MOV.L @(16,R15),R3
00001762 A044 BRA L1327
00001764 3B3C ADD R3,R11
00001766 L1684:
00001766 0080 .DATA.W H'0080
00001768 00FF .DATA.W H'00FF
0000176A 0000 .DATA.W 0
0000176C <00000000> .DATA.L _ML_vram_adress
00001770 L1328:
00001770 57F2 MOV.L @(8,R15),R7
00001772 4C15 CMP/PL R12
00001774 84FC MOV.B @(12,R15),R0
Monochrome 849 {
Monochrome 850 for(j=0 ; j<width-1>>3 ; j++)
00001776 6483 MOV R8,R4
00001778 0767 MUL.L R6,R7
0000177A 071A STS MACL,R7
0000177C 8F19 BF/S L1329
0000177E 6E03 MOV R0,R14
00001780 L1330:
Monochrome 851 {
Monochrome 852 line = ~((unsigned char)~bmp[i*(real_width>>3)+j]<<shift);
00001780 6073 MOV R7,R0
00001782 304C ADD R4,R0
00001784 03AC MOV.B @(R0,R10),R3
Monochrome 853 screen[j] &= *p;
00001786 6043 MOV R4,R0
00001788 6337 NOT R3,R3
0000178A 633C EXTU.B R3,R3
0000178C 43ED SHLD R14,R3
0000178E 6337 NOT R3,R3
00001790 2F31 MOV.W R3,@R15
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 73
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001792 62D0 MOV.B @R13,R2
00001794 015C MOV.B @(R0,R5),R1
00001796 2129 AND R2,R1
00001798 0514 MOV.B R1,@(R0,R5)
Monochrome 854 if(shift!=8) screen[j+1] &= *(p+1);
0000179A 60E3 MOV R14,R0
0000179C 8808 CMP/EQ #8,R0
0000179E 8905 BT L1331
000017A0 6290 MOV.B @R9,R2
000017A2 6343 MOV R4,R3
000017A4 335C ADD R5,R3
000017A6 8431 MOV.B @(1,R3),R0
000017A8 2029 AND R2,R0
000017AA 8031 MOV.B R0,@(1,R3)
000017AC L1331:
000017AC 7401 ADD #1,R4
000017AE 34C3 CMP/GE R12,R4
000017B0 8BE6 BF L1330
000017B2 L1329:
Monochrome 855 }
Monochrome 856 line = ~((unsigned char)~(bmp[i*(real_width>>3)+j] | (unsigned char)-1>>8-(width&7))<<shif
+t);
Monochrome 857 screen[j] &= *p;
000017B2 6743 MOV R4,R7
000017B4 50F2 MOV.L @(8,R15),R0
000017B6 375C ADD R5,R7
000017B8 0067 MUL.L R6,R0
000017BA 001A STS MACL,R0
000017BC 304C ADD R4,R0
000017BE 03AC MOV.B @(R0,R10),R3
000017C0 84F4 MOV.B @(4,R15),R0
000017C2 203B OR R3,R0
000017C4 6007 NOT R0,R0
000017C6 600C EXTU.B R0,R0
000017C8 40ED SHLD R14,R0
000017CA 6007 NOT R0,R0
000017CC 2F01 MOV.W R0,@R15
Monochrome 858 if(shift!=8 && x+real_width<129) screen[j+1] &= *(p+1);
000017CE 60E3 MOV R14,R0
000017D0 63D0 MOV.B @R13,R3
000017D2 8808 CMP/EQ #8,R0
000017D4 6270 MOV.B @R7,R2
000017D6 2239 AND R3,R2
000017D8 8D07 BT/S L1332
000017DA 2720 MOV.B R2,@R7
000017DC 9215 MOV.W L1687,R2 ; H'0081
000017DE 3B23 CMP/GE R2,R11
000017E0 8903 BT L1332
000017E2 6390 MOV.B @R9,R3
000017E4 8471 MOV.B @(1,R7),R0
000017E6 2039 AND R3,R0
000017E8 8071 MOV.B R0,@(1,R7)
000017EA L1332:
Monochrome 859 screen += 16;
000017EA 7510 ADD #16,R5
000017EC 7601 ADD #1,R6
000017EE L1327:
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 74
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000017EE 53F5 MOV.L @(20,R15),R3
000017F0 3633 CMP/GE R3,R6
000017F2 8BBD BF L1328
000017F4 L1324:
Monochrome 860 }
Monochrome 861 }
000017F4 7F18 ADD #24,R15
000017F6 4F16 LDS.L @R15+,MACL
000017F8 4F26 LDS.L @R15+,PR
000017FA 68F6 MOV.L @R15+,R8
000017FC 69F6 MOV.L @R15+,R9
000017FE 6AF6 MOV.L @R15+,R10
00001800 6BF6 MOV.L @R15+,R11
00001802 6CF6 MOV.L @R15+,R12
00001804 6DF6 MOV.L @R15+,R13
00001806 000B RTS
00001808 6EF6 MOV.L @R15+,R14
0000180A L1687:
0000180A 0081 .DATA.W H'0081
Monochrome 862 #endif
Monochrome 863
Monochrome 864 #ifdef ML_BMP_XOR
Monochrome 865 void ML_bmp_xor(const unsigned char *bmp, int x, int y, int width, int height)
0000180C _ML_bmp_xor: ; function: ML_bmp_xor
; frame size=60
0000180C 2FE6 MOV.L R14,@-R15
0000180E 6E63 MOV R6,R14
00001810 2FD6 MOV.L R13,@-R15
00001812 2FC6 MOV.L R12,@-R15
00001814 2FB6 MOV.L R11,@-R15
00001816 6B43 MOV R4,R11
00001818 2FA6 MOV.L R10,@-R15
0000181A 6A53 MOV R5,R10
0000181C 2F96 MOV.L R9,@-R15
0000181E 6973 MOV R7,R9
00001820 2F86 MOV.L R8,@-R15
Monochrome 866 {
Monochrome 867 unsigned short line;
Monochrome 868 char shift, *screen, *p=(char*)&line;
Monochrome 869 int i, j, begin=0, end=height, real_width=(width-1>>3<<3)+8;
00001822 6C93 MOV R9,R12
00001824 4F22 STS.L PR,@-R15
00001826 E800 MOV #0,R8
00001828 4F12 STS.L MACL,@-R15
0000182A 7CFF ADD #-1,R12
0000182C 7FE8 ADD #-24,R15
0000182E 6DF3 MOV R15,R13
00001830 54FF MOV.L @(60,R15),R4
00001832 4C21 SHAR R12
00001834 2F82 MOV.L R8,@R15
00001836 7D04 ADD #4,R13
00001838 1F45 MOV.L R4,@(20,R15)
0000183A 4C21 SHAR R12
0000183C 4C21 SHAR R12
0000183E 62C3 MOV R12,R2
00001840 4208 SHLL2 R2
00001842 4200 SHLL R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 75
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001844 7208 ADD #8,R2
Monochrome 870 if(!bmp || x<0 || x>128-width || y<1-height || y>63 || width<1 || height<1) return;
00001846 2BB8 TST R11,R11
00001848 8F02 BF/S L1688
0000184A 1F23 MOV.L R2,@(12,R15)
0000184C A085 BRA L1335
0000184E 0009 NOP
00001850 L1688:
00001850 4A11 CMP/PZ R10
00001852 8901 BT L1689
00001854 A081 BRA L1335
00001856 0009 NOP
00001858 L1689:
00001858 933D MOV.W L1690,R3 ; H'0080
0000185A 3398 SUB R9,R3
0000185C 3A37 CMP/GT R3,R10
0000185E 8B01 BF L1691
00001860 A07B BRA L1335
00001862 0009 NOP
00001864 L1691:
00001864 E301 MOV #1,R3
00001866 3348 SUB R4,R3
00001868 3E33 CMP/GE R3,R14
0000186A 8B76 BF L1335
0000186C E33F MOV #63,R3
0000186E 3E37 CMP/GT R3,R14
00001870 8973 BT L1335
00001872 E001 MOV #1,R0
00001874 3903 CMP/GE R0,R9
00001876 8B70 BF L1335
00001878 3403 CMP/GE R0,R4
0000187A 8B6E BF L1335
Monochrome 871 if(y < 0) begin = -y;
0000187C 4E11 CMP/PZ R14
0000187E 8D02 BT/S L1336
Monochrome 872 if(y+height > 64) end = 64-y;
00001880 E540 MOV #64,R5
00001882 62EB NEG R14,R2
00001884 2F22 MOV.L R2,@R15
00001886 L1336:
00001886 34EC ADD R14,R4
00001888 3457 CMP/GT R5,R4
0000188A 8B01 BF L1337
0000188C 35E8 SUB R14,R5
0000188E 1F55 MOV.L R5,@(20,R15)
00001890 L1337:
Monochrome 873 shift = 8-(x&7);
00001890 E307 MOV #7,R3
00001892 23A9 AND R10,R3
00001894 E208 MOV #8,R2
00001896 3238 SUB R3,R2
Monochrome 874 screen = ML_vram_adress()+(y+begin<<4)+(x>>3);
00001898 D30F MOV.L L1690+2,R3 ; _ML_vram_adress
0000189A E010 MOV #16,R0
0000189C 430B JSR @R3
0000189E 0F24 MOV.B R2,@(R0,R15)
000018A0 61F2 MOV.L @R15,R1
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 76
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000018A2 63A3 MOV R10,R3
000018A4 3E1C ADD R1,R14
000018A6 4E08 SHLL2 R14
000018A8 4E08 SHLL2 R14
000018AA 30EC ADD R14,R0
000018AC 4321 SHAR R3
000018AE 4321 SHAR R3
000018B0 4321 SHAR R3
000018B2 6503 MOV R0,R5
000018B4 353C ADD R3,R5
Monochrome 875 for(i=begin ; i<end ; i++)
000018B6 6613 MOV R1,R6
000018B8 63D3 MOV R13,R3
000018BA 7301 ADD #1,R3
000018BC 2F32 MOV.L R3,@R15
000018BE 54F3 MOV.L @(12,R15),R4
000018C0 6243 MOV R4,R2
000018C2 4221 SHAR R2
000018C4 4221 SHAR R2
000018C6 4221 SHAR R2
000018C8 1F22 MOV.L R2,@(8,R15)
000018CA 6143 MOV R4,R1
000018CC 3198 SUB R9,R1
000018CE E9FF MOV #-1,R9
000018D0 491C SHAD R1,R9
000018D2 A03F BRA L1338
000018D4 3A4C ADD R4,R10
000018D6 L1690:
000018D6 0080 .DATA.W H'0080
000018D8 <00000000> .DATA.L _ML_vram_adress
000018DC L1339:
000018DC 57F2 MOV.L @(8,R15),R7
000018DE E010 MOV #16,R0
000018E0 0767 MUL.L R6,R7
000018E2 4C15 CMP/PL R12
Monochrome 876 {
Monochrome 877 for(j=0 ; j<width-1>>3 ; j++)
000018E4 6483 MOV R8,R4
000018E6 071A STS MACL,R7
000018E8 8F18 BF/S L1340
000018EA 0EFC MOV.B @(R0,R15),R14
000018EC L1341:
Monochrome 878 {
Monochrome 879 line = bmp[i*(real_width>>3)+j]<<shift;
000018EC 6073 MOV R7,R0
000018EE 304C ADD R4,R0
000018F0 00BC MOV.B @(R0,R11),R0
000018F2 600C EXTU.B R0,R0
000018F4 40ED SHLD R14,R0
000018F6 81F2 MOV.W R0,@(4,R15)
Monochrome 880 screen[j] ^= *p;
000018F8 63D0 MOV.B @R13,R3
000018FA 6043 MOV R4,R0
000018FC 025C MOV.B @(R0,R5),R2
000018FE 223A XOR R3,R2
00001900 0524 MOV.B R2,@(R0,R5)
Monochrome 881 if(shift!=8) screen[j+1] ^= *(p+1);
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 77
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001902 60E3 MOV R14,R0
00001904 8808 CMP/EQ #8,R0
00001906 8906 BT L1342
00001908 62F2 MOV.L @R15,R2
0000190A 6343 MOV R4,R3
0000190C 6220 MOV.B @R2,R2
0000190E 335C ADD R5,R3
00001910 8431 MOV.B @(1,R3),R0
00001912 202A XOR R2,R0
00001914 8031 MOV.B R0,@(1,R3)
00001916 L1342:
00001916 7401 ADD #1,R4
00001918 34C3 CMP/GE R12,R4
0000191A 8BE7 BF L1341
0000191C L1340:
Monochrome 882 }
Monochrome 883 line = (bmp[i*(real_width>>3)+j] & -1<<(real_width-width))<<shift;
0000191C 50F2 MOV.L @(8,R15),R0
Monochrome 884 screen[j] ^= *p;
0000191E 6743 MOV R4,R7
00001920 0067 MUL.L R6,R0
00001922 375C ADD R5,R7
00001924 001A STS MACL,R0
00001926 304C ADD R4,R0
00001928 00BC MOV.B @(R0,R11),R0
0000192A 600C EXTU.B R0,R0
0000192C 2099 AND R9,R0
0000192E 40EC SHAD R14,R0
00001930 81F2 MOV.W R0,@(4,R15)
Monochrome 885 if(shift!=8 && x+real_width<129) screen[j+1] ^= *(p+1);
00001932 60E3 MOV R14,R0
00001934 63D0 MOV.B @R13,R3
00001936 8808 CMP/EQ #8,R0
00001938 6270 MOV.B @R7,R2
0000193A 223A XOR R3,R2
0000193C 8D08 BT/S L1343
0000193E 2720 MOV.B R2,@R7
00001940 9268 MOV.W L1692,R2 ; H'0081
00001942 3A23 CMP/GE R2,R10
00001944 8904 BT L1343
00001946 61F2 MOV.L @R15,R1
00001948 8471 MOV.B @(1,R7),R0
0000194A 6310 MOV.B @R1,R3
0000194C 203A XOR R3,R0
0000194E 8071 MOV.B R0,@(1,R7)
00001950 L1343:
Monochrome 886 screen += 16;
00001950 7510 ADD #16,R5
00001952 7601 ADD #1,R6
00001954 L1338:
00001954 53F5 MOV.L @(20,R15),R3
00001956 3633 CMP/GE R3,R6
00001958 8BC0 BF L1339
0000195A L1335:
Monochrome 887 }
Monochrome 888 }
0000195A 7F18 ADD #24,R15
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 78
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000195C 4F16 LDS.L @R15+,MACL
0000195E 4F26 LDS.L @R15+,PR
00001960 68F6 MOV.L @R15+,R8
00001962 69F6 MOV.L @R15+,R9
00001964 6AF6 MOV.L @R15+,R10
00001966 6BF6 MOV.L @R15+,R11
00001968 6CF6 MOV.L @R15+,R12
0000196A 6DF6 MOV.L @R15+,R13
0000196C 000B RTS
0000196E 6EF6 MOV.L @R15+,R14
Monochrome 889 #endif
Monochrome 890
Monochrome 891 #ifdef ML_BMP_OR_CL
Monochrome 892 void ML_bmp_or_cl(const unsigned char *bmp, int x, int y, int width, int height)
00001970 _ML_bmp_or_cl: ; function: ML_bmp_or_cl
; frame size=92
00001970 2FE6 MOV.L R14,@-R15
00001972 E05C MOV #92,R0
00001974 2FD6 MOV.L R13,@-R15
00001976 2FC6 MOV.L R12,@-R15
00001978 2FB6 MOV.L R11,@-R15
0000197A 2FA6 MOV.L R10,@-R15
0000197C 2F96 MOV.L R9,@-R15
0000197E 6963 MOV R6,R9
00001980 2F86 MOV.L R8,@-R15
Monochrome 893 {
Monochrome 894 unsigned short line;
Monochrome 895 char shift, *screen, *p;
Monochrome 896 int i, j, real_width, begin_x, end_x, begin_y, end_y;
Monochrome 897 char bool1=1, bool2=1, bool3;
00001982 E601 MOV #1,R6
00001984 4F22 STS.L PR,@-R15
00001986 4F12 STS.L MACL,@-R15
00001988 7FC8 ADD #-56,R15
0000198A 1F45 MOV.L R4,@(20,R15)
0000198C 1F72 MOV.L R7,@(8,R15)
0000198E 04FE MOV.L @(R0,R15),R4
00001990 E01C MOV #28,R0
00001992 0F64 MOV.B R6,@(R0,R15)
00001994 E034 MOV #52,R0
00001996 0F64 MOV.B R6,@(R0,R15)
Monochrome 898 if(!bmp || x<1-width || x>127 || y<1-height || y>63 || height<1 || width<1) return;
00001998 53F5 MOV.L @(20,R15),R3
0000199A 2338 TST R3,R3
0000199C 8B01 BF L1693
0000199E A103 BRA L1346
000019A0 0009 NOP
000019A2 L1693:
000019A2 E201 MOV #1,R2
000019A4 53F2 MOV.L @(8,R15),R3
000019A6 3238 SUB R3,R2
000019A8 3523 CMP/GE R2,R5
000019AA 8901 BT L1694
000019AC A0FC BRA L1346
000019AE 0009 NOP
000019B0 L1694:
000019B0 E17F MOV #127,R1
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 79
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000019B2 3517 CMP/GT R1,R5
000019B4 8B01 BF L1695
000019B6 A0F7 BRA L1346
000019B8 0009 NOP
000019BA L1695:
000019BA E001 MOV #1,R0
000019BC 3048 SUB R4,R0
000019BE 3903 CMP/GE R0,R9
000019C0 8901 BT L1696
000019C2 A0F1 BRA L1346
000019C4 0009 NOP
000019C6 L1696:
000019C6 E23F MOV #63,R2
000019C8 3927 CMP/GT R2,R9
000019CA 8B01 BF L1697
000019CC A0EC BRA L1346
000019CE 0009 NOP
000019D0 L1697:
000019D0 E001 MOV #1,R0
000019D2 3403 CMP/GE R0,R4
000019D4 8901 BT L1698
000019D6 A0E7 BRA L1346
000019D8 0009 NOP
000019DA L1698:
000019DA 52F2 MOV.L @(8,R15),R2
000019DC 3203 CMP/GE R0,R2
000019DE 8901 BT L1699
000019E0 A0E2 BRA L1346
000019E2 0009 NOP
000019E4 L1699:
Monochrome 899 p = (char*)&line;
Monochrome 900 real_width = (width-1>>3<<3)+8;
000019E4 52F2 MOV.L @(8,R15),R2
000019E6 6BF3 MOV R15,R11
000019E8 72FF ADD #-1,R2
000019EA 4221 SHAR R2
000019EC 4221 SHAR R2
000019EE 4221 SHAR R2
000019F0 4208 SHLL2 R2
000019F2 4200 SHLL R2
000019F4 7208 ADD #8,R2
Monochrome 901 if(y < 0) begin_y = -y;
000019F6 4911 CMP/PZ R9
000019F8 1F23 MOV.L R2,@(12,R15)
000019FA 8D02 BT/S L1347
000019FC E600 MOV #0,R6
000019FE A001 BRA L1348
00001A00 689B NEG R9,R8
00001A02 L1347:
Monochrome 902 else begin_y = 0;
00001A02 6863 MOV R6,R8
00001A04 L1348:
Monochrome 903 if(y+height > 64) end_y = 64-y;
00001A04 E740 MOV #64,R7
00001A06 6393 MOV R9,R3
00001A08 334C ADD R4,R3
00001A0A 3377 CMP/GT R7,R3
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 80
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001A0C 8B03 BF L1349
00001A0E 3798 SUB R9,R7
00001A10 A002 BRA L1350
00001A12 1F7C MOV.L R7,@(48,R15)
00001A14 L1692:
00001A14 0081 .DATA.W H'0081
00001A16 L1349:
Monochrome 904 else end_y = height;
00001A16 1F4C MOV.L R4,@(48,R15)
00001A18 L1350:
Monochrome 905 shift = 8-(x&7);
00001A18 E307 MOV #7,R3
00001A1A 2359 AND R5,R3
00001A1C E408 MOV #8,R4
00001A1E 3438 SUB R3,R4
00001A20 4511 CMP/PZ R5
00001A22 8D0A BT/S L1351
00001A24 6E4E EXTS.B R4,R14
Monochrome 906 if(x<0)
Monochrome 907 {
Monochrome 908 begin_x = -x>>3;
00001A26 6C5B NEG R5,R12
00001A28 4C21 SHAR R12
00001A2A 4C21 SHAR R12
00001A2C 4C21 SHAR R12
Monochrome 909 if(shift != 8) bool1 = 0;
00001A2E 60E3 MOV R14,R0
00001A30 8808 CMP/EQ #8,R0
00001A32 8903 BT L1353
00001A34 E01C MOV #28,R0
00001A36 A001 BRA L1353
00001A38 0F64 MOV.B R6,@(R0,R15)
00001A3A L1351:
Monochrome 910 } else begin_x = 0;
00001A3A 6C63 MOV R6,R12
00001A3C L1353:
00001A3C 9343 MOV.W L1700,R3 ; H'0080
00001A3E 6253 MOV R5,R2
00001A40 4221 SHAR R2
00001A42 4221 SHAR R2
00001A44 4221 SHAR R2
00001A46 1F21 MOV.L R2,@(4,R15)
00001A48 54F3 MOV.L @(12,R15),R4
00001A4A 74FF ADD #-1,R4
00001A4C 51F3 MOV.L @(12,R15),R1
00001A4E 4421 SHAR R4
00001A50 4421 SHAR R4
00001A52 4421 SHAR R4
00001A54 315C ADD R5,R1
00001A56 3137 CMP/GT R3,R1
00001A58 8B04 BF L1354
Monochrome 911 if(x+real_width > 128) end_x = 15-(x>>3), bool2 = 0;
00001A5A ED0F MOV #15,R13
00001A5C 3D28 SUB R2,R13
00001A5E E034 MOV #52,R0
00001A60 A001 BRA L1355
00001A62 0F64 MOV.B R6,@(R0,R15)
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 81
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001A64 L1354:
Monochrome 912 else end_x = real_width-1>>3;
00001A64 6D43 MOV R4,R13
00001A66 L1355:
Monochrome 913 bool3 = (end_x == real_width-1>>3);
00001A66 3D40 CMP/EQ R4,R13
Monochrome 914 screen = ML_vram_adress()+(y+begin_y<<4)+(x>>3);
00001A68 D317 MOV.L L1700+2,R3 ; _ML_vram_adress
00001A6A 61F3 MOV R15,R1
00001A6C 0029 MOVT R0
00001A6E 712C ADD #44,R1
00001A70 430B JSR @R3
00001A72 2100 MOV.B R0,@R1
00001A74 53F1 MOV.L @(4,R15),R3
00001A76 61B3 MOV R11,R1
Monochrome 915
Monochrome 916 for(i=begin_y ; i<end_y ; i++)
00001A78 1F86 MOV.L R8,@(24,R15)
00001A7A 6A93 MOV R9,R10
00001A7C 54F3 MOV.L @(12,R15),R4
00001A7E 7101 ADD #1,R1
00001A80 3A8C ADD R8,R10
00001A82 4A08 SHLL2 R10
00001A84 4A08 SHLL2 R10
00001A86 3A0C ADD R0,R10
00001A88 3A3C ADD R3,R10
00001A8A 4421 SHAR R4
00001A8C 4421 SHAR R4
00001A8E 4421 SHAR R4
00001A90 1F44 MOV.L R4,@(16,R15)
00001A92 53F6 MOV.L @(24,R15),R3
00001A94 52F5 MOV.L @(20,R15),R2
00001A96 0437 MUL.L R3,R4
00001A98 041A STS MACL,R4
00001A9A 6843 MOV R4,R8
00001A9C 38DC ADD R13,R8
00001A9E 382C ADD R2,R8
00001AA0 6943 MOV R4,R9
00001AA2 34CC ADD R12,R4
00001AA4 342C ADD R2,R4
00001AA6 63C3 MOV R12,R3
00001AA8 1F48 MOV.L R4,@(32,R15)
00001AAA 7301 ADD #1,R3
00001AAC 1F11 MOV.L R1,@(4,R15)
00001AAE 1F3A MOV.L R3,@(40,R15)
00001AB0 52F2 MOV.L @(8,R15),R2
00001AB2 50F3 MOV.L @(12,R15),R0
00001AB4 3028 SUB R2,R0
00001AB6 E1FF MOV #-1,R1
00001AB8 410C SHAD R0,R1
00001ABA 1F13 MOV.L R1,@(12,R15)
00001ABC 55F4 MOV.L @(16,R15),R5
00001ABE 1F59 MOV.L R5,@(36,R15)
00001AC0 1F54 MOV.L R5,@(16,R15)
00001AC2 A06D BRA L1356
00001AC4 1F52 MOV.L R5,@(8,R15)
00001AC6 L1700:
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 82
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001AC6 0080 .DATA.W H'0080
00001AC8 <00000000> .DATA.L _ML_vram_adress
00001ACC L1357:
Monochrome 917 {
Monochrome 918 if(begin_x < end_x)
00001ACC 3CD3 CMP/GE R13,R12
00001ACE 8938 BT L1358
Monochrome 919 {
Monochrome 920 line = bmp[i*(real_width>>3)+begin_x] << shift;
00001AD0 53F8 MOV.L @(32,R15),R3
00001AD2 64C3 MOV R12,R4
00001AD4 6230 MOV.B @R3,R2
00001AD6 E01C MOV #28,R0
00001AD8 622C EXTU.B R2,R2
00001ADA 42ED SHLD R14,R2
00001ADC 2F21 MOV.W R2,@R15
00001ADE 03FC MOV.B @(R0,R15),R3
00001AE0 2338 TST R3,R3
00001AE2 8D04 BT/S L1359
00001AE4 34AC ADD R10,R4
Monochrome 921 if(bool1) screen[begin_x] |= *p;
00001AE6 63B0 MOV.B @R11,R3
00001AE8 6140 MOV.B @R4,R1
00001AEA 213B OR R3,R1
00001AEC 2410 MOV.B R1,@R4
00001AEE L1359:
Monochrome 922 if(shift!=8) screen[begin_x+1] |= *(p+1);
00001AEE 60E3 MOV R14,R0
00001AF0 8808 CMP/EQ #8,R0
00001AF2 8904 BT L1360
00001AF4 52F1 MOV.L @(4,R15),R2
00001AF6 6320 MOV.B @R2,R3
00001AF8 8441 MOV.B @(1,R4),R0
00001AFA 203B OR R3,R0
00001AFC 8041 MOV.B R0,@(1,R4)
00001AFE L1360:
Monochrome 923 for(j=begin_x+1 ; j<end_x ; j++)
00001AFE 54FA MOV.L @(40,R15),R4
00001B00 53F5 MOV.L @(20,R15),R3
00001B02 34D3 CMP/GE R13,R4
00001B04 6643 MOV R4,R6
00001B06 36AC ADD R10,R6
00001B08 6563 MOV R6,R5
00001B0A 7501 ADD #1,R5
00001B0C 6763 MOV R6,R7
00001B0E 6693 MOV R9,R6
00001B10 364C ADD R4,R6
00001B12 8D16 BT/S L1358
00001B14 363C ADD R3,R6
00001B16 L1362:
Monochrome 924 {
Monochrome 925 line = bmp[i*(real_width>>3)+j] << shift;
Monochrome 926 screen[j] |= *p;
Monochrome 927 if(shift!=8) screen[j+1] |= *(p+1);
00001B16 60E3 MOV R14,R0
00001B18 6360 MOV.B @R6,R3
00001B1A 8808 CMP/EQ #8,R0
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 83
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001B1C 633C EXTU.B R3,R3
00001B1E 43ED SHLD R14,R3
00001B20 2F31 MOV.W R3,@R15
00001B22 62B0 MOV.B @R11,R2
00001B24 6170 MOV.B @R7,R1
00001B26 212B OR R2,R1
00001B28 8D05 BT/S L1363
00001B2A 2710 MOV.B R1,@R7
00001B2C 52F1 MOV.L @(4,R15),R2
00001B2E 6320 MOV.B @R2,R3
00001B30 6150 MOV.B @R5,R1
00001B32 213B OR R3,R1
00001B34 2510 MOV.B R1,@R5
00001B36 L1363:
00001B36 7401 ADD #1,R4
00001B38 7501 ADD #1,R5
00001B3A 7701 ADD #1,R7
00001B3C 34D3 CMP/GE R13,R4
00001B3E 8FEA BF/S L1362
00001B40 7601 ADD #1,R6
00001B42 L1358:
Monochrome 928 }
Monochrome 929 }
Monochrome 930 line = bmp[i*(real_width>>3)+end_x];
Monochrome 931 if(bool3) line &= -1<<real_width-width;
00001B42 E02C MOV #44,R0
00001B44 6280 MOV.B @R8,R2
00001B46 622C EXTU.B R2,R2
00001B48 2F21 MOV.W R2,@R15
00001B4A 03FC MOV.B @(R0,R15),R3
00001B4C 2338 TST R3,R3
00001B4E 8903 BT L1364
00001B50 53F3 MOV.L @(12,R15),R3
00001B52 61F1 MOV.W @R15,R1
00001B54 2139 AND R3,R1
00001B56 2F11 MOV.W R1,@R15
00001B58 L1364:
Monochrome 932 line <<= shift;
00001B58 62F1 MOV.W @R15,R2
00001B5A 64D3 MOV R13,R4
00001B5C 42ED SHLD R14,R2
00001B5E 3CD3 CMP/GE R13,R12
00001B60 2F21 MOV.W R2,@R15
00001B62 8F04 BF/S L1366
00001B64 34AC ADD R10,R4
00001B66 E01C MOV #28,R0
00001B68 01FC MOV.B @(R0,R15),R1
00001B6A 2118 TST R1,R1
00001B6C 8903 BT L1365
00001B6E L1366:
Monochrome 933 if(begin_x < end_x || bool1) screen[end_x] |= *p;
00001B6E 63B0 MOV.B @R11,R3
00001B70 6240 MOV.B @R4,R2
00001B72 223B OR R3,R2
00001B74 2420 MOV.B R2,@R4
00001B76 L1365:
Monochrome 934 if(bool2) screen[end_x+1] |= *(p+1);
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 84
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001B76 E034 MOV #52,R0
00001B78 01FC MOV.B @(R0,R15),R1
00001B7A 2118 TST R1,R1
00001B7C 8D05 BT/S L1367
Monochrome 935 screen += 16;
00001B7E 7A10 ADD #16,R10
00001B80 51F1 MOV.L @(4,R15),R1
00001B82 6310 MOV.B @R1,R3
00001B84 8441 MOV.B @(1,R4),R0
00001B86 203B OR R3,R0
00001B88 8041 MOV.B R0,@(1,R4)
00001B8A L1367:
00001B8A 53F6 MOV.L @(24,R15),R3
00001B8C 7301 ADD #1,R3
00001B8E 1F36 MOV.L R3,@(24,R15)
00001B90 52F9 MOV.L @(36,R15),R2
00001B92 382C ADD R2,R8
00001B94 51F4 MOV.L @(16,R15),R1
00001B96 391C ADD R1,R9
00001B98 53F8 MOV.L @(32,R15),R3
00001B9A 50F2 MOV.L @(8,R15),R0
00001B9C 303C ADD R3,R0
00001B9E 1F08 MOV.L R0,@(32,R15)
00001BA0 L1356:
00001BA0 53FC MOV.L @(48,R15),R3
00001BA2 51F6 MOV.L @(24,R15),R1
00001BA4 3133 CMP/GE R3,R1
00001BA6 8B91 BF L1357
00001BA8 L1346:
Monochrome 936 }
Monochrome 937 }
00001BA8 7F38 ADD #56,R15
00001BAA 4F16 LDS.L @R15+,MACL
00001BAC 4F26 LDS.L @R15+,PR
00001BAE 68F6 MOV.L @R15+,R8
00001BB0 69F6 MOV.L @R15+,R9
00001BB2 6AF6 MOV.L @R15+,R10
00001BB4 6BF6 MOV.L @R15+,R11
00001BB6 6CF6 MOV.L @R15+,R12
00001BB8 6DF6 MOV.L @R15+,R13
00001BBA 000B RTS
00001BBC 6EF6 MOV.L @R15+,R14
Monochrome 938 #endif
Monochrome 939
Monochrome 940 #ifdef ML_BMP_AND_CL
Monochrome 941 void ML_bmp_and_cl(const unsigned char *bmp, int x, int y, int width, int height)
00001BBE _ML_bmp_and_cl: ; function: ML_bmp_and_cl
; frame size=92
00001BBE E05C MOV #92,R0
00001BC0 2FE6 MOV.L R14,@-R15
00001BC2 2FD6 MOV.L R13,@-R15
00001BC4 2FC6 MOV.L R12,@-R15
00001BC6 2FB6 MOV.L R11,@-R15
00001BC8 2FA6 MOV.L R10,@-R15
00001BCA 2F96 MOV.L R9,@-R15
00001BCC 2F86 MOV.L R8,@-R15
00001BCE 6963 MOV R6,R9
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 85
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001BD0 4F22 STS.L PR,@-R15
Monochrome 942 {
Monochrome 943 unsigned short line;
Monochrome 944 char shift, *screen, *p;
Monochrome 945 int i, j, real_width, begin_x, end_x, begin_y, end_y;
Monochrome 946 char bool1=1, bool2=1, bool3;
00001BD2 E601 MOV #1,R6
00001BD4 4F12 STS.L MACL,@-R15
00001BD6 7FC8 ADD #-56,R15
00001BD8 1F45 MOV.L R4,@(20,R15)
00001BDA 1F72 MOV.L R7,@(8,R15)
00001BDC 04FE MOV.L @(R0,R15),R4
00001BDE E01C MOV #28,R0
00001BE0 0F64 MOV.B R6,@(R0,R15)
00001BE2 E034 MOV #52,R0
00001BE4 0F64 MOV.B R6,@(R0,R15)
Monochrome 947 if(!bmp || x<1-width || x>127 || y<1-height || y>63 || height<1 || width<1) return;
00001BE6 53F5 MOV.L @(20,R15),R3
00001BE8 2338 TST R3,R3
00001BEA 8B01 BF L1701
00001BEC A109 BRA L1370
00001BEE 0009 NOP
00001BF0 L1701:
00001BF0 53F2 MOV.L @(8,R15),R3
00001BF2 E201 MOV #1,R2
00001BF4 3238 SUB R3,R2
00001BF6 3523 CMP/GE R2,R5
00001BF8 8901 BT L1702
00001BFA A102 BRA L1370
00001BFC 0009 NOP
00001BFE L1702:
00001BFE E17F MOV #127,R1
00001C00 3517 CMP/GT R1,R5
00001C02 8B01 BF L1703
00001C04 A0FD BRA L1370
00001C06 0009 NOP
00001C08 L1703:
00001C08 E001 MOV #1,R0
00001C0A 3048 SUB R4,R0
00001C0C 3903 CMP/GE R0,R9
00001C0E 8901 BT L1704
00001C10 A0F7 BRA L1370
00001C12 0009 NOP
00001C14 L1704:
00001C14 E23F MOV #63,R2
00001C16 3927 CMP/GT R2,R9
00001C18 8B01 BF L1705
00001C1A A0F2 BRA L1370
00001C1C 0009 NOP
00001C1E L1705:
00001C1E E001 MOV #1,R0
00001C20 3403 CMP/GE R0,R4
00001C22 8901 BT L1706
00001C24 A0ED BRA L1370
00001C26 0009 NOP
00001C28 L1706:
00001C28 52F2 MOV.L @(8,R15),R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 86
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001C2A 3203 CMP/GE R0,R2
00001C2C 8901 BT L1707
00001C2E A0E8 BRA L1370
00001C30 0009 NOP
00001C32 L1707:
Monochrome 948 p = (char*)&line;
00001C32 6BF3 MOV R15,R11
Monochrome 949 real_width = (width-1>>3<<3)+8;
00001C34 52F2 MOV.L @(8,R15),R2
00001C36 72FF ADD #-1,R2
00001C38 4221 SHAR R2
00001C3A 4221 SHAR R2
00001C3C 4221 SHAR R2
00001C3E 4208 SHLL2 R2
00001C40 4200 SHLL R2
00001C42 7208 ADD #8,R2
00001C44 1F23 MOV.L R2,@(12,R15)
Monochrome 950 if(y < 0) begin_y = -y;
00001C46 4911 CMP/PZ R9
00001C48 8D02 BT/S L1371
00001C4A E600 MOV #0,R6
00001C4C A001 BRA L1372
00001C4E 689B NEG R9,R8
00001C50 L1371:
Monochrome 951 else begin_y = 0;
00001C50 6863 MOV R6,R8
00001C52 L1372:
Monochrome 952 if(y+height > 64) end_y = 64-y;
00001C52 E740 MOV #64,R7
00001C54 6393 MOV R9,R3
00001C56 334C ADD R4,R3
00001C58 3377 CMP/GT R7,R3
00001C5A 8B02 BF L1373
00001C5C 3798 SUB R9,R7
00001C5E A001 BRA L1374
00001C60 1F7C MOV.L R7,@(48,R15)
00001C62 L1373:
Monochrome 953 else end_y = height;
00001C62 1F4C MOV.L R4,@(48,R15)
00001C64 L1374:
Monochrome 954 shift = 8-(x&7);
00001C64 E307 MOV #7,R3
00001C66 2359 AND R5,R3
00001C68 E408 MOV #8,R4
00001C6A 3438 SUB R3,R4
00001C6C 4511 CMP/PZ R5
00001C6E 8D0A BT/S L1375
00001C70 6E4E EXTS.B R4,R14
Monochrome 955 if(x<0)
Monochrome 956 {
Monochrome 957 begin_x = -x>>3;
00001C72 6C5B NEG R5,R12
00001C74 4C21 SHAR R12
00001C76 4C21 SHAR R12
00001C78 4C21 SHAR R12
Monochrome 958 if(shift != 8) bool1 = 0;
00001C7A 60E3 MOV R14,R0
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 87
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001C7C 8808 CMP/EQ #8,R0
00001C7E 8903 BT L1377
00001C80 E01C MOV #28,R0
00001C82 A001 BRA L1377
00001C84 0F64 MOV.B R6,@(R0,R15)
00001C86 L1375:
Monochrome 959 } else begin_x = 0;
00001C86 6C63 MOV R6,R12
00001C88 L1377:
00001C88 9343 MOV.W L1708,R3 ; H'0080
00001C8A 6253 MOV R5,R2
00001C8C 4221 SHAR R2
00001C8E 4221 SHAR R2
00001C90 4221 SHAR R2
00001C92 1F21 MOV.L R2,@(4,R15)
00001C94 54F3 MOV.L @(12,R15),R4
00001C96 74FF ADD #-1,R4
00001C98 51F3 MOV.L @(12,R15),R1
00001C9A 4421 SHAR R4
00001C9C 4421 SHAR R4
00001C9E 4421 SHAR R4
00001CA0 315C ADD R5,R1
00001CA2 3137 CMP/GT R3,R1
00001CA4 8B04 BF L1378
Monochrome 960 if(x+real_width > 128) end_x = 15-(x>>3), bool2 = 0;
00001CA6 ED0F MOV #15,R13
00001CA8 3D28 SUB R2,R13
00001CAA E034 MOV #52,R0
00001CAC A001 BRA L1379
00001CAE 0F64 MOV.B R6,@(R0,R15)
00001CB0 L1378:
Monochrome 961 else end_x = real_width-1>>3;
00001CB0 6D43 MOV R4,R13
00001CB2 L1379:
Monochrome 962 bool3 = (end_x == real_width-1>>3);
00001CB2 3D40 CMP/EQ R4,R13
Monochrome 963 screen = ML_vram_adress()+(y+begin_y<<4)+(x>>3);
00001CB4 D317 MOV.L L1708+2,R3 ; _ML_vram_adress
00001CB6 61F3 MOV R15,R1
00001CB8 0029 MOVT R0
00001CBA 712C ADD #44,R1
00001CBC 430B JSR @R3
00001CBE 2100 MOV.B R0,@R1
00001CC0 53F1 MOV.L @(4,R15),R3
00001CC2 61B3 MOV R11,R1
Monochrome 964
Monochrome 965 for(i=begin_y ; i<end_y ; i++)
00001CC4 1F86 MOV.L R8,@(24,R15)
00001CC6 6A93 MOV R9,R10
00001CC8 54F3 MOV.L @(12,R15),R4
00001CCA 7101 ADD #1,R1
00001CCC 3A8C ADD R8,R10
00001CCE 4A08 SHLL2 R10
00001CD0 4A08 SHLL2 R10
00001CD2 3A0C ADD R0,R10
00001CD4 3A3C ADD R3,R10
00001CD6 4421 SHAR R4
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 88
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001CD8 4421 SHAR R4
00001CDA 4421 SHAR R4
00001CDC 1F44 MOV.L R4,@(16,R15)
00001CDE 53F6 MOV.L @(24,R15),R3
00001CE0 52F5 MOV.L @(20,R15),R2
00001CE2 0437 MUL.L R3,R4
00001CE4 041A STS MACL,R4
00001CE6 6843 MOV R4,R8
00001CE8 38DC ADD R13,R8
00001CEA 382C ADD R2,R8
00001CEC 6943 MOV R4,R9
00001CEE 34CC ADD R12,R4
00001CF0 342C ADD R2,R4
00001CF2 63C3 MOV R12,R3
00001CF4 1F48 MOV.L R4,@(32,R15)
00001CF6 7301 ADD #1,R3
00001CF8 1F11 MOV.L R1,@(4,R15)
00001CFA 1F3A MOV.L R3,@(40,R15)
00001CFC 52F2 MOV.L @(8,R15),R2
00001CFE 50F3 MOV.L @(12,R15),R0
00001D00 3028 SUB R2,R0
00001D02 E1FF MOV #-1,R1
00001D04 410C SHAD R0,R1
00001D06 1F13 MOV.L R1,@(12,R15)
00001D08 55F4 MOV.L @(16,R15),R5
00001D0A 1F59 MOV.L R5,@(36,R15)
00001D0C 1F54 MOV.L R5,@(16,R15)
00001D0E A074 BRA L1380
00001D10 1F52 MOV.L R5,@(8,R15)
00001D12 L1708:
00001D12 0080 .DATA.W H'0080
00001D14 <00000000> .DATA.L _ML_vram_adress
00001D18 L1381:
Monochrome 966 {
Monochrome 967 if(begin_x < end_x)
00001D18 3CD3 CMP/GE R13,R12
00001D1A 893C BT L1382
Monochrome 968
Monochrome 969 {
Monochrome 970 line = ~((unsigned char)~bmp[i*(real_width>>3)+begin_x]<<shift);
00001D1C 53F8 MOV.L @(32,R15),R3
00001D1E 64C3 MOV R12,R4
00001D20 6230 MOV.B @R3,R2
00001D22 E01C MOV #28,R0
00001D24 6227 NOT R2,R2
00001D26 622C EXTU.B R2,R2
00001D28 42ED SHLD R14,R2
00001D2A 6227 NOT R2,R2
00001D2C 2F21 MOV.W R2,@R15
00001D2E 03FC MOV.B @(R0,R15),R3
00001D30 2338 TST R3,R3
00001D32 8D04 BT/S L1383
00001D34 34AC ADD R10,R4
Monochrome 971 if(bool1) screen[begin_x] &= *p;
00001D36 63B0 MOV.B @R11,R3
00001D38 6140 MOV.B @R4,R1
00001D3A 2139 AND R3,R1
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 89
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001D3C 2410 MOV.B R1,@R4
00001D3E L1383:
Monochrome 972 if(shift!=8) screen[begin_x+1] &= *(p+1);
00001D3E 60E3 MOV R14,R0
00001D40 8808 CMP/EQ #8,R0
00001D42 8904 BT L1384
00001D44 52F1 MOV.L @(4,R15),R2
00001D46 6320 MOV.B @R2,R3
00001D48 8441 MOV.B @(1,R4),R0
00001D4A 2039 AND R3,R0
00001D4C 8041 MOV.B R0,@(1,R4)
00001D4E L1384:
Monochrome 973 for(j=begin_x+1 ; j<end_x ; j++)
00001D4E 54FA MOV.L @(40,R15),R4
00001D50 53F5 MOV.L @(20,R15),R3
00001D52 34D3 CMP/GE R13,R4
00001D54 6643 MOV R4,R6
00001D56 36AC ADD R10,R6
00001D58 6563 MOV R6,R5
00001D5A 7501 ADD #1,R5
00001D5C 6763 MOV R6,R7
00001D5E 6693 MOV R9,R6
00001D60 364C ADD R4,R6
00001D62 8D18 BT/S L1382
00001D64 363C ADD R3,R6
00001D66 L1386:
Monochrome 974 {
Monochrome 975 line = ~((unsigned char)~bmp[i*(real_width>>3)+j]<<shift);
Monochrome 976 screen[j] &= *p;
Monochrome 977 if(shift!=8) screen[j+1] &= *(p+1);
00001D66 60E3 MOV R14,R0
00001D68 6360 MOV.B @R6,R3
00001D6A 8808 CMP/EQ #8,R0
00001D6C 6337 NOT R3,R3
00001D6E 633C EXTU.B R3,R3
00001D70 43ED SHLD R14,R3
00001D72 6337 NOT R3,R3
00001D74 2F31 MOV.W R3,@R15
00001D76 62B0 MOV.B @R11,R2
00001D78 6170 MOV.B @R7,R1
00001D7A 2129 AND R2,R1
00001D7C 8D05 BT/S L1387
00001D7E 2710 MOV.B R1,@R7
00001D80 52F1 MOV.L @(4,R15),R2
00001D82 6320 MOV.B @R2,R3
00001D84 6150 MOV.B @R5,R1
00001D86 2139 AND R3,R1
00001D88 2510 MOV.B R1,@R5
00001D8A L1387:
00001D8A 7401 ADD #1,R4
00001D8C 7501 ADD #1,R5
00001D8E 7701 ADD #1,R7
00001D90 34D3 CMP/GE R13,R4
00001D92 8FE8 BF/S L1386
00001D94 7601 ADD #1,R6
00001D96 L1382:
Monochrome 978 }
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 90
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 979 }
Monochrome 980 line = (unsigned char)~bmp[i*(real_width>>3)+end_x];
Monochrome 981 if(bool3) line &= -1<<real_width-width;
00001D96 E02C MOV #44,R0
00001D98 6280 MOV.B @R8,R2
00001D9A 6227 NOT R2,R2
00001D9C 622C EXTU.B R2,R2
00001D9E 2F21 MOV.W R2,@R15
00001DA0 03FC MOV.B @(R0,R15),R3
00001DA2 2338 TST R3,R3
00001DA4 8903 BT L1388
00001DA6 53F3 MOV.L @(12,R15),R3
00001DA8 61F1 MOV.W @R15,R1
00001DAA 2139 AND R3,R1
00001DAC 2F11 MOV.W R1,@R15
00001DAE L1388:
00001DAE 64D3 MOV R13,R4
Monochrome 982 line = ~(line << shift);
00001DB0 62F1 MOV.W @R15,R2
00001DB2 3CD3 CMP/GE R13,R12
00001DB4 622D EXTU.W R2,R2
00001DB6 42ED SHLD R14,R2
00001DB8 6227 NOT R2,R2
00001DBA 2F21 MOV.W R2,@R15
00001DBC 8F04 BF/S L1390
00001DBE 34AC ADD R10,R4
00001DC0 E01C MOV #28,R0
00001DC2 01FC MOV.B @(R0,R15),R1
00001DC4 2118 TST R1,R1
00001DC6 8903 BT L1389
00001DC8 L1390:
Monochrome 983 if(begin_x < end_x || bool1) screen[end_x] &= *p;
00001DC8 63B0 MOV.B @R11,R3
00001DCA 6240 MOV.B @R4,R2
00001DCC 2239 AND R3,R2
00001DCE 2420 MOV.B R2,@R4
00001DD0 L1389:
Monochrome 984 if(bool2) screen[end_x+1] &= *(p+1);
00001DD0 E034 MOV #52,R0
00001DD2 01FC MOV.B @(R0,R15),R1
00001DD4 2118 TST R1,R1
00001DD6 8D05 BT/S L1391
Monochrome 985 screen += 16;
00001DD8 7A10 ADD #16,R10
00001DDA 51F1 MOV.L @(4,R15),R1
00001DDC 8441 MOV.B @(1,R4),R0
00001DDE 6310 MOV.B @R1,R3
00001DE0 2039 AND R3,R0
00001DE2 8041 MOV.B R0,@(1,R4)
00001DE4 L1391:
00001DE4 53F6 MOV.L @(24,R15),R3
00001DE6 7301 ADD #1,R3
00001DE8 1F36 MOV.L R3,@(24,R15)
00001DEA 52F9 MOV.L @(36,R15),R2
00001DEC 51F4 MOV.L @(16,R15),R1
00001DEE 382C ADD R2,R8
00001DF0 53F8 MOV.L @(32,R15),R3
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 91
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001DF2 391C ADD R1,R9
00001DF4 50F2 MOV.L @(8,R15),R0
00001DF6 303C ADD R3,R0
00001DF8 1F08 MOV.L R0,@(32,R15)
00001DFA L1380:
00001DFA 53FC MOV.L @(48,R15),R3
00001DFC 51F6 MOV.L @(24,R15),R1
00001DFE 3133 CMP/GE R3,R1
00001E00 8B8A BF L1381
00001E02 L1370:
Monochrome 986 }
Monochrome 987 }
00001E02 7F38 ADD #56,R15
00001E04 4F16 LDS.L @R15+,MACL
00001E06 4F26 LDS.L @R15+,PR
00001E08 68F6 MOV.L @R15+,R8
00001E0A 69F6 MOV.L @R15+,R9
00001E0C 6AF6 MOV.L @R15+,R10
00001E0E 6BF6 MOV.L @R15+,R11
00001E10 6CF6 MOV.L @R15+,R12
00001E12 6DF6 MOV.L @R15+,R13
00001E14 000B RTS
00001E16 6EF6 MOV.L @R15+,R14
Monochrome 988 #endif
Monochrome 989
Monochrome 990 #ifdef ML_BMP_XOR_CL
Monochrome 991 void ML_bmp_xor_cl(const unsigned char *bmp, int x, int y, int width, int height)
00001E18 _ML_bmp_xor_cl: ; function: ML_bmp_xor_cl
; frame size=92
00001E18 2FE6 MOV.L R14,@-R15
00001E1A E05C MOV #92,R0
00001E1C 2FD6 MOV.L R13,@-R15
00001E1E 2FC6 MOV.L R12,@-R15
00001E20 2FB6 MOV.L R11,@-R15
00001E22 2FA6 MOV.L R10,@-R15
00001E24 2F96 MOV.L R9,@-R15
00001E26 6963 MOV R6,R9
00001E28 2F86 MOV.L R8,@-R15
Monochrome 992 {
Monochrome 993 unsigned short line;
Monochrome 994 char shift, *screen, *p;
Monochrome 995 int i, j, real_width, begin_x, end_x, begin_y, end_y;
Monochrome 996 char bool1=1, bool2=1, bool3;
00001E2A E601 MOV #1,R6
00001E2C 4F22 STS.L PR,@-R15
00001E2E 4F12 STS.L MACL,@-R15
00001E30 7FC8 ADD #-56,R15
00001E32 1F45 MOV.L R4,@(20,R15)
00001E34 1F72 MOV.L R7,@(8,R15)
00001E36 04FE MOV.L @(R0,R15),R4
00001E38 E01C MOV #28,R0
00001E3A 0F64 MOV.B R6,@(R0,R15)
00001E3C E034 MOV #52,R0
00001E3E 0F64 MOV.B R6,@(R0,R15)
Monochrome 997 if(!bmp || x<1-width || x>127 || y<1-height || y>63 || height<1 || width<1) return;
00001E40 53F5 MOV.L @(20,R15),R3
00001E42 2338 TST R3,R3
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 92
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001E44 8B01 BF L1709
00001E46 A103 BRA L1394
00001E48 0009 NOP
00001E4A L1709:
00001E4A E201 MOV #1,R2
00001E4C 53F2 MOV.L @(8,R15),R3
00001E4E 3238 SUB R3,R2
00001E50 3523 CMP/GE R2,R5
00001E52 8901 BT L1710
00001E54 A0FC BRA L1394
00001E56 0009 NOP
00001E58 L1710:
00001E58 E17F MOV #127,R1
00001E5A 3517 CMP/GT R1,R5
00001E5C 8B01 BF L1711
00001E5E A0F7 BRA L1394
00001E60 0009 NOP
00001E62 L1711:
00001E62 E001 MOV #1,R0
00001E64 3048 SUB R4,R0
00001E66 3903 CMP/GE R0,R9
00001E68 8901 BT L1712
00001E6A A0F1 BRA L1394
00001E6C 0009 NOP
00001E6E L1712:
00001E6E E23F MOV #63,R2
00001E70 3927 CMP/GT R2,R9
00001E72 8B01 BF L1713
00001E74 A0EC BRA L1394
00001E76 0009 NOP
00001E78 L1713:
00001E78 E001 MOV #1,R0
00001E7A 3403 CMP/GE R0,R4
00001E7C 8901 BT L1714
00001E7E A0E7 BRA L1394
00001E80 0009 NOP
00001E82 L1714:
00001E82 52F2 MOV.L @(8,R15),R2
00001E84 3203 CMP/GE R0,R2
00001E86 8901 BT L1715
00001E88 A0E2 BRA L1394
00001E8A 0009 NOP
00001E8C L1715:
Monochrome 998 p = (char*)&line;
Monochrome 999 real_width = (width-1>>3<<3)+8;
00001E8C 52F2 MOV.L @(8,R15),R2
00001E8E 6BF3 MOV R15,R11
00001E90 72FF ADD #-1,R2
00001E92 4221 SHAR R2
00001E94 4221 SHAR R2
00001E96 4221 SHAR R2
00001E98 4208 SHLL2 R2
00001E9A 4200 SHLL R2
00001E9C 7208 ADD #8,R2
Monochrome 1000 if(y < 0) begin_y = -y;
00001E9E 4911 CMP/PZ R9
00001EA0 1F23 MOV.L R2,@(12,R15)
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 93
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001EA2 8D02 BT/S L1395
00001EA4 E600 MOV #0,R6
00001EA6 A001 BRA L1396
00001EA8 689B NEG R9,R8
00001EAA L1395:
Monochrome 1001 else begin_y = 0;
00001EAA 6863 MOV R6,R8
00001EAC L1396:
Monochrome 1002 if(y+height > 64) end_y = 64-y;
00001EAC E740 MOV #64,R7
00001EAE 6393 MOV R9,R3
00001EB0 334C ADD R4,R3
00001EB2 3377 CMP/GT R7,R3
00001EB4 8B02 BF L1397
00001EB6 3798 SUB R9,R7
00001EB8 A001 BRA L1398
00001EBA 1F7C MOV.L R7,@(48,R15)
00001EBC L1397:
Monochrome 1003 else end_y = height;
00001EBC 1F4C MOV.L R4,@(48,R15)
00001EBE L1398:
Monochrome 1004 shift = 8-(x&7);
00001EBE E307 MOV #7,R3
00001EC0 2359 AND R5,R3
00001EC2 E408 MOV #8,R4
00001EC4 3438 SUB R3,R4
00001EC6 4511 CMP/PZ R5
00001EC8 8D0A BT/S L1399
00001ECA 6E4E EXTS.B R4,R14
Monochrome 1005 if(x<0)
Monochrome 1006 {
Monochrome 1007 begin_x = -x>>3;
00001ECC 6C5B NEG R5,R12
00001ECE 4C21 SHAR R12
00001ED0 4C21 SHAR R12
00001ED2 4C21 SHAR R12
Monochrome 1008 if(shift != 8) bool1 = 0;
00001ED4 60E3 MOV R14,R0
00001ED6 8808 CMP/EQ #8,R0
00001ED8 8903 BT L1401
00001EDA E01C MOV #28,R0
00001EDC A001 BRA L1401
00001EDE 0F64 MOV.B R6,@(R0,R15)
00001EE0 L1399:
Monochrome 1009 } else begin_x = 0;
00001EE0 6C63 MOV R6,R12
00001EE2 L1401:
00001EE2 6253 MOV R5,R2
00001EE4 9342 MOV.W L1716,R3 ; H'0080
00001EE6 4221 SHAR R2
00001EE8 4221 SHAR R2
00001EEA 4221 SHAR R2
00001EEC 1F21 MOV.L R2,@(4,R15)
00001EEE 54F3 MOV.L @(12,R15),R4
00001EF0 51F3 MOV.L @(12,R15),R1
00001EF2 74FF ADD #-1,R4
00001EF4 4421 SHAR R4
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 94
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001EF6 4421 SHAR R4
00001EF8 4421 SHAR R4
00001EFA 315C ADD R5,R1
00001EFC 3137 CMP/GT R3,R1
00001EFE 8B04 BF L1402
Monochrome 1010 if(x+real_width > 128) end_x = 15-(x>>3), bool2 = 0;
00001F00 ED0F MOV #15,R13
00001F02 3D28 SUB R2,R13
00001F04 E034 MOV #52,R0
00001F06 A001 BRA L1403
00001F08 0F64 MOV.B R6,@(R0,R15)
00001F0A L1402:
Monochrome 1011 else end_x = real_width-1>>3;
00001F0A 6D43 MOV R4,R13
00001F0C L1403:
Monochrome 1012 bool3 = (end_x == real_width-1>>3);
Monochrome 1013 screen = ML_vram_adress()+(y+begin_y<<4)+(x>>3);
00001F0C D318 MOV.L L1716+4,R3 ; _ML_vram_adress
00001F0E 3D40 CMP/EQ R4,R13
00001F10 0029 MOVT R0
00001F12 61F3 MOV R15,R1
00001F14 712C ADD #44,R1
00001F16 430B JSR @R3
00001F18 2100 MOV.B R0,@R1
00001F1A 6A93 MOV R9,R10
00001F1C 53F1 MOV.L @(4,R15),R3
00001F1E 61B3 MOV R11,R1
Monochrome 1014
Monochrome 1015 for(i=begin_y ; i<end_y ; i++)
00001F20 1F86 MOV.L R8,@(24,R15)
00001F22 3A8C ADD R8,R10
00001F24 54F3 MOV.L @(12,R15),R4
00001F26 7101 ADD #1,R1
00001F28 4A08 SHLL2 R10
00001F2A 4A08 SHLL2 R10
00001F2C 3A0C ADD R0,R10
00001F2E 3A3C ADD R3,R10
00001F30 4421 SHAR R4
00001F32 4421 SHAR R4
00001F34 4421 SHAR R4
00001F36 1F44 MOV.L R4,@(16,R15)
00001F38 53F6 MOV.L @(24,R15),R3
00001F3A 0437 MUL.L R3,R4
00001F3C 52F5 MOV.L @(20,R15),R2
00001F3E 63C3 MOV R12,R3
00001F40 041A STS MACL,R4
00001F42 6843 MOV R4,R8
00001F44 38DC ADD R13,R8
00001F46 382C ADD R2,R8
00001F48 6943 MOV R4,R9
00001F4A 34CC ADD R12,R4
00001F4C 342C ADD R2,R4
00001F4E 7301 ADD #1,R3
00001F50 1F48 MOV.L R4,@(32,R15)
00001F52 1F11 MOV.L R1,@(4,R15)
00001F54 1F3A MOV.L R3,@(40,R15)
00001F56 52F2 MOV.L @(8,R15),R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 95
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001F58 50F3 MOV.L @(12,R15),R0
00001F5A 3028 SUB R2,R0
00001F5C E1FF MOV #-1,R1
00001F5E 410C SHAD R0,R1
00001F60 1F13 MOV.L R1,@(12,R15)
00001F62 55F4 MOV.L @(16,R15),R5
00001F64 1F59 MOV.L R5,@(36,R15)
00001F66 1F54 MOV.L R5,@(16,R15)
00001F68 A06E BRA L1404
00001F6A 1F52 MOV.L R5,@(8,R15)
00001F6C L1716:
00001F6C 0080 .DATA.W H'0080
00001F6E 0000 .DATA.W 0
00001F70 <00000000> .DATA.L _ML_vram_adress
00001F74 L1405:
Monochrome 1016 {
Monochrome 1017 if(begin_x < end_x)
00001F74 3CD3 CMP/GE R13,R12
00001F76 8938 BT L1406
Monochrome 1018 {
Monochrome 1019 line = bmp[i*(real_width>>3)+begin_x] << shift;
00001F78 53F8 MOV.L @(32,R15),R3
00001F7A 64C3 MOV R12,R4
00001F7C 6230 MOV.B @R3,R2
00001F7E E01C MOV #28,R0
00001F80 622C EXTU.B R2,R2
00001F82 42ED SHLD R14,R2
00001F84 2F21 MOV.W R2,@R15
00001F86 03FC MOV.B @(R0,R15),R3
00001F88 2338 TST R3,R3
00001F8A 8D04 BT/S L1407
00001F8C 34AC ADD R10,R4
Monochrome 1020 if(bool1) screen[begin_x] ^= *p;
00001F8E 63B0 MOV.B @R11,R3
00001F90 6140 MOV.B @R4,R1
00001F92 213A XOR R3,R1
00001F94 2410 MOV.B R1,@R4
00001F96 L1407:
Monochrome 1021 if(shift!=8) screen[begin_x+1] ^= *(p+1);
00001F96 60E3 MOV R14,R0
00001F98 8808 CMP/EQ #8,R0
00001F9A 8904 BT L1408
00001F9C 52F1 MOV.L @(4,R15),R2
00001F9E 6320 MOV.B @R2,R3
00001FA0 8441 MOV.B @(1,R4),R0
00001FA2 203A XOR R3,R0
00001FA4 8041 MOV.B R0,@(1,R4)
00001FA6 L1408:
Monochrome 1022 for(j=begin_x+1 ; j<end_x ; j++)
00001FA6 54FA MOV.L @(40,R15),R4
00001FA8 53F5 MOV.L @(20,R15),R3
00001FAA 34D3 CMP/GE R13,R4
00001FAC 6643 MOV R4,R6
00001FAE 36AC ADD R10,R6
00001FB0 6563 MOV R6,R5
00001FB2 7501 ADD #1,R5
00001FB4 6763 MOV R6,R7
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 96
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00001FB6 6693 MOV R9,R6
00001FB8 364C ADD R4,R6
00001FBA 8D16 BT/S L1406
00001FBC 363C ADD R3,R6
00001FBE L1410:
Monochrome 1023 {
Monochrome 1024 line = bmp[i*(real_width>>3)+j] << shift;
Monochrome 1025 screen[j] ^= *p;
Monochrome 1026 if(shift!=8) screen[j+1] ^= *(p+1);
00001FBE 60E3 MOV R14,R0
00001FC0 6360 MOV.B @R6,R3
00001FC2 8808 CMP/EQ #8,R0
00001FC4 633C EXTU.B R3,R3
00001FC6 43ED SHLD R14,R3
00001FC8 2F31 MOV.W R3,@R15
00001FCA 62B0 MOV.B @R11,R2
00001FCC 6170 MOV.B @R7,R1
00001FCE 212A XOR R2,R1
00001FD0 8D05 BT/S L1411
00001FD2 2710 MOV.B R1,@R7
00001FD4 52F1 MOV.L @(4,R15),R2
00001FD6 6320 MOV.B @R2,R3
00001FD8 6150 MOV.B @R5,R1
00001FDA 213A XOR R3,R1
00001FDC 2510 MOV.B R1,@R5
00001FDE L1411:
00001FDE 7401 ADD #1,R4
00001FE0 7501 ADD #1,R5
00001FE2 7701 ADD #1,R7
00001FE4 34D3 CMP/GE R13,R4
00001FE6 8FEA BF/S L1410
00001FE8 7601 ADD #1,R6
00001FEA L1406:
Monochrome 1027 }
Monochrome 1028 }
Monochrome 1029 line = bmp[i*(real_width>>3)+end_x];
Monochrome 1030 if(bool3) line &= -1<<real_width-width;
00001FEA E02C MOV #44,R0
00001FEC 6280 MOV.B @R8,R2
00001FEE 622C EXTU.B R2,R2
00001FF0 2F21 MOV.W R2,@R15
00001FF2 03FC MOV.B @(R0,R15),R3
00001FF4 2338 TST R3,R3
00001FF6 8903 BT L1412
00001FF8 53F3 MOV.L @(12,R15),R3
00001FFA 61F1 MOV.W @R15,R1
00001FFC 2139 AND R3,R1
00001FFE 2F11 MOV.W R1,@R15
00002000 L1412:
Monochrome 1031 line <<= shift;
00002000 62F1 MOV.W @R15,R2
00002002 64D3 MOV R13,R4
00002004 42ED SHLD R14,R2
00002006 3CD3 CMP/GE R13,R12
00002008 2F21 MOV.W R2,@R15
0000200A 8F04 BF/S L1414
0000200C 34AC ADD R10,R4
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 97
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000200E E01C MOV #28,R0
00002010 01FC MOV.B @(R0,R15),R1
00002012 2118 TST R1,R1
00002014 8903 BT L1413
00002016 L1414:
Monochrome 1032 if(begin_x < end_x || bool1) screen[end_x] ^= *p;
00002016 63B0 MOV.B @R11,R3
00002018 6240 MOV.B @R4,R2
0000201A 223A XOR R3,R2
0000201C 2420 MOV.B R2,@R4
0000201E L1413:
Monochrome 1033 if(bool2) screen[end_x+1] ^= *(p+1);
0000201E E034 MOV #52,R0
00002020 01FC MOV.B @(R0,R15),R1
00002022 2118 TST R1,R1
00002024 8D05 BT/S L1415
Monochrome 1034 screen += 16;
00002026 7A10 ADD #16,R10
00002028 51F1 MOV.L @(4,R15),R1
0000202A 6310 MOV.B @R1,R3
0000202C 8441 MOV.B @(1,R4),R0
0000202E 203A XOR R3,R0
00002030 8041 MOV.B R0,@(1,R4)
00002032 L1415:
00002032 53F6 MOV.L @(24,R15),R3
00002034 7301 ADD #1,R3
00002036 1F36 MOV.L R3,@(24,R15)
00002038 52F9 MOV.L @(36,R15),R2
0000203A 382C ADD R2,R8
0000203C 51F4 MOV.L @(16,R15),R1
0000203E 391C ADD R1,R9
00002040 53F8 MOV.L @(32,R15),R3
00002042 50F2 MOV.L @(8,R15),R0
00002044 303C ADD R3,R0
00002046 1F08 MOV.L R0,@(32,R15)
00002048 L1404:
00002048 53FC MOV.L @(48,R15),R3
0000204A 51F6 MOV.L @(24,R15),R1
0000204C 3133 CMP/GE R3,R1
0000204E 8B91 BF L1405
00002050 L1394:
Monochrome 1035 }
Monochrome 1036 }
00002050 7F38 ADD #56,R15
00002052 4F16 LDS.L @R15+,MACL
00002054 4F26 LDS.L @R15+,PR
00002056 68F6 MOV.L @R15+,R8
00002058 69F6 MOV.L @R15+,R9
0000205A 6AF6 MOV.L @R15+,R10
0000205C 6BF6 MOV.L @R15+,R11
0000205E 6CF6 MOV.L @R15+,R12
00002060 6DF6 MOV.L @R15+,R13
00002062 000B RTS
00002064 6EF6 MOV.L @R15+,R14
Monochrome 1037
Monochrome 1038 #endif
Monochrome 1039
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 98
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 1040 #ifdef ML_BMP_8_OR
Monochrome 1041 void ML_bmp_8_or(const unsigned char *bmp, int x, int y)
00002066 _ML_bmp_8_or: ; function: ML_bmp_8_or
; frame size=36
00002066 2FE6 MOV.L R14,@-R15
00002068 2FD6 MOV.L R13,@-R15
0000206A 6E63 MOV R6,R14
0000206C 2FC6 MOV.L R12,@-R15
0000206E 6D53 MOV R5,R13
00002070 2FB6 MOV.L R11,@-R15
Monochrome 1042 {
Monochrome 1043 unsigned short line;
Monochrome 1044 char i, shift, begin=0, end=8, *screen, *p=(char*)&line;
00002072 EB00 MOV #0,R11
00002074 2FA6 MOV.L R10,@-R15
00002076 2F96 MOV.L R9,@-R15
00002078 4F22 STS.L PR,@-R15
0000207A 7FF8 ADD #-8,R15
0000207C 1F41 MOV.L R4,@(4,R15)
0000207E E408 MOV #8,R4
Monochrome 1045 if(!bmp || x<0 || x>120 || y<-7 || y>63) return;
00002080 53F1 MOV.L @(4,R15),R3
00002082 6943 MOV R4,R9
00002084 2338 TST R3,R3
00002086 8D43 BT/S L1418
00002088 6CF3 MOV R15,R12
0000208A 4D11 CMP/PZ R13
0000208C 8B40 BF L1418
0000208E E278 MOV #120,R2
00002090 3D27 CMP/GT R2,R13
00002092 893D BT L1418
00002094 E1F9 MOV #-7,R1
00002096 3E13 CMP/GE R1,R14
00002098 8B3A BF L1418
0000209A E03F MOV #63,R0
0000209C 3E07 CMP/GT R0,R14
0000209E 8937 BT L1418
Monochrome 1046 if(y < 0) begin = -y;
000020A0 4E11 CMP/PZ R14
000020A2 8D01 BT/S L1419
Monochrome 1047 if(y > 56) end = 64-y;
000020A4 E338 MOV #56,R3
000020A6 6BEB NEG R14,R11
000020A8 L1419:
000020A8 3E37 CMP/GT R3,R14
000020AA 8F02 BF/S L1420
Monochrome 1048 shift = 8-(x&7);
000020AC E307 MOV #7,R3
000020AE E940 MOV #64,R9
000020B0 39E8 SUB R14,R9
000020B2 L1420:
000020B2 23D9 AND R13,R3
Monochrome 1049 screen = ML_vram_adress()+(y+begin<<4)+(x>>3);
000020B4 D24B MOV.L L1717+2,R2 ; _ML_vram_adress
000020B6 6A43 MOV R4,R10
000020B8 420B JSR @R2
000020BA 3A38 SUB R3,R10
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 99
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000020BC 63BE EXTS.B R11,R3
000020BE 33EC ADD R14,R3
000020C0 4308 SHLL2 R3
000020C2 4308 SHLL2 R3
000020C4 303C ADD R3,R0
000020C6 4D21 SHAR R13
000020C8 53F1 MOV.L @(4,R15),R3
000020CA 6EC3 MOV R12,R14
000020CC 4D21 SHAR R13
000020CE 4D21 SHAR R13
000020D0 6603 MOV R0,R6
000020D2 36DC ADD R13,R6
Monochrome 1050 for(i=begin ; i<end ; i++)
000020D4 65B3 MOV R11,R5
000020D6 645E EXTS.B R5,R4
000020D8 343C ADD R3,R4
000020DA 679E EXTS.B R9,R7
000020DC 625E EXTS.B R5,R2
000020DE 3273 CMP/GE R7,R2
000020E0 8D16 BT/S L1418
000020E2 7E01 ADD #1,R14
000020E4 L1422:
Monochrome 1051 {
Monochrome 1052 line = bmp[i]<<shift;
000020E4 6340 MOV.B @R4,R3
000020E6 6DAE EXTS.B R10,R13
000020E8 633C EXTU.B R3,R3
000020EA 43DD SHLD R13,R3
000020EC 2F31 MOV.W R3,@R15
Monochrome 1053 screen[0] |= *p;
Monochrome 1054 if(shift!=8) screen[1] |= *(p+1);
000020EE 60D3 MOV R13,R0
000020F0 62C0 MOV.B @R12,R2
000020F2 8808 CMP/EQ #8,R0
000020F4 6160 MOV.B @R6,R1
000020F6 212B OR R2,R1
000020F8 8D04 BT/S L1423
000020FA 2610 MOV.B R1,@R6
000020FC 63E0 MOV.B @R14,R3
000020FE 8461 MOV.B @(1,R6),R0
00002100 203B OR R3,R0
00002102 8061 MOV.B R0,@(1,R6)
00002104 L1423:
Monochrome 1055 screen += 16;
00002104 7610 ADD #16,R6
00002106 7501 ADD #1,R5
00002108 635E EXTS.B R5,R3
0000210A 3373 CMP/GE R7,R3
0000210C 8FEA BF/S L1422
0000210E 7401 ADD #1,R4
00002110 L1418:
Monochrome 1056 }
Monochrome 1057 }
00002110 7F08 ADD #8,R15
00002112 4F26 LDS.L @R15+,PR
00002114 69F6 MOV.L @R15+,R9
00002116 6AF6 MOV.L @R15+,R10
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 100
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002118 6BF6 MOV.L @R15+,R11
0000211A 6CF6 MOV.L @R15+,R12
0000211C 6DF6 MOV.L @R15+,R13
0000211E 000B RTS
00002120 6EF6 MOV.L @R15+,R14
Monochrome 1058 #endif
Monochrome 1059
Monochrome 1060 #ifdef ML_BMP_8_AND
Monochrome 1061 void ML_bmp_8_and(const unsigned char *bmp, int x, int y)
00002122 _ML_bmp_8_and: ; function: ML_bmp_8_and
; frame size=36
00002122 2FE6 MOV.L R14,@-R15
00002124 2FD6 MOV.L R13,@-R15
00002126 6E63 MOV R6,R14
00002128 2FC6 MOV.L R12,@-R15
0000212A 6D53 MOV R5,R13
0000212C 2FB6 MOV.L R11,@-R15
Monochrome 1062 {
Monochrome 1063 unsigned short line;
Monochrome 1064 char i, shift, begin=0, end=8, *screen, *p=(char*)&line;
0000212E EB00 MOV #0,R11
00002130 2FA6 MOV.L R10,@-R15
00002132 2F96 MOV.L R9,@-R15
00002134 4F22 STS.L PR,@-R15
00002136 7FF8 ADD #-8,R15
00002138 1F41 MOV.L R4,@(4,R15)
0000213A E408 MOV #8,R4
Monochrome 1065 if(!bmp || x<0 || x>120 || y<-7 || y>63) return;
0000213C 53F1 MOV.L @(4,R15),R3
0000213E 6943 MOV R4,R9
00002140 2338 TST R3,R3
00002142 8D45 BT/S L1426
00002144 6CF3 MOV R15,R12
00002146 4D11 CMP/PZ R13
00002148 8B42 BF L1426
0000214A E278 MOV #120,R2
0000214C 3D27 CMP/GT R2,R13
0000214E 893F BT L1426
00002150 E1F9 MOV #-7,R1
00002152 3E13 CMP/GE R1,R14
00002154 8B3C BF L1426
00002156 E03F MOV #63,R0
00002158 3E07 CMP/GT R0,R14
0000215A 8939 BT L1426
Monochrome 1066 if(y < 0) begin = -y;
0000215C 4E11 CMP/PZ R14
0000215E 8D01 BT/S L1427
Monochrome 1067 if(y > 56) end = 64-y;
00002160 E338 MOV #56,R3
00002162 6BEB NEG R14,R11
00002164 L1427:
00002164 3E37 CMP/GT R3,R14
00002166 8F02 BF/S L1428
Monochrome 1068 shift = 8-(x&7);
00002168 E307 MOV #7,R3
0000216A E940 MOV #64,R9
0000216C 39E8 SUB R14,R9
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 101
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000216E L1428:
0000216E 23D9 AND R13,R3
Monochrome 1069 screen = ML_vram_adress()+(y+begin<<4)+(x>>3);
00002170 D21C MOV.L L1717+2,R2 ; _ML_vram_adress
00002172 6A43 MOV R4,R10
00002174 420B JSR @R2
00002176 3A38 SUB R3,R10
00002178 63BE EXTS.B R11,R3
0000217A 33EC ADD R14,R3
0000217C 4308 SHLL2 R3
0000217E 4308 SHLL2 R3
00002180 303C ADD R3,R0
00002182 4D21 SHAR R13
00002184 53F1 MOV.L @(4,R15),R3
00002186 6EC3 MOV R12,R14
00002188 4D21 SHAR R13
0000218A 4D21 SHAR R13
0000218C 6603 MOV R0,R6
0000218E 36DC ADD R13,R6
Monochrome 1070 for(i=begin ; i<end ; i++)
00002190 65B3 MOV R11,R5
00002192 645E EXTS.B R5,R4
00002194 343C ADD R3,R4
00002196 679E EXTS.B R9,R7
00002198 625E EXTS.B R5,R2
0000219A 3273 CMP/GE R7,R2
0000219C 8D18 BT/S L1426
0000219E 7E01 ADD #1,R14
000021A0 L1430:
Monochrome 1071 {
Monochrome 1072 line = ~((unsigned char)~bmp[i]<<shift);
000021A0 6340 MOV.B @R4,R3
000021A2 6DAE EXTS.B R10,R13
000021A4 6337 NOT R3,R3
000021A6 633C EXTU.B R3,R3
000021A8 43DD SHLD R13,R3
000021AA 6337 NOT R3,R3
000021AC 2F31 MOV.W R3,@R15
Monochrome 1073 screen[0] &= *p;
Monochrome 1074 if(shift!=8) screen[1] &= *(p+1);
000021AE 60D3 MOV R13,R0
000021B0 62C0 MOV.B @R12,R2
000021B2 8808 CMP/EQ #8,R0
000021B4 6160 MOV.B @R6,R1
000021B6 2129 AND R2,R1
000021B8 8D04 BT/S L1431
000021BA 2610 MOV.B R1,@R6
000021BC 63E0 MOV.B @R14,R3
000021BE 8461 MOV.B @(1,R6),R0
000021C0 2039 AND R3,R0
000021C2 8061 MOV.B R0,@(1,R6)
000021C4 L1431:
Monochrome 1075 screen += 16;
000021C4 7610 ADD #16,R6
000021C6 7501 ADD #1,R5
000021C8 635E EXTS.B R5,R3
000021CA 3373 CMP/GE R7,R3
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 102
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000021CC 8FE8 BF/S L1430
000021CE 7401 ADD #1,R4
000021D0 L1426:
Monochrome 1076 }
Monochrome 1077 }
000021D0 7F08 ADD #8,R15
000021D2 4F26 LDS.L @R15+,PR
000021D4 69F6 MOV.L @R15+,R9
000021D6 6AF6 MOV.L @R15+,R10
000021D8 6BF6 MOV.L @R15+,R11
000021DA 6CF6 MOV.L @R15+,R12
000021DC 6DF6 MOV.L @R15+,R13
000021DE 000B RTS
000021E0 6EF6 MOV.L @R15+,R14
000021E2 L1717:
000021E2 0000 .DATA.W 0
000021E4 <00000000> .DATA.L _ML_vram_adress
Monochrome 1078 #endif
Monochrome 1079
Monochrome 1080 #ifdef ML_BMP_8_XOR
Monochrome 1081 void ML_bmp_8_xor(const unsigned char *bmp, int x, int y)
000021E8 _ML_bmp_8_xor: ; function: ML_bmp_8_xor
; frame size=40
000021E8 2FE6 MOV.L R14,@-R15
Monochrome 1082 {
Monochrome 1083 unsigned short line;
Monochrome 1084 char i, shift, begin=0, end=8, *screen, *p=(char*)&line;
Monochrome 1085 if(!bmp || x<0 || x>120 || y<-7 || y>63) return;
000021EA 6343 MOV R4,R3
000021EC 2FD6 MOV.L R13,@-R15
000021EE 6E63 MOV R6,R14
000021F0 2FC6 MOV.L R12,@-R15
000021F2 ED08 MOV #8,R13
000021F4 2FB6 MOV.L R11,@-R15
000021F6 2338 TST R3,R3
000021F8 2FA6 MOV.L R10,@-R15
000021FA 6B53 MOV R5,R11
000021FC 2F96 MOV.L R9,@-R15
000021FE EA00 MOV #0,R10
00002200 2F86 MOV.L R8,@-R15
00002202 69D3 MOV R13,R9
00002204 4F22 STS.L PR,@-R15
00002206 7FF8 ADD #-8,R15
00002208 1F41 MOV.L R4,@(4,R15)
0000220A 8D42 BT/S L1434
0000220C 6CF3 MOV R15,R12
0000220E 4B11 CMP/PZ R11
00002210 8B3F BF L1434
00002212 E278 MOV #120,R2
00002214 3B27 CMP/GT R2,R11
00002216 893C BT L1434
00002218 E1F9 MOV #-7,R1
0000221A 3E13 CMP/GE R1,R14
0000221C 8B39 BF L1434
0000221E E03F MOV #63,R0
00002220 3E07 CMP/GT R0,R14
00002222 8936 BT L1434
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 103
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 1086 if(y < 0) begin = -y;
00002224 4E11 CMP/PZ R14
00002226 8D01 BT/S L1435
Monochrome 1087 if(y > 56) end = 64-y;
00002228 E338 MOV #56,R3
0000222A 6AEB NEG R14,R10
0000222C L1435:
0000222C 3E37 CMP/GT R3,R14
0000222E 8F02 BF/S L1436
Monochrome 1088 shift = 8-(x&7);
00002230 E307 MOV #7,R3
00002232 E940 MOV #64,R9
00002234 39E8 SUB R14,R9
00002236 L1436:
00002236 23B9 AND R11,R3
Monochrome 1089 screen = ML_vram_adress()+(y+begin<<4)+(x>>3);
00002238 D255 MOV.L L1718,R2 ; _ML_vram_adress
0000223A 68D3 MOV R13,R8
0000223C 420B JSR @R2
0000223E 3838 SUB R3,R8
00002240 63AE EXTS.B R10,R3
00002242 33EC ADD R14,R3
00002244 4308 SHLL2 R3
00002246 4308 SHLL2 R3
00002248 303C ADD R3,R0
0000224A 4B21 SHAR R11
0000224C 53F1 MOV.L @(4,R15),R3
0000224E 679E EXTS.B R9,R7
00002250 4B21 SHAR R11
00002252 4B21 SHAR R11
00002254 6503 MOV R0,R5
00002256 35BC ADD R11,R5
Monochrome 1090 for(i=begin ; i<end ; i++)
00002258 64A3 MOV R10,R4
0000225A 664E EXTS.B R4,R6
0000225C 363C ADD R3,R6
0000225E 6BC3 MOV R12,R11
00002260 624E EXTS.B R4,R2
00002262 3273 CMP/GE R7,R2
00002264 8D15 BT/S L1434
00002266 7B01 ADD #1,R11
00002268 L1438:
Monochrome 1091 {
Monochrome 1092 line = bmp[i]<<shift;
00002268 6360 MOV.B @R6,R3
0000226A 6E8E EXTS.B R8,R14
0000226C 633C EXTU.B R3,R3
0000226E 43ED SHLD R14,R3
00002270 2F31 MOV.W R3,@R15
Monochrome 1093 screen[0] ^= *p;
Monochrome 1094 if(shift<8) screen[1] ^= *(p+1);
00002272 3ED3 CMP/GE R13,R14
00002274 62C0 MOV.B @R12,R2
00002276 6150 MOV.B @R5,R1
00002278 212A XOR R2,R1
0000227A 8D04 BT/S L1439
0000227C 2510 MOV.B R1,@R5
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 104
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000227E 63B0 MOV.B @R11,R3
00002280 8451 MOV.B @(1,R5),R0
00002282 203A XOR R3,R0
00002284 8051 MOV.B R0,@(1,R5)
00002286 L1439:
Monochrome 1095 screen += 16;
00002286 7510 ADD #16,R5
00002288 7401 ADD #1,R4
0000228A 634E EXTS.B R4,R3
0000228C 3373 CMP/GE R7,R3
0000228E 8FEB BF/S L1438
00002290 7601 ADD #1,R6
00002292 L1434:
Monochrome 1096 }
Monochrome 1097 }
00002292 7F08 ADD #8,R15
00002294 4F26 LDS.L @R15+,PR
00002296 68F6 MOV.L @R15+,R8
00002298 69F6 MOV.L @R15+,R9
0000229A 6AF6 MOV.L @R15+,R10
0000229C 6BF6 MOV.L @R15+,R11
0000229E 6CF6 MOV.L @R15+,R12
000022A0 6DF6 MOV.L @R15+,R13
000022A2 000B RTS
000022A4 6EF6 MOV.L @R15+,R14
Monochrome 1098 #endif
Monochrome 1099
Monochrome 1100 #ifdef ML_BMP_8_OR_CL
Monochrome 1101 void ML_bmp_8_or_cl(const unsigned char *bmp, int x, int y)
000022A6 _ML_bmp_8_or_cl: ; function: ML_bmp_8_or_cl
; frame size=44
000022A6 2FE6 MOV.L R14,@-R15
000022A8 2FD6 MOV.L R13,@-R15
000022AA 6E63 MOV R6,R14
000022AC 2FC6 MOV.L R12,@-R15
000022AE 6D53 MOV R5,R13
000022B0 2FB6 MOV.L R11,@-R15
Monochrome 1102 {
Monochrome 1103 unsigned short line;
Monochrome 1104 char i, shift, begin=0, end=8, bool1=1, bool2=1, *screen, *p=(char*)&line;
000022B2 E601 MOV #1,R6
000022B4 2FA6 MOV.L R10,@-R15
000022B6 E508 MOV #8,R5
000022B8 2F96 MOV.L R9,@-R15
000022BA 6C63 MOV R6,R12
000022BC 2F86 MOV.L R8,@-R15
000022BE 6053 MOV R5,R0
000022C0 4F22 STS.L PR,@-R15
000022C2 6963 MOV R6,R9
000022C4 7FF4 ADD #-12,R15
000022C6 1F41 MOV.L R4,@(4,R15)
000022C8 80F8 MOV.B R0,@(8,R15)
000022CA E400 MOV #0,R4
Monochrome 1105 if(!bmp || x<-7 || x>127 || y<-7 || y>63) return;
000022CC 53F1 MOV.L @(4,R15),R3
000022CE 6A43 MOV R4,R10
000022D0 2338 TST R3,R3
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 105
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000022D2 8D53 BT/S L1442
000022D4 6BF3 MOV R15,R11
000022D6 E3F9 MOV #-7,R3
000022D8 3D33 CMP/GE R3,R13
000022DA 8B4F BF L1442
000022DC E17F MOV #127,R1
000022DE 3D17 CMP/GT R1,R13
000022E0 894C BT L1442
000022E2 3E33 CMP/GE R3,R14
000022E4 8B4A BF L1442
000022E6 E23F MOV #63,R2
000022E8 3E27 CMP/GT R2,R14
000022EA 8947 BT L1442
Monochrome 1106 if(y < 0) begin = -y;
000022EC 4E11 CMP/PZ R14
000022EE 8D01 BT/S L1443
Monochrome 1107 if(y > 56) end = 64-y;
000022F0 E238 MOV #56,R2
000022F2 6AEB NEG R14,R10
000022F4 L1443:
000022F4 3E27 CMP/GT R2,R14
000022F6 8B02 BF L1444
000022F8 E040 MOV #64,R0
000022FA 30E8 SUB R14,R0
000022FC 80F8 MOV.B R0,@(8,R15)
000022FE L1444:
Monochrome 1108 shift = 8-(x&7);
000022FE E307 MOV #7,R3
00002300 23D9 AND R13,R3
00002302 6853 MOV R5,R8
Monochrome 1109 if(x < 0) bool1 = 0;
00002304 4D11 CMP/PZ R13
00002306 8D01 BT/S L1445
00002308 3838 SUB R3,R8
0000230A 6943 MOV R4,R9
0000230C L1445:
Monochrome 1110 if(x>120 || shift==8) bool2 = 0;
0000230C E378 MOV #120,R3
0000230E 3D37 CMP/GT R3,R13
00002310 8902 BT L1447
00002312 608E EXTS.B R8,R0
00002314 8808 CMP/EQ #8,R0
00002316 8B00 BF L1446
00002318 L1447:
00002318 6C43 MOV R4,R12
0000231A L1446:
Monochrome 1111 screen = ML_vram_adress()+(y+begin<<4)+(x>>3);
0000231A D31D MOV.L L1718,R3 ; _ML_vram_adress
0000231C 430B JSR @R3
0000231E 0009 NOP
00002320 53F1 MOV.L @(4,R15),R3
00002322 62AE EXTS.B R10,R2
00002324 32EC ADD R14,R2
00002326 4208 SHLL2 R2
00002328 4208 SHLL2 R2
0000232A 302C ADD R2,R0
0000232C 4D21 SHAR R13
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 106
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000232E 4D21 SHAR R13
00002330 4D21 SHAR R13
00002332 6503 MOV R0,R5
00002334 84F8 MOV.B @(8,R15),R0
00002336 35DC ADD R13,R5
Monochrome 1112 for(i=begin ; i<end ; i++)
00002338 64A3 MOV R10,R4
0000233A 664E EXTS.B R4,R6
0000233C 363C ADD R3,R6
0000233E 6EB3 MOV R11,R14
00002340 6703 MOV R0,R7
00002342 624E EXTS.B R4,R2
00002344 3273 CMP/GE R7,R2
00002346 8D19 BT/S L1442
00002348 7E01 ADD #1,R14
0000234A L1449:
Monochrome 1113 {
Monochrome 1114 line = bmp[i]<<shift;
0000234A 628E EXTS.B R8,R2
0000234C 6360 MOV.B @R6,R3
0000234E 633C EXTU.B R3,R3
00002350 432D SHLD R2,R3
Monochrome 1115 if(bool1) screen[0] |= *p;
00002352 629E EXTS.B R9,R2
00002354 2228 TST R2,R2
00002356 8D04 BT/S L1450
00002358 2F31 MOV.W R3,@R15
0000235A 62B0 MOV.B @R11,R2
0000235C 6150 MOV.B @R5,R1
0000235E 212B OR R2,R1
00002360 2510 MOV.B R1,@R5
00002362 L1450:
Monochrome 1116 if(bool2) screen[1] |= *(p+1);
00002362 63CE EXTS.B R12,R3
00002364 2338 TST R3,R3
00002366 8903 BT L1451
00002368 63E0 MOV.B @R14,R3
0000236A 8451 MOV.B @(1,R5),R0
0000236C 203B OR R3,R0
0000236E 8051 MOV.B R0,@(1,R5)
00002370 L1451:
Monochrome 1117 screen += 16;
00002370 7510 ADD #16,R5
00002372 7401 ADD #1,R4
00002374 634E EXTS.B R4,R3
00002376 3373 CMP/GE R7,R3
00002378 8FE7 BF/S L1449
0000237A 7601 ADD #1,R6
0000237C L1442:
Monochrome 1118 }
Monochrome 1119 }
0000237C 7F0C ADD #12,R15
0000237E 4F26 LDS.L @R15+,PR
00002380 68F6 MOV.L @R15+,R8
00002382 69F6 MOV.L @R15+,R9
00002384 6AF6 MOV.L @R15+,R10
00002386 6BF6 MOV.L @R15+,R11
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 107
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002388 6CF6 MOV.L @R15+,R12
0000238A 6DF6 MOV.L @R15+,R13
0000238C 000B RTS
0000238E 6EF6 MOV.L @R15+,R14
00002390 L1718:
00002390 <00000000> .DATA.L _ML_vram_adress
Monochrome 1120 #endif
Monochrome 1121
Monochrome 1122 #ifdef ML_BMP_8_AND_CL
Monochrome 1123 void ML_bmp_8_and_cl(const unsigned char *bmp, int x, int y)
00002394 _ML_bmp_8_and_cl: ; function: ML_bmp_8_and_cl
; frame size=44
00002394 2FE6 MOV.L R14,@-R15
00002396 6E63 MOV R6,R14
00002398 2FD6 MOV.L R13,@-R15
Monochrome 1124 {
Monochrome 1125 unsigned short line;
Monochrome 1126 char i, shift, begin=0, end=8, bool1=1, bool2=1, *screen, *p=(char*)&line;
0000239A E601 MOV #1,R6
0000239C 2FC6 MOV.L R12,@-R15
0000239E 6D53 MOV R5,R13
000023A0 2FB6 MOV.L R11,@-R15
000023A2 6C63 MOV R6,R12
000023A4 2FA6 MOV.L R10,@-R15
000023A6 E508 MOV #8,R5
000023A8 2F96 MOV.L R9,@-R15
000023AA 6053 MOV R5,R0
000023AC 2F86 MOV.L R8,@-R15
000023AE 6963 MOV R6,R9
000023B0 4F22 STS.L PR,@-R15
000023B2 7FF4 ADD #-12,R15
000023B4 1F41 MOV.L R4,@(4,R15)
000023B6 E400 MOV #0,R4
000023B8 80F8 MOV.B R0,@(8,R15)
000023BA 6A43 MOV R4,R10
Monochrome 1127 if(!bmp || x<-7 || x>127 || y<-7 || y>63) return;
000023BC 53F1 MOV.L @(4,R15),R3
000023BE 2338 TST R3,R3
000023C0 8D55 BT/S L1454
000023C2 6BF3 MOV R15,R11
000023C4 E3F9 MOV #-7,R3
000023C6 3D33 CMP/GE R3,R13
000023C8 8B51 BF L1454
000023CA E17F MOV #127,R1
000023CC 3D17 CMP/GT R1,R13
000023CE 894E BT L1454
000023D0 3E33 CMP/GE R3,R14
000023D2 8B4C BF L1454
000023D4 E23F MOV #63,R2
000023D6 3E27 CMP/GT R2,R14
000023D8 8949 BT L1454
Monochrome 1128 if(y < 0) begin = -y;
000023DA 4E11 CMP/PZ R14
000023DC 8D01 BT/S L1455
Monochrome 1129 if(y > 56) end = 64-y;
000023DE E238 MOV #56,R2
000023E0 6AEB NEG R14,R10
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 108
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000023E2 L1455:
000023E2 3E27 CMP/GT R2,R14
000023E4 8B02 BF L1456
000023E6 E040 MOV #64,R0
000023E8 30E8 SUB R14,R0
000023EA 80F8 MOV.B R0,@(8,R15)
000023EC L1456:
Monochrome 1130 shift = 8-(x&7);
000023EC E307 MOV #7,R3
000023EE 23D9 AND R13,R3
000023F0 6853 MOV R5,R8
Monochrome 1131 if(x < 0) bool1 = 0;
000023F2 4D11 CMP/PZ R13
000023F4 8D01 BT/S L1457
000023F6 3838 SUB R3,R8
000023F8 6943 MOV R4,R9
000023FA L1457:
Monochrome 1132 if(x>120 || shift==8) bool2 = 0;
000023FA E378 MOV #120,R3
000023FC 3D37 CMP/GT R3,R13
000023FE 8902 BT L1459
00002400 608E EXTS.B R8,R0
00002402 8808 CMP/EQ #8,R0
00002404 8B00 BF L1458
00002406 L1459:
00002406 6C43 MOV R4,R12
00002408 L1458:
Monochrome 1133 screen = ML_vram_adress()+(y+begin<<4)+(x>>3);
00002408 D358 MOV.L L1719,R3 ; _ML_vram_adress
0000240A 430B JSR @R3
0000240C 0009 NOP
0000240E 62AE EXTS.B R10,R2
00002410 53F1 MOV.L @(4,R15),R3
00002412 4D21 SHAR R13
00002414 32EC ADD R14,R2
00002416 4208 SHLL2 R2
00002418 4208 SHLL2 R2
0000241A 302C ADD R2,R0
0000241C 4D21 SHAR R13
0000241E 4D21 SHAR R13
00002420 6503 MOV R0,R5
00002422 35DC ADD R13,R5
00002424 84F8 MOV.B @(8,R15),R0
Monochrome 1134 for(i=begin ; i<end ; i++)
00002426 64A3 MOV R10,R4
00002428 664E EXTS.B R4,R6
0000242A 363C ADD R3,R6
0000242C 6EB3 MOV R11,R14
0000242E 6703 MOV R0,R7
00002430 624E EXTS.B R4,R2
00002432 3273 CMP/GE R7,R2
00002434 8D1B BT/S L1454
00002436 7E01 ADD #1,R14
00002438 L1461:
Monochrome 1135 {
Monochrome 1136 line = ~((unsigned char)~bmp[i]<<shift);
00002438 6360 MOV.B @R6,R3
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 109
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000243A 628E EXTS.B R8,R2
0000243C 6337 NOT R3,R3
0000243E 633C EXTU.B R3,R3
00002440 432D SHLD R2,R3
00002442 6337 NOT R3,R3
Monochrome 1137 if(bool1) screen[0] &= *p;
00002444 629E EXTS.B R9,R2
00002446 2228 TST R2,R2
00002448 8D04 BT/S L1462
0000244A 2F31 MOV.W R3,@R15
0000244C 62B0 MOV.B @R11,R2
0000244E 6150 MOV.B @R5,R1
00002450 2129 AND R2,R1
00002452 2510 MOV.B R1,@R5
00002454 L1462:
Monochrome 1138 if(bool2) screen[1] &= *(p+1);
00002454 63CE EXTS.B R12,R3
00002456 2338 TST R3,R3
00002458 8903 BT L1463
0000245A 63E0 MOV.B @R14,R3
0000245C 8451 MOV.B @(1,R5),R0
0000245E 2039 AND R3,R0
00002460 8051 MOV.B R0,@(1,R5)
00002462 L1463:
Monochrome 1139 screen += 16;
00002462 7510 ADD #16,R5
00002464 7401 ADD #1,R4
00002466 634E EXTS.B R4,R3
00002468 3373 CMP/GE R7,R3
0000246A 8FE5 BF/S L1461
0000246C 7601 ADD #1,R6
0000246E L1454:
Monochrome 1140 }
Monochrome 1141 }
0000246E 7F0C ADD #12,R15
00002470 4F26 LDS.L @R15+,PR
00002472 68F6 MOV.L @R15+,R8
00002474 69F6 MOV.L @R15+,R9
00002476 6AF6 MOV.L @R15+,R10
00002478 6BF6 MOV.L @R15+,R11
0000247A 6CF6 MOV.L @R15+,R12
0000247C 6DF6 MOV.L @R15+,R13
0000247E 000B RTS
00002480 6EF6 MOV.L @R15+,R14
Monochrome 1142 #endif
Monochrome 1143
Monochrome 1144 #ifdef ML_BMP_8_XOR_CL
Monochrome 1145 void ML_bmp_8_xor_cl(const unsigned char *bmp, int x, int y)
00002482 _ML_bmp_8_xor_cl: ; function: ML_bmp_8_xor_cl
; frame size=44
00002482 2FE6 MOV.L R14,@-R15
00002484 2FD6 MOV.L R13,@-R15
00002486 6E63 MOV R6,R14
00002488 2FC6 MOV.L R12,@-R15
0000248A 6D53 MOV R5,R13
0000248C 2FB6 MOV.L R11,@-R15
Monochrome 1146 {
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 110
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 1147 unsigned short line;
Monochrome 1148 char i, shift, begin=0, end=8, bool1=1, bool2=1, *screen, *p=(char*)&line;
0000248E E601 MOV #1,R6
00002490 2FA6 MOV.L R10,@-R15
00002492 E508 MOV #8,R5
00002494 2F96 MOV.L R9,@-R15
00002496 6C63 MOV R6,R12
00002498 2F86 MOV.L R8,@-R15
0000249A 6053 MOV R5,R0
0000249C 4F22 STS.L PR,@-R15
0000249E 6963 MOV R6,R9
000024A0 7FF4 ADD #-12,R15
000024A2 1F41 MOV.L R4,@(4,R15)
000024A4 80F8 MOV.B R0,@(8,R15)
000024A6 E400 MOV #0,R4
Monochrome 1149 if(!bmp || x<-7 || x>127 || y<-7 || y>63) return;
000024A8 53F1 MOV.L @(4,R15),R3
000024AA 6A43 MOV R4,R10
000024AC 2338 TST R3,R3
000024AE 8D53 BT/S L1466
000024B0 6BF3 MOV R15,R11
000024B2 E3F9 MOV #-7,R3
000024B4 3D33 CMP/GE R3,R13
000024B6 8B4F BF L1466
000024B8 E17F MOV #127,R1
000024BA 3D17 CMP/GT R1,R13
000024BC 894C BT L1466
000024BE 3E33 CMP/GE R3,R14
000024C0 8B4A BF L1466
000024C2 E23F MOV #63,R2
000024C4 3E27 CMP/GT R2,R14
000024C6 8947 BT L1466
Monochrome 1150 if(y < 0) begin = -y;
000024C8 4E11 CMP/PZ R14
000024CA 8D01 BT/S L1467
Monochrome 1151 if(y > 56) end = 64-y;
000024CC E238 MOV #56,R2
000024CE 6AEB NEG R14,R10
000024D0 L1467:
000024D0 3E27 CMP/GT R2,R14
000024D2 8B02 BF L1468
000024D4 E040 MOV #64,R0
000024D6 30E8 SUB R14,R0
000024D8 80F8 MOV.B R0,@(8,R15)
000024DA L1468:
Monochrome 1152 shift = 8-(x&7);
000024DA E307 MOV #7,R3
000024DC 23D9 AND R13,R3
000024DE 6853 MOV R5,R8
Monochrome 1153 if(x < 0) bool1 = 0;
000024E0 4D11 CMP/PZ R13
000024E2 8D01 BT/S L1469
000024E4 3838 SUB R3,R8
000024E6 6943 MOV R4,R9
000024E8 L1469:
Monochrome 1154 if(x>120 || shift==8) bool2 = 0;
000024E8 E378 MOV #120,R3
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 111
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000024EA 3D37 CMP/GT R3,R13
000024EC 8902 BT L1471
000024EE 608E EXTS.B R8,R0
000024F0 8808 CMP/EQ #8,R0
000024F2 8B00 BF L1470
000024F4 L1471:
000024F4 6C43 MOV R4,R12
000024F6 L1470:
Monochrome 1155 screen = ML_vram_adress()+(y+begin<<4)+(x>>3);
000024F6 D31D MOV.L L1719,R3 ; _ML_vram_adress
000024F8 430B JSR @R3
000024FA 0009 NOP
000024FC 53F1 MOV.L @(4,R15),R3
000024FE 62AE EXTS.B R10,R2
00002500 32EC ADD R14,R2
00002502 4208 SHLL2 R2
00002504 4208 SHLL2 R2
00002506 302C ADD R2,R0
00002508 4D21 SHAR R13
0000250A 4D21 SHAR R13
0000250C 4D21 SHAR R13
0000250E 6503 MOV R0,R5
00002510 84F8 MOV.B @(8,R15),R0
00002512 35DC ADD R13,R5
Monochrome 1156 for(i=begin ; i<end ; i++)
00002514 64A3 MOV R10,R4
00002516 664E EXTS.B R4,R6
00002518 363C ADD R3,R6
0000251A 6EB3 MOV R11,R14
0000251C 6703 MOV R0,R7
0000251E 624E EXTS.B R4,R2
00002520 3273 CMP/GE R7,R2
00002522 8D19 BT/S L1466
00002524 7E01 ADD #1,R14
00002526 L1473:
Monochrome 1157 {
Monochrome 1158 line = bmp[i]<<shift;
00002526 628E EXTS.B R8,R2
00002528 6360 MOV.B @R6,R3
0000252A 633C EXTU.B R3,R3
0000252C 432D SHLD R2,R3
Monochrome 1159 if(bool1) screen[0] ^= *p;
0000252E 629E EXTS.B R9,R2
00002530 2228 TST R2,R2
00002532 8D04 BT/S L1474
00002534 2F31 MOV.W R3,@R15
00002536 62B0 MOV.B @R11,R2
00002538 6150 MOV.B @R5,R1
0000253A 212A XOR R2,R1
0000253C 2510 MOV.B R1,@R5
0000253E L1474:
Monochrome 1160 if(bool2) screen[1] ^= *(p+1);
0000253E 63CE EXTS.B R12,R3
00002540 2338 TST R3,R3
00002542 8903 BT L1475
00002544 63E0 MOV.B @R14,R3
00002546 8451 MOV.B @(1,R5),R0
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 112
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002548 203A XOR R3,R0
0000254A 8051 MOV.B R0,@(1,R5)
0000254C L1475:
Monochrome 1161 screen += 16;
0000254C 7510 ADD #16,R5
0000254E 7401 ADD #1,R4
00002550 634E EXTS.B R4,R3
00002552 3373 CMP/GE R7,R3
00002554 8FE7 BF/S L1473
00002556 7601 ADD #1,R6
00002558 L1466:
Monochrome 1162 }
Monochrome 1163 }
00002558 7F0C ADD #12,R15
0000255A 4F26 LDS.L @R15+,PR
0000255C 68F6 MOV.L @R15+,R8
0000255E 69F6 MOV.L @R15+,R9
00002560 6AF6 MOV.L @R15+,R10
00002562 6BF6 MOV.L @R15+,R11
00002564 6CF6 MOV.L @R15+,R12
00002566 6DF6 MOV.L @R15+,R13
00002568 000B RTS
0000256A 6EF6 MOV.L @R15+,R14
0000256C L1719:
0000256C <00000000> .DATA.L _ML_vram_adress
Monochrome 1164 #endif
Monochrome 1165
Monochrome 1166 #ifdef ML_BMP_16_OR
Monochrome 1167 void ML_bmp_16_or(const unsigned short *bmp, int x, int y)
00002570 _ML_bmp_16_or: ; function: ML_bmp_16_or
; frame size=36
00002570 2FE6 MOV.L R14,@-R15
Monochrome 1168 {
Monochrome 1169 unsigned long line;
Monochrome 1170 char i, shift, begin=0, end=16, *screen, *p=(char*)&line+1;
Monochrome 1171 if(!bmp || x<0 || x>112 || y<-15 || y>63) return;
00002572 6343 MOV R4,R3
00002574 2FD6 MOV.L R13,@-R15
00002576 6E63 MOV R6,R14
00002578 2FC6 MOV.L R12,@-R15
0000257A 2338 TST R3,R3
0000257C 2FB6 MOV.L R11,@-R15
0000257E EC00 MOV #0,R12
00002580 2FA6 MOV.L R10,@-R15
00002582 6B53 MOV R5,R11
00002584 2F96 MOV.L R9,@-R15
00002586 E910 MOV #16,R9
00002588 4F22 STS.L PR,@-R15
0000258A 7FF8 ADD #-8,R15
0000258C 1F41 MOV.L R4,@(4,R15)
0000258E 6DF3 MOV R15,R13
00002590 8D4A BT/S L1478
00002592 7D01 ADD #1,R13
00002594 4B11 CMP/PZ R11
00002596 8B47 BF L1478
00002598 E270 MOV #112,R2
0000259A 3B27 CMP/GT R2,R11
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 113
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000259C 8944 BT L1478
0000259E E1F1 MOV #-15,R1
000025A0 3E13 CMP/GE R1,R14
000025A2 8B41 BF L1478
000025A4 E03F MOV #63,R0
000025A6 3E07 CMP/GT R0,R14
000025A8 893E BT L1478
Monochrome 1172 if(y < 0) begin = -y;
000025AA 4E11 CMP/PZ R14
000025AC 8D01 BT/S L1479
Monochrome 1173 if(y > 48) end = 64-y;
000025AE E330 MOV #48,R3
000025B0 6CEB NEG R14,R12
000025B2 L1479:
000025B2 3E37 CMP/GT R3,R14
000025B4 8F02 BF/S L1480
Monochrome 1174 shift = 8-(x&7);
000025B6 E307 MOV #7,R3
000025B8 E940 MOV #64,R9
000025BA 39E8 SUB R14,R9
000025BC L1480:
Monochrome 1175 screen = ML_vram_adress()+(y+begin<<4)+(x>>3);
000025BC D285 MOV.L L1720+2,R2 ; _ML_vram_adress
000025BE 23B9 AND R11,R3
000025C0 EA08 MOV #8,R10
000025C2 420B JSR @R2
000025C4 3A38 SUB R3,R10
000025C6 63CE EXTS.B R12,R3
000025C8 33EC ADD R14,R3
000025CA 4308 SHLL2 R3
000025CC 4308 SHLL2 R3
000025CE 303C ADD R3,R0
000025D0 53F1 MOV.L @(4,R15),R3
000025D2 679E EXTS.B R9,R7
000025D4 4B21 SHAR R11
000025D6 4B21 SHAR R11
000025D8 4B21 SHAR R11
000025DA 6403 MOV R0,R4
000025DC 34BC ADD R11,R4
Monochrome 1176 for(i=begin ; i<end ; i++)
000025DE 66C3 MOV R12,R6
000025E0 656E EXTS.B R6,R5
000025E2 4500 SHLL R5
000025E4 353C ADD R3,R5
000025E6 6BD3 MOV R13,R11
000025E8 7B01 ADD #1,R11
000025EA 6CD3 MOV R13,R12
000025EC 626E EXTS.B R6,R2
000025EE 3273 CMP/GE R7,R2
000025F0 8D1A BT/S L1478
000025F2 7C02 ADD #2,R12
000025F4 L1482:
Monochrome 1177 {
Monochrome 1178 line = bmp[i]<<shift;
000025F4 6351 MOV.W @R5,R3
000025F6 6EAE EXTS.B R10,R14
000025F8 633D EXTU.W R3,R3
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 114
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000025FA 43ED SHLD R14,R3
000025FC 2F32 MOV.L R3,@R15
Monochrome 1179 screen[0] |= *p;
000025FE 62D0 MOV.B @R13,R2
00002600 6140 MOV.B @R4,R1
00002602 212B OR R2,R1
00002604 2410 MOV.B R1,@R4
Monochrome 1180 screen[1] |= *(p+1);
00002606 63B0 MOV.B @R11,R3
00002608 8441 MOV.B @(1,R4),R0
0000260A 203B OR R3,R0
0000260C 8041 MOV.B R0,@(1,R4)
Monochrome 1181 if(shift!=8) screen[2] |= *(p+2);
0000260E 60E3 MOV R14,R0
00002610 8808 CMP/EQ #8,R0
00002612 8903 BT L1483
00002614 63C0 MOV.B @R12,R3
00002616 8442 MOV.B @(2,R4),R0
00002618 203B OR R3,R0
0000261A 8042 MOV.B R0,@(2,R4)
0000261C L1483:
Monochrome 1182 screen += 16;
0000261C 7410 ADD #16,R4
0000261E 7601 ADD #1,R6
00002620 636E EXTS.B R6,R3
00002622 3373 CMP/GE R7,R3
00002624 8FE6 BF/S L1482
00002626 7502 ADD #2,R5
00002628 L1478:
Monochrome 1183 }
Monochrome 1184 }
00002628 7F08 ADD #8,R15
0000262A 4F26 LDS.L @R15+,PR
0000262C 69F6 MOV.L @R15+,R9
0000262E 6AF6 MOV.L @R15+,R10
00002630 6BF6 MOV.L @R15+,R11
00002632 6CF6 MOV.L @R15+,R12
00002634 6DF6 MOV.L @R15+,R13
00002636 000B RTS
00002638 6EF6 MOV.L @R15+,R14
Monochrome 1185 #endif
Monochrome 1186
Monochrome 1187 #ifdef ML_BMP_16_AND
Monochrome 1188 void ML_bmp_16_and(const unsigned short *bmp, int x, int y)
0000263A _ML_bmp_16_and: ; function: ML_bmp_16_and
; frame size=36
Monochrome 1189 {
Monochrome 1190 unsigned long line;
Monochrome 1191 char i, shift, begin=0, end=16, *screen, *p=(char*)&line+1;
Monochrome 1192 if(!bmp || x<0 || x>112 || y<-15 || y>63) return;
0000263A 6343 MOV R4,R3
0000263C 2FE6 MOV.L R14,@-R15
0000263E 2338 TST R3,R3
00002640 2FD6 MOV.L R13,@-R15
00002642 6E63 MOV R6,R14
00002644 2FC6 MOV.L R12,@-R15
00002646 EC00 MOV #0,R12
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 115
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002648 2FB6 MOV.L R11,@-R15
0000264A 6B53 MOV R5,R11
0000264C 2FA6 MOV.L R10,@-R15
0000264E 2F96 MOV.L R9,@-R15
00002650 4F22 STS.L PR,@-R15
00002652 E910 MOV #16,R9
00002654 7FF8 ADD #-8,R15
00002656 6DF3 MOV R15,R13
00002658 1F41 MOV.L R4,@(4,R15)
0000265A 8D4C BT/S L1486
0000265C 7D01 ADD #1,R13
0000265E 4B11 CMP/PZ R11
00002660 8B49 BF L1486
00002662 E270 MOV #112,R2
00002664 3B27 CMP/GT R2,R11
00002666 8946 BT L1486
00002668 E1F1 MOV #-15,R1
0000266A 3E13 CMP/GE R1,R14
0000266C 8B43 BF L1486
0000266E E03F MOV #63,R0
00002670 3E07 CMP/GT R0,R14
00002672 8940 BT L1486
Monochrome 1193 if(y < 0) begin = -y;
00002674 4E11 CMP/PZ R14
00002676 8D01 BT/S L1487
Monochrome 1194 if(y > 48) end = 64-y;
00002678 E330 MOV #48,R3
0000267A 6CEB NEG R14,R12
0000267C L1487:
0000267C 3E37 CMP/GT R3,R14
0000267E 8F02 BF/S L1488
Monochrome 1195 shift = 8-(x&7);
00002680 E307 MOV #7,R3
00002682 E940 MOV #64,R9
00002684 39E8 SUB R14,R9
00002686 L1488:
00002686 23B9 AND R11,R3
Monochrome 1196 screen = ML_vram_adress()+(y+begin<<4)+(x>>3);
00002688 D252 MOV.L L1720+2,R2 ; _ML_vram_adress
0000268A EA08 MOV #8,R10
0000268C 420B JSR @R2
0000268E 3A38 SUB R3,R10
00002690 63CE EXTS.B R12,R3
00002692 33EC ADD R14,R3
00002694 4308 SHLL2 R3
00002696 4308 SHLL2 R3
00002698 303C ADD R3,R0
0000269A 4B21 SHAR R11
0000269C 53F1 MOV.L @(4,R15),R3
0000269E 679E EXTS.B R9,R7
000026A0 4B21 SHAR R11
000026A2 4B21 SHAR R11
000026A4 6403 MOV R0,R4
000026A6 34BC ADD R11,R4
Monochrome 1197 for(i=begin ; i<end ; i++)
000026A8 66C3 MOV R12,R6
000026AA 656E EXTS.B R6,R5
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 116
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000026AC 4500 SHLL R5
000026AE 353C ADD R3,R5
000026B0 6BD3 MOV R13,R11
000026B2 7B01 ADD #1,R11
000026B4 6CD3 MOV R13,R12
000026B6 626E EXTS.B R6,R2
000026B8 3273 CMP/GE R7,R2
000026BA 8D1C BT/S L1486
000026BC 7C02 ADD #2,R12
000026BE L1490:
Monochrome 1198 {
Monochrome 1199 line = ~((unsigned short)~bmp[i]<<shift);
000026BE 6EAE EXTS.B R10,R14
000026C0 6351 MOV.W @R5,R3
000026C2 6337 NOT R3,R3
000026C4 633D EXTU.W R3,R3
000026C6 43ED SHLD R14,R3
000026C8 6337 NOT R3,R3
000026CA 2F32 MOV.L R3,@R15
Monochrome 1200 screen[0] &= *p;
000026CC 62D0 MOV.B @R13,R2
000026CE 6140 MOV.B @R4,R1
000026D0 2129 AND R2,R1
000026D2 2410 MOV.B R1,@R4
Monochrome 1201 screen[1] &= *(p+1);
000026D4 63B0 MOV.B @R11,R3
000026D6 8441 MOV.B @(1,R4),R0
000026D8 2039 AND R3,R0
000026DA 8041 MOV.B R0,@(1,R4)
Monochrome 1202 if(shift!=8) screen[2] &= *(p+2);
000026DC 60E3 MOV R14,R0
000026DE 8808 CMP/EQ #8,R0
000026E0 8903 BT L1491
000026E2 63C0 MOV.B @R12,R3
000026E4 8442 MOV.B @(2,R4),R0
000026E6 2039 AND R3,R0
000026E8 8042 MOV.B R0,@(2,R4)
000026EA L1491:
Monochrome 1203 screen += 16;
000026EA 7410 ADD #16,R4
000026EC 7601 ADD #1,R6
000026EE 636E EXTS.B R6,R3
000026F0 3373 CMP/GE R7,R3
000026F2 8FE4 BF/S L1490
000026F4 7502 ADD #2,R5
000026F6 L1486:
Monochrome 1204 }
Monochrome 1205 }
000026F6 7F08 ADD #8,R15
000026F8 4F26 LDS.L @R15+,PR
000026FA 69F6 MOV.L @R15+,R9
000026FC 6AF6 MOV.L @R15+,R10
000026FE 6BF6 MOV.L @R15+,R11
00002700 6CF6 MOV.L @R15+,R12
00002702 6DF6 MOV.L @R15+,R13
00002704 000B RTS
00002706 6EF6 MOV.L @R15+,R14
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 117
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 1206 #endif
Monochrome 1207
Monochrome 1208 #ifdef ML_BMP_16_XOR
Monochrome 1209 void ML_bmp_16_xor(const unsigned short *bmp, int x, int y)
00002708 _ML_bmp_16_xor: ; function: ML_bmp_16_xor
; frame size=36
00002708 2FE6 MOV.L R14,@-R15
Monochrome 1210 {
Monochrome 1211 unsigned long line;
Monochrome 1212 char i, shift, begin=0, end=16, *screen, *p=(char*)&line+1;
Monochrome 1213 if(!bmp || x<0 || x>112 || y<-15 || y>63) return;
0000270A 6343 MOV R4,R3
0000270C 2FD6 MOV.L R13,@-R15
0000270E 6E63 MOV R6,R14
00002710 2FC6 MOV.L R12,@-R15
00002712 2338 TST R3,R3
00002714 2FB6 MOV.L R11,@-R15
00002716 EC00 MOV #0,R12
00002718 2FA6 MOV.L R10,@-R15
0000271A 6B53 MOV R5,R11
0000271C 2F96 MOV.L R9,@-R15
0000271E E910 MOV #16,R9
00002720 4F22 STS.L PR,@-R15
00002722 7FF8 ADD #-8,R15
00002724 1F41 MOV.L R4,@(4,R15)
00002726 6DF3 MOV R15,R13
00002728 8D4A BT/S L1494
0000272A 7D01 ADD #1,R13
0000272C 4B11 CMP/PZ R11
0000272E 8B47 BF L1494
00002730 E270 MOV #112,R2
00002732 3B27 CMP/GT R2,R11
00002734 8944 BT L1494
00002736 E1F1 MOV #-15,R1
00002738 3E13 CMP/GE R1,R14
0000273A 8B41 BF L1494
0000273C E03F MOV #63,R0
0000273E 3E07 CMP/GT R0,R14
00002740 893E BT L1494
Monochrome 1214 if(y < 0) begin = -y;
00002742 4E11 CMP/PZ R14
00002744 8D01 BT/S L1495
Monochrome 1215 if(y > 48) end = 64-y;
00002746 E330 MOV #48,R3
00002748 6CEB NEG R14,R12
0000274A L1495:
0000274A 3E37 CMP/GT R3,R14
0000274C 8F02 BF/S L1496
Monochrome 1216 shift = 8-(x&7);
0000274E E307 MOV #7,R3
00002750 E940 MOV #64,R9
00002752 39E8 SUB R14,R9
00002754 L1496:
Monochrome 1217 screen = ML_vram_adress()+(y+begin<<4)+(x>>3);
00002754 D21F MOV.L L1720+2,R2 ; _ML_vram_adress
00002756 23B9 AND R11,R3
00002758 EA08 MOV #8,R10
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 118
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000275A 420B JSR @R2
0000275C 3A38 SUB R3,R10
0000275E 63CE EXTS.B R12,R3
00002760 33EC ADD R14,R3
00002762 4308 SHLL2 R3
00002764 4308 SHLL2 R3
00002766 303C ADD R3,R0
00002768 53F1 MOV.L @(4,R15),R3
0000276A 679E EXTS.B R9,R7
0000276C 4B21 SHAR R11
0000276E 4B21 SHAR R11
00002770 4B21 SHAR R11
00002772 6403 MOV R0,R4
00002774 34BC ADD R11,R4
Monochrome 1218 for(i=begin ; i<end ; i++)
00002776 66C3 MOV R12,R6
00002778 656E EXTS.B R6,R5
0000277A 4500 SHLL R5
0000277C 353C ADD R3,R5
0000277E 6BD3 MOV R13,R11
00002780 7B01 ADD #1,R11
00002782 6CD3 MOV R13,R12
00002784 626E EXTS.B R6,R2
00002786 3273 CMP/GE R7,R2
00002788 8D1A BT/S L1494
0000278A 7C02 ADD #2,R12
0000278C L1498:
Monochrome 1219 {
Monochrome 1220 line = bmp[i]<<shift;
0000278C 6351 MOV.W @R5,R3
0000278E 6EAE EXTS.B R10,R14
00002790 633D EXTU.W R3,R3
00002792 43ED SHLD R14,R3
00002794 2F32 MOV.L R3,@R15
Monochrome 1221 screen[0] ^= *p;
00002796 62D0 MOV.B @R13,R2
00002798 6140 MOV.B @R4,R1
0000279A 212A XOR R2,R1
0000279C 2410 MOV.B R1,@R4
Monochrome 1222 screen[1] ^= *(p+1);
0000279E 63B0 MOV.B @R11,R3
000027A0 8441 MOV.B @(1,R4),R0
000027A2 203A XOR R3,R0
000027A4 8041 MOV.B R0,@(1,R4)
Monochrome 1223 if(shift!=8) screen[2] ^= *(p+2);
000027A6 60E3 MOV R14,R0
000027A8 8808 CMP/EQ #8,R0
000027AA 8903 BT L1499
000027AC 63C0 MOV.B @R12,R3
000027AE 8442 MOV.B @(2,R4),R0
000027B0 203A XOR R3,R0
000027B2 8042 MOV.B R0,@(2,R4)
000027B4 L1499:
Monochrome 1224 screen += 16;
000027B4 7410 ADD #16,R4
000027B6 7601 ADD #1,R6
000027B8 636E EXTS.B R6,R3
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 119
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000027BA 3373 CMP/GE R7,R3
000027BC 8FE6 BF/S L1498
000027BE 7502 ADD #2,R5
000027C0 L1494:
Monochrome 1225 }
Monochrome 1226 }
000027C0 7F08 ADD #8,R15
000027C2 4F26 LDS.L @R15+,PR
000027C4 69F6 MOV.L @R15+,R9
000027C6 6AF6 MOV.L @R15+,R10
000027C8 6BF6 MOV.L @R15+,R11
000027CA 6CF6 MOV.L @R15+,R12
000027CC 6DF6 MOV.L @R15+,R13
000027CE 000B RTS
000027D0 6EF6 MOV.L @R15+,R14
000027D2 L1720:
000027D2 0000 .DATA.W 0
000027D4 <00000000> .DATA.L _ML_vram_adress
Monochrome 1227 #endif
Monochrome 1228
Monochrome 1229 #ifdef ML_BMP_16_OR_CL
Monochrome 1230 void ML_bmp_16_or_cl(const unsigned short *bmp, int x, int y)
000027D8 _ML_bmp_16_or_cl: ; function: ML_bmp_16_or_cl
; frame size=48
000027D8 2FE6 MOV.L R14,@-R15
Monochrome 1231 {
Monochrome 1232 unsigned long line;
Monochrome 1233 char i, shift, begin=0, end=16, bool1=1, bool2=1, bool3=1, *screen, *p=(char*)&line+1;
000027DA E010 MOV #16,R0
000027DC 2FD6 MOV.L R13,@-R15
000027DE 6E53 MOV R5,R14
000027E0 2FC6 MOV.L R12,@-R15
000027E2 6D63 MOV R6,R13
000027E4 2FB6 MOV.L R11,@-R15
000027E6 E501 MOV #1,R5
000027E8 2FA6 MOV.L R10,@-R15
000027EA 2F96 MOV.L R9,@-R15
000027EC 2F86 MOV.L R8,@-R15
000027EE 6953 MOV R5,R9
000027F0 4F22 STS.L PR,@-R15
000027F2 6B93 MOV R9,R11
000027F4 7FF0 ADD #-16,R15
000027F6 6CF3 MOV R15,R12
000027F8 1F41 MOV.L R4,@(4,R15)
000027FA E400 MOV #0,R4
000027FC 80FC MOV.B R0,@(12,R15)
000027FE 6A43 MOV R4,R10
00002800 6053 MOV R5,R0
00002802 80F8 MOV.B R0,@(8,R15)
Monochrome 1234 if(!bmp || x<-15 || x>127 || y<-15 || y>63) return;
00002804 53F1 MOV.L @(4,R15),R3
00002806 2338 TST R3,R3
00002808 8D65 BT/S L1502
0000280A 7C01 ADD #1,R12
0000280C E3F1 MOV #-15,R3
0000280E 3E33 CMP/GE R3,R14
00002810 8B61 BF L1502
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 120
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002812 E17F MOV #127,R1
00002814 3E17 CMP/GT R1,R14
00002816 895E BT L1502
00002818 3D33 CMP/GE R3,R13
0000281A 8B5C BF L1502
0000281C E23F MOV #63,R2
0000281E 3D27 CMP/GT R2,R13
00002820 8959 BT L1502
Monochrome 1235 if(y < 0) begin = -y;
00002822 4D11 CMP/PZ R13
00002824 8D01 BT/S L1503
Monochrome 1236 if(y > 48) end = 64-y;
00002826 E230 MOV #48,R2
00002828 6ADB NEG R13,R10
0000282A L1503:
0000282A 3D27 CMP/GT R2,R13
0000282C 8B02 BF L1504
0000282E E040 MOV #64,R0
00002830 30D8 SUB R13,R0
00002832 80FC MOV.B R0,@(12,R15)
00002834 L1504:
Monochrome 1237 shift = 8-(x&7);
00002834 E307 MOV #7,R3
00002836 23E9 AND R14,R3
00002838 E808 MOV #8,R8
Monochrome 1238 if(x < 0) bool1 = 0;
0000283A 4E11 CMP/PZ R14
0000283C 8D01 BT/S L1505
0000283E 3838 SUB R3,R8
00002840 6943 MOV R4,R9
00002842 L1505:
Monochrome 1239 if(x<-8 || x>119) bool2 = 0;
00002842 E3F8 MOV #-8,R3
00002844 3E33 CMP/GE R3,R14
00002846 8B02 BF L1507
00002848 E177 MOV #119,R1
0000284A 3E17 CMP/GT R1,R14
0000284C 8B01 BF L1506
0000284E L1507:
0000284E 6043 MOV R4,R0
00002850 80F8 MOV.B R0,@(8,R15)
00002852 L1506:
Monochrome 1240 if(x>111 || shift==8) bool3 = 0;
00002852 E36F MOV #111,R3
00002854 3E37 CMP/GT R3,R14
00002856 8902 BT L1509
00002858 608E EXTS.B R8,R0
0000285A 8808 CMP/EQ #8,R0
0000285C 8B00 BF L1508
0000285E L1509:
0000285E 6B43 MOV R4,R11
00002860 L1508:
Monochrome 1241 screen = ML_vram_adress()+(y+begin<<4)+(x>>3);
00002860 D367 MOV.L L1721,R3 ; _ML_vram_adress
00002862 430B JSR @R3
00002864 0009 NOP
00002866 62AE EXTS.B R10,R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 121
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002868 53F1 MOV.L @(4,R15),R3
0000286A 4E21 SHAR R14
0000286C 32DC ADD R13,R2
0000286E 4208 SHLL2 R2
00002870 4208 SHLL2 R2
00002872 302C ADD R2,R0
00002874 4E21 SHAR R14
00002876 4E21 SHAR R14
00002878 6403 MOV R0,R4
0000287A 34EC ADD R14,R4
0000287C 84FC MOV.B @(12,R15),R0
Monochrome 1242 for(i=begin ; i<end ; i++)
0000287E 65A3 MOV R10,R5
00002880 665E EXTS.B R5,R6
00002882 4600 SHLL R6
00002884 363C ADD R3,R6
00002886 6EC3 MOV R12,R14
00002888 7E01 ADD #1,R14
0000288A 6DC3 MOV R12,R13
0000288C 6703 MOV R0,R7
0000288E 625E EXTS.B R5,R2
00002890 3273 CMP/GE R7,R2
00002892 8D20 BT/S L1502
00002894 7D02 ADD #2,R13
00002896 L1511:
Monochrome 1243 {
Monochrome 1244 line = bmp[i]<<shift;
00002896 628E EXTS.B R8,R2
00002898 6361 MOV.W @R6,R3
0000289A 633D EXTU.W R3,R3
0000289C 432D SHLD R2,R3
Monochrome 1245 if(bool1) screen[0] |= *p;
0000289E 629E EXTS.B R9,R2
000028A0 2228 TST R2,R2
000028A2 8D04 BT/S L1512
000028A4 2F32 MOV.L R3,@R15
000028A6 62C0 MOV.B @R12,R2
000028A8 6140 MOV.B @R4,R1
000028AA 212B OR R2,R1
000028AC 2410 MOV.B R1,@R4
000028AE L1512:
Monochrome 1246 if(bool2) screen[1] |= *(p+1);
000028AE 84F8 MOV.B @(8,R15),R0
000028B0 2008 TST R0,R0
000028B2 8D04 BT/S L1513
Monochrome 1247 if(bool3) screen[2] |= *(p+2);
000028B4 62BE EXTS.B R11,R2
000028B6 63E0 MOV.B @R14,R3
000028B8 8441 MOV.B @(1,R4),R0
000028BA 203B OR R3,R0
000028BC 8041 MOV.B R0,@(1,R4)
000028BE L1513:
000028BE 2228 TST R2,R2
000028C0 8903 BT L1514
000028C2 63D0 MOV.B @R13,R3
000028C4 8442 MOV.B @(2,R4),R0
000028C6 203B OR R3,R0
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 122
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000028C8 8042 MOV.B R0,@(2,R4)
000028CA L1514:
Monochrome 1248 screen += 16;
000028CA 7410 ADD #16,R4
000028CC 7501 ADD #1,R5
000028CE 635E EXTS.B R5,R3
000028D0 3373 CMP/GE R7,R3
000028D2 8FE0 BF/S L1511
000028D4 7602 ADD #2,R6
000028D6 L1502:
Monochrome 1249 }
Monochrome 1250 }
000028D6 7F10 ADD #16,R15
000028D8 4F26 LDS.L @R15+,PR
000028DA 68F6 MOV.L @R15+,R8
000028DC 69F6 MOV.L @R15+,R9
000028DE 6AF6 MOV.L @R15+,R10
000028E0 6BF6 MOV.L @R15+,R11
000028E2 6CF6 MOV.L @R15+,R12
000028E4 6DF6 MOV.L @R15+,R13
000028E6 000B RTS
000028E8 6EF6 MOV.L @R15+,R14
Monochrome 1251 #endif
Monochrome 1252
Monochrome 1253 #ifdef ML_BMP_16_AND_CL
Monochrome 1254 void ML_bmp_16_and_cl(const unsigned short *bmp, int x, int y)
000028EA _ML_bmp_16_and_cl: ; function: ML_bmp_16_and_cl
; frame size=48
Monochrome 1255 {
Monochrome 1256 unsigned long line;
Monochrome 1257 char i, shift, begin=0, end=16, bool1=1, bool2=1, bool3=1, *screen, *p=(char*)&line+1;
000028EA E010 MOV #16,R0
000028EC 2FE6 MOV.L R14,@-R15
000028EE 6E53 MOV R5,R14
000028F0 2FD6 MOV.L R13,@-R15
000028F2 E501 MOV #1,R5
000028F4 2FC6 MOV.L R12,@-R15
000028F6 6D63 MOV R6,R13
000028F8 2FB6 MOV.L R11,@-R15
000028FA 2FA6 MOV.L R10,@-R15
000028FC 2F96 MOV.L R9,@-R15
000028FE 6953 MOV R5,R9
00002900 2F86 MOV.L R8,@-R15
00002902 6B93 MOV R9,R11
00002904 4F22 STS.L PR,@-R15
00002906 7FF0 ADD #-16,R15
00002908 1F41 MOV.L R4,@(4,R15)
0000290A 6CF3 MOV R15,R12
0000290C 80FC MOV.B R0,@(12,R15)
0000290E E400 MOV #0,R4
00002910 6A43 MOV R4,R10
00002912 6053 MOV R5,R0
00002914 80F8 MOV.B R0,@(8,R15)
Monochrome 1258 if(!bmp || x<-15 || x>127 || y<-15 || y>63) return;
00002916 53F1 MOV.L @(4,R15),R3
00002918 2338 TST R3,R3
0000291A 8D67 BT/S L1517
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 123
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000291C 7C01 ADD #1,R12
0000291E E3F1 MOV #-15,R3
00002920 3E33 CMP/GE R3,R14
00002922 8B63 BF L1517
00002924 E17F MOV #127,R1
00002926 3E17 CMP/GT R1,R14
00002928 8960 BT L1517
0000292A 3D33 CMP/GE R3,R13
0000292C 8B5E BF L1517
0000292E E23F MOV #63,R2
00002930 3D27 CMP/GT R2,R13
00002932 895B BT L1517
Monochrome 1259 if(y < 0) begin = -y;
00002934 4D11 CMP/PZ R13
00002936 8D01 BT/S L1518
Monochrome 1260 if(y > 48) end = 64-y;
00002938 E230 MOV #48,R2
0000293A 6ADB NEG R13,R10
0000293C L1518:
0000293C 3D27 CMP/GT R2,R13
0000293E 8B02 BF L1519
00002940 E040 MOV #64,R0
00002942 30D8 SUB R13,R0
00002944 80FC MOV.B R0,@(12,R15)
00002946 L1519:
Monochrome 1261 shift = 8-(x&7);
00002946 E307 MOV #7,R3
00002948 23E9 AND R14,R3
0000294A E808 MOV #8,R8
Monochrome 1262 if(x < 0) bool1 = 0;
0000294C 4E11 CMP/PZ R14
0000294E 8D01 BT/S L1520
00002950 3838 SUB R3,R8
00002952 6943 MOV R4,R9
00002954 L1520:
Monochrome 1263 if(x<-8 || x>119) bool2 = 0;
00002954 E3F8 MOV #-8,R3
00002956 3E33 CMP/GE R3,R14
00002958 8B02 BF L1522
0000295A E177 MOV #119,R1
0000295C 3E17 CMP/GT R1,R14
0000295E 8B01 BF L1521
00002960 L1522:
00002960 6043 MOV R4,R0
00002962 80F8 MOV.B R0,@(8,R15)
00002964 L1521:
Monochrome 1264 if(x>111 || shift==8) bool3 = 0;
00002964 E36F MOV #111,R3
00002966 3E37 CMP/GT R3,R14
00002968 8902 BT L1524
0000296A 608E EXTS.B R8,R0
0000296C 8808 CMP/EQ #8,R0
0000296E 8B00 BF L1523
00002970 L1524:
00002970 6B43 MOV R4,R11
00002972 L1523:
Monochrome 1265 screen = ML_vram_adress()+(y+begin<<4)+(x>>3);
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 124
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002972 D323 MOV.L L1721,R3 ; _ML_vram_adress
00002974 430B JSR @R3
00002976 0009 NOP
00002978 53F1 MOV.L @(4,R15),R3
0000297A 62AE EXTS.B R10,R2
0000297C 32DC ADD R13,R2
0000297E 4208 SHLL2 R2
00002980 4208 SHLL2 R2
00002982 302C ADD R2,R0
00002984 4E21 SHAR R14
00002986 4E21 SHAR R14
00002988 4E21 SHAR R14
0000298A 6403 MOV R0,R4
0000298C 84FC MOV.B @(12,R15),R0
0000298E 34EC ADD R14,R4
Monochrome 1266 for(i=begin ; i<end ; i++)
00002990 65A3 MOV R10,R5
00002992 665E EXTS.B R5,R6
00002994 4600 SHLL R6
00002996 363C ADD R3,R6
00002998 6EC3 MOV R12,R14
0000299A 7E01 ADD #1,R14
0000299C 6DC3 MOV R12,R13
0000299E 6703 MOV R0,R7
000029A0 625E EXTS.B R5,R2
000029A2 3273 CMP/GE R7,R2
000029A4 8D22 BT/S L1517
000029A6 7D02 ADD #2,R13
000029A8 L1526:
Monochrome 1267 {
Monochrome 1268 line = ~((unsigned short)~bmp[i]<<shift);
000029A8 6361 MOV.W @R6,R3
000029AA 628E EXTS.B R8,R2
000029AC 6337 NOT R3,R3
000029AE 633D EXTU.W R3,R3
000029B0 432D SHLD R2,R3
000029B2 6337 NOT R3,R3
Monochrome 1269 if(bool1) screen[0] &= *p;
000029B4 629E EXTS.B R9,R2
000029B6 2228 TST R2,R2
000029B8 8D04 BT/S L1527
000029BA 2F32 MOV.L R3,@R15
000029BC 62C0 MOV.B @R12,R2
000029BE 6140 MOV.B @R4,R1
000029C0 2129 AND R2,R1
000029C2 2410 MOV.B R1,@R4
000029C4 L1527:
Monochrome 1270 if(bool2) screen[1] &= *(p+1);
000029C4 84F8 MOV.B @(8,R15),R0
000029C6 2008 TST R0,R0
000029C8 8D04 BT/S L1528
Monochrome 1271 if(bool3) screen[2] &= *(p+2);
000029CA 62BE EXTS.B R11,R2
000029CC 63E0 MOV.B @R14,R3
000029CE 8441 MOV.B @(1,R4),R0
000029D0 2039 AND R3,R0
000029D2 8041 MOV.B R0,@(1,R4)
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 125
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000029D4 L1528:
000029D4 2228 TST R2,R2
000029D6 8903 BT L1529
000029D8 63D0 MOV.B @R13,R3
000029DA 8442 MOV.B @(2,R4),R0
000029DC 2039 AND R3,R0
000029DE 8042 MOV.B R0,@(2,R4)
000029E0 L1529:
Monochrome 1272 screen += 16;
000029E0 7410 ADD #16,R4
000029E2 7501 ADD #1,R5
000029E4 635E EXTS.B R5,R3
000029E6 3373 CMP/GE R7,R3
000029E8 8FDE BF/S L1526
000029EA 7602 ADD #2,R6
000029EC L1517:
Monochrome 1273 }
Monochrome 1274 }
000029EC 7F10 ADD #16,R15
000029EE 4F26 LDS.L @R15+,PR
000029F0 68F6 MOV.L @R15+,R8
000029F2 69F6 MOV.L @R15+,R9
000029F4 6AF6 MOV.L @R15+,R10
000029F6 6BF6 MOV.L @R15+,R11
000029F8 6CF6 MOV.L @R15+,R12
000029FA 6DF6 MOV.L @R15+,R13
000029FC 000B RTS
000029FE 6EF6 MOV.L @R15+,R14
00002A00 L1721:
00002A00 <00000000> .DATA.L _ML_vram_adress
Monochrome 1275 #endif
Monochrome 1276
Monochrome 1277 #ifdef ML_BMP_16_XOR_CL
Monochrome 1278 void ML_bmp_16_xor_cl(const unsigned short *bmp, int x, int y)
00002A04 _ML_bmp_16_xor_cl: ; function: ML_bmp_16_xor_cl
; frame size=48
00002A04 2FE6 MOV.L R14,@-R15
Monochrome 1279 {
Monochrome 1280 unsigned long line;
Monochrome 1281 char i, shift, begin=0, end=16, bool1=1, bool2=1, bool3=1, *screen, *p=(char*)&line+1;
00002A06 E010 MOV #16,R0
00002A08 2FD6 MOV.L R13,@-R15
00002A0A 6E53 MOV R5,R14
00002A0C 2FC6 MOV.L R12,@-R15
00002A0E 6D63 MOV R6,R13
00002A10 2FB6 MOV.L R11,@-R15
00002A12 E501 MOV #1,R5
00002A14 2FA6 MOV.L R10,@-R15
00002A16 2F96 MOV.L R9,@-R15
00002A18 2F86 MOV.L R8,@-R15
00002A1A 6953 MOV R5,R9
00002A1C 4F22 STS.L PR,@-R15
00002A1E 6B93 MOV R9,R11
00002A20 7FF0 ADD #-16,R15
00002A22 6CF3 MOV R15,R12
00002A24 1F41 MOV.L R4,@(4,R15)
00002A26 E400 MOV #0,R4
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 126
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002A28 80FC MOV.B R0,@(12,R15)
00002A2A 6A43 MOV R4,R10
00002A2C 6053 MOV R5,R0
00002A2E 80F8 MOV.B R0,@(8,R15)
Monochrome 1282 if(!bmp || x<-15 || x>127 || y<-15 || y>63) return;
00002A30 53F1 MOV.L @(4,R15),R3
00002A32 2338 TST R3,R3
00002A34 8D65 BT/S L1532
00002A36 7C01 ADD #1,R12
00002A38 E3F1 MOV #-15,R3
00002A3A 3E33 CMP/GE R3,R14
00002A3C 8B61 BF L1532
00002A3E E17F MOV #127,R1
00002A40 3E17 CMP/GT R1,R14
00002A42 895E BT L1532
00002A44 3D33 CMP/GE R3,R13
00002A46 8B5C BF L1532
00002A48 E23F MOV #63,R2
00002A4A 3D27 CMP/GT R2,R13
00002A4C 8959 BT L1532
Monochrome 1283 if(y < 0) begin = -y;
00002A4E 4D11 CMP/PZ R13
00002A50 8D01 BT/S L1533
Monochrome 1284 if(y > 48) end = 64-y;
00002A52 E230 MOV #48,R2
00002A54 6ADB NEG R13,R10
00002A56 L1533:
00002A56 3D27 CMP/GT R2,R13
00002A58 8B02 BF L1534
00002A5A E040 MOV #64,R0
00002A5C 30D8 SUB R13,R0
00002A5E 80FC MOV.B R0,@(12,R15)
00002A60 L1534:
Monochrome 1285 shift = 8-(x&7);
00002A60 E307 MOV #7,R3
00002A62 23E9 AND R14,R3
00002A64 E808 MOV #8,R8
Monochrome 1286 if(x < 0) bool1 = 0;
00002A66 4E11 CMP/PZ R14
00002A68 8D01 BT/S L1535
00002A6A 3838 SUB R3,R8
00002A6C 6943 MOV R4,R9
00002A6E L1535:
Monochrome 1287 if(x<-8 || x>119) bool2 = 0;
00002A6E E3F8 MOV #-8,R3
00002A70 3E33 CMP/GE R3,R14
00002A72 8B02 BF L1537
00002A74 E177 MOV #119,R1
00002A76 3E17 CMP/GT R1,R14
00002A78 8B01 BF L1536
00002A7A L1537:
00002A7A 6043 MOV R4,R0
00002A7C 80F8 MOV.B R0,@(8,R15)
00002A7E L1536:
Monochrome 1288 if(x>111 || shift==8) bool3 = 0;
00002A7E E36F MOV #111,R3
00002A80 3E37 CMP/GT R3,R14
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 127
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002A82 8902 BT L1539
00002A84 608E EXTS.B R8,R0
00002A86 8808 CMP/EQ #8,R0
00002A88 8B00 BF L1538
00002A8A L1539:
00002A8A 6B43 MOV R4,R11
00002A8C L1538:
Monochrome 1289 screen = ML_vram_adress()+(y+begin<<4)+(x>>3);
00002A8C D349 MOV.L L1722+2,R3 ; _ML_vram_adress
00002A8E 430B JSR @R3
00002A90 0009 NOP
00002A92 62AE EXTS.B R10,R2
00002A94 53F1 MOV.L @(4,R15),R3
00002A96 4E21 SHAR R14
00002A98 32DC ADD R13,R2
00002A9A 4208 SHLL2 R2
00002A9C 4208 SHLL2 R2
00002A9E 302C ADD R2,R0
00002AA0 4E21 SHAR R14
00002AA2 4E21 SHAR R14
00002AA4 6403 MOV R0,R4
00002AA6 34EC ADD R14,R4
00002AA8 84FC MOV.B @(12,R15),R0
Monochrome 1290 for(i=begin ; i<end ; i++)
00002AAA 65A3 MOV R10,R5
00002AAC 665E EXTS.B R5,R6
00002AAE 4600 SHLL R6
00002AB0 363C ADD R3,R6
00002AB2 6EC3 MOV R12,R14
00002AB4 7E01 ADD #1,R14
00002AB6 6DC3 MOV R12,R13
00002AB8 6703 MOV R0,R7
00002ABA 625E EXTS.B R5,R2
00002ABC 3273 CMP/GE R7,R2
00002ABE 8D20 BT/S L1532
00002AC0 7D02 ADD #2,R13
00002AC2 L1541:
Monochrome 1291 {
Monochrome 1292 line = bmp[i]<<shift;
00002AC2 628E EXTS.B R8,R2
00002AC4 6361 MOV.W @R6,R3
00002AC6 633D EXTU.W R3,R3
00002AC8 432D SHLD R2,R3
Monochrome 1293 if(bool1) screen[0] ^= *p;
00002ACA 629E EXTS.B R9,R2
00002ACC 2228 TST R2,R2
00002ACE 8D04 BT/S L1542
00002AD0 2F32 MOV.L R3,@R15
00002AD2 62C0 MOV.B @R12,R2
00002AD4 6140 MOV.B @R4,R1
00002AD6 212A XOR R2,R1
00002AD8 2410 MOV.B R1,@R4
00002ADA L1542:
Monochrome 1294 if(bool2) screen[1] ^= *(p+1);
00002ADA 84F8 MOV.B @(8,R15),R0
00002ADC 2008 TST R0,R0
00002ADE 8D04 BT/S L1543
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 128
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 1295 if(bool3) screen[2] ^= *(p+2);
00002AE0 62BE EXTS.B R11,R2
00002AE2 63E0 MOV.B @R14,R3
00002AE4 8441 MOV.B @(1,R4),R0
00002AE6 203A XOR R3,R0
00002AE8 8041 MOV.B R0,@(1,R4)
00002AEA L1543:
00002AEA 2228 TST R2,R2
00002AEC 8903 BT L1544
00002AEE 63D0 MOV.B @R13,R3
00002AF0 8442 MOV.B @(2,R4),R0
00002AF2 203A XOR R3,R0
00002AF4 8042 MOV.B R0,@(2,R4)
00002AF6 L1544:
Monochrome 1296 screen += 16;
00002AF6 7410 ADD #16,R4
00002AF8 7501 ADD #1,R5
00002AFA 635E EXTS.B R5,R3
00002AFC 3373 CMP/GE R7,R3
00002AFE 8FE0 BF/S L1541
00002B00 7602 ADD #2,R6
00002B02 L1532:
Monochrome 1297 }
Monochrome 1298 }
00002B02 7F10 ADD #16,R15
00002B04 4F26 LDS.L @R15+,PR
00002B06 68F6 MOV.L @R15+,R8
00002B08 69F6 MOV.L @R15+,R9
00002B0A 6AF6 MOV.L @R15+,R10
00002B0C 6BF6 MOV.L @R15+,R11
00002B0E 6CF6 MOV.L @R15+,R12
00002B10 6DF6 MOV.L @R15+,R13
00002B12 000B RTS
00002B14 6EF6 MOV.L @R15+,R14
Monochrome 1299 #endif
Monochrome 1300
Monochrome 1301
Monochrome 1302 #ifdef ML_BMP_OR_ZOOM
Monochrome 1303 void ML_bmp_or_zoom(const unsigned char *bmp, int x, int y, int width, int height, float zoom_w, float zoo
+m_h)
00002B16 _ML_bmp_or_zoom: ; function: ML_bmp_or_zoom
; frame size=80
; used runtime library name:
; __divls, __muls, __stoi, __lts
00002B16 E054 MOV #84,R0
Monochrome 1304 {
Monochrome 1305 int i, j, iz, jz, width_z, height_z, nb_width, i3, bit, x_screen, pixel;
Monochrome 1306 int zoom_w14, zoom_h14;
Monochrome 1307 int begin_x, end_x, begin_y, end_y;
Monochrome 1308 char* vram = ML_vram_adress();
00002B18 D326 MOV.L L1722+2,R3 ; _ML_vram_adress
00002B1A 2FE6 MOV.L R14,@-R15
00002B1C 2FD6 MOV.L R13,@-R15
00002B1E 6E53 MOV R5,R14
00002B20 2FC6 MOV.L R12,@-R15
00002B22 2FB6 MOV.L R11,@-R15
00002B24 2FA6 MOV.L R10,@-R15
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 129
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002B26 6A63 MOV R6,R10
00002B28 2F96 MOV.L R9,@-R15
00002B2A 2F86 MOV.L R8,@-R15
00002B2C 4F22 STS.L PR,@-R15
00002B2E 4F12 STS.L MACL,@-R15
00002B30 7FD4 ADD #-44,R15
00002B32 1F41 MOV.L R4,@(4,R15)
00002B34 2F72 MOV.L R7,@R15
00002B36 0DFE MOV.L @(R0,R15),R13
00002B38 E058 MOV #88,R0
00002B3A 430B JSR @R3
00002B3C 0CFE MOV.L @(R0,R15),R12
00002B3E 1F09 MOV.L R0,@(36,R15)
Monochrome 1309
Monochrome 1310 if (!bmp) return;
00002B40 53F1 MOV.L @(4,R15),R3
00002B42 2338 TST R3,R3
00002B44 8B01 BF L1723
00002B46 A0AC BRA L1546
00002B48 0009 NOP
00002B4A L1723:
Monochrome 1311 if (zoom_h < 0) zoom_h = 0;
00002B4A 61C3 MOV R12,R1
00002B4C D31A MOV.L L1722+6,R3 ; __lts
00002B4E 430B JSR @R3
00002B50 E000 MOV #0,R0
00002B52 8800 CMP/EQ #0,R0
00002B54 8D01 BT/S L1547
Monochrome 1312 if (zoom_w < 0) zoom_w = 0;
00002B56 61D3 MOV R13,R1
00002B58 EC00 MOV #0,R12
00002B5A L1547:
00002B5A D217 MOV.L L1722+6,R2 ; __lts
00002B5C 420B JSR @R2
00002B5E E000 MOV #0,R0
00002B60 8800 CMP/EQ #0,R0
00002B62 8900 BT L1548
00002B64 ED00 MOV #0,R13
00002B66 L1548:
Monochrome 1313 zoom_w14 = zoom_w * 16384;
00002B66 D015 MOV.L L1722+10,R0; H'46800000
00002B68 D315 MOV.L L1722+14,R3; __muls
00002B6A 430B JSR @R3
00002B6C 61D3 MOV R13,R1
00002B6E D215 MOV.L L1722+18,R2; __stoi
00002B70 420B JSR @R2
00002B72 0009 NOP
00002B74 1F03 MOV.L R0,@(12,R15)
Monochrome 1314 zoom_h14 = zoom_h * 16384;
00002B76 D011 MOV.L L1722+10,R0; H'46800000
00002B78 D311 MOV.L L1722+14,R3; __muls
00002B7A 430B JSR @R3
00002B7C 61C3 MOV R12,R1
00002B7E D211 MOV.L L1722+18,R2; __stoi
00002B80 420B JSR @R2
00002B82 0009 NOP
00002B84 1F02 MOV.L R0,@(8,R15)
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 130
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 1315 width_z = width * zoom_w14 >> 14 ;
00002B86 E1F2 MOV #-14,R1
00002B88 53F3 MOV.L @(12,R15),R3
Monochrome 1316 height_z = height * zoom_h14 >> 14;
00002B8A E050 MOV #80,R0
00002B8C 62F2 MOV.L @R15,R2
00002B8E 0237 MUL.L R3,R2
00002B90 00FE MOV.L @(R0,R15),R0
00002B92 E3F2 MOV #-14,R3
00002B94 041A STS MACL,R4
00002B96 441C SHAD R1,R4
00002B98 51F2 MOV.L @(8,R15),R1
Monochrome 1317 nb_width = width + 7 >> 3;
00002B9A 7207 ADD #7,R2
00002B9C 0017 MUL.L R1,R0
00002B9E 4221 SHAR R2
00002BA0 071A STS MACL,R7
00002BA2 473C SHAD R3,R7
00002BA4 4221 SHAR R2
00002BA6 4221 SHAR R2
Monochrome 1318
Monochrome 1319 if (x < 0) begin_x = -x;
00002BA8 4E11 CMP/PZ R14
00002BAA 8D0D BT/S L1549
00002BAC 1F27 MOV.L R2,@(28,R15)
00002BAE A00C BRA L1550
00002BB0 66EB NEG R14,R6
00002BB2 L1722:
00002BB2 0000 .DATA.W 0
00002BB4 <00000000> .DATA.L _ML_vram_adress
00002BB8 <00000000> .DATA.L __lts
00002BBC 46800000 .DATA.L H'46800000
00002BC0 <00000000> .DATA.L __muls
00002BC4 <00000000> .DATA.L __stoi
00002BC8 L1549:
Monochrome 1320 else begin_x = 0;
00002BC8 E600 MOV #0,R6
00002BCA L1550:
Monochrome 1321 if (x+width_z > 128) end_x = 128-x;
00002BCA 63E3 MOV R14,R3
00002BCC 9574 MOV.W L1724,R5 ; H'0080
00002BCE 334C ADD R4,R3
00002BD0 3357 CMP/GT R5,R3
00002BD2 8B03 BF L1551
00002BD4 6353 MOV R5,R3
00002BD6 33E8 SUB R14,R3
00002BD8 A001 BRA L1552
00002BDA 1F3A MOV.L R3,@(40,R15)
00002BDC L1551:
Monochrome 1322 else end_x = width_z;
00002BDC 1F4A MOV.L R4,@(40,R15)
00002BDE L1552:
Monochrome 1323 if (y < 0) begin_y = -y;
00002BDE 4A11 CMP/PZ R10
00002BE0 8D03 BT/S L1553
Monochrome 1324 else begin_y = 0;
Monochrome 1325 if (y+height_z > 64) end_y = 64-y;
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 131
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002BE2 E440 MOV #64,R4
00002BE4 62AB NEG R10,R2
00002BE6 A002 BRA L1554
00002BE8 1F28 MOV.L R2,@(32,R15)
00002BEA L1553:
00002BEA E100 MOV #0,R1
00002BEC 1F18 MOV.L R1,@(32,R15)
00002BEE L1554:
00002BEE 63A3 MOV R10,R3
00002BF0 337C ADD R7,R3
00002BF2 3347 CMP/GT R4,R3
00002BF4 8F03 BF/S L1555
Monochrome 1326 else end_y = height_z;
Monochrome 1327
Monochrome 1328 for (iz=begin_x; iz<end_x; iz++)
00002BF6 6863 MOV R6,R8
00002BF8 6C43 MOV R4,R12
00002BFA A001 BRA L1556
00002BFC 3CA8 SUB R10,R12
00002BFE L1555:
00002BFE 6C73 MOV R7,R12
00002C00 L1556:
00002C00 69E3 MOV R14,R9
00002C02 398C ADD R8,R9
00002C04 9E59 MOV.W L1724+2,R14; H'4000
00002C06 E30E MOV #14,R3
00002C08 ED07 MOV #7,R13
00002C0A 6B63 MOV R6,R11
00002C0C A046 BRA L1557
00002C0E 4B3C SHAD R3,R11
00002C10 L1558:
Monochrome 1329 {
Monochrome 1330 i = (iz << 14) / zoom_w14;
00002C10 D32A MOV.L L1724+4,R3 ; __divls
00002C12 61B3 MOV R11,R1
00002C14 430B JSR @R3
00002C16 50F3 MOV.L @(12,R15),R0
00002C18 6403 MOV R0,R4
Monochrome 1331 i3 = i >> 3;
00002C1A 6303 MOV R0,R3
00002C1C 4321 SHAR R3
00002C1E 4321 SHAR R3
00002C20 4321 SHAR R3
Monochrome 1332 bit = 0x80 >> (i & 7);
00002C22 24D9 AND R13,R4
00002C24 1F36 MOV.L R3,@(24,R15)
00002C26 6253 MOV R5,R2
00002C28 644B NEG R4,R4
00002C2A 424C SHAD R4,R2
00002C2C 1F25 MOV.L R2,@(20,R15)
00002C2E 67A3 MOV R10,R7
Monochrome 1333 x_screen = x+iz;
00002C30 2F92 MOV.L R9,@R15
00002C32 6193 MOV R9,R1
Monochrome 1334
Monochrome 1335 for (jz=begin_y; jz<end_y; jz++)
00002C34 54F8 MOV.L @(32,R15),R4
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 132
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002C36 E30E MOV #14,R3
00002C38 374C ADD R4,R7
00002C3A 4708 SHLL2 R7
00002C3C 4708 SHLL2 R7
00002C3E 4121 SHAR R1
00002C40 4121 SHAR R1
00002C42 4121 SHAR R1
00002C44 371C ADD R1,R7
00002C46 6643 MOV R4,R6
00002C48 51F9 MOV.L @(36,R15),R1
00002C4A 6293 MOV R9,R2
00002C4C 371C ADD R1,R7
00002C4E 463C SHAD R3,R6
00002C50 22D9 AND R13,R2
00002C52 622B NEG R2,R2
00002C54 6053 MOV R5,R0
00002C56 402C SHAD R2,R0
00002C58 34C3 CMP/GE R12,R4
00002C5A 8D1C BT/S L1559
00002C5C 1F04 MOV.L R0,@(16,R15)
00002C5E L1560:
Monochrome 1336 {
Monochrome 1337 j = (jz << 14) / zoom_h14;
00002C5E 6163 MOV R6,R1
00002C60 D316 MOV.L L1724+4,R3 ; __divls
00002C62 430B JSR @R3
00002C64 50F2 MOV.L @(8,R15),R0
00002C66 2F02 MOV.L R0,@R15
Monochrome 1338 pixel = bmp[i3 + nb_width * j] & bit;
00002C68 53F7 MOV.L @(28,R15),R3
00002C6A 0037 MUL.L R3,R0
00002C6C 51F6 MOV.L @(24,R15),R1
00002C6E 001A STS MACL,R0
00002C70 53F1 MOV.L @(4,R15),R3
00002C72 301C ADD R1,R0
00002C74 013C MOV.B @(R0,R3),R1
00002C76 611C EXTU.B R1,R1
00002C78 53F5 MOV.L @(20,R15),R3
00002C7A 2139 AND R3,R1
Monochrome 1339
Monochrome 1340 if (pixel != 0) vram[(y+jz<<4)+(x_screen>>3)] |= 128>>(x_screen&7);
00002C7C 6313 MOV R1,R3
00002C7E 2338 TST R3,R3
00002C80 8D04 BT/S L1561
00002C82 2F12 MOV.L R1,@R15
00002C84 53F4 MOV.L @(16,R15),R3
00002C86 6270 MOV.B @R7,R2
00002C88 223B OR R3,R2
00002C8A 2720 MOV.B R2,@R7
00002C8C L1561:
00002C8C 7401 ADD #1,R4
00002C8E 7710 ADD #16,R7
00002C90 34C3 CMP/GE R12,R4
00002C92 8FE4 BF/S L1560
00002C94 36EC ADD R14,R6
00002C96 L1559:
00002C96 7801 ADD #1,R8
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 133
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002C98 7901 ADD #1,R9
00002C9A 3BEC ADD R14,R11
00002C9C L1557:
00002C9C 52FA MOV.L @(40,R15),R2
00002C9E 3823 CMP/GE R2,R8
00002CA0 8BB6 BF L1558
00002CA2 L1546:
Monochrome 1341 }
Monochrome 1342 }
Monochrome 1343 }
00002CA2 7F2C ADD #44,R15
00002CA4 4F16 LDS.L @R15+,MACL
00002CA6 4F26 LDS.L @R15+,PR
00002CA8 68F6 MOV.L @R15+,R8
00002CAA 69F6 MOV.L @R15+,R9
00002CAC 6AF6 MOV.L @R15+,R10
00002CAE 6BF6 MOV.L @R15+,R11
00002CB0 6CF6 MOV.L @R15+,R12
00002CB2 6DF6 MOV.L @R15+,R13
00002CB4 000B RTS
00002CB6 6EF6 MOV.L @R15+,R14
00002CB8 L1724:
00002CB8 0080 .DATA.W H'0080
00002CBA 4000 .DATA.W H'4000
00002CBC <00000000> .DATA.L __divls
Monochrome 1344 #endif
Monochrome 1345
Monochrome 1346 #ifdef ML_BMP_AND_ZOOM
Monochrome 1347 void ML_bmp_and_zoom(const unsigned char *bmp, int x, int y, int width, int height, float zoom_w, float zo
+om_h)
00002CC0 _ML_bmp_and_zoom: ; function: ML_bmp_and_zoom
; frame size=80
; used runtime library name:
; __divls, __muls, __stoi, __lts
00002CC0 2FE6 MOV.L R14,@-R15
00002CC2 E054 MOV #84,R0
Monochrome 1348 {
Monochrome 1349 int i, j, iz, jz, width_z, height_z, nb_width, i3, bit, x_screen, pixel;
Monochrome 1350 int zoom_w14, zoom_h14;
Monochrome 1351 int begin_x, end_x, begin_y, end_y;
Monochrome 1352 char* vram = ML_vram_adress();
00002CC4 D338 MOV.L L1725+4,R3 ; _ML_vram_adress
00002CC6 6E53 MOV R5,R14
00002CC8 2FD6 MOV.L R13,@-R15
00002CCA 2FC6 MOV.L R12,@-R15
00002CCC 2FB6 MOV.L R11,@-R15
00002CCE 2FA6 MOV.L R10,@-R15
00002CD0 2F96 MOV.L R9,@-R15
00002CD2 6A63 MOV R6,R10
00002CD4 2F86 MOV.L R8,@-R15
00002CD6 4F22 STS.L PR,@-R15
00002CD8 4F12 STS.L MACL,@-R15
00002CDA 7FD4 ADD #-44,R15
00002CDC 1F41 MOV.L R4,@(4,R15)
00002CDE 2F72 MOV.L R7,@R15
00002CE0 0DFE MOV.L @(R0,R15),R13
00002CE2 E058 MOV #88,R0
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 134
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002CE4 430B JSR @R3
00002CE6 0CFE MOV.L @(R0,R15),R12
00002CE8 1F09 MOV.L R0,@(36,R15)
Monochrome 1353
Monochrome 1354 if (!bmp) return;
00002CEA 53F1 MOV.L @(4,R15),R3
00002CEC 2338 TST R3,R3
00002CEE 8B01 BF L1726
00002CF0 A0B1 BRA L1563
00002CF2 0009 NOP
00002CF4 L1726:
Monochrome 1355 if (zoom_h < 0) zoom_h = 0;
00002CF4 D32D MOV.L L1725+8,R3 ; __lts
00002CF6 61C3 MOV R12,R1
00002CF8 430B JSR @R3
00002CFA E000 MOV #0,R0
00002CFC 8800 CMP/EQ #0,R0
00002CFE 8D01 BT/S L1564
Monochrome 1356 if (zoom_w < 0) zoom_w = 0;
00002D00 61D3 MOV R13,R1
00002D02 EC00 MOV #0,R12
00002D04 L1564:
00002D04 D229 MOV.L L1725+8,R2 ; __lts
00002D06 420B JSR @R2
00002D08 E000 MOV #0,R0
00002D0A 8800 CMP/EQ #0,R0
00002D0C 8900 BT L1565
00002D0E ED00 MOV #0,R13
00002D10 L1565:
Monochrome 1357 zoom_w14 = zoom_w * 16384;
00002D10 D027 MOV.L L1725+12,R0; H'46800000
00002D12 D328 MOV.L L1725+16,R3; __muls
00002D14 430B JSR @R3
00002D16 61D3 MOV R13,R1
00002D18 D227 MOV.L L1725+20,R2; __stoi
00002D1A 420B JSR @R2
00002D1C 0009 NOP
00002D1E 1F03 MOV.L R0,@(12,R15)
Monochrome 1358 zoom_h14 = zoom_h * 16384;
00002D20 D023 MOV.L L1725+12,R0; H'46800000
00002D22 D324 MOV.L L1725+16,R3; __muls
00002D24 430B JSR @R3
00002D26 61C3 MOV R12,R1
00002D28 D223 MOV.L L1725+20,R2; __stoi
00002D2A 420B JSR @R2
00002D2C 0009 NOP
Monochrome 1359 width_z = width * zoom_w14 >> 14 ;
00002D2E E1F2 MOV #-14,R1
00002D30 1F02 MOV.L R0,@(8,R15)
Monochrome 1360 height_z = height * zoom_h14 >> 14;
00002D32 E050 MOV #80,R0
00002D34 53F3 MOV.L @(12,R15),R3
00002D36 62F2 MOV.L @R15,R2
00002D38 00FE MOV.L @(R0,R15),R0
00002D3A 0237 MUL.L R3,R2
00002D3C 041A STS MACL,R4
00002D3E 441C SHAD R1,R4
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 135
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002D40 51F2 MOV.L @(8,R15),R1
00002D42 E3F2 MOV #-14,R3
00002D44 0017 MUL.L R1,R0
Monochrome 1361 nb_width = width + 7 >> 3;
00002D46 7207 ADD #7,R2
00002D48 071A STS MACL,R7
00002D4A 473C SHAD R3,R7
00002D4C 4221 SHAR R2
00002D4E 4221 SHAR R2
00002D50 4221 SHAR R2
Monochrome 1362
Monochrome 1363 if (x < 0) begin_x = -x;
00002D52 4E11 CMP/PZ R14
00002D54 8D02 BT/S L1566
00002D56 1F27 MOV.L R2,@(28,R15)
00002D58 A001 BRA L1567
00002D5A 66EB NEG R14,R6
00002D5C L1566:
Monochrome 1364 else begin_x = 0;
00002D5C E600 MOV #0,R6
00002D5E L1567:
Monochrome 1365 if (x+width_z > 128) end_x = 128-x;
00002D5E 63E3 MOV R14,R3
00002D60 9520 MOV.W L1725,R5 ; H'0080
00002D62 334C ADD R4,R3
00002D64 3357 CMP/GT R5,R3
00002D66 8B03 BF L1568
00002D68 6353 MOV R5,R3
00002D6A 33E8 SUB R14,R3
00002D6C A001 BRA L1569
00002D6E 1F3A MOV.L R3,@(40,R15)
00002D70 L1568:
Monochrome 1366 else end_x = width_z;
00002D70 1F4A MOV.L R4,@(40,R15)
00002D72 L1569:
Monochrome 1367 if (y < 0) begin_y = -y;
00002D72 4A11 CMP/PZ R10
00002D74 8D03 BT/S L1570
Monochrome 1368 else begin_y = 0;
Monochrome 1369 if (y+height_z > 64) end_y = 64-y;
00002D76 E440 MOV #64,R4
00002D78 62AB NEG R10,R2
00002D7A A002 BRA L1571
00002D7C 1F28 MOV.L R2,@(32,R15)
00002D7E L1570:
00002D7E E100 MOV #0,R1
00002D80 1F18 MOV.L R1,@(32,R15)
00002D82 L1571:
00002D82 63A3 MOV R10,R3
00002D84 337C ADD R7,R3
00002D86 3347 CMP/GT R4,R3
00002D88 8F03 BF/S L1572
Monochrome 1370 else end_y = height_z;
Monochrome 1371
Monochrome 1372 for (iz=begin_x; iz<end_x; iz++)
00002D8A 6863 MOV R6,R8
00002D8C 6C43 MOV R4,R12
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 136
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002D8E A001 BRA L1573
00002D90 3CA8 SUB R10,R12
00002D92 L1572:
00002D92 6C73 MOV R7,R12
00002D94 L1573:
00002D94 69E3 MOV R14,R9
00002D96 398C ADD R8,R9
00002D98 9E05 MOV.W L1725+2,R14; H'4000
00002D9A E30E MOV #14,R3
00002D9C ED07 MOV #7,R13
00002D9E 6B63 MOV R6,R11
00002DA0 A056 BRA L1574
00002DA2 4B3C SHAD R3,R11
00002DA4 L1725:
00002DA4 0080 .DATA.W H'0080
00002DA6 4000 .DATA.W H'4000
00002DA8 <00000000> .DATA.L _ML_vram_adress
00002DAC <00000000> .DATA.L __lts
00002DB0 46800000 .DATA.L H'46800000
00002DB4 <00000000> .DATA.L __muls
00002DB8 <00000000> .DATA.L __stoi
00002DBC L1575:
Monochrome 1373 {
Monochrome 1374 i = (iz << 14) / zoom_w14;
00002DBC D352 MOV.L L1727,R3 ; __divls
00002DBE 61B3 MOV R11,R1
00002DC0 430B JSR @R3
00002DC2 50F3 MOV.L @(12,R15),R0
00002DC4 6403 MOV R0,R4
Monochrome 1375 i3 = i >> 3;
00002DC6 6303 MOV R0,R3
00002DC8 4321 SHAR R3
00002DCA 4321 SHAR R3
00002DCC 4321 SHAR R3
Monochrome 1376 bit = 0x80 >> (i & 7);
00002DCE 24D9 AND R13,R4
00002DD0 1F36 MOV.L R3,@(24,R15)
00002DD2 6253 MOV R5,R2
00002DD4 644B NEG R4,R4
00002DD6 424C SHAD R4,R2
00002DD8 1F25 MOV.L R2,@(20,R15)
00002DDA 67A3 MOV R10,R7
Monochrome 1377 x_screen = x+iz;
00002DDC 2F92 MOV.L R9,@R15
00002DDE 6193 MOV R9,R1
Monochrome 1378
Monochrome 1379 for (jz=begin_y; jz<end_y; jz++)
00002DE0 54F8 MOV.L @(32,R15),R4
00002DE2 E30E MOV #14,R3
00002DE4 374C ADD R4,R7
00002DE6 4708 SHLL2 R7
00002DE8 4708 SHLL2 R7
00002DEA 4121 SHAR R1
00002DEC 4121 SHAR R1
00002DEE 4121 SHAR R1
00002DF0 371C ADD R1,R7
00002DF2 6643 MOV R4,R6
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 137
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002DF4 51F9 MOV.L @(36,R15),R1
00002DF6 6293 MOV R9,R2
00002DF8 371C ADD R1,R7
00002DFA 463C SHAD R3,R6
00002DFC 22D9 AND R13,R2
00002DFE 622B NEG R2,R2
00002E00 6053 MOV R5,R0
00002E02 402C SHAD R2,R0
00002E04 6007 NOT R0,R0
00002E06 62F3 MOV R15,R2
00002E08 7210 ADD #16,R2
00002E0A 34C3 CMP/GE R12,R4
00002E0C 8D1D BT/S L1576
00002E0E 2200 MOV.B R0,@R2
00002E10 L1577:
Monochrome 1380 {
Monochrome 1381 j = (jz << 14) / zoom_h14;
00002E10 D33D MOV.L L1727,R3 ; __divls
00002E12 6163 MOV R6,R1
00002E14 430B JSR @R3
00002E16 50F2 MOV.L @(8,R15),R0
00002E18 2F02 MOV.L R0,@R15
Monochrome 1382 pixel = bmp[i3 + nb_width * j] & bit;
00002E1A 53F7 MOV.L @(28,R15),R3
00002E1C 51F6 MOV.L @(24,R15),R1
00002E1E 0037 MUL.L R3,R0
00002E20 53F1 MOV.L @(4,R15),R3
00002E22 001A STS MACL,R0
00002E24 301C ADD R1,R0
00002E26 013C MOV.B @(R0,R3),R1
00002E28 53F5 MOV.L @(20,R15),R3
00002E2A 611C EXTU.B R1,R1
00002E2C 2139 AND R3,R1
Monochrome 1383 if (pixel == 0) vram[(y+jz<<4)+(x_screen>>3)] &= ~(128>>(x_screen&7));
00002E2E 6313 MOV R1,R3
00002E30 2338 TST R3,R3
00002E32 8F05 BF/S L1578
00002E34 2F12 MOV.L R1,@R15
00002E36 E010 MOV #16,R0
00002E38 6270 MOV.B @R7,R2
00002E3A 03FC MOV.B @(R0,R15),R3
00002E3C 2239 AND R3,R2
00002E3E 2720 MOV.B R2,@R7
00002E40 L1578:
00002E40 7401 ADD #1,R4
00002E42 7710 ADD #16,R7
00002E44 34C3 CMP/GE R12,R4
00002E46 8FE3 BF/S L1577
00002E48 36EC ADD R14,R6
00002E4A L1576:
00002E4A 7801 ADD #1,R8
00002E4C 7901 ADD #1,R9
00002E4E 3BEC ADD R14,R11
00002E50 L1574:
00002E50 52FA MOV.L @(40,R15),R2
00002E52 3823 CMP/GE R2,R8
00002E54 8BB2 BF L1575
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 138
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002E56 L1563:
Monochrome 1384 }
Monochrome 1385 }
Monochrome 1386 }
00002E56 7F2C ADD #44,R15
00002E58 4F16 LDS.L @R15+,MACL
00002E5A 4F26 LDS.L @R15+,PR
00002E5C 68F6 MOV.L @R15+,R8
00002E5E 69F6 MOV.L @R15+,R9
00002E60 6AF6 MOV.L @R15+,R10
00002E62 6BF6 MOV.L @R15+,R11
00002E64 6CF6 MOV.L @R15+,R12
00002E66 6DF6 MOV.L @R15+,R13
00002E68 000B RTS
00002E6A 6EF6 MOV.L @R15+,R14
Monochrome 1387 #endif
Monochrome 1388
Monochrome 1389 #ifdef ML_BMP_XOR_ZOOM
Monochrome 1390 void ML_bmp_xor_zoom(const unsigned char *bmp, int x, int y, int width, int height, float zoom_w, float zo
+om_h)
00002E6C _ML_bmp_xor_zoom: ; function: ML_bmp_xor_zoom
; frame size=80
; used runtime library name:
; __divls, __muls, __stoi, __lts
00002E6C 2FE6 MOV.L R14,@-R15
00002E6E E054 MOV #84,R0
Monochrome 1391 {
Monochrome 1392 int i, j, iz, jz, width_z, height_z, nb_width, i3, bit, x_screen, pixel;
Monochrome 1393 int zoom_w14, zoom_h14;
Monochrome 1394 int begin_x, end_x, begin_y, end_y;
Monochrome 1395 char* vram = ML_vram_adress();
00002E70 D326 MOV.L L1727+4,R3 ; _ML_vram_adress
00002E72 6E53 MOV R5,R14
00002E74 2FD6 MOV.L R13,@-R15
00002E76 2FC6 MOV.L R12,@-R15
00002E78 2FB6 MOV.L R11,@-R15
00002E7A 2FA6 MOV.L R10,@-R15
00002E7C 2F96 MOV.L R9,@-R15
00002E7E 6A63 MOV R6,R10
00002E80 2F86 MOV.L R8,@-R15
00002E82 4F22 STS.L PR,@-R15
00002E84 4F12 STS.L MACL,@-R15
00002E86 7FD4 ADD #-44,R15
00002E88 1F41 MOV.L R4,@(4,R15)
00002E8A 2F72 MOV.L R7,@R15
00002E8C 0DFE MOV.L @(R0,R15),R13
00002E8E E058 MOV #88,R0
00002E90 430B JSR @R3
00002E92 0CFE MOV.L @(R0,R15),R12
00002E94 1F09 MOV.L R0,@(36,R15)
Monochrome 1396
Monochrome 1397 if (!bmp) return;
00002E96 53F1 MOV.L @(4,R15),R3
00002E98 2338 TST R3,R3
00002E9A 8B01 BF L1728
00002E9C A0AD BRA L1580
00002E9E 0009 NOP
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 139
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002EA0 L1728:
Monochrome 1398 if (zoom_h < 0) zoom_h = 0;
00002EA0 D31B MOV.L L1727+8,R3 ; __lts
00002EA2 61C3 MOV R12,R1
00002EA4 430B JSR @R3
00002EA6 E000 MOV #0,R0
00002EA8 8800 CMP/EQ #0,R0
00002EAA 8D01 BT/S L1581
Monochrome 1399 if (zoom_w < 0) zoom_w = 0;
00002EAC 61D3 MOV R13,R1
00002EAE EC00 MOV #0,R12
00002EB0 L1581:
00002EB0 D217 MOV.L L1727+8,R2 ; __lts
00002EB2 420B JSR @R2
00002EB4 E000 MOV #0,R0
00002EB6 8800 CMP/EQ #0,R0
00002EB8 8900 BT L1582
00002EBA ED00 MOV #0,R13
00002EBC L1582:
Monochrome 1400 zoom_w14 = zoom_w * 16384;
00002EBC D015 MOV.L L1727+12,R0; H'46800000
00002EBE D316 MOV.L L1727+16,R3; __muls
00002EC0 430B JSR @R3
00002EC2 61D3 MOV R13,R1
00002EC4 D215 MOV.L L1727+20,R2; __stoi
00002EC6 420B JSR @R2
00002EC8 0009 NOP
00002ECA 1F03 MOV.L R0,@(12,R15)
Monochrome 1401 zoom_h14 = zoom_h * 16384;
00002ECC D011 MOV.L L1727+12,R0; H'46800000
00002ECE D312 MOV.L L1727+16,R3; __muls
00002ED0 430B JSR @R3
00002ED2 61C3 MOV R12,R1
00002ED4 D211 MOV.L L1727+20,R2; __stoi
00002ED6 420B JSR @R2
00002ED8 0009 NOP
Monochrome 1402 width_z = width * zoom_w14 >> 14 ;
00002EDA E1F2 MOV #-14,R1
00002EDC 1F02 MOV.L R0,@(8,R15)
Monochrome 1403 height_z = height * zoom_h14 >> 14;
00002EDE E050 MOV #80,R0
00002EE0 53F3 MOV.L @(12,R15),R3
00002EE2 62F2 MOV.L @R15,R2
00002EE4 00FE MOV.L @(R0,R15),R0
00002EE6 0237 MUL.L R3,R2
00002EE8 041A STS MACL,R4
00002EEA 441C SHAD R1,R4
00002EEC 51F2 MOV.L @(8,R15),R1
00002EEE E3F2 MOV #-14,R3
00002EF0 0017 MUL.L R1,R0
Monochrome 1404 nb_width = width + 7 >> 3;
00002EF2 7207 ADD #7,R2
00002EF4 071A STS MACL,R7
00002EF6 473C SHAD R3,R7
00002EF8 4221 SHAR R2
00002EFA 4221 SHAR R2
00002EFC 4221 SHAR R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 140
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 1405
Monochrome 1406 if (x < 0) begin_x = -x;
00002EFE 4E11 CMP/PZ R14
00002F00 8D0E BT/S L1583
00002F02 1F27 MOV.L R2,@(28,R15)
00002F04 A00D BRA L1584
00002F06 66EB NEG R14,R6
00002F08 L1727:
00002F08 <00000000> .DATA.L __divls
00002F0C <00000000> .DATA.L _ML_vram_adress
00002F10 <00000000> .DATA.L __lts
00002F14 46800000 .DATA.L H'46800000
00002F18 <00000000> .DATA.L __muls
00002F1C <00000000> .DATA.L __stoi
00002F20 L1583:
Monochrome 1407 else begin_x = 0;
00002F20 E600 MOV #0,R6
00002F22 L1584:
Monochrome 1408 if (x+width_z > 128) end_x = 128-x;
00002F22 63E3 MOV R14,R3
00002F24 9574 MOV.W L1729,R5 ; H'0080
00002F26 334C ADD R4,R3
00002F28 3357 CMP/GT R5,R3
00002F2A 8B03 BF L1585
00002F2C 6353 MOV R5,R3
00002F2E 33E8 SUB R14,R3
00002F30 A001 BRA L1586
00002F32 1F3A MOV.L R3,@(40,R15)
00002F34 L1585:
Monochrome 1409 else end_x = width_z;
00002F34 1F4A MOV.L R4,@(40,R15)
00002F36 L1586:
Monochrome 1410 if (y < 0) begin_y = -y;
00002F36 4A11 CMP/PZ R10
00002F38 8D03 BT/S L1587
Monochrome 1411 else begin_y = 0;
Monochrome 1412 if (y+height_z > 64) end_y = 64-y;
00002F3A E440 MOV #64,R4
00002F3C 62AB NEG R10,R2
00002F3E A002 BRA L1588
00002F40 1F28 MOV.L R2,@(32,R15)
00002F42 L1587:
00002F42 E100 MOV #0,R1
00002F44 1F18 MOV.L R1,@(32,R15)
00002F46 L1588:
00002F46 63A3 MOV R10,R3
00002F48 337C ADD R7,R3
00002F4A 3347 CMP/GT R4,R3
00002F4C 8F03 BF/S L1589
Monochrome 1413 else end_y = height_z;
Monochrome 1414
Monochrome 1415 for (iz=begin_x; iz<end_x; iz++)
00002F4E 6863 MOV R6,R8
00002F50 6C43 MOV R4,R12
00002F52 A001 BRA L1590
00002F54 3CA8 SUB R10,R12
00002F56 L1589:
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 141
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002F56 6C73 MOV R7,R12
00002F58 L1590:
00002F58 69E3 MOV R14,R9
00002F5A 398C ADD R8,R9
00002F5C 9E59 MOV.W L1729+2,R14; H'4000
00002F5E E30E MOV #14,R3
00002F60 ED07 MOV #7,R13
00002F62 6B63 MOV R6,R11
00002F64 A046 BRA L1591
00002F66 4B3C SHAD R3,R11
00002F68 L1592:
Monochrome 1416 {
Monochrome 1417 i = (iz << 14) / zoom_w14;
00002F68 D32A MOV.L L1729+4,R3 ; __divls
00002F6A 61B3 MOV R11,R1
00002F6C 430B JSR @R3
00002F6E 50F3 MOV.L @(12,R15),R0
00002F70 6403 MOV R0,R4
Monochrome 1418 i3 = i >> 3;
00002F72 6303 MOV R0,R3
00002F74 4321 SHAR R3
00002F76 4321 SHAR R3
00002F78 4321 SHAR R3
Monochrome 1419 bit = 0x80 >> (i & 7);
00002F7A 24D9 AND R13,R4
00002F7C 1F36 MOV.L R3,@(24,R15)
00002F7E 6253 MOV R5,R2
00002F80 644B NEG R4,R4
00002F82 424C SHAD R4,R2
00002F84 1F25 MOV.L R2,@(20,R15)
00002F86 67A3 MOV R10,R7
Monochrome 1420 x_screen = x+iz;
00002F88 2F92 MOV.L R9,@R15
00002F8A 6193 MOV R9,R1
Monochrome 1421
Monochrome 1422 for (jz=begin_y; jz<end_y; jz++)
00002F8C 54F8 MOV.L @(32,R15),R4
00002F8E E30E MOV #14,R3
00002F90 374C ADD R4,R7
00002F92 4708 SHLL2 R7
00002F94 4708 SHLL2 R7
00002F96 4121 SHAR R1
00002F98 4121 SHAR R1
00002F9A 4121 SHAR R1
00002F9C 371C ADD R1,R7
00002F9E 6643 MOV R4,R6
00002FA0 51F9 MOV.L @(36,R15),R1
00002FA2 6293 MOV R9,R2
00002FA4 371C ADD R1,R7
00002FA6 463C SHAD R3,R6
00002FA8 22D9 AND R13,R2
00002FAA 622B NEG R2,R2
00002FAC 6053 MOV R5,R0
00002FAE 402C SHAD R2,R0
00002FB0 34C3 CMP/GE R12,R4
00002FB2 8D1C BT/S L1593
00002FB4 1F04 MOV.L R0,@(16,R15)
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 142
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00002FB6 L1594:
Monochrome 1423 {
Monochrome 1424 j = (jz << 14) / zoom_h14;
00002FB6 6163 MOV R6,R1
00002FB8 D316 MOV.L L1729+4,R3 ; __divls
00002FBA 430B JSR @R3
00002FBC 50F2 MOV.L @(8,R15),R0
00002FBE 2F02 MOV.L R0,@R15
Monochrome 1425 pixel = bmp[i3 + nb_width * j] & bit;
00002FC0 53F7 MOV.L @(28,R15),R3
00002FC2 0037 MUL.L R3,R0
00002FC4 51F6 MOV.L @(24,R15),R1
00002FC6 001A STS MACL,R0
00002FC8 53F1 MOV.L @(4,R15),R3
00002FCA 301C ADD R1,R0
00002FCC 013C MOV.B @(R0,R3),R1
00002FCE 611C EXTU.B R1,R1
00002FD0 53F5 MOV.L @(20,R15),R3
00002FD2 2139 AND R3,R1
Monochrome 1426 if (pixel != 0) vram[(y+jz<<4)+(x_screen>>3)] ^= 128>>(x_screen&7);
00002FD4 6313 MOV R1,R3
00002FD6 2338 TST R3,R3
00002FD8 8D04 BT/S L1595
00002FDA 2F12 MOV.L R1,@R15
00002FDC 53F4 MOV.L @(16,R15),R3
00002FDE 6270 MOV.B @R7,R2
00002FE0 223A XOR R3,R2
00002FE2 2720 MOV.B R2,@R7
00002FE4 L1595:
00002FE4 7401 ADD #1,R4
00002FE6 7710 ADD #16,R7
00002FE8 34C3 CMP/GE R12,R4
00002FEA 8FE4 BF/S L1594
00002FEC 36EC ADD R14,R6
00002FEE L1593:
00002FEE 7801 ADD #1,R8
00002FF0 7901 ADD #1,R9
00002FF2 3BEC ADD R14,R11
00002FF4 L1591:
00002FF4 52FA MOV.L @(40,R15),R2
00002FF6 3823 CMP/GE R2,R8
00002FF8 8BB6 BF L1592
00002FFA L1580:
Monochrome 1427 }
Monochrome 1428 }
Monochrome 1429 }
00002FFA 7F2C ADD #44,R15
00002FFC 4F16 LDS.L @R15+,MACL
00002FFE 4F26 LDS.L @R15+,PR
00003000 68F6 MOV.L @R15+,R8
00003002 69F6 MOV.L @R15+,R9
00003004 6AF6 MOV.L @R15+,R10
00003006 6BF6 MOV.L @R15+,R11
00003008 6CF6 MOV.L @R15+,R12
0000300A 6DF6 MOV.L @R15+,R13
0000300C 000B RTS
0000300E 6EF6 MOV.L @R15+,R14
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 143
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00003010 L1729:
00003010 0080 .DATA.W H'0080
00003012 4000 .DATA.W H'4000
00003014 <00000000> .DATA.L __divls
Monochrome 1430 #endif
Monochrome 1431
Monochrome 1432 #ifdef ML_BMP_OR_ROTATE
Monochrome 1433 void ML_bmp_or_rotate(const unsigned char *bmp, int x, int y, int width, int height, int angle)
00003018 _ML_bmp_or_rotate: ; function: ML_bmp_or_rotate
; frame size=128
; used runtime library name:
; __modls, __muls, __muld, __divdr, __negd, __dtos, __stoi, __itod
00003018 2FE6 MOV.L R14,@-R15
0000301A E058 MOV #88,R0
Monochrome 1434 {
Monochrome 1435 int i, j, i3, dx, dy, ox, oy, xr, yr, nb_width, pixel, bit;
Monochrome 1436 int cosinus, sinus;
Monochrome 1437 char* vram = ML_vram_adress();
0000301C D347 MOV.L L1730+12,R3; _ML_vram_adress
0000301E 2FD6 MOV.L R13,@-R15
00003020 2FC6 MOV.L R12,@-R15
00003022 2FB6 MOV.L R11,@-R15
00003024 2FA6 MOV.L R10,@-R15
00003026 2F96 MOV.L R9,@-R15
00003028 2F86 MOV.L R8,@-R15
0000302A E900 MOV #0,R9
0000302C 4F22 STS.L PR,@-R15
0000302E 4F12 STS.L MACL,@-R15
00003030 7FD0 ADD #-48,R15
00003032 1F47 MOV.L R4,@(28,R15)
00003034 1F55 MOV.L R5,@(20,R15)
00003036 1F66 MOV.L R6,@(24,R15)
00003038 1F74 MOV.L R7,@(16,R15)
0000303A 430B JSR @R3
0000303C 0EFE MOV.L @(R0,R15),R14
0000303E 1F0B MOV.L R0,@(44,R15)
Monochrome 1438
Monochrome 1439 if (!bmp) return;
00003040 53F7 MOV.L @(28,R15),R3
00003042 2338 TST R3,R3
00003044 8B01 BF L1731
00003046 A0F8 BRA L1597
00003048 0009 NOP
0000304A L1731:
Monochrome 1440 ox = x + width / 2;
0000304A E200 MOV #0,R2
0000304C 51F5 MOV.L @(20,R15),R1
Monochrome 1441 oy = y + height / 2;
0000304E E054 MOV #84,R0
Monochrome 1442 angle %= 360;
00003050 946E MOV.W L1730,R4 ; H'0168
00003052 53F4 MOV.L @(16,R15),R3
00003054 3237 CMP/GT R3,R2
00003056 332E ADDC R2,R3
00003058 4321 SHAR R3
0000305A 331C ADD R1,R3
0000305C 1F32 MOV.L R3,@(8,R15)
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 144
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000305E 02FE MOV.L @(R0,R15),R2
00003060 D337 MOV.L L1730+16,R3; __modls
00003062 E000 MOV #0,R0
00003064 3027 CMP/GT R2,R0
00003066 320E ADDC R0,R2
00003068 50F6 MOV.L @(24,R15),R0
0000306A 4221 SHAR R2
0000306C 320C ADD R0,R2
0000306E 6043 MOV R4,R0
00003070 1F21 MOV.L R2,@(4,R15)
00003072 430B JSR @R3
00003074 61E3 MOV R14,R1
00003076 6E03 MOV R0,R14
Monochrome 1443 if (angle < 0) angle += 360;
00003078 4E11 CMP/PZ R14
0000307A 8900 BT L1598
0000307C 3E4C ADD R4,R14
0000307E L1598:
Monochrome 1444 if (angle == 0) {cosinus = 16384; sinus = 0;}
0000307E 2EE8 TST R14,R14
00003080 9457 MOV.W L1730+2,R4 ; H'4000
00003082 8B01 BF L1599
00003084 A00B BRA L1096
00003086 6D43 MOV R4,R13
00003088 L1599:
Monochrome 1445 else if (angle == 90) {cosinus = 0; sinus = -16384;}
00003088 9554 MOV.W L1730+4,R5 ; H'C000
0000308A 60E3 MOV R14,R0
0000308C 885A CMP/EQ #90,R0
0000308E 8B02 BF L1601
00003090 6D93 MOV R9,R13
00003092 A043 BRA L1600
00003094 6B53 MOV R5,R11
00003096 L1601:
Monochrome 1446 else if (angle == 180) {cosinus = -16384; sinus = 0;}
00003096 924E MOV.W L1730+6,R2 ; H'00B4
00003098 3E20 CMP/EQ R2,R14
0000309A 8B02 BF L1603
0000309C 6D53 MOV R5,R13
0000309E L1096:
0000309E A03D BRA L1600
000030A0 6B93 MOV R9,R11
000030A2 L1603:
Monochrome 1447 else if (angle == 270) {cosinus = 0; sinus = 16384;}
000030A2 9349 MOV.W L1730+8,R3 ; H'010E
000030A4 3E30 CMP/EQ R3,R14
000030A6 8B02 BF L1605
000030A8 6D93 MOV R9,R13
000030AA A037 BRA L1600
000030AC 6B43 MOV R4,R11
000030AE L1605:
Monochrome 1448 else
Monochrome 1449 {
Monochrome 1450 cosinus = cosf(-3.14 * angle / 180.0) * 16384;
000030AE 60E3 MOV R14,R0
000030B0 D124 MOV.L L1730+20,R1; __itod
000030B2 7FE0 ADD #-32,R15
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 145
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000030B4 410B JSR @R1
000030B6 2FF6 MOV.L R15,@-R15
000030B8 D023 MOV.L L1730+24,R0; H'51EB851F
000030BA 2F06 MOV.L R0,@-R15
000030BC D023 MOV.L L1730+28,R0; H'40091EB8
000030BE 2F06 MOV.L R0,@-R15
000030C0 D023 MOV.L L1730+32,R0; __muld
000030C2 61F3 MOV R15,R1
000030C4 7110 ADD #16,R1
000030C6 400B JSR @R0
000030C8 2F16 MOV.L R1,@-R15
000030CA E108 MOV #8,R1
000030CC 31FC ADD R15,R1
000030CE 2F16 MOV.L R1,@-R15
000030D0 D120 MOV.L L1730+36,R1; __negd
000030D2 410B JSR @R1
000030D4 0009 NOP
000030D6 E000 MOV #0,R0
000030D8 2F06 MOV.L R0,@-R15
000030DA D01F MOV.L L1730+40,R0; H'40668000
000030DC 2F06 MOV.L R0,@-R15
000030DE 61F3 MOV R15,R1
000030E0 D01E MOV.L L1730+44,R0; __divdr
000030E2 7110 ADD #16,R1
000030E4 400B JSR @R0
000030E6 2F16 MOV.L R1,@-R15
000030E8 D11D MOV.L L1730+48,R1; __dtos
000030EA 410B JSR @R1
000030EC 0009 NOP
000030EE 1F03 MOV.L R0,@(12,R15)
000030F0 D21C MOV.L L1730+52,R2; _cosf
000030F2 420B JSR @R2
000030F4 6403 MOV R0,R4
000030F6 D11C MOV.L L1730+56,R1; H'46800000
000030F8 D31C MOV.L L1730+60,R3; __muls
000030FA 430B JSR @R3
000030FC 0009 NOP
000030FE D21C MOV.L L1730+64,R2; __stoi
00003100 420B JSR @R2
00003102 0009 NOP
Monochrome 1451 sinus = sinf(-3.14 * angle / 180.0) * 16384;
00003104 D31B MOV.L L1730+68,R3; _sinf
00003106 6D03 MOV R0,R13
00003108 430B JSR @R3
0000310A 54F3 MOV.L @(12,R15),R4
0000310C D116 MOV.L L1730+56,R1; H'46800000
0000310E D217 MOV.L L1730+60,R2; __muls
00003110 420B JSR @R2
00003112 0009 NOP
00003114 D316 MOV.L L1730+64,R3; __stoi
00003116 430B JSR @R3
00003118 0009 NOP
0000311A 6B03 MOV R0,R11
0000311C L1600:
Monochrome 1452 }
Monochrome 1453 nb_width = width + 7 >> 3;
0000311C 52F4 MOV.L @(16,R15),R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 146
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 1454
Monochrome 1455 for (i=0; i<width; i++)
0000311E 6693 MOV R9,R6
00003120 980B MOV.W L1730+10,R8; H'0080
00003122 7207 ADD #7,R2
00003124 4221 SHAR R2
00003126 4221 SHAR R2
00003128 4221 SHAR R2
0000312A 2F22 MOV.L R2,@R15
0000312C A082 BRA L1607
0000312E EA07 MOV #7,R10
00003130 L1730:
00003130 0168 .DATA.W H'0168
00003132 4000 .DATA.W H'4000
00003134 C000 .DATA.W H'C000
00003136 00B4 .DATA.W H'00B4
00003138 010E .DATA.W H'010E
0000313A 0080 .DATA.W H'0080
0000313C <00000000> .DATA.L _ML_vram_adress
00003140 <00000000> .DATA.L __modls
00003144 <00000000> .DATA.L __itod
00003148 51EB851F .DATA.L H'51EB851F
0000314C 40091EB8 .DATA.L H'40091EB8
00003150 <00000000> .DATA.L __muld
00003154 <00000000> .DATA.L __negd
00003158 40668000 .DATA.L H'40668000
0000315C <00000000> .DATA.L __divdr
00003160 <00000000> .DATA.L __dtos
00003164 <00000000> .DATA.L _cosf
00003168 46800000 .DATA.L H'46800000
0000316C <00000000> .DATA.L __muls
00003170 <00000000> .DATA.L __stoi
00003174 <00000000> .DATA.L _sinf
00003178 L1608:
Monochrome 1456 {
Monochrome 1457 bit = 0x80 >> (i & 7);
00003178 6263 MOV R6,R2
0000317A 22A9 AND R10,R2
0000317C 622B NEG R2,R2
0000317E 6383 MOV R8,R3
00003180 432C SHAD R2,R3
Monochrome 1458 i3 = i >> 3;
00003182 6563 MOV R6,R5
00003184 1F38 MOV.L R3,@(32,R15)
Monochrome 1459 dx = x + i - ox;
Monochrome 1460 for (j=0; j<height; j++)
00003186 6C93 MOV R9,R12
00003188 54F5 MOV.L @(20,R15),R4
0000318A E054 MOV #84,R0
0000318C 52F2 MOV.L @(8,R15),R2
0000318E 4521 SHAR R5
00003190 67F2 MOV.L @R15,R7
00003192 346C ADD R6,R4
00003194 51F7 MOV.L @(28,R15),R1
00003196 4521 SHAR R5
00003198 5EF6 MOV.L @(24,R15),R14
0000319A 3428 SUB R2,R4
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 147
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000319C 0C77 MUL.L R7,R12
0000319E 4521 SHAR R5
000031A0 53F1 MOV.L @(4,R15),R3
000031A2 071A STS MACL,R7
000031A4 04D7 MUL.L R13,R4
000031A6 375C ADD R5,R7
000031A8 371C ADD R1,R7
000031AA 021A STS MACL,R2
000031AC 1F29 MOV.L R2,@(36,R15)
000031AE 04B7 MUL.L R11,R4
000031B0 041A STS MACL,R4
000031B2 1F4A MOV.L R4,@(40,R15)
000031B4 01FE MOV.L @(R0,R15),R1
000031B6 4115 CMP/PL R1
000031B8 8F3B BF/S L1609
000031BA 3E38 SUB R3,R14
000031BC L1610:
Monochrome 1461 {
Monochrome 1462 dy = y + j - oy;
Monochrome 1463 xr = ox + (dx * cosinus - dy * sinus >> 14);
000031BC 54F9 MOV.L @(36,R15),R4
Monochrome 1464 yr = oy + (dx * sinus + dy * cosinus >> 14);
000031BE E1F2 MOV #-14,R1
000031C0 50F1 MOV.L @(4,R15),R0
000031C2 65E3 MOV R14,R5
000031C4 52F2 MOV.L @(8,R15),R2
000031C6 05B7 MUL.L R11,R5
000031C8 031A STS MACL,R3
000031CA 3438 SUB R3,R4
000031CC 05D7 MUL.L R13,R5
000031CE E3F2 MOV #-14,R3
000031D0 443C SHAD R3,R4
000031D2 342C ADD R2,R4
000031D4 53FA MOV.L @(40,R15),R3
000031D6 051A STS MACL,R5
000031D8 353C ADD R3,R5
000031DA 451C SHAD R1,R5
Monochrome 1465 if (!(xr < 0 || xr > 127 || yr < 0 || yr > 63))
000031DC 4411 CMP/PZ R4
000031DE 8F20 BF/S L1611
000031E0 350C ADD R0,R5
000031E2 E17F MOV #127,R1
000031E4 3417 CMP/GT R1,R4
000031E6 891C BT L1611
000031E8 4511 CMP/PZ R5
000031EA 8B1A BF L1611
000031EC E33F MOV #63,R3
000031EE 3537 CMP/GT R3,R5
000031F0 8917 BT L1611
Monochrome 1466 {
Monochrome 1467 pixel = bmp[i3 + nb_width * j] & bit;
000031F2 6170 MOV.B @R7,R1
000031F4 53F8 MOV.L @(32,R15),R3
000031F6 611C EXTU.B R1,R1
000031F8 2139 AND R3,R1
Monochrome 1468 if (pixel != 0) vram[(yr<<4)+(xr>>3)] |= 128>>(xr&7);
000031FA 2118 TST R1,R1
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 148
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000031FC 8D11 BT/S L1611
000031FE 1F13 MOV.L R1,@(12,R15)
00003200 50FB MOV.L @(44,R15),R0
00003202 6183 MOV R8,R1
00003204 6253 MOV R5,R2
00003206 4208 SHLL2 R2
00003208 4208 SHLL2 R2
0000320A 6343 MOV R4,R3
0000320C 4321 SHAR R3
0000320E 4321 SHAR R3
00003210 4321 SHAR R3
00003212 323C ADD R3,R2
00003214 6343 MOV R4,R3
00003216 23A9 AND R10,R3
00003218 633B NEG R3,R3
0000321A 413C SHAD R3,R1
0000321C 032C MOV.B @(R0,R2),R3
0000321E 231B OR R1,R3
00003220 0234 MOV.B R3,@(R0,R2)
00003222 L1611:
00003222 7C01 ADD #1,R12
00003224 62F2 MOV.L @R15,R2
00003226 E054 MOV #84,R0
00003228 03FE MOV.L @(R0,R15),R3
0000322A 372C ADD R2,R7
0000322C 3C33 CMP/GE R3,R12
0000322E 8FC5 BF/S L1610
00003230 7E01 ADD #1,R14
00003232 L1609:
00003232 7601 ADD #1,R6
00003234 L1607:
00003234 53F4 MOV.L @(16,R15),R3
00003236 3633 CMP/GE R3,R6
00003238 8B9E BF L1608
0000323A L1597:
Monochrome 1469 }
Monochrome 1470 }
Monochrome 1471 }
Monochrome 1472 }
0000323A 7F30 ADD #48,R15
0000323C 4F16 LDS.L @R15+,MACL
0000323E 4F26 LDS.L @R15+,PR
00003240 68F6 MOV.L @R15+,R8
00003242 69F6 MOV.L @R15+,R9
00003244 6AF6 MOV.L @R15+,R10
00003246 6BF6 MOV.L @R15+,R11
00003248 6CF6 MOV.L @R15+,R12
0000324A 6DF6 MOV.L @R15+,R13
0000324C 000B RTS
0000324E 6EF6 MOV.L @R15+,R14
Monochrome 1473 #endif
Monochrome 1474
Monochrome 1475 #ifdef ML_BMP_AND_ROTATE
Monochrome 1476 void ML_bmp_and_rotate(const unsigned char *bmp, int x, int y, int width, int height, int angle)
00003250 _ML_bmp_and_rotate: ; function: ML_bmp_and_rotate
; frame size=128
; used runtime library name:
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 149
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
; __modls, __muls, __muld, __divdr, __negd, __dtos, __stoi, __itod
00003250 2FE6 MOV.L R14,@-R15
00003252 E058 MOV #88,R0
Monochrome 1477 {
Monochrome 1478 int i, j, i3, dx, dy, ox, oy, xr, yr, nb_width, pixel, bit;
Monochrome 1479 int cosinus, sinus;
Monochrome 1480 char* vram = ML_vram_adress();
00003254 D31B MOV.L L1732+4,R3 ; _ML_vram_adress
00003256 2FD6 MOV.L R13,@-R15
00003258 2FC6 MOV.L R12,@-R15
0000325A 2FB6 MOV.L R11,@-R15
0000325C 2FA6 MOV.L R10,@-R15
0000325E 2F96 MOV.L R9,@-R15
00003260 2F86 MOV.L R8,@-R15
00003262 E900 MOV #0,R9
00003264 4F22 STS.L PR,@-R15
00003266 4F12 STS.L MACL,@-R15
00003268 7FD0 ADD #-48,R15
0000326A 1F47 MOV.L R4,@(28,R15)
0000326C 1F55 MOV.L R5,@(20,R15)
0000326E 1F66 MOV.L R6,@(24,R15)
00003270 1F74 MOV.L R7,@(16,R15)
00003272 430B JSR @R3
00003274 0EFE MOV.L @(R0,R15),R14
00003276 1F0B MOV.L R0,@(44,R15)
Monochrome 1481
Monochrome 1482 if (!bmp) return;
00003278 53F7 MOV.L @(28,R15),R3
0000327A 2338 TST R3,R3
0000327C 8B01 BF L1733
0000327E A0F9 BRA L1614
00003280 0009 NOP
00003282 L1733:
Monochrome 1483 ox = x + width / 2;
00003282 E200 MOV #0,R2
00003284 51F5 MOV.L @(20,R15),R1
Monochrome 1484 oy = y + height / 2;
00003286 E054 MOV #84,R0
Monochrome 1485 angle %= 360;
00003288 941A MOV.W L1732,R4 ; H'0168
0000328A 53F4 MOV.L @(16,R15),R3
0000328C 3237 CMP/GT R3,R2
0000328E 332E ADDC R2,R3
00003290 4321 SHAR R3
00003292 331C ADD R1,R3
00003294 1F32 MOV.L R3,@(8,R15)
00003296 02FE MOV.L @(R0,R15),R2
00003298 D30B MOV.L L1732+8,R3 ; __modls
0000329A E000 MOV #0,R0
0000329C 3027 CMP/GT R2,R0
0000329E 320E ADDC R0,R2
000032A0 50F6 MOV.L @(24,R15),R0
000032A2 4221 SHAR R2
000032A4 320C ADD R0,R2
000032A6 6043 MOV R4,R0
000032A8 1F21 MOV.L R2,@(4,R15)
000032AA 430B JSR @R3
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 150
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000032AC 61E3 MOV R14,R1
000032AE 6E03 MOV R0,R14
Monochrome 1486 if (angle < 0) angle += 360;
000032B0 4E11 CMP/PZ R14
000032B2 8900 BT L1615
000032B4 3E4C ADD R4,R14
000032B6 L1615:
Monochrome 1487 if (angle == 0) {cosinus = 16384; sinus = 0;}
000032B6 2EE8 TST R14,R14
000032B8 9403 MOV.W L1732+2,R4 ; H'4000
000032BA 8B07 BF L1616
000032BC A011 BRA L1097
000032BE 6D43 MOV R4,R13
000032C0 L1732:
000032C0 0168 .DATA.W H'0168
000032C2 4000 .DATA.W H'4000
000032C4 <00000000> .DATA.L _ML_vram_adress
000032C8 <00000000> .DATA.L __modls
000032CC L1616:
Monochrome 1488 else if (angle == 90) {cosinus = 0; sinus = -16384;}
000032CC 9552 MOV.W L1734,R5 ; H'C000
000032CE 60E3 MOV R14,R0
000032D0 885A CMP/EQ #90,R0
000032D2 8B02 BF L1618
000032D4 6D93 MOV R9,R13
000032D6 A043 BRA L1617
000032D8 6B53 MOV R5,R11
000032DA L1618:
Monochrome 1489 else if (angle == 180) {cosinus = -16384; sinus = 0;}
000032DA 924C MOV.W L1734+2,R2 ; H'00B4
000032DC 3E20 CMP/EQ R2,R14
000032DE 8B02 BF L1620
000032E0 6D53 MOV R5,R13
000032E2 L1097:
000032E2 A03D BRA L1617
000032E4 6B93 MOV R9,R11
000032E6 L1620:
Monochrome 1490 else if (angle == 270) {cosinus = 0; sinus = 16384;}
000032E6 9347 MOV.W L1734+4,R3 ; H'010E
000032E8 3E30 CMP/EQ R3,R14
000032EA 8B02 BF L1622
000032EC 6D93 MOV R9,R13
000032EE A037 BRA L1617
000032F0 6B43 MOV R4,R11
000032F2 L1622:
Monochrome 1491 else
Monochrome 1492 {
Monochrome 1493 cosinus = cosf(-3.14 * angle / 180.0) * 16384;
000032F2 60E3 MOV R14,R0
000032F4 D121 MOV.L L1734+8,R1 ; __itod
000032F6 7FE0 ADD #-32,R15
000032F8 410B JSR @R1
000032FA 2FF6 MOV.L R15,@-R15
000032FC D020 MOV.L L1734+12,R0; H'51EB851F
000032FE 2F06 MOV.L R0,@-R15
00003300 D020 MOV.L L1734+16,R0; H'40091EB8
00003302 2F06 MOV.L R0,@-R15
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 151
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00003304 D020 MOV.L L1734+20,R0; __muld
00003306 61F3 MOV R15,R1
00003308 7110 ADD #16,R1
0000330A 400B JSR @R0
0000330C 2F16 MOV.L R1,@-R15
0000330E E108 MOV #8,R1
00003310 31FC ADD R15,R1
00003312 2F16 MOV.L R1,@-R15
00003314 D11D MOV.L L1734+24,R1; __negd
00003316 410B JSR @R1
00003318 0009 NOP
0000331A E000 MOV #0,R0
0000331C 2F06 MOV.L R0,@-R15
0000331E D01C MOV.L L1734+28,R0; H'40668000
00003320 2F06 MOV.L R0,@-R15
00003322 61F3 MOV R15,R1
00003324 D01B MOV.L L1734+32,R0; __divdr
00003326 7110 ADD #16,R1
00003328 400B JSR @R0
0000332A 2F16 MOV.L R1,@-R15
0000332C D11A MOV.L L1734+36,R1; __dtos
0000332E 410B JSR @R1
00003330 0009 NOP
00003332 1F03 MOV.L R0,@(12,R15)
00003334 D219 MOV.L L1734+40,R2; _cosf
00003336 420B JSR @R2
00003338 6403 MOV R0,R4
0000333A D119 MOV.L L1734+44,R1; H'46800000
0000333C D319 MOV.L L1734+48,R3; __muls
0000333E 430B JSR @R3
00003340 0009 NOP
00003342 D219 MOV.L L1734+52,R2; __stoi
00003344 420B JSR @R2
00003346 0009 NOP
Monochrome 1494 sinus = sinf(-3.14 * angle / 180.0) * 16384;
00003348 D318 MOV.L L1734+56,R3; _sinf
0000334A 6D03 MOV R0,R13
0000334C 430B JSR @R3
0000334E 54F3 MOV.L @(12,R15),R4
00003350 D113 MOV.L L1734+44,R1; H'46800000
00003352 D214 MOV.L L1734+48,R2; __muls
00003354 420B JSR @R2
00003356 0009 NOP
00003358 D313 MOV.L L1734+52,R3; __stoi
0000335A 430B JSR @R3
0000335C 0009 NOP
0000335E 6B03 MOV R0,R11
00003360 L1617:
Monochrome 1495 }
Monochrome 1496 nb_width = width + 7 >> 3;
00003360 52F4 MOV.L @(16,R15),R2
Monochrome 1497
Monochrome 1498 for (i=0; i<width; i++)
00003362 6693 MOV R9,R6
00003364 9809 MOV.W L1734+6,R8 ; H'0080
00003366 7207 ADD #7,R2
00003368 4221 SHAR R2
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 152
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
0000336A 4221 SHAR R2
0000336C 4221 SHAR R2
0000336E 2F22 MOV.L R2,@R15
00003370 A07D BRA L1624
00003372 EA07 MOV #7,R10
00003374 L1734:
00003374 C000 .DATA.W H'C000
00003376 00B4 .DATA.W H'00B4
00003378 010E .DATA.W H'010E
0000337A 0080 .DATA.W H'0080
0000337C <00000000> .DATA.L __itod
00003380 51EB851F .DATA.L H'51EB851F
00003384 40091EB8 .DATA.L H'40091EB8
00003388 <00000000> .DATA.L __muld
0000338C <00000000> .DATA.L __negd
00003390 40668000 .DATA.L H'40668000
00003394 <00000000> .DATA.L __divdr
00003398 <00000000> .DATA.L __dtos
0000339C <00000000> .DATA.L _cosf
000033A0 46800000 .DATA.L H'46800000
000033A4 <00000000> .DATA.L __muls
000033A8 <00000000> .DATA.L __stoi
000033AC <00000000> .DATA.L _sinf
000033B0 L1625:
Monochrome 1499 {
Monochrome 1500 bit = 0x80 >> (i & 7);
000033B0 6263 MOV R6,R2
000033B2 22A9 AND R10,R2
000033B4 622B NEG R2,R2
000033B6 6383 MOV R8,R3
000033B8 432C SHAD R2,R3
Monochrome 1501 i3 = i >> 3;
000033BA 6563 MOV R6,R5
000033BC 1F38 MOV.L R3,@(32,R15)
Monochrome 1502 dx = x + i - ox;
Monochrome 1503 for (j=0; j<height; j++)
000033BE 6C93 MOV R9,R12
000033C0 54F5 MOV.L @(20,R15),R4
000033C2 E054 MOV #84,R0
000033C4 52F2 MOV.L @(8,R15),R2
000033C6 4521 SHAR R5
000033C8 67F2 MOV.L @R15,R7
000033CA 346C ADD R6,R4
000033CC 51F7 MOV.L @(28,R15),R1
000033CE 4521 SHAR R5
000033D0 5EF6 MOV.L @(24,R15),R14
000033D2 3428 SUB R2,R4
000033D4 0C77 MUL.L R7,R12
000033D6 4521 SHAR R5
000033D8 53F1 MOV.L @(4,R15),R3
000033DA 071A STS MACL,R7
000033DC 04D7 MUL.L R13,R4
000033DE 375C ADD R5,R7
000033E0 371C ADD R1,R7
000033E2 021A STS MACL,R2
000033E4 1F29 MOV.L R2,@(36,R15)
000033E6 04B7 MUL.L R11,R4
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 153
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000033E8 041A STS MACL,R4
000033EA 1F4A MOV.L R4,@(40,R15)
000033EC 01FE MOV.L @(R0,R15),R1
000033EE 4115 CMP/PL R1
000033F0 8F3C BF/S L1626
000033F2 3E38 SUB R3,R14
000033F4 L1627:
Monochrome 1504 {
Monochrome 1505 dy = y + j - oy;
Monochrome 1506 xr = ox + (dx * cosinus - dy * sinus >> 14);
000033F4 54F9 MOV.L @(36,R15),R4
Monochrome 1507 yr = oy + (dx * sinus + dy * cosinus >> 14);
000033F6 E1F2 MOV #-14,R1
000033F8 50F1 MOV.L @(4,R15),R0
000033FA 65E3 MOV R14,R5
000033FC 52F2 MOV.L @(8,R15),R2
000033FE 05B7 MUL.L R11,R5
00003400 031A STS MACL,R3
00003402 3438 SUB R3,R4
00003404 05D7 MUL.L R13,R5
00003406 E3F2 MOV #-14,R3
00003408 443C SHAD R3,R4
0000340A 342C ADD R2,R4
0000340C 53FA MOV.L @(40,R15),R3
0000340E 051A STS MACL,R5
00003410 353C ADD R3,R5
00003412 451C SHAD R1,R5
Monochrome 1508 if (!(xr < 0 || xr > 127 || yr < 0 || yr > 63))
00003414 4411 CMP/PZ R4
00003416 8F21 BF/S L1628
00003418 350C ADD R0,R5
0000341A E17F MOV #127,R1
0000341C 3417 CMP/GT R1,R4
0000341E 891D BT L1628
00003420 4511 CMP/PZ R5
00003422 8B1B BF L1628
00003424 E33F MOV #63,R3
00003426 3537 CMP/GT R3,R5
00003428 8918 BT L1628
Monochrome 1509 {
Monochrome 1510 pixel = bmp[i3 + nb_width * j] & bit;
0000342A 6170 MOV.B @R7,R1
0000342C 53F8 MOV.L @(32,R15),R3
0000342E 611C EXTU.B R1,R1
00003430 2139 AND R3,R1
Monochrome 1511 if (pixel == 0) vram[(yr<<4)+(xr>>3)] &= ~(128>>(xr&7));
00003432 2118 TST R1,R1
00003434 8F12 BF/S L1628
00003436 1F13 MOV.L R1,@(12,R15)
00003438 50FB MOV.L @(44,R15),R0
0000343A 6183 MOV R8,R1
0000343C 6253 MOV R5,R2
0000343E 4208 SHLL2 R2
00003440 4208 SHLL2 R2
00003442 6343 MOV R4,R3
00003444 4321 SHAR R3
00003446 4321 SHAR R3
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 154
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00003448 4321 SHAR R3
0000344A 323C ADD R3,R2
0000344C 6343 MOV R4,R3
0000344E 23A9 AND R10,R3
00003450 633B NEG R3,R3
00003452 413C SHAD R3,R1
00003454 032C MOV.B @(R0,R2),R3
00003456 6117 NOT R1,R1
00003458 2319 AND R1,R3
0000345A 0234 MOV.B R3,@(R0,R2)
0000345C L1628:
0000345C 62F2 MOV.L @R15,R2
0000345E E054 MOV #84,R0
00003460 03FE MOV.L @(R0,R15),R3
00003462 7C01 ADD #1,R12
00003464 372C ADD R2,R7
00003466 3C33 CMP/GE R3,R12
00003468 8FC4 BF/S L1627
0000346A 7E01 ADD #1,R14
0000346C L1626:
0000346C 7601 ADD #1,R6
0000346E L1624:
0000346E 53F4 MOV.L @(16,R15),R3
00003470 3633 CMP/GE R3,R6
00003472 8B9D BF L1625
00003474 L1614:
Monochrome 1512 }
Monochrome 1513 }
Monochrome 1514 }
Monochrome 1515 }
00003474 7F30 ADD #48,R15
00003476 4F16 LDS.L @R15+,MACL
00003478 4F26 LDS.L @R15+,PR
0000347A 68F6 MOV.L @R15+,R8
0000347C 69F6 MOV.L @R15+,R9
0000347E 6AF6 MOV.L @R15+,R10
00003480 6BF6 MOV.L @R15+,R11
00003482 6CF6 MOV.L @R15+,R12
00003484 6DF6 MOV.L @R15+,R13
00003486 000B RTS
00003488 6EF6 MOV.L @R15+,R14
Monochrome 1516 #endif
Monochrome 1517
Monochrome 1518 #ifdef ML_BMP_XOR_ROTATE
Monochrome 1519 void ML_bmp_xor_rotate(const unsigned char *bmp, int x, int y, int width, int height, int angle)
0000348A _ML_bmp_xor_rotate: ; function: ML_bmp_xor_rotate
; frame size=128
; used runtime library name:
; __modls, __muls, __muld, __divdr, __negd, __dtos, __stoi, __itod
0000348A E058 MOV #88,R0
Monochrome 1520 {
Monochrome 1521 int i, j, i3, dx, dy, ox, oy, xr, yr, nb_width, pixel, bit;
Monochrome 1522 int cosinus, sinus;
Monochrome 1523 char* vram = ML_vram_adress();
0000348C D31C MOV.L L1735+6,R3 ; _ML_vram_adress
0000348E 2FE6 MOV.L R14,@-R15
00003490 2FD6 MOV.L R13,@-R15
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 155
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00003492 2FC6 MOV.L R12,@-R15
00003494 2FB6 MOV.L R11,@-R15
00003496 2FA6 MOV.L R10,@-R15
00003498 2F96 MOV.L R9,@-R15
0000349A E900 MOV #0,R9
0000349C 2F86 MOV.L R8,@-R15
0000349E 4F22 STS.L PR,@-R15
000034A0 4F12 STS.L MACL,@-R15
000034A2 7FD0 ADD #-48,R15
000034A4 1F47 MOV.L R4,@(28,R15)
000034A6 1F55 MOV.L R5,@(20,R15)
000034A8 1F66 MOV.L R6,@(24,R15)
000034AA 1F74 MOV.L R7,@(16,R15)
000034AC 430B JSR @R3
000034AE 0EFE MOV.L @(R0,R15),R14
000034B0 1F0B MOV.L R0,@(44,R15)
Monochrome 1524
Monochrome 1525 if (!bmp) return;
000034B2 53F7 MOV.L @(28,R15),R3
000034B4 2338 TST R3,R3
000034B6 8B01 BF L1736
000034B8 A0F9 BRA L1631
000034BA 0009 NOP
000034BC L1736:
Monochrome 1526 ox = x + width / 2;
000034BC 53F4 MOV.L @(16,R15),R3
000034BE E200 MOV #0,R2
000034C0 51F5 MOV.L @(20,R15),R1
Monochrome 1527 oy = y + height / 2;
000034C2 E054 MOV #84,R0
Monochrome 1528 angle %= 360;
000034C4 9419 MOV.W L1735,R4 ; H'0168
000034C6 3237 CMP/GT R3,R2
000034C8 332E ADDC R2,R3
000034CA 4321 SHAR R3
000034CC 331C ADD R1,R3
000034CE 1F32 MOV.L R3,@(8,R15)
000034D0 02FE MOV.L @(R0,R15),R2
000034D2 E000 MOV #0,R0
000034D4 D30B MOV.L L1735+10,R3; __modls
000034D6 3027 CMP/GT R2,R0
000034D8 320E ADDC R0,R2
000034DA 4221 SHAR R2
000034DC 50F6 MOV.L @(24,R15),R0
000034DE 320C ADD R0,R2
000034E0 1F21 MOV.L R2,@(4,R15)
000034E2 6043 MOV R4,R0
000034E4 430B JSR @R3
000034E6 61E3 MOV R14,R1
000034E8 6E03 MOV R0,R14
Monochrome 1529 if (angle < 0) angle += 360;
000034EA 4E11 CMP/PZ R14
000034EC 8900 BT L1632
000034EE 3E4C ADD R4,R14
000034F0 L1632:
Monochrome 1530 if (angle == 0) {cosinus = 16384; sinus = 0;}
000034F0 9404 MOV.W L1735+2,R4 ; H'4000
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 156
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000034F2 2EE8 TST R14,R14
000034F4 8B08 BF L1633
000034F6 A012 BRA L1098
000034F8 6D43 MOV R4,R13
000034FA L1735:
000034FA 0168 .DATA.W H'0168
000034FC 4000 .DATA.W H'4000
000034FE 0000 .DATA.W 0
00003500 <00000000> .DATA.L _ML_vram_adress
00003504 <00000000> .DATA.L __modls
00003508 L1633:
Monochrome 1531 else if (angle == 90) {cosinus = 0; sinus = -16384;}
00003508 9552 MOV.W L1737,R5 ; H'C000
0000350A 60E3 MOV R14,R0
0000350C 885A CMP/EQ #90,R0
0000350E 8B02 BF L1635
00003510 6D93 MOV R9,R13
00003512 A043 BRA L1634
00003514 6B53 MOV R5,R11
00003516 L1635:
Monochrome 1532 else if (angle == 180) {cosinus = -16384; sinus = 0;}
00003516 924C MOV.W L1737+2,R2 ; H'00B4
00003518 3E20 CMP/EQ R2,R14
0000351A 8B02 BF L1637
0000351C 6D53 MOV R5,R13
0000351E L1098:
0000351E A03D BRA L1634
00003520 6B93 MOV R9,R11
00003522 L1637:
Monochrome 1533 else if (angle == 270) {cosinus = 0; sinus = 16384;}
00003522 9347 MOV.W L1737+4,R3 ; H'010E
00003524 3E30 CMP/EQ R3,R14
00003526 8B02 BF L1639
00003528 6D93 MOV R9,R13
0000352A A037 BRA L1634
0000352C 6B43 MOV R4,R11
0000352E L1639:
Monochrome 1534 else
Monochrome 1535 {
Monochrome 1536 cosinus = cosf(-3.14 * angle / 180.0) * 16384;
0000352E 60E3 MOV R14,R0
00003530 D121 MOV.L L1737+8,R1 ; __itod
00003532 7FE0 ADD #-32,R15
00003534 410B JSR @R1
00003536 2FF6 MOV.L R15,@-R15
00003538 D020 MOV.L L1737+12,R0; H'51EB851F
0000353A 2F06 MOV.L R0,@-R15
0000353C D020 MOV.L L1737+16,R0; H'40091EB8
0000353E 2F06 MOV.L R0,@-R15
00003540 D020 MOV.L L1737+20,R0; __muld
00003542 61F3 MOV R15,R1
00003544 7110 ADD #16,R1
00003546 400B JSR @R0
00003548 2F16 MOV.L R1,@-R15
0000354A E108 MOV #8,R1
0000354C 31FC ADD R15,R1
0000354E 2F16 MOV.L R1,@-R15
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 157
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00003550 D11D MOV.L L1737+24,R1; __negd
00003552 410B JSR @R1
00003554 0009 NOP
00003556 E000 MOV #0,R0
00003558 2F06 MOV.L R0,@-R15
0000355A D01C MOV.L L1737+28,R0; H'40668000
0000355C 2F06 MOV.L R0,@-R15
0000355E 61F3 MOV R15,R1
00003560 D01B MOV.L L1737+32,R0; __divdr
00003562 7110 ADD #16,R1
00003564 400B JSR @R0
00003566 2F16 MOV.L R1,@-R15
00003568 D11A MOV.L L1737+36,R1; __dtos
0000356A 410B JSR @R1
0000356C 0009 NOP
0000356E 1F03 MOV.L R0,@(12,R15)
00003570 D219 MOV.L L1737+40,R2; _cosf
00003572 420B JSR @R2
00003574 6403 MOV R0,R4
00003576 D119 MOV.L L1737+44,R1; H'46800000
00003578 D319 MOV.L L1737+48,R3; __muls
0000357A 430B JSR @R3
0000357C 0009 NOP
0000357E D219 MOV.L L1737+52,R2; __stoi
00003580 420B JSR @R2
00003582 0009 NOP
Monochrome 1537 sinus = sinf(-3.14 * angle / 180.0) * 16384;
00003584 D318 MOV.L L1737+56,R3; _sinf
00003586 6D03 MOV R0,R13
00003588 430B JSR @R3
0000358A 54F3 MOV.L @(12,R15),R4
0000358C D113 MOV.L L1737+44,R1; H'46800000
0000358E D214 MOV.L L1737+48,R2; __muls
00003590 420B JSR @R2
00003592 0009 NOP
00003594 D313 MOV.L L1737+52,R3; __stoi
00003596 430B JSR @R3
00003598 0009 NOP
0000359A 6B03 MOV R0,R11
0000359C L1634:
Monochrome 1538 }
Monochrome 1539 nb_width = width + 7 >> 3;
0000359C 52F4 MOV.L @(16,R15),R2
Monochrome 1540
Monochrome 1541 for (i=0; i<width; i++)
0000359E 6693 MOV R9,R6
000035A0 9809 MOV.W L1737+6,R8 ; H'0080
000035A2 7207 ADD #7,R2
000035A4 4221 SHAR R2
000035A6 4221 SHAR R2
000035A8 4221 SHAR R2
000035AA 2F22 MOV.L R2,@R15
000035AC A07C BRA L1641
000035AE EA07 MOV #7,R10
000035B0 L1737:
000035B0 C000 .DATA.W H'C000
000035B2 00B4 .DATA.W H'00B4
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 158
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
000035B4 010E .DATA.W H'010E
000035B6 0080 .DATA.W H'0080
000035B8 <00000000> .DATA.L __itod
000035BC 51EB851F .DATA.L H'51EB851F
000035C0 40091EB8 .DATA.L H'40091EB8
000035C4 <00000000> .DATA.L __muld
000035C8 <00000000> .DATA.L __negd
000035CC 40668000 .DATA.L H'40668000
000035D0 <00000000> .DATA.L __divdr
000035D4 <00000000> .DATA.L __dtos
000035D8 <00000000> .DATA.L _cosf
000035DC 46800000 .DATA.L H'46800000
000035E0 <00000000> .DATA.L __muls
000035E4 <00000000> .DATA.L __stoi
000035E8 <00000000> .DATA.L _sinf
000035EC L1642:
Monochrome 1542 {
Monochrome 1543 bit = 0x80 >> (i & 7);
000035EC 6263 MOV R6,R2
000035EE 22A9 AND R10,R2
000035F0 622B NEG R2,R2
000035F2 6383 MOV R8,R3
000035F4 432C SHAD R2,R3
Monochrome 1544 i3 = i >> 3;
000035F6 6563 MOV R6,R5
000035F8 1F38 MOV.L R3,@(32,R15)
Monochrome 1545 dx = x + i - ox;
Monochrome 1546 for (j=0; j<height; j++)
000035FA 6C93 MOV R9,R12
000035FC 54F5 MOV.L @(20,R15),R4
000035FE E054 MOV #84,R0
00003600 52F2 MOV.L @(8,R15),R2
00003602 4521 SHAR R5
00003604 67F2 MOV.L @R15,R7
00003606 346C ADD R6,R4
00003608 51F7 MOV.L @(28,R15),R1
0000360A 4521 SHAR R5
0000360C 5EF6 MOV.L @(24,R15),R14
0000360E 3428 SUB R2,R4
00003610 0C77 MUL.L R7,R12
00003612 4521 SHAR R5
00003614 53F1 MOV.L @(4,R15),R3
00003616 071A STS MACL,R7
00003618 04D7 MUL.L R13,R4
0000361A 375C ADD R5,R7
0000361C 371C ADD R1,R7
0000361E 021A STS MACL,R2
00003620 1F29 MOV.L R2,@(36,R15)
00003622 04B7 MUL.L R11,R4
00003624 041A STS MACL,R4
00003626 1F4A MOV.L R4,@(40,R15)
00003628 01FE MOV.L @(R0,R15),R1
0000362A 4115 CMP/PL R1
0000362C 8F3B BF/S L1643
0000362E 3E38 SUB R3,R14
00003630 L1644:
Monochrome 1547 {
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 159
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
Monochrome 1548 dy = y + j - oy;
Monochrome 1549 xr = ox + (dx * cosinus - dy * sinus >> 14);
00003630 54F9 MOV.L @(36,R15),R4
Monochrome 1550 yr = oy + (dx * sinus + dy * cosinus >> 14);
00003632 E1F2 MOV #-14,R1
00003634 50F1 MOV.L @(4,R15),R0
00003636 65E3 MOV R14,R5
00003638 52F2 MOV.L @(8,R15),R2
0000363A 05B7 MUL.L R11,R5
0000363C 031A STS MACL,R3
0000363E 3438 SUB R3,R4
00003640 05D7 MUL.L R13,R5
00003642 E3F2 MOV #-14,R3
00003644 443C SHAD R3,R4
00003646 342C ADD R2,R4
00003648 53FA MOV.L @(40,R15),R3
0000364A 051A STS MACL,R5
0000364C 353C ADD R3,R5
0000364E 451C SHAD R1,R5
Monochrome 1551 if (!(xr < 0 || xr > 127 || yr < 0 || yr > 63))
00003650 4411 CMP/PZ R4
00003652 8F20 BF/S L1645
00003654 350C ADD R0,R5
00003656 E17F MOV #127,R1
00003658 3417 CMP/GT R1,R4
0000365A 891C BT L1645
0000365C 4511 CMP/PZ R5
0000365E 8B1A BF L1645
00003660 E33F MOV #63,R3
00003662 3537 CMP/GT R3,R5
00003664 8917 BT L1645
Monochrome 1552 {
Monochrome 1553 pixel = bmp[i3 + nb_width * j] & bit;
00003666 6170 MOV.B @R7,R1
00003668 53F8 MOV.L @(32,R15),R3
0000366A 611C EXTU.B R1,R1
0000366C 2139 AND R3,R1
Monochrome 1554 if (pixel != 0) vram[(yr<<4)+(xr>>3)] ^= 128>>(xr&7);
0000366E 2118 TST R1,R1
00003670 8D11 BT/S L1645
00003672 1F13 MOV.L R1,@(12,R15)
00003674 50FB MOV.L @(44,R15),R0
00003676 6183 MOV R8,R1
00003678 6253 MOV R5,R2
0000367A 4208 SHLL2 R2
0000367C 4208 SHLL2 R2
0000367E 6343 MOV R4,R3
00003680 4321 SHAR R3
00003682 4321 SHAR R3
00003684 4321 SHAR R3
00003686 323C ADD R3,R2
00003688 6343 MOV R4,R3
0000368A 23A9 AND R10,R3
0000368C 633B NEG R3,R3
0000368E 413C SHAD R3,R1
00003690 032C MOV.B @(R0,R2),R3
00003692 231A XOR R1,R3
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 160
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00003694 0234 MOV.B R3,@(R0,R2)
00003696 L1645:
00003696 7C01 ADD #1,R12
00003698 62F2 MOV.L @R15,R2
0000369A E054 MOV #84,R0
0000369C 03FE MOV.L @(R0,R15),R3
0000369E 372C ADD R2,R7
000036A0 3C33 CMP/GE R3,R12
000036A2 8FC5 BF/S L1644
000036A4 7E01 ADD #1,R14
000036A6 L1643:
000036A6 7601 ADD #1,R6
000036A8 L1641:
000036A8 53F4 MOV.L @(16,R15),R3
000036AA 3633 CMP/GE R3,R6
000036AC 8B9E BF L1642
000036AE L1631:
Monochrome 1555 }
Monochrome 1556 }
Monochrome 1557 }
Monochrome 1558 }
000036AE 7F30 ADD #48,R15
000036B0 4F16 LDS.L @R15+,MACL
000036B2 4F26 LDS.L @R15+,PR
000036B4 68F6 MOV.L @R15+,R8
000036B6 69F6 MOV.L @R15+,R9
000036B8 6AF6 MOV.L @R15+,R10
000036BA 6BF6 MOV.L @R15+,R11
000036BC 6CF6 MOV.L @R15+,R12
000036BE 6DF6 MOV.L @R15+,R13
000036C0 000B RTS
000036C2 6EF6 MOV.L @R15+,R14
Monochrome 1559 #endif
D 00000000 __$SysCallCode: ; static: SysCallCode
00000000 D201422B60 .DATA.L H'D201422B,H'60F20000,H'80010070
F200008001
0070
0000000C __$SysCall: ; static: SysCall
0000000C <00000000> .DATA.L __$SysCallCode
SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:42 PAGE 1
******** STATISTICS INFORMATION ********
********** ERROR INFORMATION ***********
NUMBER OF ERRORS: 0
NUMBER OF WARNINGS: 0
******* SOURCE LINE INFORMATION ********
COMPILED SOURCE LINE: 1558
******* SECTION SIZE INFORMATION *******
PROGRAM SECTION (P): 000036C4 Byte(s)
CONSTANT SECTION (C): 00000000 Byte(s)
DATA SECTION (D): 00000010 Byte(s)
BSS SECTION (B): 00000000 Byte(s)
TOTAL PROGRAM SIZE: 000036D4 Byte(s)
********** LABEL INFORMATION ***********
NUMBER OF EXTERNAL REFERENCE SYMBOLS: 21
NUMBER OF EXTERNAL DEFINITION SYMBOLS: 47
NUMBER OF INTERNAL/EXTERNAL SYMBOLS: 581
*** COMMAND PARAMETER ***
-subcommand=C:\Users\gabillef\AppData\Local\Temp\hmkDA78.tmp