From 4d5a088496dd1bc631d1a7a22988a7d57bb514d2 Mon Sep 17 00:00:00 2001 From: Ilari Liusvaara Date: Sun, 25 Aug 2013 04:06:46 +0300 Subject: [PATCH] Support float/double memory watch/search --- lua.lyx | 141 ++++++++++++++++++++++++-- lua.pdf | Bin 229208 -> 230703 bytes manual.lyx | 16 +++ manual.txt | 12 +++ src/core/memorymanip.cpp | 38 ++++++- src/core/memorywatch.cpp | 6 ++ src/library/memorysearch.cpp | 15 +++ src/library/memoryspace.cpp | 8 ++ src/lua/hostmemory.cpp | 20 ++++ src/lua/memory.cpp | 12 +++ src/lua/memory2.cpp | 4 + src/platform/wxwidgets/editor-memorywatch.cpp | 22 ++-- src/platform/wxwidgets/memorysearch.cpp | 71 ++++++++++--- 13 files changed, 331 insertions(+), 34 deletions(-) diff --git a/lua.lyx b/lua.lyx index d56f25ab..6ed46df4 100644 --- a/lua.lyx +++ b/lua.lyx @@ -2281,7 +2281,7 @@ Syntax: number hostmemory.readsqword(number address) \end_layout \begin_layout Standard -Read elements (little-endian) from given address
. +Read elements (big-endian) from given address
. \end_layout \begin_layout Itemize @@ -2309,6 +2309,22 @@ The 's' variants do signed read. \end_layout \begin_layout Subsection +hostmemory.read{float,double}: Read from host memory +\end_layout + +\begin_layout Itemize +syntax: number hostmemory.readfloat(number address) +\end_layout + +\begin_layout Itemize +Syntax: number hostmemory.readdouble(number address) +\end_layout + +\begin_layout Standard +Read elements (big-endian) floating-pont from given address
. +\end_layout + +\begin_layout Subsection hostmemory.write{,s}{byte,{,h,d,q}word}: Write to host memory \end_layout @@ -2381,6 +2397,23 @@ qword is 8 elements. The 's' variants do signed write. \end_layout +\begin_layout Subsection +hostmemory.write{float,double}: Write to host memory +\end_layout + +\begin_layout Itemize +syntax: none hostmemory.readfloat(number address, number value) +\end_layout + +\begin_layout Itemize +Syntax: none hostmemory.readdouble(number address, number value) +\end_layout + +\begin_layout Standard +Write elements (big-endian) floating-pont to given address
, storing + . +\end_layout + \begin_layout Standard \begin_inset Newpage pagebreak \end_inset @@ -3041,7 +3074,7 @@ Finds the VMA containing specified address. \end_layout \begin_layout Subsection -memory.read{,s}{byte,{,d,q}word}: Write memory +memory.read{,s}{byte,{,h,d,q}word}: Read memory \end_layout \begin_layout Itemize @@ -3053,6 +3086,10 @@ Syntax: none memory.readword([string vma, ]number address) \end_layout \begin_layout Itemize +Syntax: none memory.readhword([string vma, ]number address) +\end_layout + +\begin_layout Itemize Syntax: none memory.readdword([string vma, ]number address) \end_layout @@ -3069,6 +3106,10 @@ Syntax: none memory.readsword([string vma, ]number address) \end_layout \begin_layout Itemize +Syntax: none memory.readshword([string vma, ]number address) +\end_layout + +\begin_layout Itemize Syntax: none memory.readsdword([string vma, ]number address) \end_layout @@ -3077,12 +3118,76 @@ Syntax: none memory.readsqword([string vma, ]number address) \end_layout \begin_layout Standard -Reads the specified address (if 's' variant is used, do undergo +Reads the specified address
(if 's' variant is used, do undergo 2's complement). \end_layout \begin_layout Subsection -memory.write{byte,{,d,q}word}: Write memory +memory.read{,s}{byte,{,h,d,q}word}: Read memory +\end_layout + +\begin_layout Itemize +Syntax: none memory.readbyte([string vma, ]number address) +\end_layout + +\begin_layout Itemize +Syntax: none memory.readword([string vma, ]number address) +\end_layout + +\begin_layout Itemize +Syntax: none memory.readhword([string vma, ]number address) +\end_layout + +\begin_layout Itemize +Syntax: none memory.readdword([string vma, ]number address) +\end_layout + +\begin_layout Itemize +Syntax: none memory.readqword([string vma, ]number address) +\end_layout + +\begin_layout Itemize +Syntax: none memory.readsbyte([string vma, ]number address) +\end_layout + +\begin_layout Itemize +Syntax: none memory.readsword([string vma, ]number address) +\end_layout + +\begin_layout Itemize +Syntax: none memory.readshword([string vma, ]number address) +\end_layout + +\begin_layout Itemize +Syntax: none memory.readsdword([string vma, ]number address) +\end_layout + +\begin_layout Itemize +Syntax: none memory.readsqword([string vma, ]number address) +\end_layout + +\begin_layout Standard +Reads the specified address
+\end_layout + +\begin_layout Subsection +memory.read{float,double}: Read memory +\end_layout + +\begin_layout Itemize +Syntax: none memory.readfloat([string vma, ]number address) +\end_layout + +\begin_layout Itemize +Syntax: none memory.readdouble([string vma, ]number address) +\end_layout + +\begin_layout Standard +Reads the specified address
+\end_layout + +\begin_layout Subsection +memory.write{byte,{,h,d,q}word,float,double}: Write memory \end_layout \begin_layout Itemize @@ -3094,6 +3199,10 @@ Syntax: none memory.writeword([string vma, ]number address, number value) \end_layout \begin_layout Itemize +Syntax: none memory.writehword([string vma, ]number address, number value) +\end_layout + +\begin_layout Itemize Syntax: none memory.writedword([string vma, ]number address, number value) \end_layout @@ -3101,13 +3210,21 @@ Syntax: none memory.writedword([string vma, ]number address, number value) Syntax: none memory.writeqword([string vma, ]number address, number value) \end_layout +\begin_layout Itemize +Syntax: none memory.writefloat([string vma, ]number address, number value) +\end_layout + +\begin_layout Itemize +Syntax: none memory.writedouble([string vma, ]number address, number value) +\end_layout + \begin_layout Standard -Writes the specified value (negative values undergo 2's complement) - to specified address
. +Writes the specified value (negative integer values undergo 2's + complement) to specified address
. \end_layout \begin_layout Subsection -memory.map{,s}{byte,{,d,q}word}: Map an array +memory.map{{,s}{byte,{,h,d,q}word},float,double}: Map an array \end_layout \begin_layout Itemize @@ -3120,7 +3237,8 @@ Returns a table mapping specified memory aperture for read/write. \end_layout \begin_layout Itemize -Type may be one of: byte, sbyte, word, sword, dword, sdword, qword or sqword. +Type may be one of: byte, sbyte, word, sword, hword, shword, dword, sdword, + qword, sqword, float or double. \end_layout \begin_layout Subsection @@ -3209,7 +3327,8 @@ Bind key in mmap structure to specified address
with specified \end_layout \begin_layout Itemize -Type may be one of: byte, sbyte, word, sword, dword, sdword, qword or sqword. +Type may be one of: byte, sbyte, word, sword, hword, shword, dword, sdword, + qword, sqword, float or double. \end_layout \begin_layout Subsection @@ -3352,7 +3471,7 @@ Read/Write value from/to given VMA at given offset (must \end_layout \begin_layout Itemize - is one of 'byte', 'word', 'dword', 'qword'. + is one of 'byte', 'word', 'hword', 'dword', 'qword', 'float', 'double'. \end_layout \begin_layout Itemize @@ -3360,7 +3479,7 @@ Read/Write value from/to given VMA at given offset (must \end_layout \begin_layout Itemize -'s' signifies that value is treated as signed. +'s' signifies that value is treated as signed (not available for floating-point). \end_layout \begin_layout Standard diff --git a/lua.pdf b/lua.pdf index 070dda272942a24cd57475c3178974951e458584..d2a05558e3c4219374f5086e0d0d23cb65808712 100644 GIT binary patch delta 49946 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

B|xiJ56@Q1romrbP~Z%%-F*2%71g089DDCJKE)l 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

MbamT3;tWb$ll0(0O;JJha)6((O@uH{0%*ThpaE zJFqw(%a-2@kzI?>=rF2te6}r@*vSF3Ij7M19#QY0-fK(uG(Q>9;*{~1M*H0Ob)q3; z%n7EHefuOy!5NFaqX{ID88`L3agNJE@2;Zmab3Z`n#_goTd`Upx=w9iAisXp)-q4V zP#A2dp9Ry~5*EM0&50s^4L>qIL;IR4h|kx3sjW@X+!Z9i1eX)8<(%wJ zo}-%+b*j%cSVgyYqbb3Z&Eo@V6^#ni+U)#387Rwtpme+-hUW&sMs)xIAss<<(Q8@X z`3UEUE7sf~$^ONvhC!|%WwXS`S#t^RLF~Deu{+GjVYgni8xtoby6O*U?{}{+3SRs5 zUz78NHfC#S8|4o~nhOnutFd&yUrq^2t0Hjo4fDGM7mfQSJRzJHM;U=d*fe*P_U-*p zYcIsjTyH-9O?#Ck^PitRGltG?C%bXg4=@4KqFW`)^3*9w0bK%xues^98$6YBnzQ$I zMKwVxqb?y(@34W2x{baUd-#nh2HyWx8N6sdHfrX<8Mg7dJ~=i%W%_<2x_cG;?7Xnd zfxq6e;;-ni+l}h7b~^;h4{a8U3pOiV?sd3AQt=vzjXoe#t~xdU{#$;qfHn!+I93SU z%5gRjbnPoA4hU~AR&Yo~uCIMiQIa-O+D+M*((H`%h9KKZmH$UDZG+YeYt!Kg?UM=G zNkvJFC{XkA;{4eh9q64$Tn%E`S1<8*JjznWpke#Q6kc0HwT1(@(v$B2Rj~%8OW|ZG zZPq;!Fj&F~6qfed%Pk7$$@oA7sR{@8e{0MT#G5CD%%o4sQ|Z zVZJmz1W!)E;A8b`A(Z9a1EY$ht8=qNnSRv<8}l{d{OBen^?6hWv(X18KMm7VrK|^O z+f-A}^~Mrat9<}72$nmvK*sI?-M1f?H3*RQhmJbGgh~4T$Y9C(cB8*~s!jA8qw9Mi zzPEILsPzpEPGvoyiiu!0%sq30F*&7vsbrks6%^rrf<7liQf5IN7c{Lp@{*eVfiZi- z^`NSvBc53@=|%LW%Dms~O|4mY%3xASnZ!IXs=%&2{qYJEX?GitA&O$=#pPx}>T=dn zy0h{2BufQ+S+f6Q8`NUmd*ZJp8|-o!RR=1+S>#z{xJ4f&)ifi*LXN&8+CADsw8fAE zIXA@ebp`Uj8I80yV>MJu4<27h54lzFE!F{q6IpaeVRalP;7I0D$p>hqK$9G)UIDu_RtzE zwt4gmzbqeBk}2_nvqE^5Vo!8GGeB_SO#I*XWgBUV5Iil_cny!Vn1(=ZR@pS zJt;MD34I96a70>i1cmgC2JB)|u{iSZn07RC?gC>~vavRcgW?TKcGGMPCh^@>^y!~T zOlQrS$kNw@gqFFG&$ZCC%G+zvYH)pAiw+4Nhe#1*CmOsXHs~sUoCJ~~(Vpx(MBW31 z>`%`<(OJRS{;KX8@y@Sv}*`q-}l&$fH)03S?Zw)i`Xbb{0Cz z!b8DpKc*w=QtmUnW2X{esza8FHaw@dQW|W4AGv7@k z;jot8a5^VsJxf3CM%&VsItr1nP{KhIn=frDZ3a-9+)~k*BpB1hRgxkm*)-1WJ(fZaRC#u1zfok#x0ohK(^=*1IKcZA-xRDr$`$ z(ZCh?g=Idd_-?7D|LdNTO|Cj27~E0cL3@%L9nmQVgY8o5m_3$sC%@(ZsKaO}Ks=ww za+xbXptUB&&!cFN7eci*r&1A74Khqz(K(aHZIP6f4E|%JqyiU#vOt-nI5?x3dj_3I zpC)|IOW!-N{7@4wD&^#MsRWd{cvh5iq}JupA0@%cH!c%nc@A=orcUw@#8v8s(1#m_UYMrNr*S zhXKNxGWnNLM1&#ugkzdM*VaqD<6sw15uJ%ivbanmk+qBYe-ZWh?pP4U77$*m#8udM zv%k3-Y}I_W??>`zZjJ#?#o%hrcIW2L#ZJWJ$fP|5t8HV#dd2UiXqdm3B}~n%J0=}A zIx?#p`9DYwwH7AFmdXN_^I-k>}Iy2c+5~%w~ zQ{l%0f7BWAXtry513cj%tIEdMb`W+@<=jK(t*nqtuLC)vNL(iCg#2lQKK$_g=J-27 z_2VQ~SF4^b)t}#NOUEUly(P!cl!h2@+}#=YC?i2FBBG@f@Hp4L*xmTs*m z3Lo1GR|_xIL`ML=Grxb^*5AW%;wNhFX=;j=5PpwBo}Ua5e_q~xHum5K)J2ns@5e7B zbHe$}1a4&4@k%Zy%%1Emo05tYsmGIAOCUUhmlrM@qoCA5{iGKvvJLe`Kx1qI+MkAHMc~3ak#a*c z*taq-;iOI#Q0;(^)%oHD*6evBe zh!?qlN9?KakCG6mq3T&`oP}5~nN5^!>{x5+7$5{v!1Xt_`TX#PS7{(BPHQj`$xM(V zH-SymF$RIZDMhyAzR%CM{x8a0>WTd*qA2Y6^fE4#+=B3pghPwJfGt z;odGD*l@R3)39G#l+PUY}B@Q*7cl1Qc&d%9@ zJV(z}e#-x+u(uA1tLgrI3GS}J-Q8_)3GN!)-Ga;D8l2!kgF|q4cXziSfx%&LI6TjL z&-**K>YloP%${$5diCnw(`!}D-qqDDR(QTiIsJ>&?q#cBg*3_qk1PjEL?njC-^i=X z2=)|kH4P^ueG8wQNU)GG4^5X$J*61iT`F)yaL#H@Eo{>>m@ID@Vt0A_BLL|eftA8| z$w1dUq;^x)^YGq6N6t@RTc+BIOP}9`l)&ks<^>$P#-f~(D>||+KJ38gem_ET)<@;VFG@;5%D>`J|ix3y^VF(OF@uSig@5?I(>9~EhQ4*2R}1g?Fjww$sbp% zAE-k_frw}9L0QZF?5S23N$Zn?BO@8?oT)FZre4FfiHfs)UtYZH2BAmxGO;xl3dTAtAv0<(iav~<$i`r9!U_`R zU0X)J@w^&7j2tLnu}Ep|%VR(I{k{?MRps*1rsz3)WmnFOPgIL^Xi7gY=gazM1JW?) zajzFY#pgr6Qz1@W`JRIq)*!9hBi4#ONYX=0_2Nak;$v4U1eB@K7B$=uI$;A-;!-n1w&c_X})3{ zOHzqO%=F#U+WGF3q|VdwDLJ{?Xp8=NQeUU*Ry}nhpSSBpaI8MtdbZyYX--Uxi0AS$ zH-e_LdU#V55aky4!>rxQkANxSR;%apVYuiB zJ-S2n1?vt_8!C4{6@@9f!h9C|qp-MOUVuJ=+Do_6v$_)xobDJW>Zc}R8}MY9^N{_vN{!{tzpz%8 z=e1lwRfV5xX-xJ${oECKoAnQIt#I|Ba;8IVv zq@}|pi)KJxmM)TZUzWcrNQXqi7HM7lu^+o-+PbI=kK#+7Urh0udYXSYQJ9iIp6JFEAi%`58hDMLUsCCbZgSr!pesj;f2N0*_~F2z{$@o zQOSF1iI3KWN>9EQ&{_91_(eWZk`q~1QO^4bQhPhMII#mliN8p5<}*2&FU1zHBR7dv zkackb;Q3NNe?HkX9OpdVAl6Q&Jn^c&NDG)s%gmP+=Fk z^;E~d%&$PBjiTCbcosraKK0&01Y#&O^y-CXkZKJ|7~3!Mp%eu3j==8*!Hg3Xwq(1= zzKkeKAyN;y0W$uIERMxaVJqQT1Q+cNK0;of=CAIlDqxI~V3?LUj_#2JDizb|@ziaR zpR8*~Z-O9HwfK8~$*969rvP>X^4dV5?j9j z*!72YnB|&#LH}-{n1jV21v!P*V)8yMm9KinvE%Un) zLX55;jTNzoHDy@!X3;9(`P-q%aoPqQI&}-d3U%-YHwyN?q$F44y znB?%!DWt_e(EYW&@f*rX+!z$CAcC~bZIpj0usKm4$(XA~RO;+^@rcRx#a4S;r9$a( zbICUfi(XaA;3xWtWsIb-@0OYtB^yVlM3fIXZ{`Q1?q9&HU-yy*)3u8;U-S6ZspjHa zj8DmY)-SmD9GpGD4+V7ICOmA&ms|M-Ba#9umbE1WGxMd1B}L6DJ6-trb1P$w$veV| z{tvjgq!^*o^0bRW-I&r97M+t};lkv7PKQ};)^ms+ijW`z8(yXd%xADhjx~DxGqKy^Xsl1+q8nXM z;#N-Zo7$Cj-`Db1E}I=HC0hTEo8a3qbJeZ9Uf7bz-MT7-s|Du`Njus7Izg#v;dDpW>7YCuFSabBT%Pql`~ojy-zDT(`a`e(6pV z&NFvGrjLTRjc{^5 zN>uE!&@3@#Y6k{HGuNUrK;mosDSXzTxvAXAPvxIpEsd*=sFie^a%n{dZC?66J-{t* zx6`u0R^857QLqT`IjTL>xysQNp8C3Lb2q=$;AuHKGB1`f*kbPn1krX0_uhxxO{5H0 z-T}Y`<~7L-jZr*$-HP+57uV2ZkD%6x>?vB1DnQNe6vHE zxfRb$0%z8u-`wP~u%>rT$Vm`;3V&4|-Jxd`X?S zp+%{EZa4FAjZ5*n5<_I*;jF0%q}(b#m;4HRSz0&g*mDx|>ou${#JPQ7TUeEn%=Eg7 z_ywqTPwkw1&a0pRA&cid`QsJgLlRQU$W&Z+yJKhmZoQ9G_xkM&DlPDon z+yp(UbP4#Pd&%x&`dFqlfzi5Rm37uB3A0aULqp9k)*9@Fw^aP9M>Qcg!?&@pN0r>~f<`=c=Q@R9@n!SaDvt5N9}*KHTgN)a4+nX^`hOnnbx0pu%I~D{$1rx)(q-^oTP(f z!CKsVO=hgEQrd1l3VN5BAwJLKsy}cod zm&>>ex(|d%4m+!-;xb;~F1F7(AxsK^Ru9t*esN)UU@}PqK7{F6JXG(}9mF(DbX6P@ zpmY!$8&PzEIYw-7cT*&plx(f69**h>MK6ykEc%x+C>?TDzIeM@mjM`QDAZE?#DZDq zJ~h%y9yPdM8YUfavVZ&JWD1LGcm#fZH3=CKR-?1$7$NxOzSghDthpPkDVxzJpPS$s zcAxkpzMBk|4eA@)bxb6abYZs65T`5P1xi8xMaz@NQx$|W$fJ&ggf2ZVg{y&I*;m8J zMC==mI_8)O5krZJ>@Ca&LLkf{bW<%#f4no-3?{>~#q zdtKVPl-DXV$u0fKq;fWignJqH_8M5)>M={?weYnN`UB7f(RPbx3+a+U0^>9726_q) zVc8%MwebH{?3bmjV#q?aju0Us&-Z8pe{+{D$PMGB$DyvA0~#5swd6H8MU6>GBllhT zjaX?8l0p)na(-CNUxhp_?{$WvrftYdKucFhv-|Tw7$O<>#f9E`lK@c8sf}Z#V`y#Dwt1B_s`Hv1M<8!qf&@4dltg5bcfq@Q zoXGC0)I{>uCXBY>@kI-)hKm*1y0b?9+Z2bp*|j$qL&;jYu1{y_Ny0effwkUj>={oy%~PxcM3Oh z-_t0cWmV3}iZ_6`R|WaSXFkSIK=Nn|&Z-o%gi3A8A|J%~!&9lxtAE!y?-6=;eW-=| zJpEeoTCzDC0Fj%FsfPwYqsDqNbxcN}Ox8cT8^J|KqD=b>v=o_V-(e`M85UPwyv{zP zBXTzZ7JJ{aI2@Lp7-Uv)BHoS(^Tb}3{*X?%F$Rnv6I~u-$z-B3u~Wo{)>TB}OY!$n z{tCr$h9KBAL1j=IOD<@nK;2t?Z4n`u3G`jj^L8);OxMOWG)pGGW)^<`Jns$o zGMAEVeMx7AY`bJloI~$Aeu~+E;Yy(8*z!3HqVDtGnQ;o+#jhAa5o65NhmQ)p&l#v} zCyY4*x%xTtpQ-<5Zk*3?kUDy&St8vR#@hE5fW?yTfi|(jo(*hXgn6jLSm_vNBM08F zaShg|>Dothnk1H1N*l_jH>gAT?(iaOK}V`F+6gFbj>6eXS!`^vor*1WqpRO{?uw=A zA2Z$bEEl=??2C&9&E4jSlCj(DDRRtP4(S;Bv70;YQ}vB~3e7|AGcZVYt59mnRF4ma z=)Z@O0ad@iZq=XW^Pf-pt3=XOOK7P`!Hk2O zps&Ym#NXS^uRf3XARsa>1H;fgB)A@jaqO07Ir~I4Zocw^|vu# z@5W5nv+m&`U0ow~m+bC1QAk%K!MLn3=>c=VVWl)952yErI8LZ2Z#rDn?>Ve^c7TF9 zlGdD;8{Zg2zr-LAx{h)jrU!D zhx?Y+4Tm@3JG$R47j}dUr~TM}09}3E+nW@ze@Z&`_i+%>sIu3+`A@Ac!>24#?funn zu3qi{#(X#dC9Q)4yAdk5JqJSzU@RmJ-agEh-a9p*&%NdAYZf(MW}krH{<5EmbFv(* zlTuEX&&%fMY)JD?S$m3j)unJWBCKuQmqsl>V`Ja&rrxL=?efCtTCoz^pxKqA5Ekv8 zMhBMJm8!ykIUvg@ic=L)k7BH%{_0xX4>PyeNbbs}%P`W-g}ivrlN~D!xF`2jv09ED z&&|4eP@HM7?nTWo>fp9QCu(u9fNAg~zEvmYZc(>YN9iy|%?|?@{hkuz4W|So)wu3s=7gpEu_d#%Hv-_w4hgBZ2r853xWQcn5b?_@FBUr;ft^$K+CPF8( zRZrUPmv0Zj%ywri1#Gzne(#(9M)3(YV4;gL2 zUs`89y)}QYa&oT054Id4S%yDD#^#lC<Kd-4Xb!FlIxK7(~`AeL$P4Xr7=QW`Y} zzxt)c%Epi!ZcGF%dkmIIwQnPT?yRE?jVA@rt+#bHh<_I$$Ty;iFOE4t+-z4l7ZoDr zCD~G#*20s2lP%)4i~w(U+1h_WZ^N`+Oo7Pdq4@P80kl1se@PsxDp~{7I(_-k^b3)> zOs{9aiDD6KQ%{K#&^eblHngcz_77NfkY}hrkO<(_`kN)&XmHm2Ywg-z=*zNN+01|( z5UZ?d{3=yLe~aYBv221j(YD>k@yid#nml{GnG0&10Q}kkR>~!vz|(lb%XMbG_nTYf zF%=EqOTS2fuQZT9{j!}&AA=q%wdwIP4czP0#zFXo3Lh2i@+JTgnGltCUZ+{=F=E6G zQTw+Htgx7q4e`FGC3i@Som+ZIoKgv|k3pbTbZ5{sw}>jOExBk`A?(mt66?7-rYYEB zkAA=?>|dl%dU(kzDxqI?s8!yn*)cm;OkD@qutnmFqY=v( z>+PTgC*z;RCc`RNt%!0+k>P1K(<9?7@6l-OQY8#QuU6b@l2-A61DTEqGSA8lN8*GX0JKwi;YvN=Jx+4R(g?0YzH(Xvh6$7~=`OZgl{;pjPS*gGUx1sqOm{r5p zYBPh}Nx|hqhA5`hdMgzGkY;S>Mv%YZW<*ov?D>NF6Dh&xf(917MsuJ>V+CSH1z5P{ zn|o6k$}D}yPY1vDq!EDp!jEN7h6_vXo0AHguHTJa>UQlFSu4+7dZ(v)r-F@5{S}&a z&j;mpRTm3uJTzU^ZBK1&PkhME?Y9k8ZHdX1dVjy_E_&Qop3Ri?Whr`%cRd}Rww(&P zH@CN0M0B;C{-*$}a_pvZFS-k0gZ=vUiIp?P0VK{z!NAW5Qt+H!GyECdu^QTVQQ_Y8 zySGa{Z4qXWN=;yPAuI9hPdXZ@2%NIl;|3 zE*fuZhxi+WbP^17Y5pVLk!Y<_RsY>FI$2r+6_SHJjm-p#9+m5VHp}2;|M&b5pnv*g zG?ffy=*1oOBc%8)@Cr(t3>VzMG+uz0-cJNA9=xiXKb$6|Y31!RHjE~mEaj`y;!l#H z_0s@kErTZ@Eg}#f^8KotXyWF$0o5k@{VXAhqd)@1-GPXv)b81eq)A0^tv{8-Y|pcT zSbf=~o)pQ>{#p!WkB5eZCV=x6NOlq)mwoy&rLj7_lHfQ7JT<{p^rux{Ha<= zcaAg|y~nP?L>F*QPiOeu)CR6O-1NK!pUx7Hjy%Y<8=tS>Q^SRg6>U+_lCOg@csWGl zN;l!+goH6OEUT59>X7r-GjX8-f@j&Q{7sha3V#4C(tv&E+G9 z6#OG#+Ym$MbX|h>;{35;ExrZNA&(8vhKcD`5hI4I!N2$9@igQ$0Q1V(N}VHP44T0g zswMcJwRTKB;o^?-M0mb!-e4=p!d>_`eFAmO_AvW=k};Sz?5PzCAgqCXxme(ULOJB zQv!hS-Q6fB^3CR(e*S~Wl4?Rmw-(AJMzD+y@gqEXs~-I&y1_4?>Da zHF0hTH^nD%$is()BZxL}W^*LTPBDXr9cJTW%khtl%MS;BREMvBH$g86ClPtMe0V!D z>Uw)3ICJ0dfA{x$$6`5ff6P@j0=$Foyp=lvz{i*28(9BLDvR(na>{Z1;rt=jEm+eJT|I&EO+`#ZH!;bPJ4up(FZy!7e$gx{}GEBrp>iGim& ze0s_-eEO$Szu&gH-!xyrJq>HO84WQS>Fn`=EwGbEh=1PoIz+z87;rIuG-Fk?*smeY z^W$9oub!>T%-EES=UV44hvoHs5Ql9>eREPL3|QFAX=+Oje6^!Hw3XeN3gWJ5{@y9z z%e-o5>_p(}4%Vwn>oMd6?}3WUS%W$)L4&LEqlS>aqbo7>M@hnP;G|kBt7&RqR1mcp zaC$079*n)>Hk6Ys`~yT^bM#%9-+O;7Bgz`<_4V$h#*2My+ggPwg#)Y23rkVAa^Yg_pcgD`pTR>fyRZsyhRRXm#U=K zmO7F4?|M0ndX`n;m5WSvi}hOLm5T|$#!QPUpC#Lj#?N(H^_7~_dd&4&5=*wJjVHPl z7E87xdXsfp!gh@ldMLUTx=ZC&RRN54MiuqnG?leGi%wq!O~1$7>~wcgc0K#~%Lpl7 z4|_@`t{0Q^`^1|dfa?R*(F{A`oW2qVYuE2+{-ZAx8IdW@#zV9(dI?u-aDj~{suf?+ zg7-A^@k77Dx%dF!@|%T)lkP}Hu{W$tN=W*A&~{q{LTfC^EC1D5TImvNX%RJB5_|>Y zrrN?DjX&I0F4BHW#Jc6N!TmnkxvFG-JA2#ubI?T%#If^zZ)CBgF4MW;>T??2kIk!>g$i3YJgRT-+2Tb^cFc&hwcQ=p08f7z6(G50nDb4 zR-c&aWaafasVYQ2E) zH_V}hxDn`pc4R#e`NX(fl{1!k;snWP2Lo8B8uU-dIe~>_$}GefO{PgYgo+m0>W-Ma zRzuQcMgh>QR=wjN@FO_A_>m03I|r(DXuadQmvwNg_euWnhEu_5!d|UuAc;#?+zwFh zxYmEG_5ahF|D(A*^)q@$HVmupWnJojE%p9uDgWPonEo*Y^*-aNdZ+08=bbD&_rJS9 zas1DTu)N&=IT1EYUorlm38Q1WdS({UILo~L@e@95Fmx*wTQF5~Ped#yJZ@xX?>XPd zv@+h^Eu9?qg30|~?omrk_hdyE%ixi{RP>XiWdGwm?v;{epalYeb+5pGjAF2@wN0`y zKnV}$^k^gLtFE7-Jj2!Cva#dFp1f`})$@1xyI#Pi+9dGM0rf(y0gm&@csof~qQR*q z8q2rlDrwRl>#_72QW8APRGYW@Bzc-WL#uaGX=ziRAK!b8<9}Inct{dx!VWtL5?jo$ zLi>GeMircgwjzDYZYwq!uZoljnr|!4#w*0AJ2qVqcd-d#8U!U&4_%v13_RNUtXOgT z?@<7}=Yckf#yj7C1ePRXj=HcbVHUDTe_045pqw>r)9?OuFc>b|bcs)c6r^bRD%bR& z)4dj2Pj1P}Fzefl{jB2FK44t`6zFl4&>Ku(#=;6V|CwaI!j#u4PI!Z7SLt;fBaZIN z(LxR*M6eU-1(Rje*c6Zo&Cji`*Ki0MK7&VHmgOaD=Ne#v1z>|8T7*M zrzz42jV5t7l(hUI(yw4?rP<*WM!X)&VS=B9%aUN4OmeR+u?-T-fu64x_@ffJ6`cB- zYQ$}690hM}qnw(#*r?^UL-tdcLWEhti>pVeu-+!YgN2e93fh&sFk}s)n_SJ!tPCEl z#~8TlNDS&`rVTNbUdGmTpy*pYtR?tn7tOlue}8?p4d{A(b`L^yd>kKd?lvIP_IbXgsL*e}8$}Zt_}hCN+G&ZxSW(dwzTFP4j(1^gfY?GZOdHZOH91KN%@peZSk+b9)e%~0-aEEmY=lCRz`YBr#(m!I7m|EzuHBjPma*VR4-K`w6dObs`?C`wC#b5t0m0?KlhPszrh@$7<34 zTlJH*v#m;`2?Hn0(Lz9d=4b|Bwq#-CIyf5NsCEg!hR0oe~0>4uW+?V^Xl7pU2muB5z|f;4o_9X*NZ^F3-I)g5KRK`c_TXdw@k8Au@4tadQ+7L?-x#PBazR! z@ghJ!LB&_l!#=_G68dgFvQlFPY#>7MNqq5!0@UH$$ER&?h0-c;x;1x`PpI%~ziRtV zW`8eq8A(a@CUz!0v0}oBi}<=?Z3YDl-qO}7vHe;&no8dMeqL9WDHMP&R$R8CjZ@52@G)mpq!Bhvrb#A&qERgVHUVeDanP$>nA7T-{=9ld?4?-Z zhb@(5wqHj86_PeQL!*&TrPcOHVuP(K(f3MPk9B}w@{WQNmtla%l zT(yf0OKI;~myXT8lspT3`s;z*0nzX`{*?tk*8!Km>haHtX_}eZB-FGo%O5UVIi^PHAFF$^4qq&q_|){(bSWJ$ zxm*y3Sn6+;)@xk^jk{!=`hAE!WzemrCv?rZTyS9&v%`ukSW;j#t`#Y=E- zP#2HHf{9~O-N7vq57JMNvqZry6c7|0J9uFAEO`fN$w7vgT*HL-S)vyQB9JLSbOdv} z@pX-+DCn?C9BMe9npirlPIlR7UPt5Y0ss~-t)K^ z(cPsGrT6&?rjv@7C$0Ow=RwPFAVWAdUdmtVfir%%&SL&WqFvI=Z(Z|q;rjUqzJ3A< zM-et~X*`{ud;}Zc@hdP9rqBV6NMsry1UeiMuu zbK@p`=$O~;HKoQ7k|*gNKI>QiNV5*-C|1X*)1(N@3+sH_xuUo%k9>JzLUMjm>ved> zb(yJ*cH?W=voQ>VdAv|$A@&PY=6>yLeskX3AjKUfG&o(|)1br8&8)cRzD)XlR+ z={e+#u?Y%;vCPsr+RzzzLmB)GU5--CesJ$xXMtc^H)xIT7QP^5k%c+_x#2r{ zIU<}97*({bRDZ9*?D>2Y4KanT4#B~s3&BId5{SRpC9imR4UsV#-Nne;T0iSYLhX51 z%uTw~nsB+-{a6d7f>;9qmj_Wn*IIq=egu53UYobluWE1OAK;1oIWbWxS({Z=FldVX z<+}@{iYRQ4o`!;yn!>*1b>od>IHp8Y{s453786!f03aTVx(SbnKpL4c9Am!#MnCGO zY>F|L+(JwgBxO)yk8JVxTl)Zvo3JZ%On8J)Y?A18&3i%T)yit4_Unr0nCQ9pdrg&* ziWir(*>sD=r}|fsKkcgi&j2l&R_1osW&6TEts7dq31{wwfBr6<$}sh#nw~==lWqpIPB$ORMyPq5$%;8z8c(+xS?Jv2*aU zBeH6f>9dn@lKn%~oSeRWP#!)qHZnCt)-R5hPX847|DU2HnZ6Jg4;z~VucRcWgap4d z9~ZwgH;*_MAGb6IKev=5x40O9?El9ELMn0YL_tkP z4wfJVliEf~RXM34MNFPWeYmQuDmxrus@ zx|Z%5m>4H-63?;EP`F}c+UFZmsEYX|pz0ltbuR&DOw0#Da8vUg?CZgX5Tr9bOjRxL zEVC@YIiCEq-Uu$IiMb)h9fmUw2PhvDKgpY2T_$JZjXZ<=Dha3HcpDbB7=Op0^#;2J z?qlLhgh?r@+AV`i`bikeiW%P>&P=pv)Ai?_PiHJ=?ziM#l5Rn|Oz-%9O6@YfDE^RL zd9BAxF5ZY;zgl}hnzsaAO1=v63x3|6i zc(aQc-l&gO?%R64x?chE=}Q|8r3Qq)U43X3u~hS;08Z} z??t$@dk&xPM|S_vGOlT zlVp{4zo^jxX`Z<6~j*_L{S#sLGrtoR}kS(spgzfAeY z5I7a~0Y<+$!N<9BAv{xoI$`2S{~_MMK$?)`8fA`6{aY_69PpQbX9=#ypP~Lqi-zPw z@hT>{f9iNehiCkBR-VloDy#!!wS2?y-O4t8)!frslNRXay?~=R4|&vxbk9&`t}rwE z#w@Ch%~BJJf$+XgfpMgHHl>x|@SXI7VPw};#uYD;*u>CI5gGZvrs5w%?!EHog2f#* z>>WxGKE&(ZLMNKeyV+>~a-cnzXZ3AW{PD_Mf;73%bPx(-f#g^*D!DtxBy;MNi@V5| z530H6wV|Co5MA+IB;J%hU!}LgY7K-}~ghpsTi5s3-Bs1Yf82-qkgqn&6 zFK7caOpg$IKe$bJOphN#XoXo~eQzmXo;DmRP`Mz9cymbTCOQ#XfuLyL@4fv`-|%Et zJ_h-bM6xUHCVp6(AKoRLH{uUbbn&??CS+VyyGXf=H)0OMz5GVdCl2cIO-MPQJqzhW zYk+73!L5zhiNkQQpFIm~AVko{ZFIFVhucFAW1aGBI%?1e^60-PP=X}FcX)1@b~ec+ z*gg^|)L%#OpG4{dSRbcreTD82tSoX6XNAHg<`A79ViaA8K%PN4=I&{dfVKWeq?+Rd z@)p!igcX+&^zZ(TpZ@87InNU!1{FvU{Ei3aKI^RYh6u;&`dJu7l8cF4TS|a3t#%jb1oD4_qwK(1|K~g?4*-oiJ z%LtXXVgB&qHl#fx6}SwmKk9<;d8Z;MYiQ7#rAI=7#-yu>=yE*a3$P{d_s3nBV;<59 zl7T*W$ZzNu4riTF;cD0p_7%C*>Y2tsG}zyatTT6_({SnyLNdINCZv3|LK3`C0Q{EU zeo>AvK7jOs1Nt`N;|pU!oi0&Nh)$xG-$G)ZANOewH-2XC z$}Pu7Xw0}0cYgSsVj<067L}Xmq2?mR1)JjO{w{a~lAEw97`XnEDR@u~evy_zHZX;0 z8`9CqbswF4BueqXgi&26m()tkCq01Z{7i}gnOrI<=dS@+YyS8lS^APsdTMRyY(-d+ z*MQGZB?_?CUslcDQY2-^2yX3^Pi|^RS1CY)*vut1%sLP;J*G9#9gwNP7RLNuIF%69 zK|s_FRIOl5V{RR&rC@hs;S~s;U`1oj709Mw2V+4mC=i5TFG~#}=#y_RpoX*qVG9zj zN6Z<%0|hn2v-hfL_39>Ds{?AHhC+BSlIiicff2h@Oz985b1E;i+Z}A##i_vh9e-!k zY&g6gxE+cXXqFJPUL0qfuTZ2xr#rAM2tWXAbB}{FoFC+QuyU{PB|!@sNnpedh8Hpb zPPqqfhyDRm2x__)=@Mrrww&(=0RyLoW$A=UMm~pxMfe!ne`>i-o0|4*{G_Ft1H{rJGb9eh4iC5Ym(HY4}$lYqt7 z@@LKaigWGF>i$&*4);O7QQKChps+(6QY7sOB`2&UlNdvc(N#*|nfd2=b1?;bhOZl1gl zo?y%>aCBJTc;;DnKi?xY8tqLz>TtAL7kV4+u(Q$tsR*#2p*Bt4#ClUc;v7w3sqjue zdTRYaL9_Y^giAj6Tlc$fE;N8>?ul)BJapljrrPv(Zg=Qvrpg2k8%(K?G)&$DvCr}q zy$yvOvbJ9fJI0s*Ydk=ImUwyZA)EC>I3Qu>FtvKC(H0M|hFg!s`?{m1*x}7fm#efuS^QUoc#0jOt&Atfm`=N-hY7#(sqGbJ$_C1^TI?o|% z&d54Tm^_ThS0*gX( zU0{Du)8pg2-7195HQW2Bk$q(GC=Bu{%Y@*olgK2Yfbj8~bE`wZqup$s@60)QmR}ft zrC)m1uE;w#>8O$sZusLE@a}ZBvO`Bdz : Push number (hexadecimal) to stack. \end_layout \begin_layout Itemize +F: read_double(a) +\end_layout + +\begin_layout Itemize H : Set hexadecimal mode with specified number of digits (use A-G for 10-16 digits). \end_layout diff --git a/manual.txt b/manual.txt index f4027b22..c5943a6b 100644 --- a/manual.txt +++ b/manual.txt @@ -188,6 +188,10 @@ The available element are: • qword: 8 bytes +• float: 4 bytes (floating-point) + +• double: 8 bytes (floating-point) + When reading RAM and ROM, multi-byte reads/writes are big-endian. When dealing with DSP memory, multi-byte reads/writes are native-endian (do not use operand sizes exceeding DSP bitness, @@ -583,8 +587,12 @@ The following operators are available: • d : read_signed_dword(a) +• f: read_float(a) + • i : quotent(a / b) +• o: read_signed_hword(a) + • p :\pi @@ -610,9 +618,13 @@ The following operators are available: • C0xz : Push number (hexadecimal) to stack. +• F: read_double(a) + • H : Set hexadecimal mode with specified number of digits (use A-G for 10-16 digits). +• O: read_unsigned_hword(a) + • Q : read_unsigned_qword(a) • R : round a to digits. diff --git a/src/core/memorymanip.cpp b/src/core/memorymanip.cpp index c806e15b..8069dc53 100644 --- a/src/core/memorymanip.cpp +++ b/src/core/memorymanip.cpp @@ -166,6 +166,13 @@ namespace } catch(...) { } try { + if(has_value) { + valuef = parse_value(secondword); + has_valuef = true; + } + } catch(...) { + } + try { if(t = regex("0x(.+)", secondword)) { if(t[1].length() > 16) throw 42; @@ -187,10 +194,12 @@ namespace std::string secondword; uint64_t address; uint64_t value; + double valuef; bool has_tail; bool address_bad; bool value_bad; bool has_value; + bool has_valuef; std::string _command; }; @@ -253,6 +262,30 @@ namespace } }; + template + class writef_command : public memorymanip_command + { + public: + writef_command(const std::string& cmd) + throw(std::bad_alloc) + : memorymanip_command(cmd) + { + } + ~writef_command() throw() {} + void invoke2() throw(std::bad_alloc, std::runtime_error) + { + if(address_bad || !has_valuef || has_tail) + throw std::runtime_error("Syntax: " + _command + "

"); + (lsnes_memory.*_wfn)(address, valuef); + } + std::string get_short_help() throw(std::bad_alloc) { return "Write memory"; } + std::string get_long_help() throw(std::bad_alloc) + { + return "Syntax: " + _command + "
\n" + "Writes data to memory.\n"; + } + }; + read_command> ru1("read-byte"); read_command> ru2("read-word"); read_command> ru3("read-hword"); @@ -262,11 +295,14 @@ namespace read_command> rs2("read-sword"); read_command> rs3("read-shword"); read_command> rs4("read-sdword"); - read_command> rs8("read-sqword"); + read_command> rf4("read-float"); + read_command> rf8("read-double"); write_command> w1("write-byte"); write_command> w2("write-word"); write_command> w3("write-hword"); write_command> w4("write-dword"); write_command> w8("write-qword"); + writef_command> wf4("write-float"); + writef_command> wf8("write-double"); } diff --git a/src/core/memorywatch.cpp b/src/core/memorywatch.cpp index e25625c5..9cf60f6c 100644 --- a/src/core/memorywatch.cpp +++ b/src/core/memorywatch.cpp @@ -360,6 +360,12 @@ std::string evaluate_watch(const std::string& expr) throw(std::bad_alloc) case 'Q': stack_push(s, lsnes_memory.read(stack_pop(s).as_address())); break; + case 'f': + stack_push(s, lsnes_memory.read(stack_pop(s).as_address())); + break; + case 'F': + stack_push(s, lsnes_memory.read(stack_pop(s).as_address())); + break; default: throw std::runtime_error("#syntax (illchar)"); } diff --git a/src/library/memorysearch.cpp b/src/library/memorysearch.cpp index 7e0f939c..e27f4ab3 100644 --- a/src/library/memorysearch.cpp +++ b/src/library/memorysearch.cpp @@ -376,6 +376,19 @@ template void memorysearch_pull_type(memory_search& s) s.s_seqgt(); } +template void memorysearch_pull_type2(memory_search& s) +{ + T val; + s.s_value(val); + s.s_difference(val); + s.s_lt(); + s.s_le(); + s.s_eq(); + s.s_ne(); + s.s_ge(); + s.s_gt(); +} + void memorysearch_pull_all(memory_search& s) { memorysearch_pull_type(s); @@ -388,6 +401,8 @@ void memorysearch_pull_all(memory_search& s) memorysearch_pull_type(s); memorysearch_pull_type(s); memorysearch_pull_type(s); + memorysearch_pull_type2(s); + memorysearch_pull_type2(s); } void memory_search::update() throw() { search(search_update()); } diff --git a/src/library/memoryspace.cpp b/src/library/memoryspace.cpp index 0f1d65bb..30c9517e 100644 --- a/src/library/memoryspace.cpp +++ b/src/library/memoryspace.cpp @@ -157,6 +157,8 @@ template<> int32_t MSR (uint64_t address) { return internal_read template<> uint32_t MSR (uint64_t address) { return internal_read(*this, address); } template<> int64_t MSR (uint64_t address) { return internal_read(*this, address); } template<> uint64_t MSR (uint64_t address) { return internal_read(*this, address); } +template<> float MSR (uint64_t address) { return internal_read(*this, address); } +template<> double MSR (uint64_t address) { return internal_read(*this, address); } template<> bool MSW (uint64_t a, int8_t v) { return internal_write(*this, a, v); } template<> bool MSW (uint64_t a, uint8_t v) { return internal_write(*this, a, v); } template<> bool MSW (uint64_t a, int16_t v) { return internal_write(*this, a, v); } @@ -167,6 +169,8 @@ template<> bool MSW (uint64_t a, int32_t v) { return internal_write bool MSW (uint64_t a, uint32_t v) { return internal_write(*this, a, v); } template<> bool MSW (uint64_t a, int64_t v) { return internal_write(*this, a, v); } template<> bool MSW (uint64_t a, uint64_t v) { return internal_write(*this, a, v); } +template<> bool MSW (uint64_t a, float v) { return internal_write(*this, a, v); } +template<> bool MSW (uint64_t a, double v) { return internal_write(*this, a, v); } template<> int8_t MSRL (uint64_t address) { return internal_read(*this, address); } template<> uint8_t MSRL (uint64_t address) { return internal_read(*this, address); } template<> int16_t MSRL (uint64_t address) { return internal_read(*this, address); } @@ -177,6 +181,8 @@ template<> int32_t MSRL (uint64_t address) { return internal_read template<> uint32_t MSRL (uint64_t address) { return internal_read(*this, address); } template<> int64_t MSRL (uint64_t address) { return internal_read(*this, address); } template<> uint64_t MSRL (uint64_t address) { return internal_read(*this, address); } +template<> float MSRL (uint64_t address) { return internal_read(*this, address); } +template<> double MSRL (uint64_t address) { return internal_read(*this, address); } template<> bool MSWL (uint64_t a, int8_t v) { return internal_write(*this, a, v); } template<> bool MSWL (uint64_t a, uint8_t v) { return internal_write(*this, a, v); } template<> bool MSWL (uint64_t a, int16_t v) { return internal_write(*this, a, v); } @@ -187,6 +193,8 @@ template<> bool MSWL (uint64_t a, int32_t v) { return internal_write bool MSWL (uint64_t a, uint32_t v) { return internal_write(*this, a, v); } template<> bool MSWL (uint64_t a, int64_t v) { return internal_write(*this, a, v); } template<> bool MSWL (uint64_t a, uint64_t v) { return internal_write(*this, a, v); } +template<> bool MSWL (uint64_t a, float v) { return internal_write(*this, a, v); } +template<> bool MSWL (uint64_t a, double v) { return internal_write(*this, a, v); } void memory_space::read_range(uint64_t address, void* buffer, size_t bsize) { diff --git a/src/lua/hostmemory.cpp b/src/lua/hostmemory.cpp index 81997b7d..0989662c 100644 --- a/src/lua/hostmemory.cpp +++ b/src/lua/hostmemory.cpp @@ -139,4 +139,24 @@ namespace const std::string& fname) -> int { return do_write(L, fname); }); + + function_ptr_luafun hm_readf4(lua_func_misc, "hostmemory.readfloat", [](lua_state& L, + const std::string& fname) -> int { + return do_read(L, fname); + }); + + function_ptr_luafun hm_writef4(lua_func_misc, "hostmemory.writefloat", [](lua_state& L, + const std::string& fname) -> int { + return do_write(L, fname); + }); + + function_ptr_luafun hm_readf8(lua_func_misc, "hostmemory.readdouble", [](lua_state& L, + const std::string& fname) -> int { + return do_read(L, fname); + }); + + function_ptr_luafun hm_writef8(lua_func_misc, "hostmemory.writedouble", [](lua_state& L, + const std::string& fname) -> int { + return do_write(L, fname); + }); } diff --git a/src/lua/memory.cpp b/src/lua/memory.cpp index 54be7e1d..f80a8548 100644 --- a/src/lua/memory.cpp +++ b/src/lua/memory.cpp @@ -403,11 +403,15 @@ namespace lua_read_memory> rsd("memory.readsdword"); lua_read_memory> ruq("memory.readqword"); lua_read_memory> rsq("memory.readsqword"); + lua_read_memory> rf4("memory.readfloat"); + lua_read_memory> rf8("memory.readdouble"); lua_write_memory> wb("memory.writebyte"); lua_write_memory> ww("memory.writeword"); lua_write_memory> wh("memory.writehword"); lua_write_memory> wd("memory.writedword"); lua_write_memory> wq("memory.writeqword"); + lua_write_memory> wf4("memory.writefloat"); + lua_write_memory> wf8("memory.writedouble"); lua_mmap_memory_helper, &memory_space::write> mhub; lua_mmap_memory_helper, &memory_space::write> mhsb; lua_mmap_memory_helper, &memory_space::write> mhuw; @@ -418,6 +422,8 @@ namespace lua_mmap_memory_helper, &memory_space::write> mhsd; lua_mmap_memory_helper, &memory_space::write> mhuq; lua_mmap_memory_helper, &memory_space::write> mhsq; + lua_mmap_memory_helper, &memory_space::write> mhf4; + lua_mmap_memory_helper, &memory_space::write> mhf8; lua_mmap_memory mub("memory.mapbyte", mhub); lua_mmap_memory msb("memory.mapsbyte", mhsb); lua_mmap_memory muw("memory.mapword", mhuw); @@ -428,6 +434,8 @@ namespace lua_mmap_memory msd("memory.mapsdword", mhsd); lua_mmap_memory muq("memory.mapqword", mhuq); lua_mmap_memory msq("memory.mapsqword", mhsq); + lua_mmap_memory mf4("memory.mapfloat", mhf4); + lua_mmap_memory mf8("memory.mapdouble", mhf8); } int lua_mmap_struct::map(lua_state& L, const std::string& fname) @@ -467,6 +475,10 @@ int lua_mmap_struct::map(lua_state& L, const std::string& fname) mappings[name2] = std::make_pair(&mhuq, addr); else if(type2 == "sqword") mappings[name2] = std::make_pair(&mhsq, addr); + else if(type2 == "float") + mappings[name2] = std::make_pair(&mhf4, addr); + else if(type2 == "double") + mappings[name2] = std::make_pair(&mhf8, addr); else (stringfmt() << fname << ": Bad type").throwex(); return 0; diff --git a/src/lua/memory2.cpp b/src/lua/memory2.cpp index 60ea7783..cc97928a 100644 --- a/src/lua/memory2.cpp +++ b/src/lua/memory2.cpp @@ -88,6 +88,8 @@ namespace {"dword", &lua_vma::rw}, {"sqword", &lua_vma::rw}, {"qword", &lua_vma::rw}, + {"float", &lua_vma::rw}, + {"double", &lua_vma::rw}, {"isbyte", &lua_vma::rw}, {"ibyte", &lua_vma::rw}, {"isword", &lua_vma::rw}, @@ -98,6 +100,8 @@ namespace {"idword", &lua_vma::rw}, {"isqword", &lua_vma::rw}, {"iqword", &lua_vma::rw}, + {"ifloat", &lua_vma::rw}, + {"idouble", &lua_vma::rw}, }); vmabase = r->base; vmasize = r->size; diff --git a/src/platform/wxwidgets/editor-memorywatch.cpp b/src/platform/wxwidgets/editor-memorywatch.cpp index 8e6d9bc7..57f19b9f 100644 --- a/src/platform/wxwidgets/editor-memorywatch.cpp +++ b/src/platform/wxwidgets/editor-memorywatch.cpp @@ -46,10 +46,14 @@ int memorywatch_recognize_typech(char ch) case 'B': return 1; case 'w': return 2; case 'W': return 3; - case 'd': return 4; - case 'D': return 5; - case 'q': return 6; - case 'Q': return 7; + case 'o': return 4; + case 'O': return 5; + case 'd': return 6; + case 'D': return 7; + case 'q': return 8; + case 'Q': return 9; + case 'f': return 10; + case 'F': return 11; default: return 0; } } @@ -59,7 +63,9 @@ wxeditor_watchexpr::wxeditor_watchexpr(wxWindow* parent, const std::string& name { wxString types[] = { wxT("Signed byte"), wxT("Unsigned byte"), wxT("Signed word"), wxT("Unsigned word"), - wxT("Signed doubleword"), wxT("Unsigned doubleword"), wxT("Signed quadword"), wxT("Unsigned quadword") + wxT("Signed onehalfword"), wxT("Unsigned onehalfword"), wxT("Signed doubleword"), + wxT("Unsigned doubleword"), wxT("Signed quadword"), wxT("Unsigned quadword"), + wxT("Float"), wxT("double") }; Centre(); @@ -71,7 +77,7 @@ wxeditor_watchexpr::wxeditor_watchexpr(wxWindow* parent, const std::string& name top_s->Add(arbitrary = new wxRadioButton(this, wxID_ANY, wxT("Expression"), wxDefaultPosition, wxDefaultSize, 0), 0, wxGROW); top_s->Add(typesel = new wxComboBox(this, wxID_ANY, types[0], wxDefaultPosition, wxDefaultSize, - 8, types, wxCB_READONLY), 0, wxGROW); + 12, types, wxCB_READONLY), 0, wxGROW); top_s->Add(busaddr = new wxRadioButton(this, wxID_ANY, wxT("Bus address"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP), 0, wxGROW); top_s->Add(mapaddr = new wxRadioButton(this, wxID_ANY, wxT("Map address"), wxDefaultPosition, wxDefaultSize, @@ -153,8 +159,8 @@ bool wxeditor_watchexpr::ShouldPreventAppExit() const void wxeditor_watchexpr::on_ok(wxCommandEvent& e) { - const char* letters = "bBwWdDqQ"; - const char* hexwidths = "224488GG"; + const char* letters = "bBwWoOdDqQfF"; + const char* hexwidths = "22446688GGGG"; if(structured->GetValue()) { std::string hexmod; std::string addr2 = tostdstring(addr->GetValue()); diff --git a/src/platform/wxwidgets/memorysearch.cpp b/src/platform/wxwidgets/memorysearch.cpp index 2add4d14..276a5aad 100644 --- a/src/platform/wxwidgets/memorysearch.cpp +++ b/src/platform/wxwidgets/memorysearch.cpp @@ -27,14 +27,14 @@ #define wxID_DISQUALIFY (wxID_HIGHEST + 8) #define wxID_BUTTONS_BASE (wxID_HIGHEST + 128) -#define DATATYPES 10 +#define DATATYPES 12 #define CANDIDATE_LIMIT 512 class wxwindow_memorysearch; namespace { - const char* watchchars = "bBwWdDqQ"; + const char* watchchars = "bBwWoOdDqQfF"; wxwindow_memorysearch* mwatch; @@ -49,6 +49,8 @@ namespace "unsigned dword", "signed qword", "unsigned qword" + "float", + "double" }; typedef void (wxwindow_memorysearch::*search_fn_t)(); @@ -145,6 +147,11 @@ namespace { return format_number_unsignedh(val, 16, hex); } + + std::string format_number_float(double val) + { + return (stringfmt() << val).str(); + } } class wxwindow_memorysearch_vmasel : public wxDialog @@ -294,7 +301,11 @@ namespace &wxwindow_memorysearch::search_1>, &wxwindow_memorysearch::search_1> + &memory_search::s_value>, + &wxwindow_memorysearch::search_1>, + &wxwindow_memorysearch::search_1> } },{ "diff.", { @@ -317,7 +328,11 @@ namespace &wxwindow_memorysearch::search_1>, &wxwindow_memorysearch::search_1> + &memory_search::s_difference>, + &wxwindow_memorysearch::search_1>, + &wxwindow_memorysearch::search_1> } },{ "<", { @@ -330,7 +345,9 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_lt>, &wxwindow_memorysearch::search_0<&memory_search::s_lt>, &wxwindow_memorysearch::search_0<&memory_search::s_lt>, - &wxwindow_memorysearch::search_0<&memory_search::s_lt> + &wxwindow_memorysearch::search_0<&memory_search::s_lt>, + &wxwindow_memorysearch::search_0<&memory_search::s_lt>, + &wxwindow_memorysearch::search_0<&memory_search::s_lt> } },{ "<=", { @@ -343,7 +360,9 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_le>, &wxwindow_memorysearch::search_0<&memory_search::s_le>, &wxwindow_memorysearch::search_0<&memory_search::s_le>, - &wxwindow_memorysearch::search_0<&memory_search::s_le> + &wxwindow_memorysearch::search_0<&memory_search::s_le>, + &wxwindow_memorysearch::search_0<&memory_search::s_le>, + &wxwindow_memorysearch::search_0<&memory_search::s_le> } },{ "==", { @@ -356,7 +375,9 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_eq>, &wxwindow_memorysearch::search_0<&memory_search::s_eq>, &wxwindow_memorysearch::search_0<&memory_search::s_eq>, - &wxwindow_memorysearch::search_0<&memory_search::s_eq> + &wxwindow_memorysearch::search_0<&memory_search::s_eq>, + &wxwindow_memorysearch::search_0<&memory_search::s_eq>, + &wxwindow_memorysearch::search_0<&memory_search::s_eq> } },{ "!=", { @@ -369,7 +390,9 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_ne>, &wxwindow_memorysearch::search_0<&memory_search::s_ne>, &wxwindow_memorysearch::search_0<&memory_search::s_ne>, - &wxwindow_memorysearch::search_0<&memory_search::s_ne> + &wxwindow_memorysearch::search_0<&memory_search::s_ne>, + &wxwindow_memorysearch::search_0<&memory_search::s_ne>, + &wxwindow_memorysearch::search_0<&memory_search::s_ne> } },{ ">=", { @@ -382,7 +405,9 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_ge>, &wxwindow_memorysearch::search_0<&memory_search::s_ge>, &wxwindow_memorysearch::search_0<&memory_search::s_ge>, - &wxwindow_memorysearch::search_0<&memory_search::s_ge> + &wxwindow_memorysearch::search_0<&memory_search::s_ge>, + &wxwindow_memorysearch::search_0<&memory_search::s_ge>, + &wxwindow_memorysearch::search_0<&memory_search::s_ge> } },{ ">", { @@ -395,7 +420,9 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_gt>, &wxwindow_memorysearch::search_0<&memory_search::s_gt>, &wxwindow_memorysearch::search_0<&memory_search::s_gt>, - &wxwindow_memorysearch::search_0<&memory_search::s_gt> + &wxwindow_memorysearch::search_0<&memory_search::s_gt>, + &wxwindow_memorysearch::search_0<&memory_search::s_gt>, + &wxwindow_memorysearch::search_0<&memory_search::s_gt> } },{ "seq<", { @@ -408,7 +435,9 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_seqlt>, &wxwindow_memorysearch::search_0<&memory_search::s_seqlt>, &wxwindow_memorysearch::search_0<&memory_search::s_seqlt>, - &wxwindow_memorysearch::search_0<&memory_search::s_seqlt> + &wxwindow_memorysearch::search_0<&memory_search::s_seqlt>, + &wxwindow_memorysearch::search_0<&memory_search::s_lt>, + &wxwindow_memorysearch::search_0<&memory_search::s_lt> } },{ "seq<=", { @@ -421,7 +450,9 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_seqle>, &wxwindow_memorysearch::search_0<&memory_search::s_seqle>, &wxwindow_memorysearch::search_0<&memory_search::s_seqle>, - &wxwindow_memorysearch::search_0<&memory_search::s_seqle> + &wxwindow_memorysearch::search_0<&memory_search::s_seqle>, + &wxwindow_memorysearch::search_0<&memory_search::s_le>, + &wxwindow_memorysearch::search_0<&memory_search::s_le> } },{ "seq>=", { @@ -434,7 +465,9 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_seqge>, &wxwindow_memorysearch::search_0<&memory_search::s_seqge>, &wxwindow_memorysearch::search_0<&memory_search::s_seqge>, - &wxwindow_memorysearch::search_0<&memory_search::s_seqge> + &wxwindow_memorysearch::search_0<&memory_search::s_seqge>, + &wxwindow_memorysearch::search_0<&memory_search::s_ge>, + &wxwindow_memorysearch::search_0<&memory_search::s_ge> } },{ "seq>", { @@ -447,7 +480,9 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_seqgt>, &wxwindow_memorysearch::search_0<&memory_search::s_seqgt>, &wxwindow_memorysearch::search_0<&memory_search::s_seqgt>, - &wxwindow_memorysearch::search_0<&memory_search::s_seqgt> + &wxwindow_memorysearch::search_0<&memory_search::s_seqgt>, + &wxwindow_memorysearch::search_0<&memory_search::s_gt>, + &wxwindow_memorysearch::search_0<&memory_search::s_gt> } },{ "true", { @@ -460,6 +495,8 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::update>, &wxwindow_memorysearch::search_0<&memory_search::update>, &wxwindow_memorysearch::search_0<&memory_search::update>, + &wxwindow_memorysearch::search_0<&memory_search::update>, + &wxwindow_memorysearch::search_0<&memory_search::update>, &wxwindow_memorysearch::search_0<&memory_search::update> } } @@ -613,6 +650,12 @@ void wxwindow_memorysearch::panel::prepare_paint() row += format_number_unsigned(lsnes_memory.read(i), _parent->hexmode); break; + case 10: + row += format_number_float(lsnes_memory.read(i)); + break; + case 11: + row += format_number_float(lsnes_memory.read(i)); + break; }; if(j >= first && j < last) lines.push_back(row); -- 2.11.4.GIT