diff --git a/ALD.G1A b/ALD.G1A new file mode 100644 index 0000000..411c7fc Binary files /dev/null and b/ALD.G1A differ diff --git a/AddinInfo.txt b/AddinInfo.txt new file mode 100644 index 0000000..bcee35d --- /dev/null +++ b/AddinInfo.txt @@ -0,0 +1,12 @@ +//------------------------------------------------------------------ +// Addin-Application header control file, created with the CASIO SDK +//------------------------------------------------------------------ +[OUTPUT] : "ALD.G1A" +[BINDATA] : "FXADDINror.bin" +[DISPNAME] : "Ald" +[APPNAME] : "@ALD" +[VERSION] : "01.00.0000" +[APL_ICON] : "MainIcon.bmp" +[MODULE_NUM] : 0 +[MOD1_TITLE] : "Ald" +[MOD1_ICON] : "eActivityIcon.bmp" diff --git a/Ald.c b/Ald.c new file mode 100644 index 0000000..ed500e9 --- /dev/null +++ b/Ald.c @@ -0,0 +1,26 @@ + +#include "fxlib.h" +#include "AldeBasiClib.h" + +int AddIn_main(int isAppli, unsigned short OptionNum) +{ + Cls; + Locate(2,3,Test); + RclVRAM; + Sleep(5000); +} + +#pragma section _BR_Size +unsigned long BR_Size; +#pragma section + + +#pragma section _TOP + +int InitializeSystem(int isAppli, unsigned short OptionNum) +{ + return INIT_ADDIN_APPLICATION(isAppli, OptionNum); +} + +#pragma section + diff --git a/Ald.dlr b/Ald.dlr new file mode 100644 index 0000000..142eb0e --- /dev/null +++ b/Ald.dlr @@ -0,0 +1 @@ +[DLSimRunSpace] diff --git a/Ald.dlw b/Ald.dlw new file mode 100644 index 0000000..833df86 --- /dev/null +++ b/Ald.dlw @@ -0,0 +1,113 @@ +[DLSimWorkSpace] + +[_1] +Type=5 +Order=1 +Top=11550 +Left=1725 +Height=570 +Width=1980 +State=0 +Flags=00000020 +OptionA=0 + +[_2] +Type=1 +Order=2 +Top=690 +Left=4395 +Height=5115 +Width=6090 +State=0 +Flags=00000001 +OptionA=15 +OptionB=15 + +[_3] +Type=6 +Order=3 +Top=5670 +Left=4290 +Height=6390 +Width=5535 +State=0 +Flags=00000001 +OptionA=0 + +[_4] +Type=7 +Order=6 +Top=4740 +Left=2220 +Height=3165 +Width=5565 +State=16 +Flags=00000000 +OptionA=0 + +[_5] +Type=8 +Order=5 +Top=7905 +Left=2220 +Height=3225 +Width=5580 +State=16 +Flags=00000000 +OptionA=0 + +[_6] +Type=3 +Order=9 +Top=0 +Left=10788 +Height=6348 +Width=2232 +State=16 +Flags=00000000 +OptionA=0 + +[_7] +Type=2 +Order=8 +Top=6348 +Left=7800 +Height=3588 +Width=5220 +State=16 +Flags=00000000 +OptionA=0 + +[_8] +Type=17 +Order=4 +Top=15 +Left=-15 +Height=11115 +Width=2235 +State=0 +Flags=00000000 +OptionA=0 + +[_9] +Type=15 +Order=0 +Top=870 +Left=11265 +Height=10215 +Width=7380 +State=0 +Flags=00000000 +OptionA=0 + +[_32] +Type=16 +Order=7 +Top=0 +Left=2205 +Height=4590 +Width=5595 +State=16 +Flags=00000020 +Setting=1:1:Ald.c +OptionA=0 diff --git a/Ald.g1w b/Ald.g1w new file mode 100644 index 0000000..c29ae19 --- /dev/null +++ b/Ald.g1w @@ -0,0 +1,16 @@ +[DLSimProject] +Name=Ald +Version=1.0 +Model=:fx-9860G.dlm +SourcePath=SRC +MemoryPath=INIT +MemCardPath=SDCard + +[Program1] +Program=ALD.G1A +Debug=Debug\FXADDINror.dbg +LoadAddress=80000000:90100000 + +[Files] +SourceFile=:Ald.c +SourceFile=:MonochromeLib.c diff --git a/AldeBasiClib.c b/AldeBasiClib.c new file mode 100644 index 0000000..ef5c8cb --- /dev/null +++ b/AldeBasiClib.c @@ -0,0 +1,16 @@ + +#include "AldeBasiClib.h" + +void PlotChg(int x, int y) +{ + if(PxlTest(x,64-y) == ML_BLACK)PlotOff(x,y); + else PlotOn(x,y); +} + +void PxlChg(int x, int y) +{ + if(PxlTest(x,y) == ML_BLACK)PxlOff(x,y); + else PxlOn(x,y); +} + + diff --git a/AldeBasiClib.h b/AldeBasiClib.h new file mode 100644 index 0000000..d85612c --- /dev/null +++ b/AldeBasiClib.h @@ -0,0 +1,31 @@ +#ifndef ALDBASICLIB +#define ALDBASICLIB + +#include "MonochromeLib.h" + + +#define Cls ML_clear_screen() +#define RclVRAM ML_display_vram() +#define ClrVRAM ML_clear_vram() + +#define PlotOn(x,y) ML_Pixel(x,64-y,ML_BLACK) +#define PlotOff(x,y) ML_Pixel(x,64-y,ML_WHITE) + +#define F-Line(a,b,c,d) ML_line(a,b,c,d,ML_BLACK) +#define Circle(x,y,z) ML_circle(x,y,z,ML_BLACK) + +#define Vertical(x) ML_vertical_line(x,1,63,ML_BLACK) +#define Horizontal(y) ML_horizontal_line(y,1,127,ML_BLACK) + +#define PxlOn ML_Pixel(x,y,ML_BLACK) +#define PxlOff ML_Pixel(x,y,ML_WHITE) +#define PxlTest(x,y) ML_pixel_test(x,y) + +#define Text(x,y,txt) PrintMini(x,y,#txt,0) +#define Locate(x,y,txt) PrintXY(x*6,y*9,#txt,0) + +void PlotChg(int x, int y); +void PxlChg(int x, int y); + + +#endif // ALDBASICLIB diff --git a/Debug/Addin.mak b/Debug/Addin.mak new file mode 100644 index 0000000..55df2a1 --- /dev/null +++ b/Debug/Addin.mak @@ -0,0 +1,120 @@ +################################################ +# Make file for CASIO fx-9860G SDK Addin +# +############################ +# Directory defines +TCDIR = F:\Casio\fx-9860G SDK\OS\SH +OSDIR = F:\Casio\fx-9860G SDK\OS +APPDIR = F:\AldTest +OUTDIR = F:\AldTest\Debug + +################ +# Main Defines +SH_EXEDIR=$(TCDIR)\bin + +# Hitachi SH C/C++ Compiler02 phase +SHCC02_EXE=shc.exe +SHCC02_DEP="$(OSDIR)\FX\include\fxlib.h" + +# Hitachi SH Assembler03 phase +SHASM03_EXE=asmsh.exe + +# Hitachi OptLinker04 phase +SHLINK04_EXE=Optlnk.exe +SHLINK04_DEP="$(OSDIR)\FX\lib\fx9860G_library.lib" +SHLINK04_DEP2="$(OSDIR)\FX\lib\setup.obj" + +####################### +# Files to build +FILE0=Ald +FILESRC0="$(APPDIR)\$(FILE0).c" +FILEOBJ0="$(OUTDIR)\$(FILE0).obj" +FILE1=MonochromeLib +FILESRC1="$(APPDIR)\$(FILE1).c" +FILEOBJ1="$(OUTDIR)\$(FILE1).obj" +RFILE=FXADDINror +USERALLOBJ=$(FILEOBJ0) $(FILEOBJ1) + +####################### +# nmake "all" statement + +ALL: SH_ENV \ + $(USERALLOBJ) \ + $(OUTDIR)\$(RFILE).bin \ + +#################### +# Description blocks + +!MESSAGE %3#C$z`&'0? +!MESSAGE +!MESSAGE Executing Hitachi SH C/C++ Compiler/Assembler phase +!MESSAGE + +SH_ENV : + set SHC_INC=$(TCDIR)\include + set PATH=$(TCDIR)\bin + set SHC_LIB=$(TCDIR)\bin + set SHC_TMP=$(OUTDIR) + +$(FILEOBJ0) : $(FILESRC0) $(SHCC02_DEP) + "$(SH_EXEDIR)\$(SHCC02_EXE)" -subcommand=<< +-cpu=sh3 +-include="$(OSDIR)\FX\include","$(APPDIR)" +-objectfile=$(FILEOBJ0) +-show=source +-listfile="$(OUTDIR)\$(FILE0).lst" +-size +-noinline +-chgincpath +-errorpath +$(FILESRC0) +-lang=c +-nologo +-debug +<< + +$(FILEOBJ1) : $(FILESRC1) $(SHCC02_DEP) + "$(SH_EXEDIR)\$(SHCC02_EXE)" -subcommand=<< +-cpu=sh3 +-include="$(OSDIR)\FX\include","$(APPDIR)" +-objectfile=$(FILEOBJ1) +-show=source +-listfile="$(OUTDIR)\$(FILE1).lst" +-size +-noinline +-chgincpath +-errorpath +$(FILESRC1) +-lang=c +-nologo +-debug +<< + +!MESSAGE +!MESSAGE Executing Hitachi OptLinker04 phase +!MESSAGE + +"$(OUTDIR)\$(RFILE).bin" : $(USERALLOBJ) $(SHLINK04_DEP2) $(SHLINK04_DEP) + "$(SH_EXEDIR)\$(SHLINK04_EXE)" -subcommand=<< +noprelink +sdebug +rom D=R +nomessage +list "$(OUTDIR)\$(RFILE).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 $(USERALLOBJ) +input $(SHLINK04_DEP2) +library $(SHLINK04_DEP) +output "$(OUTDIR)\$(RFILE).abs" +-nomessage=1100 +end +input "$(OUTDIR)\$(RFILE).abs" +form binary +output "$(OUTDIR)\$(RFILE).bin" +exit +<< + diff --git a/Debug/Ald.lst b/Debug/Ald.lst new file mode 100644 index 0000000..9bb294f --- /dev/null +++ b/Debug/Ald.lst @@ -0,0 +1,203 @@ +SH SERIES C/C++ Compiler (Ver. 6.0C) 29-Apr-2016 12:29:39 PAGE 1 + +************ OBJECT LISTING ************ + +FILE NAME: F:\AldTest\Ald.c + +SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT + + Ald.c 1 + Ald.c 2 #include "fxlib.h" + Ald.c 3 #include "AldeBasiClib.h" + Ald.c 4 + Ald.c 5 int AddIn_main(int isAppli, unsigned short OptionNum) +P 00000000 _AddIn_main: ; function: AddIn_main + ; frame size=4 + 00000000 4F22 STS.L PR,@-R15 + Ald.c 6 { + Ald.c 7 Cls; + 00000002 D308 MOV.L L358+2,R3 ; _ML_clear_screen + 00000004 430B JSR @R3 + 00000006 0009 NOP + Ald.c 8 Locate(2,3,Test); + 00000008 D607 MOV.L L358+6,R6 ; L350 + 0000000A E51B MOV #27,R5 + 0000000C D207 MOV.L L358+10,R2 ; _PrintXY + 0000000E E700 MOV #0,R7 + 00000010 420B JSR @R2 + 00000012 E40C MOV #12,R4 + Ald.c 9 RclVRAM; + 00000014 D306 MOV.L L358+14,R3 ; _ML_display_vram + 00000016 430B JSR @R3 + 00000018 0009 NOP + Ald.c 10 Sleep(5000); + 0000001A 9402 MOV.W L358,R4 ; H'1388 + 0000001C D205 MOV.L L358+18,R2 ; _Sleep + 0000001E 422B JMP @R2 + 00000020 4F26 LDS.L @R15+,PR + 00000022 L358: + 00000022 1388 .DATA.W H'1388 + 00000024 <00000000> .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 0000000..dcf417e Binary files /dev/null and b/Debug/Ald.obj differ diff --git a/Debug/FXADDINror.abs b/Debug/FXADDINror.abs new file mode 100644 index 0000000..9d20da9 Binary files /dev/null and b/Debug/FXADDINror.abs differ diff --git a/Debug/FXADDINror.bin b/Debug/FXADDINror.bin new file mode 100644 index 0000000..cfed203 Binary files /dev/null and b/Debug/FXADDINror.bin differ diff --git a/Debug/FXADDINror.dbg b/Debug/FXADDINror.dbg new file mode 100644 index 0000000..70e1600 Binary files /dev/null and b/Debug/FXADDINror.dbg differ 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 0000000..a700202 Binary files /dev/null and b/Debug/MonochromeLib.obj differ diff --git a/FXSH_Build.bat b/FXSH_Build.bat new file mode 100644 index 0000000..39af038 --- /dev/null +++ b/FXSH_Build.bat @@ -0,0 +1,22 @@ +@echo off +rem Do not edit! This batch file is created by CASIO fx-9860G SDK. + + +if exist ALD.G1A del ALD.G1A + +cd debug +if exist FXADDINror.bin del FXADDINror.bin +"F:\Casio\fx-9860G SDK\OS\SH\Bin\Hmake.exe" Addin.mak +cd .. +if not exist debug\FXADDINror.bin goto error + +"F:\Casio\fx-9860G SDK\Tools\MakeAddinHeader363.exe" "F:\AldTest" +if not exist ALD.G1A goto error +echo Build has completed. +goto end + +:error +echo Build was not successful. + +:end + diff --git a/INIT/CasioRAM.mem b/INIT/CasioRAM.mem new file mode 100644 index 0000000..f2e1569 Binary files /dev/null and b/INIT/CasioRAM.mem differ diff --git a/INIT/CasioRAMCPU.mem b/INIT/CasioRAMCPU.mem new file mode 100644 index 0000000..fd09ac7 Binary files /dev/null and b/INIT/CasioRAMCPU.mem differ diff --git a/MainIcon.bmp b/MainIcon.bmp new file mode 100644 index 0000000..3fe372c Binary files /dev/null and b/MainIcon.bmp differ 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 0000000..104a2c6 Binary files /dev/null and b/eActivityIcon.bmp differ