From fe28c6d2883a617b2a53caad84281a7d36d57872 Mon Sep 17 00:00:00 2001 From: Fife Date: Fri, 29 Apr 2016 21:20:21 +0200 Subject: [PATCH] Premier commit --- ALD.G1A | Bin 0 -> 22628 bytes AddinInfo.txt | 12 + Ald.c | 26 + Ald.dlr | 1 + Ald.dlw | 113 + Ald.g1w | 16 + AldeBasiClib.c | 16 + AldeBasiClib.h | 31 + Debug/Addin.mak | 120 + Debug/Ald.lst | 203 + Debug/Ald.obj | Bin 0 -> 5288 bytes Debug/FXADDINror.abs | Bin 0 -> 41700 bytes Debug/FXADDINror.bin | Bin 0 -> 22116 bytes Debug/FXADDINror.dbg | Bin 0 -> 60448 bytes Debug/FXADDINror.fsy | 223 + Debug/FXADDINror.map | 1406 +++++ Debug/MonochromeLib.lst | 10631 ++++++++++++++++++++++++++++++++++++++ Debug/MonochromeLib.obj | Bin 0 -> 79096 bytes FXSH_Build.bat | 22 + INIT/CasioRAM.mem | Bin 0 -> 48532 bytes INIT/CasioRAMCPU.mem | Bin 0 -> 80 bytes MainIcon.bmp | Bin 0 -> 138 bytes MonochromeLib.c | 1559 ++++++ MonochromeLib.h | 167 + eActivityIcon.bmp | Bin 0 -> 106 bytes 25 files changed, 14546 insertions(+) create mode 100644 ALD.G1A create mode 100644 AddinInfo.txt create mode 100644 Ald.c create mode 100644 Ald.dlr create mode 100644 Ald.dlw create mode 100644 Ald.g1w create mode 100644 AldeBasiClib.c create mode 100644 AldeBasiClib.h create mode 100644 Debug/Addin.mak create mode 100644 Debug/Ald.lst create mode 100644 Debug/Ald.obj create mode 100644 Debug/FXADDINror.abs create mode 100644 Debug/FXADDINror.bin create mode 100644 Debug/FXADDINror.dbg create mode 100644 Debug/FXADDINror.fsy create mode 100644 Debug/FXADDINror.map create mode 100644 Debug/MonochromeLib.lst create mode 100644 Debug/MonochromeLib.obj create mode 100644 FXSH_Build.bat create mode 100644 INIT/CasioRAM.mem create mode 100644 INIT/CasioRAMCPU.mem create mode 100644 MainIcon.bmp create mode 100644 MonochromeLib.c create mode 100644 MonochromeLib.h create mode 100644 eActivityIcon.bmp diff --git a/ALD.G1A b/ALD.G1A new file mode 100644 index 0000000000000000000000000000000000000000..411c7fca3df9a5188660a599a2ce594223f9cc78 GIT binary patch literal 22628 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 .DATA.L _ML_clear_screen + 00000028 <00000000> .DATA.L L350 + 0000002C <00000000> .DATA.L _PrintXY + 00000030 <00000000> .DATA.L _ML_display_vram + 00000034 <00000000> .DATA.L _Sleep + Ald.c 11 } + Ald.c 12 + Ald.c 13 #pragma section _BR_Size + Ald.c 14 unsigned long BR_Size; + Ald.c 15 #pragma section + Ald.c 16 + Ald.c 17 + Ald.c 18 #pragma section _TOP + Ald.c 19 + Ald.c 20 int InitializeSystem(int isAppli, unsigned short OptionNum) +P_T 00000000 _InitializeSystem: ; function: InitializeSystem + ; frame size=0 + Ald.c 21 { + Ald.c 22 return INIT_ADDIN_APPLICATION(isAppli, OptionNum); + 00000000 D301 MOV.L L359+2,R3 ; _INIT_ADDIN_APPLICATION + 00000002 432B JMP @R3 + 00000004 0009 NOP + 00000006 L359: + + + + +SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:39 PAGE 2 + + +SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT + + 00000006 0000 .DATA.W 0 + 00000008 <00000000> .DATA.L _INIT_ADDIN_APPLICATION + Ald.c 23 } + Ald.c 24 + Ald.c 25 #pragma section + Ald.c 26 +C 00000000 L350: + 00000000 54657374 .SDATA "Test" + 00000004 00 .DATA.B H'00 +B_B 00000000 _BR_Size: ; static: BR_Size + 00000000 00000004 .RES.L 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:39 PAGE 1 + + +******** STATISTICS INFORMATION ******** + + +********** ERROR INFORMATION *********** + +NUMBER OF ERRORS: 0 +NUMBER OF WARNINGS: 1 + + + + +******* SOURCE LINE INFORMATION ******** + +COMPILED SOURCE LINE: 26 + + + +******* SECTION SIZE INFORMATION ******* + +PROGRAM SECTION (P): 00000038 Byte(s) +PROGRAM SECTION (P_BR_Size): 00000000 Byte(s) +PROGRAM SECTION (P_TOP): 0000000C Byte(s) +CONSTANT SECTION (C): 00000005 Byte(s) +CONSTANT SECTION (C_BR_Size): 00000000 Byte(s) +CONSTANT SECTION (C_TOP): 00000000 Byte(s) +DATA SECTION (D): 00000000 Byte(s) +DATA SECTION (D_BR_Size): 00000000 Byte(s) +DATA SECTION (D_TOP): 00000000 Byte(s) +BSS SECTION (B): 00000000 Byte(s) +BSS SECTION (B_BR_Size): 00000004 Byte(s) +BSS SECTION (B_TOP): 00000000 Byte(s) + + TOTAL PROGRAM SIZE: 0000004D Byte(s) + + + +********** LABEL INFORMATION *********** + +NUMBER OF EXTERNAL REFERENCE SYMBOLS: 5 +NUMBER OF EXTERNAL DEFINITION SYMBOLS: 3 +NUMBER OF INTERNAL/EXTERNAL SYMBOLS: 11 + + + + + + + + + + + + + + + + + + + + + + +*** COMMAND PARAMETER *** + + + -subcommand=C:\Users\gabillef\AppData\Local\Temp\hmkCDF9.tmp + diff --git a/Debug/Ald.obj b/Debug/Ald.obj new file mode 100644 index 0000000000000000000000000000000000000000..dcf417e6d7fbf4bac8ed662ac4790331ff7463c3 GIT binary patch literal 5288 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 C+gO4C literal 0 HcmV?d00001 diff --git a/Debug/FXADDINror.bin b/Debug/FXADDINror.bin new file mode 100644 index 0000000000000000000000000000000000000000..cfed2032bca2c8567c0ed54aae1de2e8536be6e8 GIT binary patch literal 22116 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 W;1BA8JcKdJ?1wbWU$8v!`Tq;V%QWi% literal 0 HcmV?d00001 diff --git a/Debug/FXADDINror.dbg b/Debug/FXADDINror.dbg new file mode 100644 index 0000000000000000000000000000000000000000..70e16009425a4f514c24237afc5e3dc9eab1f7f6 GIT binary patch literal 60448 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 literal 0 HcmV?d00001 diff --git a/Debug/FXADDINror.fsy b/Debug/FXADDINror.fsy new file mode 100644 index 0000000..1716640 --- /dev/null +++ b/Debug/FXADDINror.fsy @@ -0,0 +1,223 @@ +;HITACHI OPTIMIZING LINKAGE EDITOR GENERATED FILE 2016.04.29 +;fsymbol = P + +;SECTION NAME = P + .export _AddIn_main +_AddIn_main: .equ h'0030020c + .export _ML_vram_adress +_ML_vram_adress: .equ h'00300244 + .export _ML_clear_vram +_ML_clear_vram: .equ h'00300260 + .export _ML_clear_screen +_ML_clear_screen: .equ h'003002bc + .export _ML_display_vram +_ML_display_vram: .equ h'003002f6 + .export _ML_set_contrast +_ML_set_contrast: .equ h'00300340 + .export _ML_get_contrast +_ML_get_contrast: .equ h'0030034c + .export _ML_pixel +_ML_pixel: .equ h'00300368 + .export _ML_point +_ML_point: .equ h'003003f4 + .export _ML_pixel_test +_ML_pixel_test: .equ h'00300462 + .export _ML_line +_ML_line: .equ h'003004c6 + .export _ML_horizontal_line +_ML_horizontal_line: .equ h'0030059c + .export _ML_vertical_line +_ML_vertical_line: .equ h'00300844 + .export _ML_rectangle +_ML_rectangle: .equ h'00300978 + .export _ML_polygon +_ML_polygon: .equ h'00300a74 + .export _ML_filled_polygon +_ML_filled_polygon: .equ h'00300b88 + .export _ML_circle +_ML_circle: .equ h'00300de8 + .export _ML_filled_circle +_ML_filled_circle: .equ h'00300eda + .export _ML_ellipse +_ML_ellipse: .equ h'00300f8c + .export _ML_ellipse_in_rect +_ML_ellipse_in_rect: .equ h'0030123e + .export _ML_filled_ellipse +_ML_filled_ellipse: .equ h'00301296 + .export _ML_filled_ellipse_in_rect +_ML_filled_ellipse_in_rect: .equ h'00301552 + .export _ML_horizontal_scroll +_ML_horizontal_scroll: .equ h'003015aa + .export _ML_vertical_scroll +_ML_vertical_scroll: .equ h'003016e2 + .export _ML_bmp_or +_ML_bmp_or: .equ h'00301774 + .export _ML_bmp_and +_ML_bmp_and: .equ h'003018da + .export _ML_bmp_xor +_ML_bmp_xor: .equ h'00301a50 + .export _ML_bmp_or_cl +_ML_bmp_or_cl: .equ h'00301bb4 + .export _ML_bmp_and_cl +_ML_bmp_and_cl: .equ h'00301e02 + .export _ML_bmp_xor_cl +_ML_bmp_xor_cl: .equ h'0030205c + .export _ML_bmp_8_or +_ML_bmp_8_or: .equ h'003022aa + .export _ML_bmp_8_and +_ML_bmp_8_and: .equ h'00302366 + .export _ML_bmp_8_xor +_ML_bmp_8_xor: .equ h'0030242c + .export _ML_bmp_8_or_cl +_ML_bmp_8_or_cl: .equ h'003024ea + .export _ML_bmp_8_and_cl +_ML_bmp_8_and_cl: .equ h'003025d8 + .export _ML_bmp_8_xor_cl +_ML_bmp_8_xor_cl: .equ h'003026c6 + .export _ML_bmp_16_or +_ML_bmp_16_or: .equ h'003027b4 + .export _ML_bmp_16_and +_ML_bmp_16_and: .equ h'0030287e + .export _ML_bmp_16_xor +_ML_bmp_16_xor: .equ h'0030294c + .export _ML_bmp_16_or_cl +_ML_bmp_16_or_cl: .equ h'00302a1c + .export _ML_bmp_16_and_cl +_ML_bmp_16_and_cl: .equ h'00302b2e + .export _ML_bmp_16_xor_cl +_ML_bmp_16_xor_cl: .equ h'00302c48 + .export _ML_bmp_or_zoom +_ML_bmp_or_zoom: .equ h'00302d5a + .export _ML_bmp_and_zoom +_ML_bmp_and_zoom: .equ h'00302f04 + .export _ML_bmp_xor_zoom +_ML_bmp_xor_zoom: .equ h'003030b0 + .export _ML_bmp_or_rotate +_ML_bmp_or_rotate: .equ h'0030325c + .export _ML_bmp_and_rotate +_ML_bmp_and_rotate: .equ h'00303494 + .export _ML_bmp_xor_rotate +_ML_bmp_xor_rotate: .equ h'003036ce + .export ___LINK_PROTECT +___LINK_PROTECT: .equ h'00303908 + .export _SetQuitHandler +_SetQuitHandler: .equ h'0030390c + .export _OnAppCloseDefault +_OnAppCloseDefault: .equ h'00303912 + .export __INITSCT_ADDIN +__INITSCT_ADDIN: .equ h'00303966 + .export _INIT_ADDIN_APPLICATION +_INIT_ADDIN_APPLICATION: .equ h'003039ae + .export __addd +__addd: .equ h'00303af4 + .export __subdr +__subdr: .equ h'00303a3c + .export __subd +__subd: .equ h'00303a24 + .export __adds +__adds: .equ h'00303dba + .export __subs +__subs: .equ h'00303db4 + .export __divdr +__divdr: .equ h'003040ac + .export __divd +__divd: .equ h'003040c0 + .export __dtoi +__dtoi: .equ h'00304224 + .export __dtou +__dtou: .equ h'00304224 + .export __dtos +__dtos: .equ h'003042b0 + .export __gtd +__gtd: .equ h'0030438c + .export __itod +__itod: .equ h'00304434 + .export __itos +__itos: .equ h'00304488 + .export __lts +__lts: .equ h'003044e0 + .export __muld +__muld: .equ h'003045fc + .export __muls +__muls: .equ h'0030476c + .export __negd +__negd: .equ h'003048ac + .export __stou +__stou: .equ h'003048cc + .export __stoi +__stoi: .equ h'003048cc + .export __divls +__divls: .equ h'00304924 + .export __modls +__modls: .equ h'003049d8 + .export _abs +_abs: .equ h'00304aa0 + .export _cosf +_cosf: .equ h'00304ab0 + .export _sinf +_sinf: .equ h'00304b20 + .export _Bdel_cychdr +_Bdel_cychdr: .equ h'00304b90 + .export _BfileFLS_CloseFile +_BfileFLS_CloseFile: .equ h'00304ba0 + .export _Bkey_Set_RepeatTime_Default +_Bkey_Set_RepeatTime_Default: .equ h'00304bb0 + .export _CallbackAtQuitMainFunction +_CallbackAtQuitMainFunction: .equ h'00304bc0 + .export _flsFindClose +_flsFindClose: .equ h'00304bd0 + .export _free +_free: .equ h'00304be0 + .export _GLibAddinAplExecutionCheck +_GLibAddinAplExecutionCheck: .equ h'00304bf0 + .export _Hmem_SetMMU +_Hmem_SetMMU: .equ h'00304c00 + .export _malloc +_malloc: .equ h'00304c10 + .export _PrintXY +_PrintXY: .equ h'00304c20 + .export _GetSDKLibraryVersion +_GetSDKLibraryVersion: .equ h'00304c30 + .export _SetTimer +_SetTimer: .equ h'00304c36 + .export _KillTimer +_KillTimer: .equ h'00304c8a + .export _Sleep +_Sleep: .equ h'00304cce + .export __istos +__istos: .equ h'00304d30 + .export __stois +__stois: .equ h'00304dd4 + .export __in_coss +__in_coss: .equ h'00304e40 + .export __in_sins +__in_sins: .equ h'00304fa0 + .export _Bcre_cychdr +_Bcre_cychdr: .equ h'00305118 + .export _BSrl_DummyWAIT +_BSrl_DummyWAIT: .equ h'00305128 + .export _Bsta_cychdr +_Bsta_cychdr: .equ h'00305138 + .export _Bstp_cychdr +_Bstp_cychdr: .equ h'00305148 + .export __in_adds +__in_adds: .equ h'00305164 + .export __in_subs +__in_subs: .equ h'00305158 + .export __in_fmods +__in_fmods: .equ h'003053c4 + .export __istypes +__istypes: .equ h'0030544c + .export __quick_odd_mvn +__quick_odd_mvn: .equ h'00305490 + .export __quick_evn_mvn +__quick_evn_mvn: .equ h'00305484 + .export __app_coss +__app_coss: .equ h'00305528 + .export __app_sins +__app_sins: .equ h'00305578 + .export __in_muls +__in_muls: .equ h'003055e4 + .export __polinos +__polinos: .equ h'00305694 + .end diff --git a/Debug/FXADDINror.map b/Debug/FXADDINror.map new file mode 100644 index 0000000..0ff0b77 --- /dev/null +++ b/Debug/FXADDINror.map @@ -0,0 +1,1406 @@ +Hitachi Optimizing Linkage Editor (Ver. 7.1.03.000)29-Apr-2016 12:29:47 + +*** Options *** + +-subcommand=C:\Users\gabillef\AppData\Local\Temp\hmkEAAE.tmp +noprelink +sdebug +rom D=R +nomessage +list "F:\AldTest\Debug\FXADDINror.map" +show symbol +nooptimize +start P_TOP,P,C,D,C$VTBL,C$INIT/0300200,B_BR_Size,B,R/08100000 +fsymbol P +nologo +input "F:\AldTest\Debug\Ald.obj" "F:\AldTest\Debug\MonochromeLib.obj" +input "F:\Casio\fx-9860G SDK\OS\FX\lib\setup.obj" +library "F:\Casio\fx-9860G SDK\OS\FX\lib\fx9860G_library.lib" +output "F:\AldTest\Debug\FXADDINror.abs" +-nomessage=1100 +end + +*** Error information *** + +*** Mapping List *** + +SECTION START END SIZE ALIGN + +P_TOP + 00300200 0030020b c 4 +P + 0030020c 003056fb 54f0 4 +C + 003056fc 0030584f 154 4 +D + 00305850 00305863 14 4 +B_BR_Size + 08100000 08100003 4 4 +B + 08100004 08100007 4 4 +R + 08100008 0810001b 14 4 + +*** Symbol List *** + +SECTION= +FILE= START END SIZE + SYMBOL ADDR SIZE INFO COUNTS OPT + +SECTION=P_TOP +FILE=F:\AldTest\Debug\Ald.obj + 00300200 0030020b c + _InitializeSystem + 00300200 c func ,g * + +SECTION=P +FILE=F:\AldTest\Debug\Ald.obj + 0030020c 00300243 38 + _AddIn_main + 0030020c 38 func ,g * +FILE=F:\AldTest\Debug\MonochromeLib.obj + 00300244 00303907 36c4 + _ML_vram_adress + 00300244 1c func ,g * + _ML_clear_vram + 00300260 5c func ,g * + _ML_clear_screen + 003002bc 3a func ,g * + _ML_display_vram + 003002f6 4a func ,g * + _ML_set_contrast + 00300340 c func ,g * + _ML_get_contrast + 0030034c 1c func ,g * + _ML_pixel + 00300368 8c func ,g * + _ML_point + 003003f4 6e func ,g * + _ML_pixel_test + 00300462 64 func ,g * + _ML_line + 003004c6 d6 func ,g * + _ML_horizontal_line + 0030059c 2a8 func ,g * + _ML_vertical_line + 00300844 134 func ,g * + _ML_rectangle + 00300978 fc func ,g * + _ML_polygon + 00300a74 74 func ,g * + _ML_filled_polygon_quicksord_partition + 00300ae8 62 func ,l * + _ML_filled_polygon_quicksord + 00300b4a 3e func ,l * + _ML_filled_polygon + 00300b88 260 func ,g * + _ML_circle + 00300de8 f2 func ,g * + _ML_filled_circle + 00300eda b2 func ,g * + _ML_ellipse + 00300f8c 2b2 func ,g * + _ML_ellipse_in_rect + 0030123e 58 func ,g * + _ML_filled_ellipse + 00301296 2bc func ,g * + _ML_filled_ellipse_in_rect + 00301552 58 func ,g * + _ML_horizontal_scroll + 003015aa 138 func ,g * + _ML_vertical_scroll + 003016e2 92 func ,g * + _ML_bmp_or + 00301774 166 func ,g * + _ML_bmp_and + 003018da 176 func ,g * + _ML_bmp_xor + 00301a50 164 func ,g * + _ML_bmp_or_cl + 00301bb4 24e func ,g * + _ML_bmp_and_cl + 00301e02 25a func ,g * + _ML_bmp_xor_cl + 0030205c 24e func ,g * + _ML_bmp_8_or + 003022aa bc func ,g * + _ML_bmp_8_and + 00302366 c6 func ,g * + _ML_bmp_8_xor + 0030242c be func ,g * + _ML_bmp_8_or_cl + 003024ea ee func ,g * + _ML_bmp_8_and_cl + 003025d8 ee func ,g * + _ML_bmp_8_xor_cl + 003026c6 ee func ,g * + _ML_bmp_16_or + 003027b4 ca func ,g * + _ML_bmp_16_and + 0030287e ce func ,g * + _ML_bmp_16_xor + 0030294c d0 func ,g * + _ML_bmp_16_or_cl + 00302a1c 112 func ,g * + _ML_bmp_16_and_cl + 00302b2e 11a func ,g * + _ML_bmp_16_xor_cl + 00302c48 112 func ,g * + _ML_bmp_or_zoom + 00302d5a 1aa func ,g * + _ML_bmp_and_zoom + 00302f04 1ac func ,g * + _ML_bmp_xor_zoom + 003030b0 1ac func ,g * + _ML_bmp_or_rotate + 0030325c 238 func ,g * + _ML_bmp_and_rotate + 00303494 23a func ,g * + _ML_bmp_xor_rotate + 003036ce 23a func ,g * +FILE=F:\Casio\fx-9860G SDK\OS\FX\lib\setup.obj + 00303908 00303a23 11c + ___LINK_PROTECT + 00303908 4 func ,g * + _SetQuitHandler + 0030390c 6 func ,g * + _OnAppCloseDefault + 00303912 54 func ,g * + __INITSCT_ADDIN + 00303966 48 func ,g * + _INIT_ADDIN_APPLICATION + 003039ae 76 func ,g * +FILE=r_addd + 00303a24 00303db3 390 + __subd + 00303a24 0 none ,g * + __subdr + 00303a3c 0 none ,g * + exception1 + 00303a54 0 none ,l * + return_NaN + 00303a68 0 none ,l * + return_inf + 00303a70 0 none ,l * + exception2 + 00303a74 0 none ,l * + p2_denorm_check + 00303a88 0 none ,l * + p1_denorm + 00303a94 0 none ,l * + return_p2 + 00303aa0 0 none ,l * + return_p1 + 00303aa8 0 none ,l * + p1_normalize + 00303ab6 0 none ,l * + p1_norm_loop + 00303ac0 0 none ,l * + end_p1_norm + 00303aca 0 none ,l * + p2_normalize + 00303aca 0 none ,l * + p2_norm_loop + 00303ad4 0 none ,l * + end_p2_norm + 00303ade 0 none ,l * + swap_end + 00303ae6 0 none ,l * + return_zero + 00303aea 0 none ,l * + __addd + 00303af4 0 none ,g * + sub_in + 00303b06 0 none ,l * + rotation + 00303b26 0 none ,l * + exception_return + 00303b52 0 none ,l * + sftr1 + 00303b94 0 none ,l * + e_sftr31 + 00303b98 0 none ,l * + e_sftr55 + 00303bbe 0 none ,l * + sftr_loop + 00303bc4 0 none ,l * + end_sftr + 00303bcc 0 none ,l * + mantissa_sub + 00303bf0 0 none ,l * + man_sub1 + 00303bf8 0 none ,l * + normalize + 00303c06 0 none ,l * + norm32_end + 00303c10 0 none ,l * + norm16_end + 00303c20 0 none ,l * + over_norm + 00303c26 0 none ,l * + overnorm_end + 00303c52 0 none ,l * + norm_loop + 00303c58 0 none ,l * + end_calc + 00303c80 0 none ,l * + end_norm + 00303c80 0 none ,l * + denormalize_loop + 00303c88 0 none ,l * + round + 00303c90 0 none ,l * + end_denormal + 00303c90 0 none ,l * + round_carry + 00303ca8 0 none ,l * + end_round + 00303cae 0 none ,l * + return_value + 00303cae 0 none ,l * + return + 00303ccc 0 none ,l * + plus_zero + 00303cec 0 none ,l * + swap + 00303cf6 0 none ,l * + EXP_INF + 00303d10 0 none ,l * + MMASK + 00303d14 0 none ,l * + MSB + 00303d18 0 none ,l * + LOWMASK + 00303d1c 0 none ,l * + CARRY_CHECK + 00303d20 0 none ,l * + NORMAL + 00303d24 0 none ,l * + SIGN + 00303d28 0 none ,l * + HALF + 00303d2c 0 none ,l * + sftrtbl + 00303d30 0 none ,l * +FILE=r_adds + 00303db4 0030401f 26c + __subs + 00303db4 0 none ,g * + __adds + 00303dba 0 none ,g * + rotation + 00303dd4 0 none ,l * + exception_return + 00303dfe 0 none ,l * + label + 00303e1e 0 none ,l * + e_sftr26 + 00303e22 0 none ,l * + or_sticky + 00303e26 0 none ,l * + end_sftr + 00303e2c 0 none ,l * + mantissa_sub + 00303e46 0 none ,l * + normalize + 00303e50 0 none ,l * + n_sftl_8 + 00303e66 0 none ,l * + n_sftl_4 + 00303e72 0 none ,l * + n_sftl_2 + 00303e80 0 none ,l * + n_sftl_1 + 00303e88 0 none ,l * + normal + 00303e90 0 none ,l * + end_calc + 00303e92 0 none ,l * + denormalize_loop + 00303e9a 0 none ,l * + end_denormal + 00303ea0 0 none ,l * + round_carry + 00303eb0 0 none ,l * + end_round + 00303eb4 0 none ,l * + return_value + 00303eb4 0 none ,l * + return + 00303ec2 0 none ,l * + exception1 + 00303ed0 0 none ,l * + return_NaN + 00303ede 0 none ,l * + return_inf + 00303ee4 0 none ,l * + exception2 + 00303ee8 0 none ,l * + p2_denorm_check + 00303ef4 0 none ,l * + p1_denorm + 00303efc 0 none ,l * + p1_norm_loop + 00303f04 0 none ,l * + end_p1_norm + 00303f0a 0 none ,l * + p2_normalize + 00303f0a 0 none ,l * + p2_norm_loop + 00303f0e 0 none ,l * + end_p2_norm + 00303f14 0 none ,l * + plus_zero + 00303f18 0 none ,l * + return_zero + 00303f1a 0 none ,l * + return_parm1 + 00303f20 0 none ,l * + e_sftr7 + 00303f28 0 none ,l * + e_sftr5 + 00303f2a 0 none ,l * + e_sftr3 + 00303f2c 0 none ,l * + e_sftr1 + 00303f2e 0 none ,l * + e_sftr6 + 00303f32 0 none ,l * + e_sftr4 + 00303f34 0 none ,l * + e_sftr2 + 00303f36 0 none ,l * + e_sftr15 + 00303f3a 0 none ,l * + e_sftr13 + 00303f3e 0 none ,l * + e_sftr11 + 00303f42 0 none ,l * + e_sftr9 + 00303f46 0 none ,l * + e_sftr14 + 00303f50 0 none ,l * + e_sftr12 + 00303f54 0 none ,l * + e_sftr10 + 00303f58 0 none ,l * + e_sftr8 + 00303f5c 0 none ,l * + e_sftr23 + 00303f62 0 none ,l * + e_sftr21 + 00303f66 0 none ,l * + e_sftr19 + 00303f6a 0 none ,l * + e_sftr17 + 00303f6e 0 none ,l * + e_sftr22 + 00303f78 0 none ,l * + e_sftr20 + 00303f7c 0 none ,l * + e_sftr18 + 00303f80 0 none ,l * + e_sftr16 + 00303f84 0 none ,l * + e_sftr25 + 00303f8a 0 none ,l * + e_sftr24 + 00303f98 0 none ,l * + a_sftrtbl + 00303fa4 0 none ,l * + EXP_INF + 0030400c 0 none ,l * + HALF + 00304010 0 none ,l * + LRS + 00304014 0 none ,l * + MAN_1 + 00304018 0 none ,l * + NaN + 0030401c 0 none ,l * +FILE=r_divd + 00304020 00304223 204 + exception1 + 00304020 0 none ,l * + exception2 + 00304030 0 none ,l * + exception3 + 0030403c 0 none ,l * + normalize1 + 00304054 0 none ,l * + p1_norm_loop + 0030405e 0 none ,l * + end_p1_norm + 00304068 0 none ,l * + exception4 + 0030406c 0 none ,l * + ex4 + 00304078 0 none ,l * + p2_norm_loop + 00304082 0 none ,l * + end_p2_norm + 0030408c 0 none ,l * + return_zero + 00304090 0 none ,l * + return_inf + 0030409a 0 none ,l * + return_NaN + 003040a2 0 none ,l * + __divdr + 003040ac 0 none ,g * + __divd + 003040c0 0 none ,g * + divdr_in + 003040d0 0 none ,l * + exception_return3 + 00304112 0 none ,l * + exception_return4 + 00304116 0 none ,l * + div_loop + 00304130 0 none ,l * + man_sub + 00304146 0 none ,l * + over_sub + 00304154 0 none ,l * + end_man_cal + 0030415c 0 none ,l * + end_sticky_cal + 00304164 0 none ,l * + end_norm + 00304170 0 none ,l * + denormalize_loop + 0030417c 0 none ,l * + round_denormal + 00304188 0 none ,l * + end_round_d + 003041a0 0 none ,l * + end_denormal + 003041a4 0 none ,l * + round_carry + 003041ba 0 none ,l * + end_round + 003041c0 0 none ,l * + return_value + 003041c0 0 none ,l * + return + 003041de 0 none ,l * + EXP_INF + 00304208 0 none ,l * + MMASK + 0030420c 0 none ,l * + MSB + 00304210 0 none ,l * + DENOM_CHECK + 00304214 0 none ,l * + BIAS + 00304218 0 none ,l * + COUNT + 0030421c 0 none ,l * + CARRY_CHECK + 00304220 0 none ,l * +FILE=r_dtoi + 00304224 003042af 8c + __dtou + 00304224 0 none ,g * + __dtoi + 00304224 0 none ,g * + loop_sftl + 00304264 0 none ,l * + shift_low + 0030426e 0 none ,l * + shift_low1 + 00304276 0 none ,l * + shift_r + 00304280 0 none ,l * + shift_r1 + 00304282 0 none ,l * + end_shift + 00304288 0 none ,l * + return + 0030428e 0 none ,l * + end_nagate + 0030428e 0 none ,l * + return_zero + 0030429c 0 none ,l * + EXP_INF + 003042a0 0 none ,l * + MMASK + 003042a4 0 none ,l * + MSB + 003042a8 0 none ,l * + BIAS + 003042ac 0 none ,l * +FILE=r_dtos + 003042b0 0030438b dc + __dtos + 003042b0 0 none ,g * + end_sticky + 00304306 0 none ,l * + denormalize_loop + 0030430e 0 none ,l * + end_denormal + 00304318 0 none ,l * + round_carry + 00304328 0 none ,l * + end_round + 0030432c 0 none ,l * + return + 0030433c 0 none ,l * + exception + 0030434a 0 none ,l * + return_inf + 00304352 0 none ,l * + return_NaN + 0030435a 0 none ,l * + return_zero + 00304360 0 none ,l * + EXP_INF + 00304368 0 none ,l * + MMASK + 0030436c 0 none ,l * + SMASK + 00304370 0 none ,l * + DEF_BIAS + 00304374 0 none ,l * + MSB + 00304378 0 none ,l * + INFS + 0030437c 0 none ,l * + CARRY_CHECK + 00304380 0 none ,l * + RET_INF + 00304384 0 none ,l * + NaN + 00304388 0 none ,l * +FILE=r_gtd + 0030438c 00304433 a8 + __gtd + 0030438c 0 none ,g * + exception_return1 + 003043be 0 none ,l * + exception_return2 + 003043c2 0 none ,l * + exception_return3 + 003043c6 0 none ,l * + minus + 003043d8 0 none ,l * + sign_def + 003043e0 0 none ,l * + return + 003043e4 0 none ,l * + exception1 + 003043f8 0 none ,l * + exception2 + 00304404 0 none ,l * + exception3 + 00304410 0 none ,l * + false + 00304428 0 none ,l * + EXP_INF + 0030442c 0 none ,l * + MMASK + 00304430 0 none ,l * +FILE=r_itod + 00304434 00304487 54 + __itod + 00304434 0 none ,g * + end_negate + 00304448 0 none ,l * + sftl_loop + 0030444a 0 none ,l * + return + 0030446c 0 none ,l * + return_zero + 0030447c 0 none ,l * + EXP_32 + 00304484 0 none ,l * +FILE=r_itos + 00304488 003044df 58 + __itos + 00304488 0 none ,g * + end_negate + 0030449c 0 none ,l * + sftl_loop + 0030449e 0 none ,l * + end_round + 003044ba 0 none ,l * + return_value + 003044ba 0 none ,l * + return_zero + 003044d0 0 none ,l * + EXP_32 + 003044d4 0 none ,l * + LRS + 003044d8 0 none ,l * + MAN_1 + 003044dc 0 none ,l * +FILE=r_lts + 003044e0 00304557 78 + __lts + 003044e0 0 none ,g * + exception_return1 + 00304504 0 none ,l * + exception_return2 + 00304508 0 none ,l * + exception_return3 + 0030450c 0 none ,l * + minus + 0030451a 0 none ,l * + sign_def + 00304520 0 none ,l * + return + 00304524 0 none ,l * + exception1 + 00304530 0 none ,l * + exception2 + 00304538 0 none ,l * + exception3 + 00304540 0 none ,l * + false + 00304550 0 none ,l * + EXP_INF + 00304554 0 none ,l * +FILE=r_muld + 00304558 0030476b 214 + exception1 + 00304558 0 none ,l * + parm2_NaN_check + 00304574 0 none ,l * + exception2 + 00304580 0 none ,l * + exception3 + 00304598 0 none ,l * + ex3 + 003045a4 0 none ,l * + p1_norm_loop + 003045ae 0 none ,l * + end_p1_norm + 003045b8 0 none ,l * + exception4 + 003045bc 0 none ,l * + ex4 + 003045c8 0 none ,l * + p2_norm_loop + 003045d2 0 none ,l * + end_p2_norm + 003045dc 0 none ,l * + return_zero + 003045e0 0 none ,l * + return_inf + 003045ea 0 none ,l * + return_NaN + 003045f2 0 none ,l * + __muld + 003045fc 0 none ,g * + exception_return3 + 00304652 0 none ,l * + exception_return4 + 00304656 0 none ,l * + mul_man1 + 00304698 0 none ,l * + end_normalize + 003046bc 0 none ,l * + end_sticky + 003046c2 0 none ,l * + denormalize_loop + 003046ca 0 none ,l * + round_denormal + 003046d6 0 none ,l * + end_round_d + 003046ec 0 none ,l * + end_denormal + 003046f0 0 none ,l * + round_carry + 00304702 0 none ,l * + end_round + 00304708 0 none ,l * + return_value + 00304708 0 none ,l * + return + 00304726 0 none ,l * + EXP_INF + 00304754 0 none ,l * + MMASK + 00304758 0 none ,l * + MSB + 0030475c 0 none ,l * + CARRY_CHECK + 00304760 0 none ,l * + BIAS + 00304764 0 none ,l * + DEN_CARRY + 00304768 0 none ,l * +FILE=r_muls + 0030476c 003048ab 140 + __muls + 0030476c 0 none ,g * + exception_return3 + 003047a4 0 none ,l * + exception_return4 + 003047a8 0 none ,l * + end_calc_sticky + 003047ca 0 none ,l * + denormal + 003047da 0 none ,l * + end_normalize + 003047dc 0 none ,l * + denormalize_loop + 003047e4 0 none ,l * + round_denormal + 003047ee 0 none ,l * + end_round_d + 00304802 0 none ,l * + end_denormal + 00304806 0 none ,l * + round_carry + 00304816 0 none ,l * + end_round + 0030481a 0 none ,l * + return_value + 0030481a 0 none ,l * + return + 00304828 0 none ,l * + exception1 + 00304838 0 none ,l * + parm2_NaN_check + 0030484c 0 none ,l * + exception2 + 00304854 0 none ,l * + exception3 + 00304864 0 none ,l * + p1_norm_loop + 0030486c 0 none ,l * + end_p1_norm + 00304872 0 none ,l * + exception4 + 00304876 0 none ,l * + p2_normalize + 0030487a 0 none ,l * + p2_norm_loop + 0030487e 0 none ,l * + end_p2_norm + 00304884 0 none ,l * + return_zero + 00304888 0 none ,l * + return_inf + 00304890 0 none ,l * + return_NaN + 00304896 0 none ,l * + EXP_INF + 0030489c 0 none ,l * + LRS + 003048a0 0 none ,l * + MAN_1 + 003048a4 0 none ,l * + NaN + 003048a8 0 none ,l * +FILE=r_negd + 003048ac 003048cb 20 + __negd + 003048ac 0 none ,g * +FILE=r_stoi + 003048cc 00304923 58 + __stoi + 003048cc 0 none ,g * + __stou + 003048cc 0 none ,g * + loop_sftl + 003048fc 0 none ,l * + shift_r + 00304906 0 none ,l * + loop_sftr + 00304908 0 none ,l * + end_shift + 0030490e 0 none ,l * + return + 00304914 0 none ,l * + end_nagate + 00304914 0 none ,l * + return_zero + 0030491c 0 none ,l * + EXP_INF + 00304920 0 none ,l * +FILE=__divls + 00304924 003049d7 b4 + __divls + 00304924 0 none ,g * + divls_zero + 003049c2 0 none ,l * + A_errno + 003049d0 0 none ,l * + n_zerono + 003049d4 0 none ,l * +FILE=__modls + 003049d8 00304a9f c8 + __modls + 003049d8 0 none ,g * + modls_L + 00304a7e 0 none ,l * + modls_zero + 00304a8a 0 none ,l * + A_errno + 00304a98 0 none ,l * + n_zerono + 00304a9c 0 none ,l * +FILE=abs + 00304aa0 00304aad e + _abs + 00304aa0 e func ,g * +FILE=cosf + 00304ab0 00304b1f 70 + _cosf + 00304ab0 70 func ,g * +FILE=sinf + 00304b20 00304b8f 70 + _sinf + 00304b20 70 func ,g * +FILE=_Bdel_cychdr + 00304b90 00304b9f 10 + _Bdel_cychdr + 00304b90 0 none ,g * +FILE=_BfileFLS_CloseFile + 00304ba0 00304baf 10 + _BfileFLS_CloseFile + 00304ba0 0 none ,g * +FILE=_Bkey_Set_RepeatTime_Default + 00304bb0 00304bbf 10 + _Bkey_Set_RepeatTime_Default + 00304bb0 0 none ,g * +FILE=_CallbackAtQuitMainFunction + 00304bc0 00304bcf 10 + _CallbackAtQuitMainFunction + 00304bc0 0 none ,g * +FILE=_flsFindClose + 00304bd0 00304bdf 10 + _flsFindClose + 00304bd0 0 none ,g * +FILE=_free + 00304be0 00304bef 10 + _free + 00304be0 0 none ,g * +FILE=_GLibAddinAplExecutionCheck + 00304bf0 00304bff 10 + _GLibAddinAplExecutionCheck + 00304bf0 0 none ,g * +FILE=_Hmem_SetMMU + 00304c00 00304c0f 10 + _Hmem_SetMMU + 00304c00 0 none ,g * +FILE=_malloc + 00304c10 00304c1f 10 + _malloc + 00304c10 0 none ,g * +FILE=_PrintXY + 00304c20 00304c2f 10 + _PrintXY + 00304c20 0 none ,g * +FILE=timer + 00304c30 00304d2f 100 + _GetSDKLibraryVersion + 00304c30 6 func ,g * + _SetTimer + 00304c36 54 func ,g * + _KillTimer + 00304c8a 44 func ,g * + _Sleep + 00304cce 62 func ,g * +FILE=__istos + 00304d30 00304dd3 a4 + __istos + 00304d30 0 none ,g * + denormalize_loop + 00304d56 0 none ,l * + round_denormal + 00304d64 0 none ,l * + end_round_d + 00304d78 0 none ,l * + end_denormal + 00304d7c 0 none ,l * + end_round + 00304d90 0 none ,l * + return_value + 00304d90 0 none ,l * + exception1 + 00304da0 0 none ,l * + return_zero + 00304da8 0 none ,l * + return_inf + 00304dae 0 none ,l * + return_NaN + 00304db4 0 none ,l * + IEEE_INF + 00304dc0 0 none ,l * + IN_INF + 00304dc4 0 none ,l * + IN_ZERO + 00304dc8 0 none ,l * + LRS + 00304dcc 0 none ,l * + MAN_1 + 00304dd0 0 none ,l * +FILE=__stois + 00304dd4 00304e3f 6c + __stois + 00304dd4 0 none ,g * + exception_return + 00304dec 0 none ,l * + return_value + 00304df4 0 none ,l * + exception1 + 00304e04 0 none ,l * + exception2 + 00304e0c 0 none ,l * + norm_loop + 00304e14 0 none ,l * + end_norm + 00304e1a 0 none ,l * + return_zero + 00304e1e 0 none ,l * + return_inf + 00304e24 0 none ,l * + return_NaN + 00304e2a 0 none ,l * + IEEE_INF + 00304e34 0 none ,l * + IN_INF + 00304e38 0 none ,l * + IN_ZERO + 00304e3c 0 none ,l * +FILE=_in_coss + 00304e40 00304f9f 160 + __in_coss + 00304e40 160 func ,g * +FILE=_in_sins + 00304fa0 00305117 178 + __in_sins + 00304fa0 178 func ,g * +FILE=_Bcre_cychdr + 00305118 00305127 10 + _Bcre_cychdr + 00305118 0 none ,g * +FILE=_BSrl_DummyWAIT + 00305128 00305137 10 + _BSrl_DummyWAIT + 00305128 0 none ,g * +FILE=_Bsta_cychdr + 00305138 00305147 10 + _Bsta_cychdr + 00305138 0 none ,g * +FILE=_Bstp_cychdr + 00305148 00305157 10 + _Bstp_cychdr + 00305148 0 none ,g * +FILE=__i_adds + 00305158 003053c3 26c + __in_subs + 00305158 0 none ,g * + __in_adds + 00305164 0 none ,g * + swap_end + 00305184 0 none ,l * + e_sftr31 + 003051ae 0 none ,l * + or_sticky + 003051b2 0 none ,l * + end_sftr + 003051ba 0 none ,l * + mantissa_sub + 003051d4 0 none ,l * + normalize + 003051e0 0 none ,l * + n_sftl_8 + 003051f6 0 none ,l * + n_sftl_4 + 00305200 0 none ,l * + n_sftl_2 + 0030520e 0 none ,l * + n_sftl_1 + 00305218 0 none ,l * + normal + 00305220 0 none ,l * + end_calc + 00305228 0 none ,l * + return_value + 00305228 0 none ,l * + exception1 + 00305238 0 none ,l * + exception2 + 0030524c 0 none ,l * + return_NaN + 00305254 0 none ,l * + plus_zero + 0030525c 0 none ,l * + return_zero + 0030525e 0 none ,l * + e_sftr7 + 00305264 0 none ,l * + e_sftr5 + 00305266 0 none ,l * + e_sftr3 + 00305268 0 none ,l * + e_sftr1 + 0030526a 0 none ,l * + e_sftr6 + 0030526e 0 none ,l * + e_sftr4 + 00305270 0 none ,l * + e_sftr2 + 00305272 0 none ,l * + e_sftr15 + 00305276 0 none ,l * + e_sftr13 + 00305278 0 none ,l * + e_sftr11 + 0030527a 0 none ,l * + e_sftr9 + 0030527c 0 none ,l * + e_sftr14 + 00305282 0 none ,l * + e_sftr12 + 00305284 0 none ,l * + e_sftr10 + 00305286 0 none ,l * + e_sftr8 + 00305288 0 none ,l * + e_sftr23 + 0030528c 0 none ,l * + e_sftr21 + 0030528e 0 none ,l * + e_sftr19 + 00305290 0 none ,l * + e_sftr17 + 00305292 0 none ,l * + e_sftr22 + 00305298 0 none ,l * + e_sftr20 + 0030529a 0 none ,l * + e_sftr18 + 0030529c 0 none ,l * + e_sftr16 + 0030529e 0 none ,l * + e_sftr29 + 003052a2 0 none ,l * + e_sftr27 + 003052a4 0 none ,l * + e_sftr25 + 003052a6 0 none ,l * + e_sftr30 + 003052ae 0 none ,l * + e_sftr28 + 003052b0 0 none ,l * + e_sftr26 + 003052b2 0 none ,l * + e_sftr24 + 003052b4 0 none ,l * + table + 003052bc 0 none ,l * + INF + 003053b4 0 none ,l * + ZERO + 003053b8 0 none ,l * + STICKY + 003053bc 0 none ,l * + HALF + 003053c0 0 none ,l * +FILE=__i_fmds + 003053c4 0030544b 88 + __in_fmods + 003053c4 0 none ,g * + div_loop + 003053ea 0 none ,l * + end_loop + 003053f8 0 none ,l * + normalize_loop + 00305400 0 none ,l * + end_calc_mantissa + 00305400 0 none ,l * + end_normalize + 0030540e 0 none ,l * + return_value + 0030540e 0 none ,l * + exception1 + 00305420 0 none ,l * + return_prm1 + 00305424 0 none ,l * + qshift_ret_z + 00305428 0 none ,l * + sft_loop + 0030542a 0 none ,l * + return_zero + 00305434 0 none ,l * + return_NaN + 0030543a 0 none ,l * + INF + 00305444 0 none ,l * + ZERO + 00305448 0 none ,l * +FILE=__istyps + 0030544c 00305483 38 + __istypes + 0030544c 0 none ,g * + exception1 + 00305468 0 none ,l * + set_NaN + 00305472 0 none ,l * + exception2 + 00305476 0 none ,l * + INF + 0030547c 0 none ,l * + ZERO + 00305480 0 none ,l * +FILE=__q_fmvn + 00305484 00305527 a4 + __quick_evn_mvn + 00305484 0 none ,g * + __quick_odd_mvn + 00305490 0 none ,g * + A_FMVN_TBL + 0030549c 0 none ,l * + FMVN_64 + 003054a2 0 none ,l * + FMVN_60 + 003054a6 0 none ,l * + FMVN_56 + 003054aa 0 none ,l * + FMVN_52 + 003054ae 0 none ,l * + FMVN_48 + 003054b2 0 none ,l * + FMVN_44 + 003054b6 0 none ,l * + FMVN_40 + 003054ba 0 none ,l * + FMVN_36 + 003054be 0 none ,l * + FMVN_32 + 003054c2 0 none ,l * + FMVN_28 + 003054c6 0 none ,l * + FMVN_24 + 003054ca 0 none ,l * + FMVN_20 + 003054ce 0 none ,l * + FMVN_16 + 003054d2 0 none ,l * + FMVN_12 + 003054d6 0 none ,l * + FMVN_8 + 003054da 0 none ,l * + FMVN_4 + 003054de 0 none ,l * + FMVN_0 + 003054e0 0 none ,l * + FMVN_TBL + 003054e4 0 none ,l * +FILE=_a_coss + 00305528 00305577 50 + __app_coss + 00305528 50 func ,g * +FILE=_a_sins + 00305578 003055e3 6c + __app_sins + 00305578 6c func ,g * +FILE=__i_muls + 003055e4 00305693 b0 + __in_muls + 003055e4 0 none ,g * + denormal + 0030561e 0 none ,l * + end_normalize + 00305622 0 none ,l * + end_sticky + 00305634 0 none ,l * + return_value + 00305634 0 none ,l * + exception1 + 00305644 0 none ,l * + p2zero_check + 00305654 0 none ,l * + exception2 + 0030565e 0 none ,l * + p1zero_check + 0030566e 0 none ,l * + return_zero + 00305678 0 none ,l * + return_inf + 0030567e 0 none ,l * + return_NaN + 00305684 0 none ,l * + INF + 0030568c 0 none ,l * + ZERO + 00305690 0 none ,l * +FILE=__polins + 00305694 003056fb 68 + __polinos + 00305694 0 none ,g * + start + 003056be 0 none ,l * + A_in_adds + 003056f4 0 none ,l * + A_in_muls + 003056f8 0 none ,l * + +SECTION=C +FILE=addin_sct + 00305704 00305717 14 + _B_BGN + 00305704 0 none ,g * + _B_END + 00305708 0 none ,g * + _R_BGN + 0030570c 0 none ,g * + _R_END + 00305710 0 none ,g * + _D_ROM + 00305714 0 none ,g * +FILE=consts + 00305718 003057df c8 + __IFNANS + 00305718 8 data ,g * + __IFZEROS + 00305720 8 data ,g * + __IFINFS + 00305728 8 data ,g * + __IFONES + 00305730 8 data ,g * + __HALFS + 00305738 8 data ,g * + __QUOTS + 00305740 8 data ,g * + __TWOS + 00305748 8 data ,g * + __FOURS + 00305750 8 data ,g * + __PAIS + 00305758 8 data ,g * + __2PAIS + 00305760 8 data ,g * + __HLFPAIS + 00305768 8 data ,g * + __QUOPAIS + 00305770 8 data ,g * + __LOGE2S + 00305778 8 data ,g * + __NIFZEROS + 00305780 8 data ,g * + __NIFINFS + 00305788 8 data ,g * + __NIFONES + 00305790 8 data ,g * + __NHALFS + 00305798 8 data ,g * + __NQUOTS + 003057a0 8 data ,g * + __NTWOS + 003057a8 8 data ,g * + __NFOURS + 003057b0 8 data ,g * + __NPAIS + 003057b8 8 data ,g * + __N2PAIS + 003057c0 8 data ,g * + __NHLFPAIS + 003057c8 8 data ,g * + __NQUOPAIS + 003057d0 8 data ,g * + __NLOGE2S + 003057d8 8 data ,g * +FILE=_a_coss + 003057e0 00305817 38 + _cos_coef$297 + 003057e0 38 data ,l * +FILE=_a_sins + 00305818 0030584f 38 + _sin_coef$297 + 00305818 38 data ,l * + +SECTION=B_BR_Size +FILE=F:\AldTest\Debug\Ald.obj + 08100000 08100003 4 + _BR_Size + 08100000 4 data ,g * + +SECTION=B +FILE=_errno + 08100004 08100007 4 + __errno + 08100004 4 data ,g * + +SECTION=R +FILE=F:\AldTest\Debug\MonochromeLib.obj + 08100008 08100017 10 + _SysCallCode + 08100008 c data ,l * + _SysCall + 08100014 4 data ,l * +FILE=F:\Casio\fx-9860G SDK\OS\FX\lib\setup.obj + 08100018 0810001b 4 + _gb_OnAppClose + 08100018 4 data ,g * + +Absolute value symbols +FILE=__divls + zerodiv + 0000044e 0 none ,l * +FILE=__modls + zerodiv + 0000044e 0 none ,l * +FILE=_Bdel_cychdr + __JumpTableTOP + 80010070 0 none ,l * +FILE=_BfileFLS_CloseFile + __JumpTableTOP + 80010070 0 none ,l * +FILE=_Bkey_Set_RepeatTime_Default + __JumpTableTOP + 80010070 0 none ,l * +FILE=_CallbackAtQuitMainFunction + __JumpTableTOP + 80010070 0 none ,l * +FILE=_flsFindClose + __JumpTableTOP + 80010070 0 none ,l * +FILE=_free + __JumpTableTOP + 80010070 0 none ,l * +FILE=_GLibAddinAplExecutionCheck + __JumpTableTOP + 80010070 0 none ,l * +FILE=_Hmem_SetMMU + __JumpTableTOP + 80010070 0 none ,l * +FILE=_malloc + __JumpTableTOP + 80010070 0 none ,l * +FILE=_PrintXY + __JumpTableTOP + 80010070 0 none ,l * +FILE=_Bcre_cychdr + __JumpTableTOP + 80010070 0 none ,l * +FILE=_BSrl_DummyWAIT + __JumpTableTOP + 80010070 0 none ,l * +FILE=_Bsta_cychdr + __JumpTableTOP + 80010070 0 none ,l * +FILE=_Bstp_cychdr + __JumpTableTOP + 80010070 0 none ,l * + +*** Delete Symbols *** + +SYMBOL SIZE INFO + +*** Variable Accessible with Abs8 *** + +SYMBOL SIZE COUNTS OPTIMIZE + +*** Variable Accessible with Abs16 *** + +SYMBOL SIZE COUNTS OPTIMIZE + +*** Function Call *** + +SYMBOL COUNTS OPTIMIZE diff --git a/Debug/MonochromeLib.lst b/Debug/MonochromeLib.lst new file mode 100644 index 0000000..015e25e --- /dev/null +++ b/Debug/MonochromeLib.lst @@ -0,0 +1,10631 @@ +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 + 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 .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) + 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) + 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>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>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>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 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 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=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 .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 .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>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]<>3)+j] & -1<<(real_width-width))<>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 .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>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]<>3)+j] | (unsigned char)-1>>8-(width&7))<>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 .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>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]<>3)+j] & -1<<(real_width-width))<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 .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>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<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 .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]<>3)+j]<>3)+end_x]; + Monochrome 981 if(bool3) line &= -1<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 .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>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<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 ; i120 || 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 .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 ; i127 || 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 .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 ; i127 || 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 .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 ; i112 || 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 ; i112 || 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 .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 ; i127 || 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 .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> 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> 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>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 .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>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> 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>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 .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> 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 .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> 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 .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> 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 + diff --git a/Debug/MonochromeLib.obj b/Debug/MonochromeLib.obj new file mode 100644 index 0000000000000000000000000000000000000000..a7002024d049844df4f08a387c2909eabad25bc3 GIT binary patch literal 79096 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

