From 59caf750393527dd82fa05f1f975580921e9f64b Mon Sep 17 00:00:00 2001 From: israpps <57065102+israpps@users.noreply.github.com> Date: Fri, 12 Apr 2024 11:49:50 -0300 Subject: [PATCH] system 246/256 support --- .github/workflows/compilation.yml | 31 ++++++++++++++++++++++++++ Makefile | 27 +++++++++++++++++------ OSDInit.c | 1 + UI.c | 2 ++ dvdplayer.c | 2 +- irx/ioprp_coh.img | Bin 0 -> 15136 bytes main.c | 35 +++++++++++++++++++++--------- main.h | 11 ++++++++++ 8 files changed, 91 insertions(+), 18 deletions(-) create mode 100644 irx/ioprp_coh.img diff --git a/.github/workflows/compilation.yml b/.github/workflows/compilation.yml index 004f0cc..e760ebb 100644 --- a/.github/workflows/compilation.yml +++ b/.github/workflows/compilation.yml @@ -81,6 +81,26 @@ jobs: LICENSE_OFL.txt *.ttf + - name: Compile ARCADE version + continue-on-error: true + run: | + make clean + make COH=1 DEBUG=1 EE_SIO=1 DISABLE_ILINK_DUMPING=1 DSNET_HOST_SUPPORT=1 + + - name: Upload ARCADE artifacts + if: ${{ success() }} + continue-on-error: true + uses: actions/upload-artifact@v3 + with: + name: ${{ steps.slug.outputs.REPOSITORY_NAME }}-${{ steps.slug.outputs.sha8 }}-ARCADE + path: | + PS2Ident_np.elf + PS2Ident.db + README.md + changelog.txt + LICENSE_OFL.txt + *.ttf + # 'path' will create artifact with all *.elf in working directory # you can change this @@ -159,6 +179,16 @@ jobs: run: | 7z a ${{ steps.slug.outputs.REPOSITORY_NAME }}-${{ steps.slug.outputs.sha8 }}-PS2TOOL.7z PS2Ident-PS2TOOL/* + - name: Download PS2Ident for ARCADE artifact + uses: actions/download-artifact@v3 + with: + name: ${{ steps.slug.outputs.REPOSITORY_NAME }}-${{ steps.slug.outputs.sha8 }}-ARCADE + path: PS2Ident-ARCADE + + - name: Prepare PS2Ident for ARCADE archive + run: | + 7z a ${{ steps.slug.outputs.REPOSITORY_NAME }}-${{ steps.slug.outputs.sha8 }}-ARCADE.7z PS2Ident-ARCADE/* + - name: Download ps2idbms artifact uses: actions/download-artifact@v3 with: @@ -180,6 +210,7 @@ jobs: files: | ${{ steps.slug.outputs.REPOSITORY_NAME }}-${{ steps.slug.outputs.sha8 }}.7z ${{ steps.slug.outputs.REPOSITORY_NAME }}-${{ steps.slug.outputs.sha8 }}-PS2TOOL.7z + ${{ steps.slug.outputs.REPOSITORY_NAME }}-${{ steps.slug.outputs.sha8 }}-ARCADE.7z PS2IDBMS.exe ROMIMG.exe diff --git a/Makefile b/Makefile index 3e78d3a..e744483 100755 --- a/Makefile +++ b/Makefile @@ -4,8 +4,10 @@ DSNET_HOST_SUPPORT = 0 DEBUG = 0 DISABLE_ILINK_DUMPING = 0 -EE_BIN = PS2Ident_np.elf -EE_PACKED_BIN = PS2Ident.elf +BASENAME = PS2Ident + +EE_BIN = $(BASENAME)_np.elf +EE_PACKED_BIN = $(BASENAME).elf #IOP modules EE_IOP_OBJS = SIO2MAN_irx.o MCMAN_irx.o MCSERV_irx.o PADMAN_irx.o POWEROFF_irx.o PS2DEV9_irx.o USBD_irx.o USBHDFSD_irx.o USBHDFSDFSV_irx.o SYSMAN_irx.o IOPRP_img.o @@ -22,15 +24,26 @@ EE_CFLAGS += -D_EE -O2 -mgpopt $(EE_GPVAL) EE_TEMP_FILES = SIO2MAN_irx.c MCMAN_irx.c MCSERV_irx.c PADMAN_irx.c POWEROFF_irx.c PS2DEV9_irx.c USBD_irx.c USBHDFSD_irx.c USBHDFSDFSV_irx.c SYSMAN_irx.c buttons.c devices.c background_img.c IOPRP_img.c ifeq ($(DSNET_HOST_SUPPORT),1) - EE_CFLAGS += -DDSNET_HOST_SUPPORT + EE_CFLAGS += -DDSNET_HOST_SUPPORT endif ifeq ($(DEBUG),1) - IOP_CFLAGS += -DDEBUG + IOP_CFLAGS += -DDEBUG + EE_CFLAGS += -DDEBUG +endif + +ifeq ($(EE_SIO),1) + EE_CFLAGS += -DEE_SIO endif ifeq ($(DISABLE_ILINK_DUMPING),1) - IOP_CFLAGS += -DDISABLE_ILINK_DUMPING + IOP_CFLAGS += -DDISABLE_ILINK_DUMPING +endif + +ifneq (x$(COH),x) + IOPRP_SOURCE = irx/ioprp_coh.img +else + IOPRP_SOURCE = irx/ioprp.img endif %.o : %.c @@ -97,7 +110,7 @@ buttons.c: devices.c: bin2c resources/devices.png devices.c devices -IOPRP_img.c: - bin2c irx/ioprp.img IOPRP_img.c IOPRP_img +IOPRP_img.c: $(IOPRP_SOURCE) + bin2c $< IOPRP_img.c IOPRP_img include $(PS2SDK)/samples/Makefile.pref diff --git a/OSDInit.c b/OSDInit.c index 4f418f5..d209c49 100644 --- a/OSDInit.c +++ b/OSDInit.c @@ -197,6 +197,7 @@ static int GetConsoleRegion(void) case 'J': ConsoleRegion = CONSOLE_REGION_JAPAN; } + if (romver[4] == 'T' && romver[5] == 'Z') ConsoleRegion = CONSOLE_REGION_JAPAN; result = ConsoleRegion; } diff --git a/UI.c b/UI.c index 19b323e..ff4e802 100644 --- a/UI.c +++ b/UI.c @@ -612,6 +612,8 @@ int InitializeUI(int BufferFont) result = 0; if ((language = configGetLanguage()) >= NUM_SUPPORTED_LANGUAGES) language = LANGUAGE_ENGLISH; + + language = LANGUAGE_ENGLISH; memset(LangStringWrapTable, 0, sizeof(LangStringWrapTable)); DEBUG_PRINTF("InitializeUI: language is: %u\n", language); diff --git a/dvdplayer.c b/dvdplayer.c index 37f15c8..6cbca0c 100644 --- a/dvdplayer.c +++ b/dvdplayer.c @@ -47,7 +47,7 @@ int DVDPlayerInit(void) ROMDVDPlayer.region = 'J'; //I guess, this would be another possibility for such a case, but not used in practice: // ROMDVDPlayer.region = -2; - + if (ConsoleROMVER[5] == 'Z' && ConsoleROMVER[4] == 'T') ROMDVDPlayer.region = 'J'; //namco arcade also lacks this return 0; } diff --git a/irx/ioprp_coh.img b/irx/ioprp_coh.img new file mode 100644 index 0000000000000000000000000000000000000000..23df4140287e32ff5bf198b01cbef7a0b148f062 GIT binary patch literal 15136 zcmd5@e{3Abb$+*Zq)##_Eh$=IT{YPw@1(QMSSOb$7~zVXDN> z5?S)%$gSEg6s92B3y%eemOzE#%22M_5+W@tsZb~}p$d-va1pi;3ZZox)>3RaRT>&r zYc&;e{l3|^HH2iknym|BH&70Yox2FTmPdB#XmseFym1E`#{n ze6W4rlY94@x_SI%{ejQ0=*VX`iR|0|#N$u0i1PGSk-hs`oA()ZM;5D0#hO2%K)kft z5orrPme|#h_@&1h>beGw9zNXH-&5B&FgP^$Xy1{~)g2x9?SUhGsV5DzKR?*>@dG<| z_6{8B+3D5nYfAZfXXorYG6!D{)&4osP;XPbWkuM-}Ln)Y}; zj%Rci{`-$vLbN^>@>&{Cj95@OB2 z97^s6&!v}3l8}*uZ0JQV^z&%C;q9w~1@RMI?Z+M9`*2B8e2rjahL^>Lc+NCE_^N zM#!a1>iHW$^p*QIo+EBb-Y7^V`$DU5WR&yd)j^0nP8#YK@6!3@*;2@)&d(OC=r-u- z>*(B5#}IUc{hSk!d?HKv_hA%7c*0C^zn?e#uGWP#_O$?AqVf`Kc6K%nyU~8MXGp%3 zjf~T#o$+SKjZEh8HwYW;Q5)%eyA}*)jj`7dIDS+JMzM^d8|0$>4xS-12l+Y3U$(vP zX9*n}$4y&Bswu@vvX4t)*c^%eStebOxodk^Y94;KkTSbR7=1h_HI=DE1?K1@-ac-r#q!8zI}Qu$+yoqahQ8l&^okm2k>|D6~g9e>Xmk>8pL z!H$1U+f}Dl%_C{IFg7B`Tc-9G*<*Arwo_QT;Ps)T@qf%!sif_93nkHzwxP|qF4&jn z+j)5la>+wK;o7Rkyi{Rc%H)r;5qBPAtsM)=_OarAF#G7^&1j_Ib<|(WM(hQQqs!>? zh~0@j2mLsCsdW!?{14LBA^D!EkHlY)|D>I;{z6hShB}LD0nca9cMg5)I!v2&NS~yx z{|g(I$%v65@E3H9UW$Drkc@R{I_ePauJ!;*{fa`-&9 zo24-tg|FT$v_Q_A(WSzhSi7%hBh~ZJm-BE5b9!-RA9M@Jw`N49+$GGZNFM7eKO07l zNMk(G<_dLxlM z`(W#fGh>`HdtTPt53!e-{V?K^U#t(dC$8+<{#vvoUBxv|IsP6%9p+5maIxjIi0v6W zLO_J?^CKNcjXzX~;9a*EtOPEzipR^>ecu2%J>P**4DSQ?;O!si=Y=>Sd+-cD zKit*d*J=9Rr1HvE@p@WNhW9jY^v2mnh6avw4?X8m7jQ`M^Hq?r@Z=;q_0!rD0^0Hn zw{vfQ$8ay0c%Gol1w3EYT#fP}^m-1tEhKUf*{^#qbRdh42Nh@_X+V}ohkJ)JLz#|F zc@(F+BLm&?=ul7pqnVy#89WVicVs#|iucqxJd8#kEZq+_7iTM=lAJXk+0q_09nsOxs*?t zv<=&nmLOtq*qWpSgcPt8hz-`%H<6Bpt)v56l-@=}yEL!_e%TEy1#(`{T#hT<1(H4r zBz+v2{1Zw)sdQ{AMqV`(CLi{G!!`;n9%gHe~X*1Ia&0I_gg=eNO3%TE4F3+d#GtVdBYO1*Dv6AmucWj`}98Z`E?U z;&CAPT_E{ql)k9+>q>VZobogHL;mAH@?Rkx@)s44V~$v!z$6nFh-h~m$aXh?Y!^l* z-6n$XCJ-P?inkPRE8bD01CcMJNMFYR!>oUv8j~yoQ;JQBEsCv*ZHn!R2Ne$~rWLyt zdlmZ?2Ng4l#}tnfq0gvdmPp5cj}%;9B_31IjBuqvP%sHdHe@jcjpe*`?v+<}5Y*jg ze3>7{D@sAL3PtX9zifv%uHlnaSie}P_2NLIxRm4c=VA}6-n=5r-vc?9%y4h=ET>7l za2CN&4IpY&;`=5B;vCK|N!%A2a9^m$nY0yW(-!&qY?FL#HYMj~6F9HpEa*auXl&G# z814eFr6CvwCY)bGfPN@w+Cbb{nvx{nKQ6Y4))2xJ~`MY2ixUfyButngRRUx zv<>I0^98Ya$6@<73eVyC%@j(y|^iBu$K%6CCu z?>>h6ukti!jWo%da+&PSvJGt>5_|hQg{{l|k$&FD3ZO4%=G)M#fHOJIXz*s(qbo{V zS7Yw0FxNPj&Bk2J^Jp4A6M_ysrms!fR{&?^9~GKl7t9&tc;~nmai{Rc&btIW5q;I* zTrXxGc?XY-)>ujCf|Y|g@y3JsG_p6`PDu<7_IBa%5bqOjp`D0xhIiR&_$5xj(DT6d zIQ%jSzjWZ2yhqiU`|V5SE)~l|XBR#*mx9kc0KK0!^I9!wo!1^SuQA89wqRakqbYRK zIp(?;CG?0nX^VP9+y%_DoPq2d`omrKYdQ3XyY5T4!=E+xrWo%0yhCvf@y;87&94<6 z*cy@p+ut_!Wenj<@r~-o5(z;hY`v)~8maEa4$x`F%{v_DF{W`EJ~RH|U@o>{d{K<= zAZ*4pLtn{nYQ!1@zf0YN(XccbIS-0kMPK9klM38@UCZL!;7$!&Pv?H!*d5*v+is8= z^^MZxMENVQQ%UkdIqxN*~w(*l6D9it}6L4d@e+65RPqx5L2j)fD!G6!rk>G*uN#I2N|dGe21Nsk87Y z@19CKdv{d&O$El}`Ayjx|3S=!hDP#iRcl+;P3Re{;FQW4>dZd;7#Cw&I7`DPJ)2U` zcRjlq-|_qL(f3ozq8vY-Mg16K^J8*O8DnyDu*u7_yJ36yNAzRxxs>ivv~_;-NVFMs zoJ;OohPKJ0Nx+M-{S|b(Vb(784Lm!j{}k@^F-L?LFzYjvya}F4l!MrN5nsWZgK33s zflggHm(a`jt*>vf4K~3aF)wKA*%xaaM@r8}!?=@sw$M53wx7TB47eG7g)sdi!7xl~|+4di&Q8iuSMX|AhNj z{hEHT1n#+ieGory_&|RCvwSD;-RA8}$u(o8&o8Onym#wMct@Q@4AxtRe8@oAW3w#Z zLZ-yq$XFI~N6Uh-u)Gau+5yRTOzFijEz(Doj&qFR%WL^0knN|Hep=~_eUW}$={J>r zL+MLOXH1NGgs}eD4`X61AJTGK%NZc$%_!Z(!ce}Y^g+g|P|h$`1w0KT|D4hpTPFRc z(pgFV5Ri0yNHOIyE!$eg1=G}51MyGNii~}+{2KmH&LYsrL4ovxK++H459z&1XKajg zSLq{4A6NQ>(kGRkSNdtCPb(cCKa8AnN}p5udBu6f%Ru~-SMi5>EGT_Z>DQHhL+NE; zqW-;#mlPL)U@-@wzroG5M zAKxEU_uzX1d>jwuQ8(Hzsa zD_b7BU&pgM&+3DglsSm41U1g_n<$g#4}dX86Sg!^rk=(cayD&EwwX@XB5Ye zD&$06Zy;sd)OAAOwUYMzjrg5a6P_EhlbEv<^yr2jY5C^tA^F?cgNWg_BZk|C7;Y=R zJG9^~)`YtlV%xZP<&BK`ExeahBoU{zmnsTyqBUa*&sUyd31^ATI}b zImkn7{%j8Na_BcleU>U3%{jgo^VXuVK5u?%X5PZL1I8c!19vaV#c3)#g?^v}QUGmh zX0Dq$mZxx?Ih$>eDfms}!y)-vwlaV$CyQd1j_e+GnbvQyF4E3B-i!5i54&tB4)vXPy+XNGy*$&NwvUyXWx?J#1OTwMXQ;g_Mbh@|!|rveWt}${A0AQVRci1@nq`g#89S6EcQ2AB-gyt)tK(Opt71zjJXzpr%yP_;$-}Vk8;DhZeb#}j$lNPf44w^WAC8?i zpe=kGP{w5)`{_cenz9}67R#l)_mdNu{5@+@<@jwW>wev%iv12To+_?8uD5;ACw>12 zey_uCG8OpkRpnS%9vH(2#}JEs(9An*YvZo}0(klD0(bUG`oyxG;dh>|?wa|e>VV%( zj{T@`wz78etQ8qQfO;FYw;`9dA2hb-bIeV{r%GYNSF*7NVQj;qoyO3Yw>Nro!0&f{ z|D|GWt(_c%+&1g2LV9atG+}*L`~8mE@Ly5p_nxr4fcXxMh2&KBG-R^Rhm;p}@MEv; zueGj5>u}e=So88xEuYcygIdNN#ME!qax5-#*3j_nP-$Gt=RjkhWy`b>Y*3Pv%2Uy= zYu#KSW!4zyO)49s^p(1R6{R20j+}e?jPE~OPhZ8pLAiecxtup&=6T5E9`$GI$c*FL z3uRIs`WoY&L%9MQ)uGMbnYO2*|Ndj{MIskarVYNMWsc{Ys`FK)%`49pEpINQJ__Hk zVtH>3zXLk=8IFyy4DN-D`|>w>__kuc)$sco-xcL@0()2<=K}tI?1a&Q-{NZJ1isBs z#;Gjd9WjT`fh2w#V>{*ab1J9Aul&_WX3&hHzDqnC1@we2;z#jBR%Um=Z0 zl_+jnCoaWUOL08R=f&cP`qFWeew@#1V^}y-n)m1X{cdi!@38sd9R19fk8_-98&-tR z+|?g-%k*}34EOLXyJ%u`#8Pd8g|==R^w)Ky+iSxyvyHDKj*zD8$MEpGu)Ab%oWq&! zz5$Hc?{}>&s9W*x0YfU+AD^$|+Hv|e!~MbNfn%*f+M9iqEBbn4|2K3@wLyOzm0G3^ z*sl0@h>YiSV^z4wr=b|*5sWe1M81Q}c)~X11acEHe=B$uc?p>Z>?-8q)I2maFtmG5 z$I+t$8KC#Nk6D%#sgVSYq?v?y;|rsf=4Fih_yLAz55+i;^6IocspXWGTY&7h zP3i4QPiwhb%ZzVQj;rNqEuYph{h9TCywZf5CBR;9Noy;teD zFB<-g(qGf^qL!}%DVM+Dquel%a_fPlrxaTi`P)76;ddE^Z(Pe0TAl>5-MrE-Dg8C2 zFDd<&((fpp@lMKRyp#Pm04b+Qk-yJnxgUSXHwYx3tMshmq$2kO^34FrcR}fwl>VyH z7qom;%U6K-XBrc?K?vnI_(M5KEvK}+Hs0C~I@@KG@0jwrN}pGJO_BQ*`MGBi{Wz$D z&RDKjYypBrT7mc{ZAwooy<6!cO6Pt@{=Cwsm3~g?=as&wbnc7nFND2{$o-L+1X4~D z5G>2_)~wPelztLO{yD{06&Drx+e+5+HmlpHsY`_48W)n$mA7a{q+O3*)%NYQ=4ej$%|Xu81F382*G}y<&r6QZc32q}Za^ zs@SGDuJ|G2m-t2b-M=OOX~r-aukzzmFpoD^z#Yigij2(x;v&2@-E|WFbW#wQI;?7m+?$_*iMWr{3k2# zB7riKFOMzIB8+2`ZC7KiM0`JMtF`=New z;G>;+F7T7DA7#-de&Y847X^T6PaVk1F;JGDu7JVUi8TKi=32#f5aa!f->8W1{{Y5V B_}c&g literal 0 HcmV?d00001 diff --git a/main.c b/main.c index 8c262c3..c890a9d 100644 --- a/main.c +++ b/main.c @@ -93,13 +93,18 @@ struct SystemInitParams static void SystemInitThread(struct SystemInitParams *SystemInitParams) { + int id, ret; GetRomName(SystemInitParams->SystemInformation->mainboard.romver); - SifExecModuleBuffer(MCSERV_irx, size_MCSERV_irx, 0, NULL, NULL); - SifExecModuleBuffer(PADMAN_irx, size_PADMAN_irx, 0, NULL, NULL); + id = SifExecModuleBuffer(MCSERV_irx, size_MCSERV_irx, 0, NULL, &ret); + DEBUG_PRINTF("MCSERV id:%d ret:%d\n", id, ret); + id = SifExecModuleBuffer(PADMAN_irx, size_PADMAN_irx, 0, NULL, &ret); + DEBUG_PRINTF("PADMAN id:%d ret:%d\n", id, ret); - SifExecModuleBuffer(POWEROFF_irx, size_POWEROFF_irx, 0, NULL, NULL); - SifExecModuleBuffer(PS2DEV9_irx, size_PS2DEV9_irx, 0, NULL, NULL); + id = SifExecModuleBuffer(POWEROFF_irx, size_POWEROFF_irx, 0, NULL, &ret); + DEBUG_PRINTF("POWEROFF id:%d ret:%d\n", id, ret); + id = SifExecModuleBuffer(PS2DEV9_irx, size_PS2DEV9_irx, 0, NULL, &ret); + DEBUG_PRINTF("DEV9 id:%d ret:%d\n", id, ret); SifLoadModule("rom0:ADDDRV", 0, NULL); SifLoadModule("rom0:ADDROM2", 0, NULL); @@ -114,7 +119,8 @@ static void SystemInitThread(struct SystemInitParams *SystemInitParams) LoadEROMDRV(); /* Must be loaded last, after all devices have been initialized. */ - SifExecModuleBuffer(SYSMAN_irx, size_SYSMAN_irx, 0, NULL, NULL); + id = SifExecModuleBuffer(SYSMAN_irx, size_SYSMAN_irx, 0, NULL, &ret); + DEBUG_PRINTF("SYSMAN id:%d ret:%d\n", id, ret); SysmanInit(); @@ -145,6 +151,7 @@ static void usb_callback(void *packet, void *common) int main(int argc, char *argv[]) { + int id, ret; static SifCmdHandlerData_t SifCmdbuffer; static struct SystemInformation SystemInformation; void *SysInitThreadStack; @@ -195,15 +202,23 @@ int main(int argc, char *argv[]) sbv_patch_enable_lmb(); sbv_patch_fileio(); - SifExecModuleBuffer(SIO2MAN_irx, size_SIO2MAN_irx, 0, NULL, NULL); - SifExecModuleBuffer(MCMAN_irx, size_MCMAN_irx, 0, NULL, NULL); + id = SifExecModuleBuffer(SIO2MAN_irx, size_SIO2MAN_irx, 0, NULL, &ret); + DEBUG_PRINTF("SIO2MAN id:%d ret:%d\n", id, ret); + id = SifExecModuleBuffer(MCMAN_irx, size_MCMAN_irx, 0, NULL, &ret); + DEBUG_PRINTF("MCMAN id:%d ret:%d\n", id, ret); SifSetCmdBuffer(&SifCmdbuffer, 1); SifAddCmdHandler(0, &usb_callback, NULL); - SifExecModuleBuffer(USBD_irx, size_USBD_irx, 0, NULL, NULL); - SifExecModuleBuffer(USBHDFSD_irx, size_USBHDFSD_irx, 0, NULL, NULL); - SifExecModuleBuffer(USBHDFSDFSV_irx, size_USBHDFSDFSV_irx, 0, NULL, NULL); + id = SifExecModuleBuffer(USBD_irx, size_USBD_irx, 0, NULL, &ret); + DEBUG_PRINTF("USBD id:%d ret:%d\n", id, ret); + id = SifExecModuleBuffer(USBHDFSD_irx, size_USBHDFSD_irx, 0, NULL, &ret); + DEBUG_PRINTF("USBHDFSD id:%d ret:%d\n", id, ret); + id = SifExecModuleBuffer(USBHDFSDFSV_irx, size_USBHDFSDFSV_irx, 0, NULL, &ret); + DEBUG_PRINTF("USBHDFSDFSV id:%d ret:%d\n", id, ret); + + id = SifLoadStartModule("rom0:CDVDFSV", 0, NULL, &ret); + DEBUG_PRINTF("rom0:CDVDFSV id:%d ret:%d\n", id, ret); sceCdInit(SCECdINoD); cdInitAdd(); diff --git a/main.h b/main.h index 8437d00..c76a090 100644 --- a/main.h +++ b/main.h @@ -1,8 +1,19 @@ //#define DEBUG 1 #ifdef DEBUG +#ifdef EE_SIO +#include +#define DEBUG_PRINTF(args...) sio_printf(args) +#else #define DEBUG_PRINTF(args...) printf(args) +#endif + #else #define DEBUG_PRINTF(args...) #endif +#ifdef COH +#define PS2IDENT_VERSION "0.850 - COH" +#else #define PS2IDENT_VERSION "0.850" +#endif +