8L5AU$5jB;@Jmmv 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 RnjS{;1L_%D7~ug-A^`uH*u4M% literal 0 HcmV?d00001 diff --git a/INIT/CasioRAMCPU.mem b/INIT/CasioRAMCPU.mem new file mode 100644 index 0000000000000000000000000000000000000000..fd09ac75d7a0890cee6d651751a28246d1cf2ae6 GIT binary patch literal 80 gcmZ?q3C_&*P0eKh0RaXF7BB-!2rwKVi4W8U06^pgsQ>@~ literal 0 HcmV?d00001 diff --git a/MainIcon.bmp b/MainIcon.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3fe372c9c7b7586ed1cf1617a1d19826afba9aa7 GIT binary patch literal 138 zcmZ?r?P7ocJ0PV2#Bx9^48)8;2m(Gpe3%b{!2&?y|NsABX8r&Fe}F3g*t0+UqsXEN z#_IPK|EPv4{;>~#z`_#9z`}l?v4w$w$)(_(g^MSr=MmSJUM{YBUM?;tJdb#AFt8K= HF~~3g5xO7P literal 0 HcmV?d00001 diff --git a/MonochromeLib.c b/MonochromeLib.c new file mode 100644 index 0000000..4922f51 --- /dev/null +++ b/MonochromeLib.c @@ -0,0 +1,1559 @@ +/*************************************************************/ +/** MonochromeLib - monochrome graphic library for fx-9860G **/ +/** MonochromeLib is free software **/ +/** **/ +/** @author Pierre "PierrotLL" Le Gall **/ +/** @contact legallpierre89@gmail.com **/ +/** **/ +/** @file MonochromeLib.c **/ +/** Code file of MonochromeLib **/ +/** **/ +/** @date 11-22-2011 **/ +/*************************************************************/ + +#include "MonochromeLib.h" +#include +#include "fxlib.h" +#include "mathf.h" + + +/******************************/ +/** Dependencies management **/ +/******************************/ + +#ifdef ML_ALL + #define ML_CLEAR_VRAM + #define ML_CLEAR_SCREEN + #define ML_DISPLAY_VRAM + #define ML_SET_CONTRAST + #define ML_GET_CONTRAST + #define ML_PIXEL + #define ML_POINT + #define ML_PIXEL_TEST + #define ML_LINE + #define ML_HORIZONTAL_LINE + #define ML_VERTICAL_LINE + #define ML_RECTANGLE + #define ML_POLYGON + #define ML_FILLED_POLYGON + #define ML_CIRCLE + #define ML_FILLED_CIRCLE + #define ML_ELLIPSE + #define ML_ELLIPSE_IN_RECT + #define ML_FILLED_ELLIPSE + #define ML_FILLED_ELLIPSE_IN_RECT + #define ML_HORIZONTAL_SCROLL + #define ML_VERTICAL_SCROLL + #define ML_BMP_OR + #define ML_BMP_AND + #define ML_BMP_XOR + #define ML_BMP_OR_CL + #define ML_BMP_AND_CL + #define ML_BMP_XOR_CL + #define ML_BMP_8_OR + #define ML_BMP_8_AND + #define ML_BMP_8_XOR + #define ML_BMP_8_OR_CL + #define ML_BMP_8_AND_CL + #define ML_BMP_8_XOR_CL + #define ML_BMP_16_OR + #define ML_BMP_16_AND + #define ML_BMP_16_XOR + #define ML_BMP_16_OR_CL + #define ML_BMP_16_AND_CL + #define ML_BMP_16_XOR_CL + #define ML_BMP_OR_ZOOM + #define ML_BMP_AND_ZOOM + #define ML_BMP_XOR_ZOOM + #define ML_BMP_OR_ROTATE + #define ML_BMP_AND_ROTATE + #define ML_BMP_XOR_ROTATE +#endif + +#ifdef ML_POLYGON + #define ML_LINE +#endif + +#ifdef ML_LINE + #define ML_PIXEL +#endif + +#ifdef ML_POINT + #define ML_PIXEL + #define ML_RECTANGLE +#endif + +#ifdef ML_RECTANGLE + #define ML_HORIZONTAL_LINE +#endif + +#ifdef ML_FILLED_POLYGON + #define ML_HORIZONTAL_LINE +#endif + +#ifdef ML_CIRCLE + #define ML_PIXEL +#endif + +#ifdef ML_FILLED_CIRCLE + #define ML_HORIZONTAL_LINE +#endif + +#ifdef ML_ELLIPSE_IN_RECT + #define ML_ELLIPSE +#endif + +#ifdef ML_ELLIPSE + #define ML_PIXEL +#endif + +#ifdef ML_FILLED_ELLIPSE_IN_RECT + #define ML_FILLED_ELLIPSE +#endif + +#ifdef ML_FILLED_ELLIPSE + #define ML_HORIZONTAL_LINE +#endif + + +/***************/ +/** Functions **/ +/***************/ + +#define sgn(x) (x<0?-1:1) +#define rnd(x) ((int)(x+0.5)) + +//Thanks to Simon Lothar for this function + +static int SysCallCode[] = {0xD201422B,0x60F20000,0x80010070}; +static int (*SysCall)( int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode; + +char* ML_vram_adress() +{ + return (char*)((*SysCall)(0, 0, 0, 0, 309)); +} + + +#ifdef ML_CLEAR_VRAM +void ML_clear_vram() +{ + int i, end, *pointer_long, vram; + char *pointer_byte; + vram = (int)ML_vram_adress(); + end = 4-vram&3; + pointer_byte = (char*)vram; + for(i=0 ; i>3)] |= 128>>(x&7); + break; + case ML_WHITE: + vram[(y<<4)+(x>>3)] &= ~(128>>(x&7)); + break; + case ML_XOR: + vram[(y<<4)+(x>>3)] ^= 128>>(x&7); + break; + case ML_CHECKER: + if(y&1^x&1) vram[(y<<4)+(x>>3)] &= ~(128>>(x&7)); + else vram[(y<<4)+(x>>3)] |= 128>>(x&7); + break; + } +} +#endif + +#ifdef ML_POINT +void ML_point(int x, int y, int width, ML_Color color) +{ + if(width < 1) return; + if(width == 1) ML_pixel(x, y, color); + else + { + int padding, pair; + padding = width>>1; + pair = !(width&1); + ML_rectangle(x-padding+pair, y-padding+pair, x+padding, y+padding, 0, 0, color); + } +} +#endif + +#ifdef ML_PIXEL_TEST +ML_Color ML_pixel_test(int x, int y) +{ + char *vram, byte; + if(x&~127 || y&~63) return ML_TRANSPARENT; + vram = ML_vram_adress(); + byte = 1<<(7-(x&7)); + return (vram[(y<<4)+(x>>3)] & byte ? ML_BLACK : ML_WHITE); + +} +#endif + +#ifdef ML_LINE +void ML_line(int x1, int y1, int x2, int y2, ML_Color color) +{ + int i, x, y, dx, dy, sx, sy, cumul; + x = x1; + y = y1; + dx = x2 - x1; + dy = y2 - y1; + sx = sgn(dx); + sy = sgn(dy); + dx = abs(dx); + dy = abs(dy); + ML_pixel(x, y, color); + if(dx > dy) + { + cumul = dx / 2; + for(i=1 ; i dx) + { + cumul -= dx; + y += sy; + } + ML_pixel(x, y, color); + } + } + else + { + cumul = dy / 2; + for(i=1 ; i dy) + { + cumul -= dy; + x += sx; + } + ML_pixel(x, y, color); + } + } +} +#endif + +#ifdef ML_HORIZONTAL_LINE +void ML_horizontal_line(int y, int x1, int x2, ML_Color color) +{ + int i; + char checker; + char* vram = ML_vram_adress(); + if(y&~63 || (x1<0 && x2<0) || (x1>127 && x2>127)) return; + if(x1 > x2) + { + i = x1; + x1 = x2; + x2 = i; + } + if(x1 < 0) x1 = 0; + if(x2 > 127) x2 = 127; + switch(color) + { + case ML_BLACK: + if(x1>>3 != x2>>3) + { + vram[(y<<4)+(x1>>3)] |= 255 >> (x1&7); + vram[(y<<4)+(x2>>3)] |= 255 << 7-(x2&7); + for(i=(x1>>3)+1 ; i>3 ; i++) + vram[(y<<4) + i] = 255; + } + else vram[(y<<4)+(x1>>3)] |= (255>>(x1%8 + 7-x2%8))<<(7-(x2&7)); + break; + case ML_WHITE: + if(x1>>3 != x2>>3) + { + vram[(y<<4)+(x1>>3)] &= 255 << 8-(x1&7); + vram[(y<<4)+(x2>>3)] &= 255 >> 1+(x2&7); + for(i=(x1>>3)+1 ; i>3 ; i++) + vram[(y<<4) + i] = 0; + } + else vram[(y<<4)+(x1>>3)] &= (255<<8-(x1&7)) | (255>>1+(x2&7)); + break; + case ML_XOR: + if(x1>>3 != x2>>3) + { + vram[(y<<4)+(x1>>3)] ^= 255 >> (x1&7); + vram[(y<<4)+(x2>>3)] ^= 255 << 7-(x2&7); + for(i=(x1>>3)+1 ; i<(x2>>3) ; i++) + vram[(y<<4) + i] ^= 255; + } + else vram[(y<<4)+(x1>>3)] ^= (255>>((x1&7) + 7-(x2&7)))<<(7-(x2&7)); + break; + case ML_CHECKER: + checker = (y&1 ? 85 : 170); + if(x1>>3 != x2>>3) + { + vram[(y<<4)+(x1>>3)] &= 255 << 8-(x1&7); + vram[(y<<4)+(x2>>3)] &= 255 >> 1+(x2&7); + vram[(y<<4)+(x1>>3)] |= checker & 255>>(x1&7); + vram[(y<<4)+(x2>>3)] |= checker & 255<<7-(x2&7); + for(i=(x1>>3)+1 ; i>3 ; i++) + vram[(y<<4) + i] = checker; + } + else + { + vram[(y<<4)+(x1>>3)] &= (255<<8-(x1&7)) | (255>>1+(x2&7)); + vram[(y<<4)+(x1>>3)] |= checker & (255>>(x1%8 + 7-x2%8))<<(7-(x2&7)); + } + break; + } +} + +#endif + +#ifdef ML_VERTICAL_LINE +void ML_vertical_line(int x, int y1, int y2, ML_Color color) +{ + int i, j; + char checker, byte, *vram = ML_vram_adress(); + if(x&~127 || (y1<0 && y2<0) || (y1>63 && y2>63)) return; + if(y1 > y2) + { + int tmp = y1; + y1 = y2; + y2 = tmp; + } + if(y1 < 0) y1 = 0; + if(y2 > 63) y2 = 63; + + i = (y1<<4)+(x>>3); + j = (y2<<4)+(x>>3); + switch(color) + { + case ML_BLACK: + byte = 128>>(x&7); + for( ; i<=j ; i+=16) + vram[i] |= byte; + break; + case ML_WHITE: + byte = ~(128>>(x&7)); + for( ; i<=j ; i+=16) + vram[i] &= byte; + break; + case ML_XOR: + byte = 128>>(x&7); + for( ; i<=j ; i+=16) + vram[i] ^= byte; + break; + case ML_CHECKER: + byte = 128>>(x&7); + checker = y1&1^x&1; + for( ; i<=j ; i+=16) + { + if(checker) vram[i] &= ~byte; + else vram[i] |= byte; + checker = !checker; + } + break; + } +} +#endif + +#ifdef ML_RECTANGLE +void ML_rectangle(int x1, int y1, int x2, int y2, int border_width, ML_Color border_color, ML_Color fill_color) +{ + int i; + if(x1 > x2) + { + i = x1; + x1 = x2; + x2 = i; + } + if(y1 > y2) + { + i = y1; + y1 = y2; + y2 = i; + } + if(border_width > (x2-x1)/2+1) border_width = (x2-x1)/2+1; + if(border_width > (y2-y1)/2+1) border_width = (y2-y1)/2+1; + if(border_color != ML_TRANSPARENT && border_width > 0) + { + for(i=0 ; i t[i]) + { + j++; + tmp = t[j]; + t[j] = t[i]; + t[i] = tmp; + } + } + t[r] = t[j+1]; + t[j+1] = x; + return j + 1; +} + +static void ML_filled_polygon_quicksord(int* t, int p, int r) +{ + int q; + if(p < r) + { + q = ML_filled_polygon_quicksord_partition(t, p, r); + ML_filled_polygon_quicksord(t, p, q-1); + ML_filled_polygon_quicksord(t, q+1, r); + } +} + + +void ML_filled_polygon(const int *x, const int *y, int nb_vertices, ML_Color color) +{ + int i, j, dx, dy, ymin, ymax; + int *cut_in_line, nb_cut; + if(nb_vertices < 3) return; + cut_in_line = malloc(nb_vertices*sizeof(int)); + if(!cut_in_line) return; + ymin = ymax = y[0]; + for(i=1 ; i ymax) ymax = y[i]; + } + for(i=ymin ; i<=ymax ; i++) + { + nb_cut = 0; + for(j=0 ; j=i) || (y[j]>=i && y[(j+1)%nb_vertices]<=i)) + { + dy = abs(y[j]-y[(j+1)%nb_vertices]); + if(dy) + { + dx = x[(j+1)%nb_vertices]-x[j]; + cut_in_line[nb_cut] = x[j] + rnd(abs(i-y[j]+sgn(i-y[j])/2)*dx/dy); + nb_cut++; + } + } + } + ML_filled_polygon_quicksord(cut_in_line, 0, nb_cut-1); + j = 0; + while(j plot_x) + { + if(d < 0) + d += 2*plot_x+3; + else + { + d += 2*(plot_x-plot_y)+5; + plot_y--; + } + plot_x++; + if(plot_y >= plot_x) + { + ML_pixel(x+plot_x, y+plot_y, color); + ML_pixel(x-plot_x, y+plot_y, color); + ML_pixel(x+plot_x, y-plot_y, color); + ML_pixel(x-plot_x, y-plot_y, color); + } + if(plot_y > plot_x) + { + ML_pixel(x+plot_y, y+plot_x, color); + ML_pixel(x-plot_y, y+plot_x, color); + ML_pixel(x+plot_y, y-plot_x, color); + ML_pixel(x-plot_y, y-plot_x, color); + } + } +} +#endif + +#ifdef ML_FILLED_CIRCLE +void ML_filled_circle(int x, int y, int radius, ML_Color color) +{ + int plot_x, plot_y, d; + + if(radius < 0) return; + plot_x = 0; + plot_y = radius; + d = 1 - radius; + + ML_horizontal_line(y, x-plot_y, x+plot_y, color); + while(plot_y > plot_x) + { + if(d < 0) + d += 2*plot_x+3; + else { + d += 2*(plot_x-plot_y)+5; + plot_y--; + ML_horizontal_line(y+plot_y+1, x-plot_x, x+plot_x, color); + ML_horizontal_line(y-plot_y-1, x-plot_x, x+plot_x, color); + } + plot_x++; + if(plot_y >= plot_x) + { + ML_horizontal_line(y+plot_x, x-plot_y, x+plot_y, color); + ML_horizontal_line(y-plot_x, x-plot_y, x+plot_y, color); + } + } +} +#endif + +#ifdef ML_ELLIPSE +void ML_ellipse(int x, int y, int radius1, int radius2, ML_Color color) +{ + int plot_x, plot_y; + float d1, d2; + if(radius1 < 1 || radius2 < 1) return; + plot_x = 0; + plot_y = radius2; + d1 = radius2*radius2 - radius1*radius1*radius2 + radius1*radius1/4; + ML_pixel(x, y+plot_y, color); + ML_pixel(x, y-plot_y, color); + while(radius1*radius1*(plot_y-.5) > radius2*radius2*(plot_x+1)) + { + if(d1 < 0) + { + d1 += radius2*radius2*(2*plot_x+3); + plot_x++; + } else { + d1 += radius2*radius2*(2*plot_x+3) + radius1*radius1*(-2*plot_y+2); + plot_x++; + plot_y--; + } + ML_pixel(x+plot_x, y+plot_y, color); + ML_pixel(x-plot_x, y+plot_y, color); + ML_pixel(x+plot_x, y-plot_y, color); + ML_pixel(x-plot_x, y-plot_y, color); + } + d2 = radius2*radius2*(plot_x+.5)*(plot_x+.5) + radius1*radius1*(plot_y-1)*(plot_y-1) - radius1*radius1*radius2*radius2; + while(plot_y > 0) + { + if(d2 < 0) + { + d2 += radius2*radius2*(2*plot_x+2) + radius1*radius1*(-2*plot_y+3); + plot_y--; + plot_x++; + } else { + d2 += radius1*radius1*(-2*plot_y+3); + plot_y--; + } + ML_pixel(x+plot_x, y+plot_y, color); + ML_pixel(x-plot_x, y+plot_y, color); + if(plot_y > 0) + { + ML_pixel(x+plot_x, y-plot_y, color); + ML_pixel(x-plot_x, y-plot_y, color); + } + } +} +#endif + +#ifdef ML_ELLIPSE_IN_RECT +void ML_ellipse_in_rect(int x1, int y1, int x2, int y2, ML_Color color) +{ + int radius1, radius2; + if(x1 > x2) + { + int tmp = x1; + x1 = x2; + x2 = tmp; + } + if(y1 > y2) + { + int tmp = y1; + y1 = y2; + y2 = tmp; + } + radius1 = (x2-x1)/2; + radius2 = (y2-y1)/2; + ML_ellipse(x1+radius1, y1+radius2, radius1, radius2, color); +} +#endif + +#ifdef ML_FILLED_ELLIPSE +void ML_filled_ellipse(int x, int y, int radius1, int radius2, ML_Color color) +{ + int plot_x, plot_y; + float d1, d2; + if(radius1 < 1 || radius2 < 1) return; + plot_x = 0; + plot_y = radius2; + d1 = radius2*radius2 - radius1*radius1*radius2 + radius1*radius1/4; + while(radius1*radius1*(plot_y-.5) > radius2*radius2*(plot_x+1)) + { + if(d1 < 0) + { + d1 += radius2*radius2*(2*plot_x+3); + plot_x++; + } else { + d1 += radius2*radius2*(2*plot_x+3) + radius1*radius1*(-2*plot_y+2); + ML_horizontal_line(y+plot_y, x-plot_x, x+plot_x, color); + ML_horizontal_line(y-plot_y, x-plot_x, x+plot_x, color); + plot_x++; + plot_y--; + } + } + ML_horizontal_line(y+plot_y, x-plot_x, x+plot_x, color); + ML_horizontal_line(y-plot_y, x-plot_x, x+plot_x, color); + d2 = radius2*radius2*(plot_x+.5)*(plot_x+.5) + radius1*radius1*(plot_y-1)*(plot_y-1) - radius1*radius1*radius2*radius2; + while(plot_y > 0) + { + if(d2 < 0) + { + d2 += radius2*radius2*(2*plot_x+2) + radius1*radius1*(-2*plot_y+3); + plot_y--; + plot_x++; + } else { + d2 += radius1*radius1*(-2*plot_y+3); + plot_y--; + } + ML_horizontal_line(y+plot_y, x-plot_x, x+plot_x, color); + if(plot_y > 0) + ML_horizontal_line(y-plot_y, x-plot_x, x+plot_x, color); + } +} +#endif + +#ifdef ML_FILLED_ELLIPSE_IN_RECT +void ML_filled_ellipse_in_rect(int x1, int y1, int x2, int y2, ML_Color color) +{ + int radius1, radius2; + if(x1 > x2) + { + int tmp = x1; + x1 = x2; + x2 = tmp; + } + if(y1 > y2) + { + int tmp = y1; + y1 = y2; + y2 = tmp; + } + radius1 = (x2-x1)/2; + radius2 = (y2-y1)/2; + ML_filled_ellipse(x1+radius1, y1+radius2, radius1, radius2, color); +} +#endif + +#ifdef ML_HORIZONTAL_SCROLL +void ML_horizontal_scroll(int scroll) +{ + int i, j; + char line[16], shift, *vram; + unsigned char next; + unsigned short word; + vram = ML_vram_adress(); + scroll %= 128; + shift = 8-(scroll&7); + for(i=0 ; i<64 ; i++) + { + for(j=0 ; j<16 ; j++) line[j] = vram[(i<<4)+((j-(scroll>>3)+15)&15)]; + next = line[15]; + vram[(i<<4)+15] = 0; + for(j=15 ; j>0 ; j--) + { + word = next << shift; + next = line[j-1]; + vram[(i<<4)+j] |= *((char*)&word+1); + vram[(i<<4)+j-1] = *((char*)&word); + } + word = next << shift; + vram[(i<<4)] |= *((char*)&word+1); + vram[(i<<4)+15] |= *((char*)&word); + } +} +#endif + +#ifdef ML_VERTICAL_SCROLL +void ML_vertical_scroll(int scroll) +{ + int i, j; + char column[64], *vram = ML_vram_adress(); + scroll %= 64; + for(i=0 ; i<16 ; i++) + { + for(j=0 ; j<64 ; j++) column[j] = vram[(j<<4)+i]; + for(j=0 ; j<64 ; j++) vram[(j<<4)+i] = column[(j-scroll+64)&63]; + } +} +#endif + +#ifdef ML_BMP_OR +void ML_bmp_or(const unsigned char *bmp, int x, int y, int width, int height) +{ + unsigned short line; + char shift, *screen, *p=(char*)&line; + int i, j, begin=0, end=height, real_width=(width-1>>3<<3)+8; + if(!bmp || x<0 || x>128-width || y<1-height || y>63 || width<1 || height<1) return; + if(y < 0) begin = -y; + if(y+height > 64) end = 64-y; + shift = 8-(x&7); + screen = ML_vram_adress()+(y+begin<<4)+(x>>3); + for(i=begin ; i>3 ; j++) + { + line = bmp[i*(real_width>>3)+j]<>3)+j] & -1<<(real_width-width))<>3<<3)+8; + if(!bmp || x<0 || x>128-width || y<1-height || y>63 || width<1 || height<1) return; + if(y < 0) begin = -y; + if(y+height > 64) end = 64-y; + shift = 8-(x&7); + screen = ML_vram_adress()+(y+begin<<4)+(x>>3); + for(i=begin ; i>3 ; j++) + { + line = ~((unsigned char)~bmp[i*(real_width>>3)+j]<>3)+j] | (unsigned char)-1>>8-(width&7))<>3<<3)+8; + if(!bmp || x<0 || x>128-width || y<1-height || y>63 || width<1 || height<1) return; + if(y < 0) begin = -y; + if(y+height > 64) end = 64-y; + shift = 8-(x&7); + screen = ML_vram_adress()+(y+begin<<4)+(x>>3); + for(i=begin ; i>3 ; j++) + { + line = bmp[i*(real_width>>3)+j]<>3)+j] & -1<<(real_width-width))<127 || y<1-height || y>63 || height<1 || width<1) return; + p = (char*)&line; + real_width = (width-1>>3<<3)+8; + if(y < 0) begin_y = -y; + else begin_y = 0; + if(y+height > 64) end_y = 64-y; + else end_y = height; + shift = 8-(x&7); + if(x<0) + { + begin_x = -x>>3; + if(shift != 8) bool1 = 0; + } else begin_x = 0; + if(x+real_width > 128) end_x = 15-(x>>3), bool2 = 0; + else end_x = real_width-1>>3; + bool3 = (end_x == real_width-1>>3); + screen = ML_vram_adress()+(y+begin_y<<4)+(x>>3); + + for(i=begin_y ; i>3)+begin_x] << shift; + if(bool1) screen[begin_x] |= *p; + if(shift!=8) screen[begin_x+1] |= *(p+1); + for(j=begin_x+1 ; j>3)+j] << shift; + screen[j] |= *p; + if(shift!=8) screen[j+1] |= *(p+1); + } + } + line = bmp[i*(real_width>>3)+end_x]; + if(bool3) line &= -1<127 || y<1-height || y>63 || height<1 || width<1) return; + p = (char*)&line; + real_width = (width-1>>3<<3)+8; + if(y < 0) begin_y = -y; + else begin_y = 0; + if(y+height > 64) end_y = 64-y; + else end_y = height; + shift = 8-(x&7); + if(x<0) + { + begin_x = -x>>3; + if(shift != 8) bool1 = 0; + } else begin_x = 0; + if(x+real_width > 128) end_x = 15-(x>>3), bool2 = 0; + else end_x = real_width-1>>3; + bool3 = (end_x == real_width-1>>3); + screen = ML_vram_adress()+(y+begin_y<<4)+(x>>3); + + for(i=begin_y ; i>3)+begin_x]<>3)+j]<>3)+end_x]; + if(bool3) line &= -1<127 || y<1-height || y>63 || height<1 || width<1) return; + p = (char*)&line; + real_width = (width-1>>3<<3)+8; + if(y < 0) begin_y = -y; + else begin_y = 0; + if(y+height > 64) end_y = 64-y; + else end_y = height; + shift = 8-(x&7); + if(x<0) + { + begin_x = -x>>3; + if(shift != 8) bool1 = 0; + } else begin_x = 0; + if(x+real_width > 128) end_x = 15-(x>>3), bool2 = 0; + else end_x = real_width-1>>3; + bool3 = (end_x == real_width-1>>3); + screen = ML_vram_adress()+(y+begin_y<<4)+(x>>3); + + for(i=begin_y ; i>3)+begin_x] << shift; + if(bool1) screen[begin_x] ^= *p; + if(shift!=8) screen[begin_x+1] ^= *(p+1); + for(j=begin_x+1 ; j>3)+j] << shift; + screen[j] ^= *p; + if(shift!=8) screen[j+1] ^= *(p+1); + } + } + line = bmp[i*(real_width>>3)+end_x]; + if(bool3) line &= -1<120 || y<-7 || y>63) return; + if(y < 0) begin = -y; + if(y > 56) end = 64-y; + shift = 8-(x&7); + screen = ML_vram_adress()+(y+begin<<4)+(x>>3); + for(i=begin ; i120 || y<-7 || y>63) return; + if(y < 0) begin = -y; + if(y > 56) end = 64-y; + shift = 8-(x&7); + screen = ML_vram_adress()+(y+begin<<4)+(x>>3); + for(i=begin ; i120 || y<-7 || y>63) return; + if(y < 0) begin = -y; + if(y > 56) end = 64-y; + shift = 8-(x&7); + screen = ML_vram_adress()+(y+begin<<4)+(x>>3); + for(i=begin ; i127 || y<-7 || y>63) return; + if(y < 0) begin = -y; + if(y > 56) end = 64-y; + shift = 8-(x&7); + if(x < 0) bool1 = 0; + if(x>120 || shift==8) bool2 = 0; + screen = ML_vram_adress()+(y+begin<<4)+(x>>3); + for(i=begin ; i127 || y<-7 || y>63) return; + if(y < 0) begin = -y; + if(y > 56) end = 64-y; + shift = 8-(x&7); + if(x < 0) bool1 = 0; + if(x>120 || shift==8) bool2 = 0; + screen = ML_vram_adress()+(y+begin<<4)+(x>>3); + for(i=begin ; i127 || y<-7 || y>63) return; + if(y < 0) begin = -y; + if(y > 56) end = 64-y; + shift = 8-(x&7); + if(x < 0) bool1 = 0; + if(x>120 || shift==8) bool2 = 0; + screen = ML_vram_adress()+(y+begin<<4)+(x>>3); + for(i=begin ; i112 || y<-15 || y>63) return; + if(y < 0) begin = -y; + if(y > 48) end = 64-y; + shift = 8-(x&7); + screen = ML_vram_adress()+(y+begin<<4)+(x>>3); + for(i=begin ; i112 || y<-15 || y>63) return; + if(y < 0) begin = -y; + if(y > 48) end = 64-y; + shift = 8-(x&7); + screen = ML_vram_adress()+(y+begin<<4)+(x>>3); + for(i=begin ; i112 || y<-15 || y>63) return; + if(y < 0) begin = -y; + if(y > 48) end = 64-y; + shift = 8-(x&7); + screen = ML_vram_adress()+(y+begin<<4)+(x>>3); + for(i=begin ; i127 || y<-15 || y>63) return; + if(y < 0) begin = -y; + if(y > 48) end = 64-y; + shift = 8-(x&7); + if(x < 0) bool1 = 0; + if(x<-8 || x>119) bool2 = 0; + if(x>111 || shift==8) bool3 = 0; + screen = ML_vram_adress()+(y+begin<<4)+(x>>3); + for(i=begin ; i127 || y<-15 || y>63) return; + if(y < 0) begin = -y; + if(y > 48) end = 64-y; + shift = 8-(x&7); + if(x < 0) bool1 = 0; + if(x<-8 || x>119) bool2 = 0; + if(x>111 || shift==8) bool3 = 0; + screen = ML_vram_adress()+(y+begin<<4)+(x>>3); + for(i=begin ; i127 || y<-15 || y>63) return; + if(y < 0) begin = -y; + if(y > 48) end = 64-y; + shift = 8-(x&7); + if(x < 0) bool1 = 0; + if(x<-8 || x>119) bool2 = 0; + if(x>111 || shift==8) bool3 = 0; + screen = ML_vram_adress()+(y+begin<<4)+(x>>3); + for(i=begin ; i> 14 ; + height_z = height * zoom_h14 >> 14; + nb_width = width + 7 >> 3; + + if (x < 0) begin_x = -x; + else begin_x = 0; + if (x+width_z > 128) end_x = 128-x; + else end_x = width_z; + if (y < 0) begin_y = -y; + else begin_y = 0; + if (y+height_z > 64) end_y = 64-y; + else end_y = height_z; + + for (iz=begin_x; iz> 3; + bit = 0x80 >> (i & 7); + x_screen = x+iz; + + for (jz=begin_y; jz>3)] |= 128>>(x_screen&7); + } + } +} +#endif + +#ifdef ML_BMP_AND_ZOOM +void ML_bmp_and_zoom(const unsigned char *bmp, int x, int y, int width, int height, float zoom_w, float zoom_h) +{ + int i, j, iz, jz, width_z, height_z, nb_width, i3, bit, x_screen, pixel; + int zoom_w14, zoom_h14; + int begin_x, end_x, begin_y, end_y; + char* vram = ML_vram_adress(); + + if (!bmp) return; + if (zoom_h < 0) zoom_h = 0; + if (zoom_w < 0) zoom_w = 0; + zoom_w14 = zoom_w * 16384; + zoom_h14 = zoom_h * 16384; + width_z = width * zoom_w14 >> 14 ; + height_z = height * zoom_h14 >> 14; + nb_width = width + 7 >> 3; + + if (x < 0) begin_x = -x; + else begin_x = 0; + if (x+width_z > 128) end_x = 128-x; + else end_x = width_z; + if (y < 0) begin_y = -y; + else begin_y = 0; + if (y+height_z > 64) end_y = 64-y; + else end_y = height_z; + + for (iz=begin_x; iz> 3; + bit = 0x80 >> (i & 7); + x_screen = x+iz; + + for (jz=begin_y; jz>3)] &= ~(128>>(x_screen&7)); + } + } +} +#endif + +#ifdef ML_BMP_XOR_ZOOM +void ML_bmp_xor_zoom(const unsigned char *bmp, int x, int y, int width, int height, float zoom_w, float zoom_h) +{ + int i, j, iz, jz, width_z, height_z, nb_width, i3, bit, x_screen, pixel; + int zoom_w14, zoom_h14; + int begin_x, end_x, begin_y, end_y; + char* vram = ML_vram_adress(); + + if (!bmp) return; + if (zoom_h < 0) zoom_h = 0; + if (zoom_w < 0) zoom_w = 0; + zoom_w14 = zoom_w * 16384; + zoom_h14 = zoom_h * 16384; + width_z = width * zoom_w14 >> 14 ; + height_z = height * zoom_h14 >> 14; + nb_width = width + 7 >> 3; + + if (x < 0) begin_x = -x; + else begin_x = 0; + if (x+width_z > 128) end_x = 128-x; + else end_x = width_z; + if (y < 0) begin_y = -y; + else begin_y = 0; + if (y+height_z > 64) end_y = 64-y; + else end_y = height_z; + + for (iz=begin_x; iz> 3; + bit = 0x80 >> (i & 7); + x_screen = x+iz; + + for (jz=begin_y; jz>3)] ^= 128>>(x_screen&7); + } + } +} +#endif + +#ifdef ML_BMP_OR_ROTATE +void ML_bmp_or_rotate(const unsigned char *bmp, int x, int y, int width, int height, int angle) +{ + int i, j, i3, dx, dy, ox, oy, xr, yr, nb_width, pixel, bit; + int cosinus, sinus; + char* vram = ML_vram_adress(); + + if (!bmp) return; + ox = x + width / 2; + oy = y + height / 2; + angle %= 360; + if (angle < 0) angle += 360; + if (angle == 0) {cosinus = 16384; sinus = 0;} + else if (angle == 90) {cosinus = 0; sinus = -16384;} + else if (angle == 180) {cosinus = -16384; sinus = 0;} + else if (angle == 270) {cosinus = 0; sinus = 16384;} + else + { + cosinus = cosf(-3.14 * angle / 180.0) * 16384; + sinus = sinf(-3.14 * angle / 180.0) * 16384; + } + nb_width = width + 7 >> 3; + + for (i=0; i> (i & 7); + i3 = i >> 3; + dx = x + i - ox; + for (j=0; j> 14); + yr = oy + (dx * sinus + dy * cosinus >> 14); + if (!(xr < 0 || xr > 127 || yr < 0 || yr > 63)) + { + pixel = bmp[i3 + nb_width * j] & bit; + if (pixel != 0) vram[(yr<<4)+(xr>>3)] |= 128>>(xr&7); + } + } + } +} +#endif + +#ifdef ML_BMP_AND_ROTATE +void ML_bmp_and_rotate(const unsigned char *bmp, int x, int y, int width, int height, int angle) +{ + int i, j, i3, dx, dy, ox, oy, xr, yr, nb_width, pixel, bit; + int cosinus, sinus; + char* vram = ML_vram_adress(); + + if (!bmp) return; + ox = x + width / 2; + oy = y + height / 2; + angle %= 360; + if (angle < 0) angle += 360; + if (angle == 0) {cosinus = 16384; sinus = 0;} + else if (angle == 90) {cosinus = 0; sinus = -16384;} + else if (angle == 180) {cosinus = -16384; sinus = 0;} + else if (angle == 270) {cosinus = 0; sinus = 16384;} + else + { + cosinus = cosf(-3.14 * angle / 180.0) * 16384; + sinus = sinf(-3.14 * angle / 180.0) * 16384; + } + nb_width = width + 7 >> 3; + + for (i=0; i> (i & 7); + i3 = i >> 3; + dx = x + i - ox; + for (j=0; j> 14); + yr = oy + (dx * sinus + dy * cosinus >> 14); + if (!(xr < 0 || xr > 127 || yr < 0 || yr > 63)) + { + pixel = bmp[i3 + nb_width * j] & bit; + if (pixel == 0) vram[(yr<<4)+(xr>>3)] &= ~(128>>(xr&7)); + } + } + } +} +#endif + +#ifdef ML_BMP_XOR_ROTATE +void ML_bmp_xor_rotate(const unsigned char *bmp, int x, int y, int width, int height, int angle) +{ + int i, j, i3, dx, dy, ox, oy, xr, yr, nb_width, pixel, bit; + int cosinus, sinus; + char* vram = ML_vram_adress(); + + if (!bmp) return; + ox = x + width / 2; + oy = y + height / 2; + angle %= 360; + if (angle < 0) angle += 360; + if (angle == 0) {cosinus = 16384; sinus = 0;} + else if (angle == 90) {cosinus = 0; sinus = -16384;} + else if (angle == 180) {cosinus = -16384; sinus = 0;} + else if (angle == 270) {cosinus = 0; sinus = 16384;} + else + { + cosinus = cosf(-3.14 * angle / 180.0) * 16384; + sinus = sinf(-3.14 * angle / 180.0) * 16384; + } + nb_width = width + 7 >> 3; + + for (i=0; i> (i & 7); + i3 = i >> 3; + dx = x + i - ox; + for (j=0; j> 14); + yr = oy + (dx * sinus + dy * cosinus >> 14); + if (!(xr < 0 || xr > 127 || yr < 0 || yr > 63)) + { + pixel = bmp[i3 + nb_width * j] & bit; + if (pixel != 0) vram[(yr<<4)+(xr>>3)] ^= 128>>(xr&7); + } + } + } +} +#endif diff --git a/MonochromeLib.h b/MonochromeLib.h new file mode 100644 index 0000000..a935ad2 --- /dev/null +++ b/MonochromeLib.h @@ -0,0 +1,167 @@ +/*************************************************************/ +/** MonochromeLib - monochrome graphic library for fx-9860G **/ +/** MonochromeLib is free software **/ +/** **/ +/** @author Pierre "PierrotLL" Le Gall **/ +/** @contact legallpierre89@gmail.com **/ +/** **/ +/** @file MonochromeLib.h **/ +/** Include header for MonochromeLib **/ +/** **/ +/** @date 11-22-2011 **/ +/*************************************************************/ + +#ifndef MONOCHROMELIB +#define MONOCHROMELIB + +/****************************************************/ +/** uncomment #define of functions you want to use **/ +/****************************************************/ + + #define ML_ALL //Auto define all functions + +// #define ML_CLEAR_VRAM +// #define ML_CLEAR_SCREEN +// #define ML_DISPLAY_VRAM + +// #define ML_SET_CONTRAST +// #define ML_GET_CONTRAST + +// #define ML_PIXEL +// #define ML_POINT +// #define ML_PIXEL_TEST + +// #define ML_LINE +// #define ML_HORIZONTAL_LINE +// #define ML_VERTICAL_LINE + +// #define ML_RECTANGLE + +// #define ML_POLYGON +// #define ML_FILLED_POLYGON + +// #define ML_CIRCLE +// #define ML_FILLED_CIRCLE + +// #define ML_ELLIPSE +// #define ML_ELLIPSE_IN_RECT +// #define ML_FILLED_ELLIPSE +// #define ML_FILLED_ELLIPSE_IN_RECT + +// #define ML_HORIZONTAL_SCROLL +// #define ML_VERTICAL_SCROLL + +// #define ML_BMP_OR +// #define ML_BMP_AND +// #define ML_BMP_XOR +// #define ML_BMP_OR_CL +// #define ML_BMP_AND_CL +// #define ML_BMP_XOR_CL + +// #define ML_BMP_8_OR +// #define ML_BMP_8_AND +// #define ML_BMP_8_XOR +// #define ML_BMP_8_OR_CL +// #define ML_BMP_8_AND_CL +// #define ML_BMP_8_XOR_CL + +// #define ML_BMP_16_OR +// #define ML_BMP_16_AND +// #define ML_BMP_16_XOR +// #define ML_BMP_16_OR_CL +// #define ML_BMP_16_AND_CL +// #define ML_BMP_16_XOR_CL + +// #define ML_BMP_OR_ZOOM +// #define ML_BMP_AND_ZOOM +// #define ML_BMP_XOR_ZOOM + +// #define ML_BMP_OR_ROTATE +// #define ML_BMP_AND_ROTATE +// #define ML_BMP_XOR_ROTATE + + +/**************************/ +/** Functions prototypes **/ +/**************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +#define ML_SCREEN_WIDTH 128 +#define ML_SCREEN_HEIGHT 64 + +#define ML_CONTRAST_MIN 130 +#define ML_CONTRAST_NORMAL 168 +#define ML_CONTRAST_MAX 190 +typedef enum {ML_TRANSPARENT=-1, ML_WHITE, ML_BLACK, ML_XOR, ML_CHECKER} ML_Color; + +char* ML_vram_adress(); + +void ML_clear_vram(); +void ML_clear_screen(); +void ML_display_vram(); + +void ML_set_contrast(unsigned char contrast); +unsigned char ML_get_contrast(); + +void ML_pixel(int x, int y, ML_Color color); +void ML_point(int x, int y, int width, ML_Color color); +ML_Color ML_pixel_test(int x, int y); + +void ML_line(int x1, int y1, int x2, int y2, ML_Color color); +void ML_horizontal_line(int y, int x1, int x2, ML_Color color); +void ML_vertical_line(int x, int y1, int y2, ML_Color color); + +void ML_rectangle(int x1, int y1, int x2, int y2, int border_width, ML_Color border_color, ML_Color fill_color); + +void ML_polygon(const int *x, const int *y, int nb_vertices, ML_Color color); +void ML_filled_polygon(const int *x, const int *y, int nb_vertices, ML_Color color); + +void ML_circle(int x, int y, int radius, ML_Color color); +void ML_filled_circle(int x, int y, int radius, ML_Color color); + +void ML_ellipse(int x, int y, int radius1, int radius2, ML_Color color); +void ML_ellipse_in_rect(int x1, int y1, int x2, int y2, ML_Color color); +void ML_filled_ellipse(int x, int y, int radius1, int radius2, ML_Color color); +void ML_filled_ellipse_in_rect(int x, int y, int radius1, int radius2, ML_Color color); + +void ML_horizontal_scroll(int scroll); +void ML_vertical_scroll(int scroll); + +void ML_bmp_or(const unsigned char *bmp, int x, int y, int width, int height); +void ML_bmp_and(const unsigned char *bmp, int x, int y, int width, int height); +void ML_bmp_xor(const unsigned char *bmp, int x, int y, int width, int height); +void ML_bmp_or_cl(const unsigned char *bmp, int x, int y, int width, int height); +void ML_bmp_and_cl(const unsigned char *bmp, int x, int y, int width, int height); +void ML_bmp_xor_cl(const unsigned char *bmp, int x, int y, int width, int height); + +void ML_bmp_8_or(const unsigned char *bmp, int x, int y); +void ML_bmp_8_and(const unsigned char *bmp, int x, int y); +void ML_bmp_8_xor(const unsigned char *bmp, int x, int y); +void ML_bmp_8_or_cl(const unsigned char *bmp, int x, int y); +void ML_bmp_8_and_cl(const unsigned char *bmp, int x, int y); +void ML_bmp_8_xor_cl(const unsigned char *bmp, int x, int y); + +void ML_bmp_16_or(const unsigned short *bmp, int x, int y); +void ML_bmp_16_and(const unsigned short *bmp, int x, int y); +void ML_bmp_16_xor(const unsigned short *bmp, int x, int y); +void ML_bmp_16_or_cl(const unsigned short *bmp, int x, int y); +void ML_bmp_16_and_cl(const unsigned short *bmp, int x, int y); +void ML_bmp_16_xor_cl(const unsigned short *bmp, int x, int y); + +void ML_bmp_or_zoom(const unsigned char *bmp, int x, int y, int width, int height, float zoom_w, float zoom_h); +void ML_bmp_and_zoom(const unsigned char *bmp, int x, int y, int width, int height, float zoom_w, float zoom_h); +void ML_bmp_xor_zoom(const unsigned char *bmp, int x, int y, int width, int height, float zoom_w, float zoom_h); + +void ML_bmp_or_rotate(const unsigned char *bmp, int x, int y, int width, int height, int angle); +void ML_bmp_and_rotate(const unsigned char *bmp, int x, int y, int width, int height, int angle); +void ML_bmp_xor_rotate(const unsigned char *bmp, int x, int y, int width, int height, int angle); + +#ifdef __cplusplus +} +#endif + + +#endif //MONOCHROMELIB diff --git a/eActivityIcon.bmp b/eActivityIcon.bmp new file mode 100644 index 0000000000000000000000000000000000000000..104a2c651f2dbfc33e0b65de5f0d53cf41cdede1 GIT binary patch literal 106 zcmZ?r&0>H6J0PV2#Iiul4aAH<2m(4le3%b{!2&?y|NsABCXoKoz`(%Kz`%TB$2$v; drJSB8mcI1zSgPmcvE+p3i5(muIR*}pIsl798%Y2F literal 0 HcmV?d00001